Skip to content

Commit

Permalink
add files
Browse files Browse the repository at this point in the history
  • Loading branch information
vanillacandy committed Oct 3, 2018
1 parent 5be0c1b commit 53c645e
Show file tree
Hide file tree
Showing 11 changed files with 587 additions and 49 deletions.
46 changes: 46 additions & 0 deletions Food.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

namespace p2;

class Food
{
# Properties
private $meal;
private $drink;

# Methods
public function __construct($mealJson1, $drinkJson1)
{
# Load Food data
$mealJson = file_get_contents($mealJson1);
$drinkJson = file_get_contents($drinkJson1);
$this->meal = json_decode($mealJson, true);
$this->drink = json_decode($drinkJson, true);
}

public function getMeal()
{
return $this->meal;
}

public function getDrink()
{
return $this->drink;
}

public function getMealCalorie($mealChosenInForm)
{
return $this->meal[$mealChosenInForm]['calorie'];
}

public function getDrinkCalorie($drinkChosenInForm)
{
return $this->drink[$drinkChosenInForm]['calorie'];
}

public function getTotalCalorie($mealChosenInForm, $drinkChosenInForm)
{
return $this->drink[$drinkChosenInForm]['calorie'] + $this->meal[$mealChosenInForm]['calorie'];
}

}
251 changes: 251 additions & 0 deletions Form.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
<?php
namespace DWA;

class Form
{
/**
* Properties
*/
private $request;
public $hasErrors = false;

/**
* Form constructor
*/
public function __construct(array $request)
{
# Store form data (POST or GET) in a class property called $request
$this->request = $request;
}

/**
* Returns true if *either* GET or POST have been submitted.
*/
public function isSubmitted()
{
return $_SERVER['REQUEST_METHOD'] == 'POST' || !empty($_GET);
}

/**
* Get a value from the request, with the option of including a default
* if the value is not set.
*/
public function get(string $name, string $default = null)
{
return $this->request[$name] ?? $default;
}

/**
* Returns boolean as to whether a value is present in the request
*/
public function has(string $name)
{
return isset($this->request[$name]);
}

/**
* Given an array of fields => validation rules
* Will loop through each field's rules
* Returns an array of error messages
* Stops after the first error for a given field
* Available rules:
* required, alpha, alphaNumeric, digit, numeric,
* email, url, min:x, max:x, minLength:x, maxLength:x
*/
public function validate(array $fieldsToValidate)
{
$errors = [];

foreach ($fieldsToValidate as $fieldName => $rules) {
# Each rule is separated by a |
$rules = explode('|', $rules);

foreach ($rules as $rule) {
# Get the value for this field from the request
$value = $this->get($fieldName);

# Handle any parameters with the rule, e.g. max:99
$parameter = null;
if (strstr($rule, ':')) {
list($rule, $parameter) = explode(':', $rule);
}

# Run the validation test with the given rule
$test = $this->$rule($value, $parameter);

# Test failed
if (!$test) {
$method = $rule . 'Message';
$errors[] = 'The value for ' . $fieldName . ' ' . $this->$method($parameter);

# Only indicate one error per field
break;
}
}
}

# Set public property hasErrors as Boolean
$this->hasErrors = !empty($errors);

return $errors;
}

### VALIDATION METHODS FOUND BELOW HERE ###

/**
* The value can not be blank
*/
protected function required($value)
{
$value = trim($value);

return $value != '' && $value != 'choose' && isset($value) && !is_null($value);
}

protected function requiredMessage()
{
return 'can not be blank';
}

/**
* The value can only contain letters or spaces
*/
protected function alpha($value)
{
return ctype_alpha(str_replace(' ', '', $value));
}

protected function alphaMessage()
{
return 'can only contain letters';
}

/**
* The value can only contain alpha-numeric characters
*/
protected function alphaNumeric($value)
{
return ctype_alnum(str_replace(' ', '', $value));
}

protected function alphaNumericMessage()
{
return 'can only contain letters or numbers';
}

/**
* The value can only contain digits (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
*/
protected function digit($value)
{
return ctype_digit(str_replace(' ', '', $value));
}

protected function digitMessage()
{
return 'can only contain digits';
}

/**
* The value can only contain numbers
*/
protected function numeric($value)
{
return is_numeric(str_replace(' ', '', $value));
}

protected function numericMessage()
{
return 'can only contain numerical values';
}

/**
* The value must be a properly formatted email address
*/
protected function email($value)
{
return filter_var($value, FILTER_VALIDATE_EMAIL);
}

protected function emailMessage()
{
return 'must contain a correctly formatted email address';
}

/**
* The value must be a properly formatted URL
*/
protected function url($value)
{
return filter_var($value, FILTER_VALIDATE_URL);
}

protected function urlMessage()
{
return 'must contain a correctly formatted URL';
}

/**
* The character count of the value must be LESS THAN (non-inclusive) the given parameter
* Fails if value is non-numeric
*/
protected function minLength($value, $parameter)
{
return strlen($value) >= $parameter;
}

protected function minLengthMessage($parameter)
{
return 'must be at least ' . $parameter . ' character(s) long';
}

/**
* The character count of the value must be LESS THAN (inclusive) the given parameter
* Fails if value is non-numeric
*/
protected function maxLength($value, $parameter)
{
return strlen($value) <= $parameter;
}

protected function maxLengthMessage($parameter)
{
return 'must be less than ' . $parameter . ' character(s) long';
}

/**
* The value must be GREATER THAN (inclusive) the given parameter
* Fails if value is non-numeric
*/
protected function min($value, $parameter)
{
if (!$this->numeric($value)) {
return false;
}

return floatval($value) >= floatval($parameter);
}

protected function minMessage($parameter)
{
return 'must be greater than or equal to ' . $parameter;
}

/**
* The value must be LESS THAN (inclusive) the given parameter
* Fails if value is non-numeric
*/
protected function max($value, $parameter)
{
if (!$this->numeric($value)) {
return false;
}

return floatval($value) <= floatval($parameter);
}

protected function maxMessage($parameter)
{
return 'must be less than or equal to ' . $parameter;
}
}
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@

## Outside resources
+ Styling via [Boostrap CDN] (http://getbootstrap.com/)
+ Book cover images from [Barnes & Noble] (https://www.barnesandnoble.com/)


## 3 Unique inputs

## Class
*List the name of the class you're using, e.g. `Form.php`, `Password.php`, etc.*
*`Form.php`, `Food.php`, etc.*

## Code style divergences
*list any divergences from PSR-1/PSR-2 and course guidelines on code style*

## Notes for instructor
*any notes for me to refer to while grading; if none, omit this section*

17 changes: 17 additions & 0 deletions drink.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"milk": {
"calorie" : 103
},
"chocolate milk": {
"calorie" : 209
},
"soy milk": {
"calorie" : 131
},
"orange juice": {
"calorie" : 111
},
"apple juice": {
"calorie" : 113
}
}
17 changes: 17 additions & 0 deletions fruit.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"banana": {
"calorie" : 1
},
"strawberry": {
"calorie" : 2
},
"blueberry": {
"calorie" : 3
},
"mango": {
"calorie" : 4
},
"kiwi": {
"calorie" : 5
}
}
8 changes: 2 additions & 6 deletions helper.php → includes/helpers.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

<?php
/**
* Utility function to quickly dump data to the page
Expand All @@ -9,7 +10,6 @@ function dump($mixed = null)
var_dump($mixed);
echo '</pre>';
}

/**
* Recursively escape HTML entities
* @param null $mixed
Expand All @@ -20,19 +20,15 @@ function sanitize($mixed = null)
if (!is_array($mixed)) {
return convertHtmlEntities($mixed);
}

function array_map_recursive($callback, $array)
{
$func = function ($item) use (&$func, &$callback) {
return is_array($item) ? array_map($func, $item) : call_user_func($callback, $item);
};

return array_map($func, $array);
}

return array_map_recursive('convertHtmlEntities', $mixed);
}

/**
* Escape HTML entities in the given String $str
* @param $str
Expand All @@ -41,4 +37,4 @@ function array_map_recursive($callback, $array)
function convertHtmlEntities($str)
{
return htmlentities($str, ENT_QUOTES, "UTF-8");
}
}
Loading

0 comments on commit 53c645e

Please sign in to comment.