aboutsummaryrefslogtreecommitdiff
path: root/h-source/Library
diff options
context:
space:
mode:
Diffstat (limited to 'h-source/Library')
-rw-r--r--h-source/Library/Array/Validate/Base.php106
-rw-r--r--h-source/Library/Array/Validate/Soft.php91
-rw-r--r--h-source/Library/Array/Validate/Strong.php91
-rw-r--r--h-source/Library/Array/Validate/Values.php36
-rwxr-xr-xh-source/Library/ArrayExt.php4
-rwxr-xr-xh-source/Library/Bootstrap.php2
-rw-r--r--h-source/Library/BoxParser.php2
-rwxr-xr-xh-source/Library/Call.php208
-rwxr-xr-xh-source/Library/Controller.php29
-rwxr-xr-xh-source/Library/Db/Mysql.php179
-rw-r--r--h-source/Library/Db/Mysqli.php265
-rw-r--r--h-source/Library/Email.php2
-rw-r--r--h-source/Library/ErrorReporting.php2
-rwxr-xr-xh-source/Library/Factory/Db.php2
-rw-r--r--h-source/Library/Factory/Strings.php2
-rw-r--r--h-source/Library/Files/Log.php2
-rwxr-xr-xh-source/Library/Files/Upload.php2
-rwxr-xr-xh-source/Library/Form/Checkbox.php4
-rwxr-xr-xh-source/Library/Form/Entry.php3
-rw-r--r--h-source/Library/Form/File.php4
-rwxr-xr-xh-source/Library/Form/Form.php49
-rwxr-xr-xh-source/Library/Form/Hidden.php4
-rw-r--r--h-source/Library/Form/Html.php2
-rwxr-xr-xh-source/Library/Form/InputText.php4
-rw-r--r--h-source/Library/Form/Password.php4
-rwxr-xr-xh-source/Library/Form/Radio.php4
-rwxr-xr-xh-source/Library/Form/Select.php4
-rwxr-xr-xh-source/Library/Form/Textarea.php4
-rwxr-xr-xh-source/Library/Functions.php114
-rw-r--r--h-source/Library/HeaderObj.php2
-rwxr-xr-xh-source/Library/Helper/Array.php2
-rwxr-xr-xh-source/Library/Helper/Html.php2
-rwxr-xr-xh-source/Library/Helper/List.php243
-rwxr-xr-xh-source/Library/Helper/Menu.php40
-rwxr-xr-xh-source/Library/Helper/Pages.php15
-rwxr-xr-xh-source/Library/Helper/Popup.php44
-rw-r--r--h-source/Library/Hooks.php2
-rw-r--r--h-source/Library/Html/Form.php29
-rw-r--r--h-source/Library/Image/Gd/Captcha.php2
-rw-r--r--h-source/Library/Image/Gd/Thumbnail.php247
-rw-r--r--h-source/Library/Lang/En/DbCondStrings.php6
-rw-r--r--h-source/Library/Lang/En/Formats/Fields.php46
-rw-r--r--h-source/Library/Lang/En/Formats/From/Mysql.php64
-rwxr-xr-xh-source/Library/Lang/En/Formats/From/index.html1
-rw-r--r--h-source/Library/Lang/En/Formats/To/Mysql.php62
-rwxr-xr-xh-source/Library/Lang/En/Formats/To/index.html1
-rwxr-xr-xh-source/Library/Lang/En/Formats/index.html1
-rw-r--r--h-source/Library/Lang/En/Generic.php4
-rw-r--r--h-source/Library/Lang/En/ModelStrings.php24
-rw-r--r--h-source/Library/Lang/En/UploadStrings.php2
-rw-r--r--h-source/Library/Lang/En/ValCondStrings.php68
-rw-r--r--h-source/Library/Lang/Eng/DbCondStrings.php2
-rw-r--r--h-source/Library/Lang/Eng/Generic.php21
-rw-r--r--h-source/Library/Lang/Eng/ModelStrings.php5
-rw-r--r--h-source/Library/Lang/Eng/UploadStrings.php2
-rw-r--r--h-source/Library/Lang/Eng/ValCondStrings.php52
-rw-r--r--h-source/Library/Lang/ResultStrings.php2
-rw-r--r--h-source/Library/ModAbstract.php2
-rwxr-xr-xh-source/Library/Model/Base.php520
-rwxr-xr-xh-source/Library/Model/Map.php2
-rwxr-xr-xh-source/Library/Model/Tree.php560
-rw-r--r--h-source/Library/Params.php71
-rwxr-xr-xh-source/Library/Popup.php2
-rw-r--r--h-source/Library/Request.php2
-rwxr-xr-xh-source/Library/Scaffold.php123
-rw-r--r--h-source/Library/Strings/Functions.php2
-rwxr-xr-xh-source/Library/Theme.php39
-rwxr-xr-xh-source/Library/Url.php23
-rwxr-xr-xh-source/Library/Users/CheckAdmin.php7
69 files changed, 2926 insertions, 643 deletions
diff --git a/h-source/Library/Array/Validate/Base.php b/h-source/Library/Array/Validate/Base.php
index fb4a66c..f1a242e 100644
--- a/h-source/Library/Array/Validate/Base.php
+++ b/h-source/Library/Array/Validate/Base.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -26,6 +26,7 @@ if (!defined('EG')) die('Direct access not allowed!');
class Array_Validate_Base
{
+ public $strength;
public $errorString = null; //string containing the list fields not found
public $errorsNumb = null; //numbers of errors
@@ -44,7 +45,40 @@ class Array_Validate_Base
$this->_resultString = new $stringClass();
}
-
+ public function checkNotEmpty($associativeArray,$keyString)
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (is_array($associativeArray[$keyArray[$i]]))
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ else
+ {
+ if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0)
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ }
+ }
+ else
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ }
+ $this->errorString = $errorString;
+ $this->errorNumb = $numb;
+ return $numb === 0 ? true : false;
+ }
+
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
public function checkEqual($associativeArray,$keyString)
{
@@ -116,6 +150,13 @@ class Array_Validate_Base
}
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are integer strings
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkInteger($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'checkInteger','getNotIntegerFormatResultString');
+ }
+
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
//$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
public function checkNumeric($associativeArray,$keyString,$strength = 'strong')
@@ -123,6 +164,12 @@ class Array_Validate_Base
return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString');
}
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are an ISO date.
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkIsoDate($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'checkIsoDate','getNotDateResultString');
+ }
//apply a generic check function
//$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
@@ -139,7 +186,7 @@ class Array_Validate_Base
{
if (array_key_exists($keyArray[$i],$associativeArray))
{
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
{
if (!call_user_func($func,$associativeArray[$keyArray[$i]]))
{
@@ -217,7 +264,7 @@ class Array_Validate_Base
{
if (array_key_exists($keyArray[$i],$associativeArray))
{
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
{
if (!in_array($associativeArray[$keyArray[$i]],$stringsArray))
{
@@ -234,25 +281,50 @@ class Array_Validate_Base
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong')
{
- $errorString = null;
- $keyArray = explode(',',$keyString);
- $numb = 0;
- for ($i = 0; $i < count($keyArray); $i++)
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
{
- if (array_key_exists($keyArray[$i],$associativeArray))
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
{
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
+ if (!preg_match($regExp,$associativeArray[$keyArray[$i]]))
{
- if (!preg_match($regExp,$associativeArray[$keyArray[$i]]))
- {
- $numb++;
- $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp);
- }
+ $numb++;
+ $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp);
}
}
}
- $this->errorString = $errorString;
- return $numb === 0 ? true : false;
+ }
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal with the format indicated in $format
+ //$format: M,D M is the maximum number of digits, D is the number of digits to the right of the decimal point
+ public function checkDecimal($associativeArray,$keyString,$format = '10,2')
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
+ {
+ if (!checkDecimal($associativeArray[$keyArray[$i]],$format))
+ {
+ $numb++;
+ $errorString .= $this->_resultString->getNotDecimalResultString($keyArray[$i],$format);
+ }
+ }
+ }
+ }
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
}
} \ No newline at end of file
diff --git a/h-source/Library/Array/Validate/Soft.php b/h-source/Library/Array/Validate/Soft.php
index d0c7646..d790652 100644
--- a/h-source/Library/Array/Validate/Soft.php
+++ b/h-source/Library/Array/Validate/Soft.php
@@ -1,7 +1,24 @@
<?php
-// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
if (!defined('EG')) die('Direct access not allowed!');
@@ -9,77 +26,11 @@ if (!defined('EG')) die('Direct access not allowed!');
class Array_Validate_Soft extends Array_Validate_Base
{
- public function __construct($lang = 'Eng')
+ public function __construct($lang = 'En')
{
parent::__construct($lang);
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
- public function checkEqual($associativeArray,$keyString)
- {
- return parent::checkEqual($associativeArray,$keyString);
- }
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values
- public function checkAlpha($associativeArray,$keyString,$strength = 'soft')
- {
- return parent::checkAlpha($associativeArray,$keyString,'soft');
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values
- public function checkAlphaNum($associativeArray,$keyString,$strength = 'soft')
- {
- return parent::checkAlphaNum($associativeArray,$keyString,'soft');
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits
- public function checkDigit($associativeArray,$keyString,$strength = 'soft')
- {
- return parent::checkDigit($associativeArray,$keyString,'soft');
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format
- public function checkMail($associativeArray,$keyString,$strength = 'soft')
- {
- return parent::checkMail($associativeArray,$keyString,'soft');
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
- public function checkNumeric($associativeArray,$keyString,$strength = 'soft')
- {
- return parent::checkNumeric($associativeArray,$keyString,'soft');
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
- public function checkLength($associativeArray,$keyString,$maxLength = 10)
- {
- return parent::checkLength($associativeArray,$keyString,$maxLength);
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words)
- public function checkIsNotStrings($associativeArray,$keyString,$strings = '')
- {
- return parent::checkIsNotStrings($associativeArray,$keyString,$strings);
- }
-
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words)
- public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'soft')
- {
- return parent::checkIsStrings($associativeArray,$keyString,$strings,'soft');
- }
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
- public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'soft')
- {
- return parent::checkMatch($associativeArray,$keyString,$regExp,'soft');
+
+ $this->strength = "soft";
}
}
diff --git a/h-source/Library/Array/Validate/Strong.php b/h-source/Library/Array/Validate/Strong.php
index d105319..d907d1d 100644
--- a/h-source/Library/Array/Validate/Strong.php
+++ b/h-source/Library/Array/Validate/Strong.php
@@ -1,46 +1,38 @@
<?php
-// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
if (!defined('EG')) die('Direct access not allowed!');
-//class to manage arrays
+//class to validate associative arrays
class Array_Validate_Strong extends Array_Validate_Base
{
- public function __construct($lang = 'Eng')
+ public function __construct($lang = 'En')
{
parent::__construct($lang);
+
+ $this->strength = "strong";
}
-
- public function checkNotEmpty($associativeArray,$keyString)
- {
- $errorString = null;
- $keyArray = explode(',',$keyString);
- $numb = 0;
- for ($i = 0; $i < count($keyArray); $i++)
- {
- if (array_key_exists($keyArray[$i],$associativeArray))
- {
- if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0)
- {
- $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
- $numb++;
- }
- }
- else
- {
- $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
- $numb++;
- }
- }
- $this->errorString = $errorString;
- $this->errorNumb = $numb;
- return $numb === 0 ? true : false;
- }
-
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
public function checkEqual($associativeArray,$keyString)
{
@@ -110,6 +102,19 @@ class Array_Validate_Strong extends Array_Validate_Base
}
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are an ISO date.
+ public function checkIsoDate($associativeArray,$keyString,$strength = 'strong')
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkIsoDate($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
public function checkNumeric($associativeArray,$keyString,$strength = 'strong')
{
@@ -123,6 +128,18 @@ class Array_Validate_Strong extends Array_Validate_Base
}
}
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is an integer string.
+ public function checkInteger($associativeArray,$keyString,$strength = 'strong')
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkInteger($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
public function checkLength($associativeArray,$keyString,$maxLength = 10)
@@ -177,4 +194,18 @@ class Array_Validate_Strong extends Array_Validate_Base
return false;
}
}
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal with the format indicated in $format
+ //$format: M,D M is the maximum number of digits, D is the number of digits to the right of the decimal point
+ public function checkDecimal($associativeArray,$keyString,$format = '10,2')
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkDecimal($associativeArray,$keyString,$format);
+
+ } else {
+ return false;
+ }
+ }
}
diff --git a/h-source/Library/Array/Validate/Values.php b/h-source/Library/Array/Validate/Values.php
new file mode 100644
index 0000000..9355949
--- /dev/null
+++ b/h-source/Library/Array/Validate/Values.php
@@ -0,0 +1,36 @@
+<?php
+
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to validate associative arrays
+class Array_Validate_Values extends Array_Validate_Soft
+{
+
+ public function __construct($lang = 'En')
+ {
+ parent::__construct($lang);
+
+ $this->strength = "strong";
+ }
+
+}
diff --git a/h-source/Library/ArrayExt.php b/h-source/Library/ArrayExt.php
index 2b02c9e..d4300b4 100755
--- a/h-source/Library/ArrayExt.php
+++ b/h-source/Library/ArrayExt.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -50,7 +50,7 @@ class ArrayExt {
if (!in_array($temp[1],explode(',',Params::$allowedSanitizeFunc))) {
throw new Exception('"'.$temp[1]. '" function not allowed');
}
- if (array_key_exists($temp[0],$associativeArray)) {
+ if (array_key_exists($temp[0],$associativeArray) and !is_array($associativeArray[$temp[0]])) {
$tempArray[$temp[0]] = call_user_func($temp[1],$associativeArray[$temp[0]]);
} else {
$tempArray[$temp[0]] = '';
diff --git a/h-source/Library/Bootstrap.php b/h-source/Library/Bootstrap.php
index 5d7a12f..aa32041 100755
--- a/h-source/Library/Bootstrap.php
+++ b/h-source/Library/Bootstrap.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/BoxParser.php b/h-source/Library/BoxParser.php
index 0e7e03f..302439a 100644
--- a/h-source/Library/BoxParser.php
+++ b/h-source/Library/BoxParser.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Call.php b/h-source/Library/Call.php
index c75508b..7f80841 100755
--- a/h-source/Library/Call.php
+++ b/h-source/Library/Call.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -35,19 +35,40 @@ function sanitizeSuperGlobal()
$_SERVER = stripslashesDeep($_SERVER);
}
-
-
-function checkPostLength()
+function checkPostLength($checkArray = null)
{
+ $a = isset($checkArray) ? $checkArray : $_POST;
+
if (MAX_POST_LENGTH !== 0)
{
- foreach ($_POST as $key => $value)
+ foreach ($a as $key => $value)
{
- if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large');
+ if (is_array($value))
+ {
+ checkPostLength($value);
+ }
+ else
+ {
+ if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large');
+ }
}
}
}
+//remove elements that are arrays
+//applied to $_POST and $_GET
+function fixArray($array)
+{
+ $temp = array();
+
+ foreach ($array as $key => $value)
+ {
+ $temp[$key] = is_array($value) ? "" : $value;
+ }
+
+ return $temp;
+}
+
function checkRequestUriLength()
{
if (MAX_REQUEST_URI_LENGTH !== 0)
@@ -61,20 +82,108 @@ function checkRegisterGlobals()
if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off');
}
-function callHook()
+//geth the name of the current application used
+function getApplicationName()
+{
+ if (isset(Params::$currentApplication))
+ {
+ return Params::$currentApplication;
+ }
+ return null;
+}
+
+//geth the path of the current application used
+//add the trailing slash to the application name
+function getApplicationPath()
+{
+ if (isset(Params::$currentApplication))
+ {
+ return "Apps".DS.ucfirst(Params::$currentApplication).DS;
+ }
+ return null;
+}
+
+function languageInUrl($url)
{
+ $url = trim($url,"/");
+
+ if (in_array($url,Params::$frontEndLanguages))
+ {
+ return $url."/";
+ }
+ return false;
+}
+function callHook()
+{
+
$currentUrl = null;
if (MOD_REWRITE_MODULE === true)
{
- $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ if (isset($_GET['url']))
+ {
+ if (!languageInUrl($_GET['url']))
+ {
+ $url = $_GET['url'];
+ }
+ else
+ {
+ $url = languageInUrl($_GET['url']) . DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ }
+ }
+ else
+ {
+ $url = DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ }
}
else
{
- $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ if (strcmp(getQueryString(),"") !== 0)
+ {
+ if (!languageInUrl(getQueryString()))
+ {
+ $url = getQueryString();
+ }
+ else
+ {
+ $url = languageInUrl(getQueryString()) . DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ }
+ }
+ else
+ {
+ $url = DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ }
}
+ $arriveUrl = $url;
+
+ $urlArray = array();
+ $urlArray = explode("/",$url);
+
+ //get the language
+ if (count(Params::$frontEndLanguages) > 0)
+ {
+ if (in_array($urlArray[0],Params::$frontEndLanguages))
+ {
+ Params::$lang = sanitizeAll($urlArray[0]);
+ array_shift($urlArray);
+ }
+ else
+ {
+ Params::$lang = Params::$defaultFrontEndLanguage;
+/*
+ if (isset($_GET['url']) and Params::$redirectToDefaultLanguage)
+ {
+ $h = new HeaderObj(DOMAIN_NAME);
+
+ $h->redirect($arriveUrl);
+ }*/
+ }
+ }
+
+ $url = implode("/",$urlArray);
+
// rewrite the URL
if (Route::$rewrite === 'yes')
{
@@ -85,12 +194,19 @@ function callHook()
// echo $url;
- $urlArray = array();
$urlArray = explode("/",$url);
-
$controller = DEFAULT_CONTROLLER;
$action = DEFAULT_ACTION;
+
+ //check if an application name is found in the URL
+ if (isset(Params::$installed) and isset($urlArray[0]) and strcmp($urlArray[0],'') !== 0 and in_array($urlArray[0],Params::$installed))
+ {
+ Params::$currentApplication = strtolower(trim($urlArray[0]));
+
+ array_shift($urlArray);
+ }
+
if (isset($urlArray[0]))
{
$controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER;
@@ -108,10 +224,30 @@ function callHook()
$errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION;
/*
- VERIFY THE ACTION NAME
+ CHECK COUPLES CONTROLLER,ACTION
*/
+ if (!in_array('all',Route::$allowed))
+ {
+ $couple = "$controller,$action";
+ if (getApplicationName() !== null)
+ {
+ $couple = getApplicationName().",".$couple;
+ }
+ if (!in_array($couple,Route::$allowed))
+ {
+ Params::$currentApplication = null;
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+ }
+
+ /*
+ VERIFY THE ACTION NAME
+ */
if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0))
{
+ Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -122,6 +258,7 @@ function callHook()
*/
if (!ctype_alnum($controller) or (strcmp($controller,'') === 0))
{
+ Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -129,8 +266,10 @@ function callHook()
//check that the controller class belongs to the application/controllers folder
//otherwise set the controller to the default controller
- if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php'))
+ // if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php') and !file_exists(ROOT.DS.APPLICATION_PATH.DS.getApplicationPath().'Controllers'.DS.ucwords($controller).'Controller.php'))
+ if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.getApplicationPath().'Controllers'.DS.ucwords($controller).'Controller.php'))
{
+ Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -139,6 +278,7 @@ function callHook()
//set the controller class to DEFAULT_CONTROLLER if it doesn't exists
if (!class_exists(ucwords($controller).'Controller'))
{
+ Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -147,40 +287,28 @@ function callHook()
//set the action to DEFAULT_ACTION if it doesn't exists
if (!method_exists(ucwords($controller).'Controller', $action))
{
+ Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
}
-
- /*
- CHECK COUPLES CONTROLLER,ACTION
- */
- if (!in_array('all',Route::$allowed))
- {
- $couple = "$controller,$action";
- if (!in_array($couple,Route::$allowed))
- {
- $controller = $errorController;
- $action = $errorAction;
- $urlArray = array();
- }
- }
array_shift($urlArray);
$queryString = $urlArray;
//set the name of the application
- $application = $controller;
+ $controllerName = $controller;
$controller = ucwords($controller);
$model = $controller;
$controller .= 'Controller';
$model .= 'Model';
+// echo $controller."-".$action;
//include the file containing the set of actions to carry out before the initialization of the controller class
Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php');
if (class_exists($controller))
{
- $dispatch = new $controller($model,$application,$queryString);
+ $dispatch = new $controller($model,$controllerName,$queryString, getApplicationName());
//pass the action to the controller object
$dispatch->action = $action;
@@ -196,7 +324,7 @@ function callHook()
$templateFlag= true;
- if (method_exists($controller, $action))
+ if (method_exists($dispatch, $action))
{
//pass the action to the theme object
$dispatch->theme->action = $action;
@@ -235,7 +363,10 @@ function rewrite($url)
$oldKey = $key;
$key = str_replace('\/','/',$key);
$key = str_replace('/','\/',$key);
- if (preg_match('/^'.$key.'/',$url))
+
+ $regExpr = Params::$exactUrlMatchRewrite ? '/^'.$key.'$/' : '/^'.$key.'/';
+
+ if (preg_match($regExpr,$url))
{
$nurl = preg_replace('/^'.$key.'/',$address,$url);
return array($nurl,$oldKey);
@@ -272,10 +403,18 @@ function __autoload($className)
{
require_once(ROOT . DS . 'Library' . DS . $className . '.php');
}
+ else if (getApplicationName() and file_exists(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Controllers' . DS . $backupName . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Controllers' . DS . $backupName . '.php');
+ }
else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'))
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php');
}
+ else if (getApplicationName() and file_exists(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Models' . DS . $backupName . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Models' . DS . $backupName . '.php');
+ }
else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'))
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php');
@@ -284,6 +423,10 @@ function __autoload($className)
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php');
}
+ else if (getApplicationName() and file_exists(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Strings' . DS . $backupName . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Strings' . DS . $backupName . '.php');
+ }
else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'))
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php');
@@ -293,6 +436,9 @@ function __autoload($className)
try {
+ $_POST = fixArray($_POST);
+ $_GET = fixArray($_GET);
+
//check the length of the $_POST values
checkPostLength();
diff --git a/h-source/Library/Controller.php b/h-source/Library/Controller.php
index b0eef53..bc1c229 100755
--- a/h-source/Library/Controller.php
+++ b/h-source/Library/Controller.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -31,6 +31,8 @@ class Controller {
protected $_queryString = array(); //the array of args coming from the url
+ public $application = null;
+ public $applicationUrl = null; //the url of the application
public $controller;
public $action;
public $currPage; //the URL of the current page
@@ -57,17 +59,21 @@ class Controller {
protected $scaffold = null; //the reference to the scaffold object
- function __construct($model, $controller, $queryString = array()) {
+ function __construct($model, $controller, $queryString = array(), $application = null)
+ {
+ $this->application = $application;
$this->controller = $controller;
$this->modelName = $model;
$this->_queryString = $queryString;
- $this->theme = new Theme($controller);
+ $this->theme = new Theme($application, $controller);
$this->baseUrl = $this->theme->baseUrl;
$this->baseUrlSrc = $this->theme->baseUrlSrc;
-
+
$this->headerObj = new HeaderObj(DOMAIN_NAME);
$this->request = new Request();
+
+ $this->applicationUrl = isset($application) ? $application . "/" : null;
}
//redirect to $path after the time $time
@@ -136,8 +142,8 @@ class Controller {
{
if (class_exists($controller)) {
$model = str_replace('Controller',null,$controller).'Model';
- $application = strtolower(str_replace('Controller',null,$controller));
- $this->c[$controller] = new $controller($model,$application,array());
+ $application = $this->controller;
+ $this->c[$controller] = new $controller($model,$application,$this->_queryString);
$this->c[$controller]->theme = $this->theme;
}
}
@@ -234,7 +240,7 @@ class Controller {
}
$this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i];
}
- $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $this->viewStatus = Url::createUrl($this->viewArgs);
$this->updateHelpers();
//update the theme
@@ -282,7 +288,7 @@ class Controller {
//create the viewStatus property
final public function buildStatus()
{
- $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $this->viewStatus = Url::createUrl($this->viewArgs);
//update the theme
$this->theme->viewStatus = $this->viewStatus;
$this->theme->viewArgs = $this->viewArgs;
@@ -295,9 +301,9 @@ class Controller {
if (!in_array($type,$typeArray)) {
throw new Exception("the type '$type' is not allowed in ".__METHOD__);
}
- $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params);
+ $this->scaffold = new Scaffold($type,$this->application,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params);
- $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']);
+ $this->helper('Menu',$this->applicationUrl.$this->controller,$this->scaffold->params['panelController']);
$this->scaffold->mainMenu = $this->h['Menu'];
$this->m[$this->modelName]->popupBuild();
@@ -305,7 +311,8 @@ class Controller {
if ($type === 'main') {
- $here = $this->controller.'/'.$this->scaffold->params['mainAction'];
+ $here = $this->applicationUrl.$this->controller.'/'.$this->scaffold->params['mainAction'];
+
$this->helper('Pages',$here,$this->scaffold->params['pageVariable']);
$this->helper('List',$this->m[$this->modelName]->identifierName,$here,$this->scaffold->params['pageVariable']);
diff --git a/h-source/Library/Db/Mysql.php b/h-source/Library/Db/Mysql.php
index d19d24a..e0dcfe0 100755
--- a/h-source/Library/Db/Mysql.php
+++ b/h-source/Library/Db/Mysql.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -24,16 +24,34 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to manage the database
//singleton!
-class Db_Mysql {
+class Db_Mysql
+{
+
+ private $autocommit = true;
+ private $transactionBatchSize = 100;
+
+ public $transactionBatch = array();
public $query = null; //the last query executed
+ public $queries = array(); //array containing all the queries executed
+
public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred
public $charset = null; //the charset of the client connection
private static $instance = null; //instance of this class
private $dblink;
- private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double');
+
+ private $charTypes = array('varchar','char');
+ private $textTypes = array('tinytext','text','mediumtext','longtext');
+ private $integerTypes = array('tinyint','smallint','int','mediumint','bigint');
+ private $floatTypes = array('real','float','double');
+ private $dateTypes = array('date');
+ private $enumTypes = array('enum');
+ private $decimalTypes = array('decimal');
+ private $uniqueIndexStrings = array('UNI');
+
+ private $fieldsType = array();
/**
*connect to the database
@@ -51,7 +69,8 @@ class Db_Mysql {
private function __construct($host,$user,$pwd,$db_name)
{
-
+ $this->fieldsType = array_merge($this->integerTypes, $this->floatTypes);
+
$this->dblink = mysql_connect($host,$user,$pwd);
if ($this->dblink === FALSE) {
@@ -78,7 +97,46 @@ class Db_Mysql {
return self::$instance;
}
-
+ public function getUniqueIndexStrings()
+ {
+ return $this->uniqueIndexStrings;
+ }
+
+ public function getTextTypes()
+ {
+ return $this->textTypes;
+ }
+
+ public function getDecimalTypes()
+ {
+ return $this->decimalTypes;
+ }
+
+ public function getEnumTypes()
+ {
+ return $this->enumTypes;
+ }
+
+ public function getCharTypes()
+ {
+ return $this->charTypes;
+ }
+
+ public function getIntegerTypes()
+ {
+ return $this->integerTypes;
+ }
+
+ public function getFloatTypes()
+ {
+ return $this->floatTypes;
+ }
+
+ public function getDateTypes()
+ {
+ return $this->dateTypes;
+ }
+
//close the connection
public function disconnect()
{
@@ -163,16 +221,29 @@ class Db_Mysql {
public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) {
- $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join);
+ $select = isset($group_by) ? "*" : 'count(*) as number';
+
+ $query = $this->createSelectQuery($table,$select,$where,$group_by,null,null,$on,$using,$join);
$this->query=$query;
+ $this->queries[] = $query;
$ris = mysql_query($query);
if ($ris) {
- $num_rows = mysql_num_rows($ris);
- return $num_rows;
+
+ if (isset($group_by))
+ {
+ $num_rows = mysql_num_rows($ris);
+ }
+ else
+ {
+ $row = mysql_fetch_array($ris);
+ $num_rows = $row['number'];
+ }
+
+ return (int)$num_rows;
} else {
- return false;
+ return 0;
}
}
@@ -182,6 +253,8 @@ class Db_Mysql {
$query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join);
$this->query = $query;
+ $this->queries[] = $query;
+
$result = mysql_query($query);
if ($result)
{
@@ -223,6 +296,8 @@ class Db_Mysql {
$query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join);
$this->query = $query;
+ $this->queries[] = $query;
+
$result = mysql_query($query);
return $this->getData($result);
}
@@ -259,32 +334,73 @@ class Db_Mysql {
}
else
{
- return false;
+ return array();
}
}
- //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
- public function getTypes($table, $fields)
+
+ private function getFieldsFeature($feature, $table, $fields, $full = false, $associative = false)
{
$query = "DESCRIBE $table;";
$result = mysql_query($query);
$temp = array();
while ($row = mysql_fetch_assoc($result)) {
- $e = explode('(',$row['Type']);
- $temp[$row['Field']] = reset($e);
+ if ($full)
+ {
+ $temp[$row['Field']] = $row[$feature];
+ }
+ else
+ {
+ $e = explode('(',$row[$feature]);
+ $temp[$row['Field']] = strcmp($feature,"Type") === 0 ? strtolower(reset($e)) : reset($e);
+ }
}
+ $this->queries[] = $query;
+
+ //return all fields types
+ if ($fields === "*")
+ {
+ $fields = implode(",",array_keys($temp));
+ }
+
$types = array();
$fields = explode(',',$fields);
for ($i = 0; $i < count($fields); $i++)
{
if (!array_key_exists($fields[$i],$temp)) return false;
- $types[] = $temp[$fields[$i]];
+
+ if ($associative)
+ {
+ $types[$fields[$i]] = $temp[$fields[$i]];
+ }
+ else
+ {
+ $types[] = $temp[$fields[$i]];
+ }
}
return $types;
}
+ //return an array containing all the keys of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getKeys($table, $fields, $full = false, $associative = false)
+ {
+ return $this->getFieldsFeature('Key', $table, $fields, $full, $associative);
+ }
+
+ //return an array containing all the default values of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getDefaultValues($table, $fields, $full = false, $associative = false)
+ {
+ return $this->getFieldsFeature('Default', $table, $fields, $full, $associative);
+ }
+
+ //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getTypes($table, $fields, $full = false, $associative = false)
+ {
+ return $this->getFieldsFeature('Type', $table, $fields, $full, $associative);
+ }
+
public function insert($table,$fields,$values) {
#$table is a string
@@ -312,6 +428,8 @@ class Db_Mysql {
$values = implode(',',$values);
$query="INSERT INTO $table ($fields) VALUES ($values);";
$this->query = $query;
+ $this->queries[] = $query;
+
$ris = mysql_query($query);
#check the result
@@ -320,12 +438,34 @@ class Db_Mysql {
} else {
return false;
}
-
+
} else {
return false;
}
}
+ //set the autocommit attribute
+ public function setAutocommit($value)
+ {
+ }
+
+ //set the transactionBatchSize attribute
+ public function setTransactionBatchSize($size)
+ {
+ }
+
+ //commit a batch of queries
+ //$batch: array of queries
+ public function commitBatch($batch)
+ {
+ }
+
+ //commit the transaction
+ public function commitTransaction()
+ {
+ return false;
+ }
+
// Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
public function lastId()
{
@@ -367,6 +507,8 @@ class Db_Mysql {
$str=implode(',',$str);
$query="UPDATE $table SET $str $where;";
$this->query=$query;
+ $this->queries[] = $query;
+
$ris = mysql_query($query);
#check the result
@@ -375,6 +517,7 @@ class Db_Mysql {
} else {
return false;
}
+
} else {
return false;
}
@@ -390,6 +533,8 @@ class Db_Mysql {
// }
$query="DELETE FROM $table $where;";
$this->query=$query;
+ $this->queries[] = $query;
+
$ris = mysql_query($query);
#check the result
@@ -423,6 +568,8 @@ class Db_Mysql {
public function query($query)
{
$this->query = $query;
+ $this->queries[] = $query;
+
$result = mysql_query($query);
if ($result === false)
{
diff --git a/h-source/Library/Db/Mysqli.php b/h-source/Library/Db/Mysqli.php
index b65f470..bd3ce1c 100644
--- a/h-source/Library/Db/Mysqli.php
+++ b/h-source/Library/Db/Mysqli.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -27,14 +27,31 @@ if (!defined('EG')) die('Direct access not allowed!');
class Db_Mysqli
{
+ private $autocommit = true;
+ private $transactionBatchSize = 100;
+
+ public $transactionBatch = array();
+
public $query = null; //the last query executed
+ public $queries = array(); //array containing all the queries executed
+
public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred
public $charset = null; //the charset of the client connection
private static $instance = null; //instance of this class
private $db;
- private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double');
+
+ private $charTypes = array('varchar','char');
+ private $textTypes = array('tinytext','text','mediumtext','longtext');
+ private $integerTypes = array('tinyint','smallint','int','mediumint','bigint');
+ private $floatTypes = array('real','float','double');
+ private $dateTypes = array('date');
+ private $enumTypes = array('enum');
+ private $decimalTypes = array('decimal');
+ private $uniqueIndexStrings = array('UNI');
+
+ private $fieldsType = array();
//PHP-Mysql charset translation table
private $charsetTranslationTable = array(
@@ -53,7 +70,8 @@ class Db_Mysqli
private function __construct($host,$user,$pwd,$db_name)
{
-
+ $this->fieldsType = array_merge($this->integerTypes, $this->floatTypes);
+
$this->db = new mysqli($host,$user,$pwd,$db_name);
if (mysqli_connect_error())
@@ -85,7 +103,46 @@ class Db_Mysqli
return self::$instance;
}
-
+ public function getUniqueIndexStrings()
+ {
+ return $this->uniqueIndexStrings;
+ }
+
+ public function getTextTypes()
+ {
+ return $this->textTypes;
+ }
+
+ public function getDecimalTypes()
+ {
+ return $this->decimalTypes;
+ }
+
+ public function getEnumTypes()
+ {
+ return $this->enumTypes;
+ }
+
+ public function getCharTypes()
+ {
+ return $this->charTypes;
+ }
+
+ public function getIntegerTypes()
+ {
+ return $this->integerTypes;
+ }
+
+ public function getFloatTypes()
+ {
+ return $this->floatTypes;
+ }
+
+ public function getDateTypes()
+ {
+ return $this->dateTypes;
+ }
+
//close the connection
public function disconnect()
{
@@ -170,16 +227,30 @@ class Db_Mysqli
public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) {
- $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join);
+ $select = isset($group_by) ? "*" : 'count(*) as number';
+
+ $query = $this->createSelectQuery($table,$select,$where,$group_by,null,null,$on,$using,$join);
$this->query = $query;
+ $this->queries[] = $query;
+
$ris = $this->db->query($query);
if ($ris) {
- $num_rows = $ris->num_rows;
+
+ if (isset($group_by))
+ {
+ $num_rows = $ris->num_rows;
+ }
+ else
+ {
+ $row = $ris->fetch_array();
+ $num_rows = $row['number'];
+ }
+
$ris->close();
- return $num_rows;
+ return (int)$num_rows;
} else {
- return false;
+ return 0;
}
}
@@ -188,6 +259,8 @@ class Db_Mysqli
$query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join);
$this->query = $query;
+ $this->queries[] = $query;
+
$result = $this->db->query($query);
if ($result)
{
@@ -230,6 +303,8 @@ class Db_Mysqli
$query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join);
$this->query = $query;
+ $this->queries[] = $query;
+
$result = $this->db->query($query);
return $this->getData($result);
}
@@ -262,45 +337,85 @@ class Db_Mysqli
$result->close();
return $data;
} else {
- return false;
+ return array();
}
}
- //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
- public function getTypes($table, $fields)
+ private function getFieldsFeature($feature, $table, $fields, $full = false, $associative = false )
{
$query = "DESCRIBE $table;";
$result = $this->db->query($query);
$temp = array();
while ($row = $result->fetch_assoc()) {
- $e = explode('(',$row['Type']);
- $temp[$row['Field']] = reset($e);
+ if ($full)
+ {
+ $temp[$row['Field']] = $row[$feature];
+ }
+ else
+ {
+ $e = explode('(',$row[$feature]);
+ $temp[$row['Field']] = strcmp($feature,"Type") === 0 ? strtolower(reset($e)) : reset($e);
+ }
}
$result->close();
+ $this->queries[] = $query;
+
+ //return all fields types
+ if ($fields === "*")
+ {
+ $fields = implode(",",array_keys($temp));
+ }
+
$types = array();
$fields = explode(',',$fields);
for ($i = 0; $i < count($fields); $i++)
{
if (!array_key_exists($fields[$i],$temp)) return false;
- $types[] = $temp[$fields[$i]];
+
+ if ($associative)
+ {
+ $types[$fields[$i]] = $temp[$fields[$i]];
+ }
+ else
+ {
+ $types[] = $temp[$fields[$i]];
+ }
}
return $types;
}
+ //return an array containing all the keys of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getKeys($table, $fields, $full = false, $associative = false)
+ {
+ return $this->getFieldsFeature('Key', $table, $fields, $full, $associative);
+ }
+
+ //return an array containing all the default values of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getDefaultValues($table, $fields, $full = false, $associative = false)
+ {
+ return $this->getFieldsFeature('Default', $table, $fields, $full, $associative);
+ }
+
+ //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getTypes($table, $fields, $full = false, $associative = false)
+ {
+ return $this->getFieldsFeature('Type', $table, $fields, $full, $associative);
+ }
+
public function insert($table,$fields,$values) {
-
#$table is a string
#$fields has to be a string with comma as separator: name1,name2,...
#$values has to be an array
+
$values = array_values($values);
if (strcmp($fields,'') !== 0)
{
//get the type of the fields
$types = $this->getTypes($table,$fields);
if (!$types) return false;
-
+
for($i = 0; $i < count($values); $i++)
{
if (!in_array($types[$i],$this->fieldsType))
@@ -316,21 +431,103 @@ class Db_Mysqli
$values = implode(',',$values);
$query="INSERT INTO $table ($fields) VALUES ($values);";
$this->query=$query;
+ $this->queries[] = $query;
- $ris = $this->db->query($query);
+ if ($this->autocommit)
+ {
+ $ris = $this->db->query($query);
- #check the result
- if ($ris) {
+ #check the result
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ else
+ {
+ $this->transactionBatch[] = $query;
return true;
- } else {
- return false;
}
-
} else {
return false;
}
}
+ //set the autocommit attribute
+ public function setAutocommit($value)
+ {
+ if ($value === true or $value === false)
+ {
+ $this->autocommit = $value;
+ $this->db->autocommit($value);
+ }
+ else
+ {
+ $this->autocommit = true;
+ $this->db->autocommit(true);
+ }
+ }
+
+ //set the transactionBatchSize attribute
+ public function setTransactionBatchSize($size)
+ {
+ $this->transactionBatchSize = abs($size);
+ }
+
+ //commit a batch of queries
+ //$batch: array of queries
+ public function commitBatch($batch)
+ {
+ foreach ($batch as $sql)
+ {
+ $this->db->query($sql);
+ }
+
+ if (!$this->autocommit and $this->db->commit())
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //commit the transaction
+ public function commitTransaction()
+ {
+ $returnArray = array();
+
+ if (!$this->autocommit)
+ {
+ if (count($this->transactionBatch) > 0)
+ {
+ if ($this->transactionBatchSize === 0)
+ {
+ $returnArray[] = $this->commitBatch($this->transactionBatch);
+ }
+ else
+ {
+ $batchArray = array_chunk($this->transactionBatch, $this->transactionBatchSize);
+
+ foreach ($batchArray as $batch)
+ {
+ $returnArray[] = $this->commitBatch($batch);
+ }
+ }
+ }
+ }
+
+ if (count(array_filter($returnArray)) === count($returnArray))
+ {
+ $this->transactionBatch = array();
+ return true;
+ }
+
+ return false;
+ }
+
// Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
public function lastId()
{
@@ -372,13 +569,23 @@ class Db_Mysqli
$str=implode(',',$str);
$query="UPDATE $table SET $str $where;";
$this->query=$query;
- $ris = $this->db->query($query);
+ $this->queries[] = $query;
+
+ if ($this->autocommit)
+ {
+ $ris = $this->db->query($query);
- #check the result
- if ($ris) {
+ #check the result
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ else
+ {
+ $this->transactionBatch[] = $query;
return true;
- } else {
- return false;
}
} else {
return false;
@@ -395,6 +602,8 @@ class Db_Mysqli
// }
$query="DELETE FROM $table $where;";
$this->query=$query;
+ $this->queries[] = $query;
+
$ris = $this->db->query($query);
#check the result
@@ -429,6 +638,8 @@ class Db_Mysqli
public function query($query)
{
$this->query = $query;
+ $this->queries[] = $query;
+
$result = $this->db->query($query);
if ($result === true)
{
diff --git a/h-source/Library/Email.php b/h-source/Library/Email.php
index 9d2ff19..369af20 100644
--- a/h-source/Library/Email.php
+++ b/h-source/Library/Email.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/ErrorReporting.php b/h-source/Library/ErrorReporting.php
index 2cb8aed..ab66091 100644
--- a/h-source/Library/ErrorReporting.php
+++ b/h-source/Library/ErrorReporting.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Factory/Db.php b/h-source/Library/Factory/Db.php
index 32a82c1..17afa1a 100755
--- a/h-source/Library/Factory/Db.php
+++ b/h-source/Library/Factory/Db.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Factory/Strings.php b/h-source/Library/Factory/Strings.php
index 3e766bd..8917590 100644
--- a/h-source/Library/Factory/Strings.php
+++ b/h-source/Library/Factory/Strings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Files/Log.php b/h-source/Library/Files/Log.php
index 7eda7b7..a060ba3 100644
--- a/h-source/Library/Files/Log.php
+++ b/h-source/Library/Files/Log.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Files/Upload.php b/h-source/Library/Files/Upload.php
index 00a0afe..19b5fd1 100755
--- a/h-source/Library/Files/Upload.php
+++ b/h-source/Library/Files/Upload.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Form/Checkbox.php b/h-source/Library/Form/Checkbox.php
index 497c097..91191a9 100755
--- a/h-source/Library/Form/Checkbox.php
+++ b/h-source/Library/Form/Checkbox.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Checkbox extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName);
+ $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName,$this->attributes);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Entry.php b/h-source/Library/Form/Entry.php
index 6f45557..fa3b84f 100755
--- a/h-source/Library/Form/Entry.php
+++ b/h-source/Library/Form/Entry.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -33,6 +33,7 @@ abstract class Form_Entry {
public $labelClass = null; //the class of the tag of the label
public $options = array(); //options (if the entry is a <select> entry or a radio button). Associative array or comma-divided list.
public $reverse = null; //reverse label with value in select entries
+ public $attributes = null; //attributes of the field
public $defaultValue = '';
public $wrap = array();
public $deleteButton = null;
diff --git a/h-source/Library/Form/File.php b/h-source/Library/Form/File.php
index ac9b8ab..f1e7d2d 100644
--- a/h-source/Library/Form/File.php
+++ b/h-source/Library/Form/File.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_File extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::fileUpload($this->entryName, $value, $this->className, $this->idName);
+ $returnString .= Html_Form::fileUpload($this->entryName, $value, $this->className, $this->idName, $this->attributes);
if (is_array($this->deleteButton))
{
$sname = isset($this->deleteButton[0]) ? $this->deleteButton[0] : 'delete_'.$this->entryName;
diff --git a/h-source/Library/Form/Form.php b/h-source/Library/Form/Form.php
index d1899a4..9b05c51 100755
--- a/h-source/Library/Form/Form.php
+++ b/h-source/Library/Form/Form.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,6 +25,15 @@ if (!defined('EG')) die('Direct access not allowed!');
//create the HTML of the whole form
class Form_Form {
+ //default attributes of the entries
+ public static $defaultEntryAttributes = array(
+ "entryClass" => null,
+ "className" => null,
+ "idName" => null,
+ "submitClass" => "btn btn-primary",
+ "formWrap" => null,
+ );
+
public $entry = array(); //associative array containing the entries of the form (objects that inherit the class form_entryModel). Each element of the array corresponds to one field of the table
public $action = null; //the action of the form
@@ -53,8 +62,9 @@ class Form_Form {
{
throw new Exception("class <b>$entryObjName</b> not defined: the entry <b>$entryName</b> can't be set");
}
+
$this->entry[$entryName] = new $entryObjName($entryName);
- $this->entry[$entryName]->labelString = $entryName.':';
+ $this->entry[$entryName]->labelString = getFieldLabel($entryName);
//set the type
$this->entry[$entryName]->type = $entryType;
if (isset($options))
@@ -72,17 +82,18 @@ class Form_Form {
$type = array_key_exists('type',$entry) ? $entry['type'] : 'InputText';
$options = array_key_exists('options',$entry) ? $entry['options'] : null;
$this->setEntry($name,$type,$options);
-
- $entryClass = array_key_exists('entryClass',$entry) ? $entry['entryClass'] : null;
- $labelString = array_key_exists('labelString',$entry) ? $entry['labelString'] : "$name:";
- $idName = array_key_exists('idName',$entry) ? $entry['idName'] : null;
- $className = array_key_exists('className',$entry) ? $entry['className'] : null;
+
+ $entryClass = array_key_exists('entryClass',$entry) ? $entry['entryClass'] : self::$defaultEntryAttributes['entryClass'];
+ $labelString = array_key_exists('labelString',$entry) ? $entry['labelString'] : getFieldLabel($name);
+ $idName = array_key_exists('idName',$entry) ? $entry['idName'] : self::$defaultEntryAttributes['idName'];
+ $className = array_key_exists('className',$entry) ? $entry['className'] : self::$defaultEntryAttributes['className'];
$labelClass = array_key_exists('labelClass',$entry) ? $entry['labelClass'] : null;
$defaultValue = array_key_exists('defaultValue',$entry) ? $entry['defaultValue'] : null;
$wrap = array_key_exists('wrap',$entry) ? $entry['wrap'] : array();
$deleteButton = array_key_exists('deleteButton',$entry) ? $entry['deleteButton'] : null;
$reverse = array_key_exists('reverse',$entry) ? $entry['reverse'] : null;
-
+ $attributes = array_key_exists('attributes',$entry) ? $entry['attributes'] : null;
+
$this->entry[$name]->entryClass = $entryClass;
$this->entry[$name]->labelString = $labelString;
$this->entry[$name]->idName = $idName;
@@ -92,6 +103,7 @@ class Form_Form {
$this->entry[$name]->wrap = $wrap;
$this->entry[$name]->deleteButton = $deleteButton;
$this->entry[$name]->reverse = $reverse;
+ $this->entry[$name]->attributes = $attributes;
}
}
@@ -113,7 +125,7 @@ class Form_Form {
$fid = isset($this->id) ? "id='".$this->id."'" : null;
$fname = isset($this->name) ? "name='".$this->name."'" : null;
$fclass = isset($this->className) ? "class='".$this->className."'" : null;
- $fenctype = isset($this->enctype) ? " enctype=".$this->enctype." " : null;
+ $fenctype = isset($this->enctype) ? " enctype='".$this->enctype."' " : null;
$htmlForm = "<form $fname $fclass $fid action='".Url::getRoot($this->action)."' method='".$this->method."' $fenctype>\n";
if (!isset($subset))
@@ -179,7 +191,19 @@ class Form_Form {
{
if (!is_array($value))
{
- $htmlForm .= "<span class='submit_entry_$value'>".Html_Form::submit($name, $value, null, $name)."</span>";
+ $submitClass= "";
+ if (!is_array(self::$defaultEntryAttributes['submitClass']))
+ {
+ $submitClass = self::$defaultEntryAttributes['submitClass'];
+ }
+ else
+ {
+ if (array_key_exists($value,self::$defaultEntryAttributes['submitClass']))
+ {
+ $submitClass = self::$defaultEntryAttributes['submitClass'][$value];
+ }
+ }
+ $htmlForm .= "<span class='submit_entry_$value'>".Html_Form::submit($name, $value, $submitClass, $name)."</span>";
}
else
{
@@ -189,6 +213,11 @@ class Form_Form {
}
$htmlForm .= "</div>";
$htmlForm .= "</form>\n";
+
+ if (isset(self::$defaultEntryAttributes["formWrap"]) and is_array(self::$defaultEntryAttributes["formWrap"]) and count(self::$defaultEntryAttributes["formWrap"]) === 2)
+ {
+ return self::$defaultEntryAttributes["formWrap"][0] . $htmlForm . self::$defaultEntryAttributes["formWrap"][1];
+ }
return $htmlForm;
}
diff --git a/h-source/Library/Form/Hidden.php b/h-source/Library/Form/Hidden.php
index db86713..c2185b9 100755
--- a/h-source/Library/Form/Hidden.php
+++ b/h-source/Library/Form/Hidden.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -33,7 +33,7 @@ class Form_Hidden extends Form_Entry
public function render($value = null)
{
- $returnString = Html_Form::hidden($this->entryName, $value, $this->className, $this->idName);
+ $returnString = Html_Form::hidden($this->entryName, $value, $this->className, $this->idName, $this->attributes);
return $returnString;
}
diff --git a/h-source/Library/Form/Html.php b/h-source/Library/Form/Html.php
index e5c9989..a7181cc 100644
--- a/h-source/Library/Form/Html.php
+++ b/h-source/Library/Form/Html.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Form/InputText.php b/h-source/Library/Form/InputText.php
index 344264e..086c0a1 100755
--- a/h-source/Library/Form/InputText.php
+++ b/h-source/Library/Form/InputText.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_InputText extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName);
+ $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName, $this->attributes);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Password.php b/h-source/Library/Form/Password.php
index 9bfc68b..41fbc8e 100644
--- a/h-source/Library/Form/Password.php
+++ b/h-source/Library/Form/Password.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Password extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::password($this->entryName, null, $this->className);
+ $returnString .= Html_Form::password($this->entryName, null, $this->className, $this->idName, $this->attributes);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Radio.php b/h-source/Library/Form/Radio.php
index 4f596ed..10154be 100755
--- a/h-source/Library/Form/Radio.php
+++ b/h-source/Library/Form/Radio.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Radio extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName);
+ $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName, $this->attributes);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Select.php b/h-source/Library/Form/Select.php
index 53d7632..8b2a634 100755
--- a/h-source/Library/Form/Select.php
+++ b/h-source/Library/Form/Select.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Select extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName, $this->reverse);
+ $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName, $this->reverse, $this->attributes);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Textarea.php b/h-source/Library/Form/Textarea.php
index aaaf19e..f294b0a 100755
--- a/h-source/Library/Form/Textarea.php
+++ b/h-source/Library/Form/Textarea.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Textarea extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName);
+ $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName, $this->attributes);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Functions.php b/h-source/Library/Functions.php
index 62a1838..ef86812 100755
--- a/h-source/Library/Functions.php
+++ b/h-source/Library/Functions.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -108,12 +108,24 @@ SANITIZE DEEP
function stripslashesDeep($value) {
if(get_magic_quotes_gpc()) {#if stripslashes
- return array_map('stripslashes', $value);
+ return array_map_recursive('stripslashes', $value);
}
return $value;
}
-
+//from http://www.php.net/array_map#112857
+function array_map_recursive($callback, $array) {
+ foreach ($array as $key => $value) {
+ if (is_array($array[$key])) {
+ $array[$key] = array_map_recursive($callback, $array[$key]);
+ }
+ else {
+ $array[$key] = call_user_func($callback, $array[$key]);
+ }
+ }
+ return $array;
+}
+
function sanitizeHtmlDeep($value) {
return array_map('sanitizeHtml', $value);
}
@@ -230,6 +242,75 @@ function wrap($string,$tag_class) {#wrap the string with the tag and its class
return $str_front.$string.$str_rear;
}
+//check that $date is a ISO date (YYYY-MM-DD)
+function checkIsoDate($date)
+{
+ if (preg_match('/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/',$date))
+ {
+ $dateArray = explode('-',$date);
+ if ((int)$dateArray[1] <= 12 and (int)$dateArray[1] >= 1 )
+ {
+ if ((int)$dateArray[2] >= 1 and (int)$dateArray[2] <= 31)
+ {
+ return checkdate((int)$dateArray[1],(int)$dateArray[2],(int)$dateArray[0]);
+ }
+ }
+ }
+ return false;
+}
+
+//check if $string is an integer string
+function checkInteger($string)
+{
+ if (preg_match('/^\-?[0-9]{1,}$/',$string))
+ {
+ return true;
+ }
+ return false;
+}
+
+//check if $string is decimal with the format indicated in $format
+//$format: M,D M is the maximum number of digits, D is the number of digits to the right of the decimal point
+function checkDecimal($string, $format)
+{
+ $t = explode(",",$format);
+ $M = (int)$t[0];
+ $D = (int)$t[1];
+ $I = $M - $D;
+
+ if (preg_match("/^[0-9]{1,$I}(\.[0-9]{1,$D})?$/",$string))
+ {
+ return true;
+ }
+ return false;
+}
+
+//get label name from field name
+function getFieldLabel($fieldName)
+{
+ if (class_exists("Lang_".Params::$language."_Formats_Fields"))
+ {
+ return call_user_func(array("Lang_".Params::$language."_Formats_Fields", "getLabel"), $fieldName);
+ }
+
+ return call_user_func(array("Lang_En_Formats_Fields", "getLabel"), $fieldName);
+
+// if (strstr($fieldName,","))
+// {
+// $temp = explode(",",$fieldName);
+// for ($i=0; $i< count($temp); $i++)
+// {
+// $temp[$i] = getFieldLabel($temp[$i]);
+// }
+// return implode (" and ",$temp);
+// }
+// else
+// {
+// $fieldName = str_replace("_"," ", $fieldName);
+// return ucfirst($fieldName);
+// }
+}
+
//generate a random password
//$start: start number of mt_rand
//$end: end number of mt_rand
@@ -268,7 +349,7 @@ function getIp()
$ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]);
} else if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
$ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]);
- } else {
+ } else if (!empty($_SERVER["REMOTE_ADDR"])) {
$ip = sanitizeIp($_SERVER["REMOTE_ADDR"]);
}
} else {
@@ -276,7 +357,7 @@ function getIp()
$ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' ));
} else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) {
$ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' ));
- } else {
+ } else if ( getenv( 'REMOTE_ADDR' ) !== false ) {
$ip = sanitizeIp(getenv( 'REMOTE_ADDR' ));
}
}
@@ -322,7 +403,7 @@ function encode($url)
}
else
{
- $temp .= '-';
+ $temp .= '_';
}
}
}
@@ -376,4 +457,23 @@ function xml_encode($string)
}
return strtr($string, $trans);
-} \ No newline at end of file
+}
+
+//Convert Hex Color to RGB
+//http://bavotasan.com/2011/convert-hex-color-to-rgb-using-php/
+function hex2rgb($hex) {
+ $hex = str_replace("#", "", $hex);
+
+ if(strlen($hex) == 3) {
+ $r = hexdec(substr($hex,0,1).substr($hex,0,1));
+ $g = hexdec(substr($hex,1,1).substr($hex,1,1));
+ $b = hexdec(substr($hex,2,1).substr($hex,2,1));
+ } else {
+ $r = hexdec(substr($hex,0,2));
+ $g = hexdec(substr($hex,2,2));
+ $b = hexdec(substr($hex,4,2));
+ }
+ $rgb = array($r, $g, $b);
+ //return implode(",", $rgb); // returns the rgb values separated by commas
+ return $rgb; // returns an array with the rgb values
+}
diff --git a/h-source/Library/HeaderObj.php b/h-source/Library/HeaderObj.php
index 994eb16..2d52e1d 100644
--- a/h-source/Library/HeaderObj.php
+++ b/h-source/Library/HeaderObj.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Helper/Array.php b/h-source/Library/Helper/Array.php
index 329463f..dbdda4f 100755
--- a/h-source/Library/Helper/Array.php
+++ b/h-source/Library/Helper/Array.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Helper/Html.php b/h-source/Library/Helper/Html.php
index 81a9bdd..9e25bb4 100755
--- a/h-source/Library/Helper/Html.php
+++ b/h-source/Library/Helper/Html.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Helper/List.php b/h-source/Library/Helper/List.php
index 7f8fb77..81b5345 100755
--- a/h-source/Library/Helper/List.php
+++ b/h-source/Library/Helper/List.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,6 +25,9 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to create the HTML of a list of records
class Helper_List extends Helper_Html {
+ //table attributes
+ static public $tableAttributes = array('class'=>'listTable','cellspacing'=>'0');
+
private $__rowArray = array(); //the current associative array representing the database record
protected $_itemsList = array(); //2-dimensional associative array containing the list items
@@ -34,7 +37,7 @@ class Helper_List extends Helper_Html {
protected $_recordNumber = null; //number of records from the table
- protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm','Form','ledit','link','text'); //type of items allowed
+ protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm','Form','ledit','link','text','checkbox','input'); //type of items allowed
//it can be: both, top, bottom, none
protected $_boundaries = 'none';
@@ -42,6 +45,12 @@ class Helper_List extends Helper_Html {
//array of filters
protected $_filters = array();
+ //array of bulk actions
+ protected $_bulkActions = array();
+
+ //set to false if you don't want that the filters are created inside the table
+ public $showFilters = true;
+
//set if the submit buttons have to be images or not (it can be yse or not)
public $submitImageType = 'yes';
@@ -54,9 +63,6 @@ class Helper_List extends Helper_Html {
//properties of columns
public $colProperties = array();
- //table attributes
- public $tableAttributes = array('class'=>'listTable','cellspacing'=>'0');
-
//$position: array. First element: page number, second element: number of pages
public $position = array();
@@ -68,12 +74,15 @@ class Helper_List extends Helper_Html {
public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null
+ //if the filter forms have to be aggregated in a unique form or if they have to be left separated
+ public $aggregateFilters = false;
+
public function __construct() {
//get the generic language class
$this->strings = Factory_Strings::generic(Params::$language);
- $baseUrl = 'http://'.DOMAIN_NAME.'/Public/Img/Icons/elementary_2_5/';
+ $baseUrl = Url::getRoot().'Public/Img/Icons/elementary_2_5/';
//set the files of the images
$this->submitImages = array(
@@ -147,17 +156,39 @@ class Helper_List extends Helper_Html {
//set the filters
//$filters: array whose elements are the viewArgs to be used for the filters forms
+ //or null
public function setFilters($filters)
{
$this->_filters = $filters;
}
+
+ //set $this->aggregateFilters equal to true
+ public function aggregateFilters()
+ {
+ $this->aggregateFilters = true;
+ }
+
+ //set the bulk actions
+ //$bulkActions: associative array.
+ //key: class of the inputs whose elements have to be selected and serialized by javascript in the following way: data-primary-key:value_attribute|data-primary-key:value_attribute|data-primary-key:value_attribute|...
+ //value: array with two elements whose first element is the bulk action to be sent as a key of $_POST, second element is the human readable name of the action, third element can be the string "confirm" (if the user has to confirm the action) or undefined
+ //example:
+ // $bulkActions = array(
+ // "input_category_id_order" => array("sortAction","Sort elements"),
+ // "checkbox_category_id" => array("deleteAction","Delete elements","confirm"),
+ // );
+ public function setBulkActions($bulkActions)
+ {
+ $this->_bulkActions = $bulkActions;
+ }
//check that the ViewArgs array is complete
public function checkViewArgs()
{
foreach ($this->_filters as $field)
{
- if (!array_key_exists($field,$this->viewArgs) and strcmp($field,null) !== 0) return false;
+ $key = !is_array($field) ? $field : $field[0];
+ if (!array_key_exists($key,$this->viewArgs) and strcmp($key,null) !== 0) return false;
}
return true;
}
@@ -228,8 +259,8 @@ class Helper_List extends Helper_Html {
}
//wrap the column with the tag td
- public function wrapColumn($string, $className = null) {
- return wrap($string,array('td'=>$className));
+ public function wrapColumn($string, $className = null, $tag = "td") {
+ return wrap($string,array($tag=>$className));
}
//wrap the row with the tag tr
@@ -238,7 +269,7 @@ class Helper_List extends Helper_Html {
}
public function wrapList($string) {
- return wrap($string,array('table'=>$this->tableAttributes));
+ return wrap($string,array('table'=>self::$tableAttributes));
}
//method to create the HTML of the head of the table
@@ -249,13 +280,18 @@ class Helper_List extends Helper_Html {
foreach ($this->_head as $item) {
$temp = $item['action'];
+ if (preg_match('/\[\[bulkselect:(.*?)\]\]/',$temp,$matches))
+ {
+ $temp = Html_Form::checkbox("bulkselect_".$matches[1],"","BS","bulk_select_checkbox",null,"data-class='".$matches[1]."'");
+ }
+
$prop = $item['type'];
if (isset($this->colProperties[$count]))
{
$prop = $this->colProperties[$count];
}
- $htmlHead .= $this->wrapColumn($temp,$prop);
+ $htmlHead .= $this->wrapColumn($temp, $prop, "th");
$count++;
}
@@ -263,7 +299,27 @@ class Helper_List extends Helper_Html {
return $htmlHead;
}
- //method to create the HTML of the head of the table
+ //return an array with all the filters in a 1-dimensional array
+ public function getFiltersList()
+ {
+ $filterList = array();
+
+ foreach ($this->_filters as $f)
+ {
+ if (is_array($f))
+ {
+ $filterList[] = $f[0];
+ }
+ else
+ {
+ $filterList[] = $f;
+ }
+ }
+
+ return $filterList;
+ }
+
+ //method to create the HTML of the filters input
public function createFilters() {
$htmlFilters = null;
@@ -283,18 +339,91 @@ class Helper_List extends Helper_Html {
$html = '&nbsp';
if (isset($this->_filters[$count]))
{
- $html = $this->filterForm($this->_filters[$count]);
+ if (!is_array($this->_filters[$count]))
+ {
+ $html = $this->filterForm($this->_filters[$count]);
+ }
+ else
+ {
+ $html = call_user_func_array(array($this,"filterForm"),$this->_filters[$count]);
+// $html = $this->filterForm($this->_filters[$count][0],$this->_filters[$count][1]);
+ }
}
- $htmlFilters .= $this->wrapColumn($html,$prop);
-
+
+ //wrap single cell if filters doesn't have to be aggregate
+ if (!$this->aggregateFilters)
+ {
+ $htmlFilters .= !$this->showFilters ? $html : $this->wrapColumn($html,$prop);
+ }
+ else
+ {
+ $htmlFilters .= $html;
+ }
+
$count++;
}
+
+ //wrap an aggregate cell if filters have to be aggregate
+ if ($this->aggregateFilters)
+ {
+ $colspan = count($this->_itemsList);
+ $formTop = "<form class='list_filter_form' action='".Url::getRoot($this->url)."' method='GET'>\n";
+ $imgSrc = Url::getRoot('Public/Img/Icons/elementary_2_5/find.png');
+
+ $formBottom = "";
+ $emptyFilterStatusArray = array();
+ $filtersList = $this->getFiltersList();
+ foreach ($this->viewArgs as $k => $v)
+ {
+ if (!in_array($k,$filtersList))
+ {
+ $emptyFilterStatusArray[] = "$k=$v";
+ $formBottom .= "<input type='hidden' name='".$k."' value='$v' />";
+ }
+ }
+ $emptyFilterStatus = implode("&",$emptyFilterStatusArray);
+
+ $formBottom .= "<a class='list_filter_clear_link' title='".$this->strings->gtext('clear the filter')."' href='".Url::getRoot($this->url)."?".$emptyFilterStatus."'><img src='".Url::getRoot()."/Public/Img/Icons/elementary_2_5/clear_filter.png' /></a>";
+
+ $formBottom .= "<input class='list_filter_submit' type='image' title='".$this->strings->gtext('filter')."' src='".$imgSrc."' value='trova'>\n";
+
+ $formBottom .= "</form>";
+
+ $htmlFilters = !$this->showFilters ? $formTop.$htmlFilters.$formBottom : $this->wrapColumn($formTop.$htmlFilters.$formBottom,array("class"=>"aggregate_filters_td","colspan"=>$colspan));
+
+ }
}
}
return $htmlFilters;
}
+ //create the HTML of the select of the bulk actions
+ public function createBulkActionsSelect()
+ {
+ $htmlBulkSelect = null;
+ $colspan = count($this->_itemsList);
+
+ if (count($this->_bulkActions) > 0)
+ {
+ $htmlBulkSelect .= "<span class='bulk_actions_select_label'>".$this->strings->gtext('Actions')."</span>: <select data-url='".Url::getRoot(null).$this->url.$this->viewStatus."' class='bulk_actions_select' name='bulk_select'>";
+
+ $htmlBulkSelect .= "<option data-class='0' value='0'>".$this->strings->gtext('-- Select bulk action --')."</option>";
+
+ foreach ($this->_bulkActions as $class => $action)
+ {
+ $class = str_replace("+","",$class);
+ $confirm = isset($action[2]) ? "data-confirm='Y'" : "data-confirm='N'";
+ $htmlBulkSelect .= "<option $confirm data-class='$class' value='".$action[0]."'>".$action[1]."</option>";
+ }
+
+ $htmlBulkSelect .= "</select>";
+ $htmlBulkSelect = $this->wrapColumn($htmlBulkSelect,array("class"=>"bulk_actions_td","colspan"=>$colspan));
+ }
+
+ return $htmlBulkSelect;
+ }
+
//create the HTML of a single row (values taken from the associative array $rowArray)
public function getRowList($rowArray) {
$htmlList = null;
@@ -353,16 +482,32 @@ class Helper_List extends Helper_Html {
$this->_recordNumber = count($queryResult);
$htmlList = null;
//create the HTML of the head of the record list
- $htmlList .= $this->wrapRow($this->createHead(),'listHead');
+ $htmlList .= "<thead>\n".$this->wrapRow($this->createHead(),'listHead')."</thead>\n";
//create the HTML of the filters
- $htmlList .= $this->wrapRow($this->createFilters(),'listFilters');
+ $htmlList .= "<tbody>\n";
+
+ $bulkActionsHtml = $this->createBulkActionsSelect();
+ if (isset($bulkActionsHtml))
+ {
+ $htmlList .= $this->wrapRow($bulkActionsHtml,'bulk_actions_tr');
+ }
+
+ if ($this->showFilters)
+ {
+ $filtersHtml = $this->createFilters();
+ if (isset($filtersHtml))
+ {
+ $htmlList .= $this->wrapRow($filtersHtml,'listFilters');
+ }
+ }
+
for ($i = 0; $i < count($queryResult); $i++)
{
$this->ifInBoundaries($i);
$temp = $this->getRowList($queryResult[$i]);
$htmlList .= $this->wrapRow($temp,'listRow');
}
- return $this->wrapList($htmlList);
+ return $this->wrapList($htmlList."</tbody>\n");
}
public function generalForm($itemArray, $submitName, $submitValue)
@@ -459,8 +604,20 @@ class Helper_List extends Helper_Html {
return $string;
}
+ //create the HTML of a checkbox
+ public function checkbox($itemArray)
+ {
+ return Html_Form::checkbox($itemArray['action'],$itemArray['field'],$itemArray['name'],"checkbox_".encode($itemArray['action']),null,"data-primary-key='".$itemArray['value']."'");
+ }
+
+ //create the HTML of an input text
+ public function input($itemArray)
+ {
+ return Html_Form::input($itemArray['action'],$itemArray['field'],"input_".encode($itemArray['action']),null,"data-primary-key='".$itemArray['name']."'");
+ }
+
//create the HTML of the filter
- public function filterForm($viewArgsName)
+ public function filterForm($viewArgsName, $filterString = null, $filterValues = null)
{
$cleanName = str_replace('n!',null,$viewArgsName);
$cleanName = str_replace('-',null,$cleanName);
@@ -475,8 +632,11 @@ class Helper_List extends Helper_Html {
if (Params::$nullQueryValue)
{
$this->viewArgs[$viewArgsName] = Params::$nullQueryValue;
- $viewStatus = Url::createUrl(array_values($this->viewArgs));
- if (strcmp($value,Params::$nullQueryValue) === 0) $value = '';
+ $viewStatus = Url::createUrl($this->viewArgs);
+ if (strcmp($value,Params::$nullQueryValue) === 0 and !isset($filterValues))
+ {
+ $value = '';
+ }
}
else
{
@@ -489,11 +649,42 @@ class Helper_List extends Helper_Html {
$title = $this->strings->gtext('filter');
$clearLinkTitle = $this->strings->gtext('clear the filter');
- $html = "<form class='list_filter_form list_filter_form_$cleanName' action='".$action."' method='GET'>\n";
- $html .= "<input class='list_filter_input list_filter_input_$cleanName' type='text' name='$viewArgsName' value='".$value."'>";
- $html .= "<a class='list_filter_clear_link list_filter_clear_link_$cleanName' title='$clearLinkTitle' href='$action'><img src='".Url::getRoot()."/Public/Img/Icons/elementary_2_5/clear_filter.png' /></a>";
- $html .= "<input class='list_filter_submit list_filter_submit_$cleanName' type='image' title='$title' src='".$imgSrc."' value='trova'>\n";
- $html .= "</form>\n";
+ $html = null;
+
+ if (!$this->aggregateFilters)
+ {
+ $html .= "<form class='list_filter_form list_filter_form_$cleanName' action='".$action."' method='GET'>\n";
+ }
+
+ $html .= isset($filterString) ? " <span class='list_filter_span list_filter_span_$cleanName'>".$filterString."</span> " : null;
+
+ if (!isset($filterValues))
+ {
+ $html .= "<input class='list_filter_input list_filter_input_$cleanName' type='text' name='$viewArgsName' value='".$value."'>";
+ }
+ else
+ {
+ $filterValues = array_merge(array(Params::$nullQueryValue => $this->strings->gtext('All')),$filterValues);
+ $html .= Html_Form::select($viewArgsName,$value,$filterValues,"list_filter_input list_filter_input_$cleanName",null,"yes");
+ }
+
+ if (!$this->aggregateFilters)
+ {
+ $html .= "<a class='list_filter_clear_link list_filter_clear_link_$cleanName' title='$clearLinkTitle' href='$action'><img src='".Url::getRoot()."/Public/Img/Icons/elementary_2_5/clear_filter.png' /></a>";
+ $html .= "<input class='list_filter_submit list_filter_submit_$cleanName' type='image' title='$title' src='".$imgSrc."' value='trova'>\n";
+
+ if (!Params::$rewriteStatusVariables)
+ {
+ foreach ($this->viewArgs as $k => $v)
+ {
+ if (strcmp($k,"$viewArgsName") !== 0)
+ {
+ $html .= "<input type='hidden' name='".$k."' value='$v' />";
+ }
+ }
+ }
+ $html .= "</form>\n";
+ }
return $html;
}
diff --git a/h-source/Library/Helper/Menu.php b/h-source/Library/Helper/Menu.php
index 8fd4bf4..4b33261 100755
--- a/h-source/Library/Helper/Menu.php
+++ b/h-source/Library/Helper/Menu.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,7 +25,8 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to write the top menù of the view files
class Helper_Menu extends Helper_Html
{
-
+ public static $htmlLinks = array();
+
public $panelController; //panel controller
public $controller;
@@ -49,6 +50,7 @@ class Helper_Menu extends Helper_Html
'text' => $this->strings->gtext('Back'),
'url' => 'main',
'icon' => $baseUrl."left.png",
+ 'queryString' => null,
),
'add' => array(
@@ -57,6 +59,7 @@ class Helper_Menu extends Helper_Html
'text' => $this->strings->gtext('Add'),
'url' => 'form/insert',
'icon' => $baseUrl."add.png",
+ 'queryString' => null,
),
'panel' => array(
@@ -65,9 +68,25 @@ class Helper_Menu extends Helper_Html
'text' => $this->strings->gtext('Panel'),
'url' => 'main',
'icon' => $baseUrl."panel.png",
+ 'queryString' => null,
)
);
+
+ foreach (self::$htmlLinks as $k => $v)
+ {
+ if (!array_key_exists($k, $this->links))
+ {
+ $this->links[$k] = $v;
+ }
+ else
+ {
+ foreach ($v as $subK => $subV)
+ {
+ $this->links[$k][$subK] = $subV;
+ }
+ }
+ }
}
public function build($controller = null, $panelController = null)
@@ -89,8 +108,11 @@ class Helper_Menu extends Helper_Html
//check that the text and the ure are defined
if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url']))
{
- $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null;
+ $title = isset($this->links[$linkName]['title']) ? "title=\"".$this->links[$linkName]['title']."\"" : null;
+
$class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null;
+ $class = isset(self::$htmlLinks[$linkName]["class"]) ? "class='".self::$htmlLinks[$linkName]["class"]."'" : $class;
+
$icon = isset($this->links[$linkName]['icon']) ? "<img class='top_menu_icon' src='".$this->links[$linkName]['icon']."'> " : null;
//choose the controller (current or panel)
@@ -98,8 +120,18 @@ class Helper_Menu extends Helper_Html
$viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus;
$href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus);
+
+ if (isset($this->links[$linkName]['queryString']))
+ {
+ $href .= $this->links[$linkName]['queryString'];
+ }
+
$text = $this->links[$linkName]['text'];
- $menu .= "<div $class>$icon <a $title href='$href'>$text</a></div>\n";
+ $htmlBefore = isset($this->links[$linkName]["htmlBefore"]) ? $this->links[$linkName]["htmlBefore"] : "<div $class>$icon ";
+ $htmlAfter = isset($this->links[$linkName]["htmlAfter"]) ? $this->links[$linkName]["htmlAfter"] : "</div>";
+ $attributes = isset($this->links[$linkName]["attributes"]) ? $this->links[$linkName]["attributes"] : null;
+
+ $menu .= "$htmlBefore<a $title $attributes href='$href'>$text</a>$htmlAfter\n";
}
}
}
diff --git a/h-source/Library/Helper/Pages.php b/h-source/Library/Helper/Pages.php
index d8ac856..3826469 100755
--- a/h-source/Library/Helper/Pages.php
+++ b/h-source/Library/Helper/Pages.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -109,9 +109,16 @@ class Helper_Pages extends Helper_Html
public function html($pageNumber,$string = null) {
if (isset($string)) {
$strNumber = $string;
- $strClass = "class='itemListPage'";
+ if (strcmp($pageNumber,"1") === 0)
+ {
+ $strClass = "class='itemListPage previous_page'";
+ }
+ else
+ {
+ $strClass = "class='itemListPage next_page'";
+ }
} else {
- if ($pageNumber === $this->_currentPage)
+ if (strcmp($pageNumber,$this->_currentPage) === 0)
{
$strNumber = $pageNumber;
$strClass = "class='currentPage'";
@@ -123,7 +130,7 @@ class Helper_Pages extends Helper_Html
}
}
$this->viewArgs[$this->_variableArg] = $pageNumber;
- $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $viewStatus = Url::createUrl($this->viewArgs);
$href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus;
return $this->getATag($href,$strNumber,$strClass);
}
diff --git a/h-source/Library/Helper/Popup.php b/h-source/Library/Helper/Popup.php
index 4f67a5c..f3e6058 100755
--- a/h-source/Library/Helper/Popup.php
+++ b/h-source/Library/Helper/Popup.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,6 +25,15 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to create the popup menu
class Helper_Popup extends Helper_Html {
+ //the HTML of the popup
+ public static $popupHtml = array(
+ "before_loop" => "",
+ "top" => "<div class='row col-md-2 ext_menu_block ext_menu_block_[[field]]'><ul class='menuBlock'><li class='innerItem inner_item_[[field]]'>[[name]]<ul class='innerList'>\n",
+ "middle" => "</ul>\n</li>\n</ul>\n",
+ "bottom" => "</div>",
+ "after_loop" => "",
+ );
+
public $popupArray = array(); //array of popup objects (see popup.php)
public $url = null; //the url (controller/action) to link by means of the popup menù
// public $fieldArg = null; //the key of the viewArgs array to set to the field in the where clause
@@ -85,9 +94,17 @@ class Helper_Popup extends Helper_Html {
}
}
+ public function replacePlaceholders($string, $field, $name)
+ {
+ $string = str_replace("[[field]]",$field,$string);
+ $string = str_replace("[[name]]",$name,$string);
+
+ return $string;
+ }
+
//create the HTML of the popup
public function render() {
- $returnString = null;
+ $returnString = self::$popupHtml["before_loop"];
if ($this->checkViewArgs())
{
if (isset($this->viewArgs[$this->pageArg]))
@@ -104,11 +121,12 @@ class Helper_Popup extends Helper_Html {
$tempArg = $this->viewArgs[$field];
$this->legend[$field] = $tempArg;
- $returnString .= "<ul onMouseOver='DisplayTag(this,\"block\");' onMouseOut='DisplayTag(this,\"none\");' id='menuBlock'><li class='innerItem inner_item_$field'>".$popup->name."<ul class='innerList'>\n";
+ $returnString .= $this->replacePlaceholders(self::$popupHtml["top"],$field,$popup->name);
+
for ($i = 0; $i < count($popup->itemsValue); $i++)
{
$this->viewArgs[$field] = $popup->itemsValue[$i];
- $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $viewStatus = Url::createUrl($this->viewArgs);
$returnString .= "<li><a href='".Url::getRoot($this->url).$viewStatus."'>".$popup->itemsName[$i]."</a></li>\n";
//set the legend
@@ -118,24 +136,20 @@ class Helper_Popup extends Helper_Html {
}
}
$this->viewArgs[$field] = Params::$nullQueryValue;
- $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $viewStatus = Url::createUrl($this->viewArgs);
$returnString .= "<li><a href='".Url::getRoot($this->url).$viewStatus."'>".$this->allString."</a></li>\n";
- $returnString .= "</ul>\n</li>\n</ul>\n";
+ $returnString .= self::$popupHtml["middle"];
$this->viewArgs[$field] = $tempArg;
- }
- if ($this->printLegend)
- {
- $returnString .= "<div class='popup_legend'>\n";
- foreach ($this->popupArray as $field => $popup)
+
+ if ($this->printLegend)
{
$returnString .= "<div class='popup_legend_item popup_legend_item_$field'>".$this->legend[$field]."</div>";
}
- $returnString .= "</div>\n";
- }
- if (count($this->popupArray)>0) {
- $returnString .= "<script type=\"text/javascript\" src=\"http://".DOMAIN_NAME."/Public/Js/DisplayTag.js\"></script>\n";
+
+ $returnString .= self::$popupHtml["bottom"];
}
}
+ $returnString .= self::$popupHtml["after_loop"];
return $returnString;
}
diff --git a/h-source/Library/Hooks.php b/h-source/Library/Hooks.php
index b16b6d5..de46da8 100644
--- a/h-source/Library/Hooks.php
+++ b/h-source/Library/Hooks.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Html/Form.php b/h-source/Library/Html/Form.php
index 64c501f..91b2aa0 100644
--- a/h-source/Library/Html/Form.php
+++ b/h-source/Library/Html/Form.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -70,10 +70,10 @@ class Html_Form {
$a = $optionValue;
}
- if (strcmp($b,'optgroupOpen') === 0)
+ if (strcmp($optionValue,'optgroupOpen') === 0)
{
if ($flag === 1) $returnString .= "</optgroup>\n";
- $returnString .= "<optgroup label='" . $a . "'>\n";
+ $returnString .= "<optgroup label='" . $optionName . "'>\n";
$flag = 1;
}
else
@@ -83,7 +83,7 @@ class Html_Form {
}
}
if ($flag === 1) $returnString .= "</optgroup>\n";
- $returnString .= "</select>\n";
+ $returnString .= "</select>";
return $returnString;
}
@@ -97,7 +97,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- $returnString ="<input $attributes ".$idStr." $strClass type='text' name='" .$name. "' value = '$value' />\n";
+ $returnString ="<input $attributes ".$idStr." $strClass type='text' name='" .$name. "' value = '$value' />";
return $returnString;
}
@@ -110,7 +110,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- $returnString ="<input $attributes ".$idStr." $strClass type='file' name='" .$name. "' />\n";
+ $returnString ="<input $attributes ".$idStr." $strClass type='file' name='" .$name. "' />";
return $returnString;
}
@@ -126,7 +126,7 @@ class Html_Form {
$idStr = isset($idName) ? "id='".$idName."'" : null;
$str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null;
- return "<input $attributes ".$idStr." $strClass type='checkbox' name='".$name."' value='".$option."' $str />\n";
+ return "<input $attributes ".$idStr." $strClass type='checkbox' name='".$name."' value='".$option."' $str />";
}
//return the HTML of a hidden entry
@@ -137,7 +137,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- return "<input $attributes ".$idStr." $strClass type='hidden' name='" .$name. "' value = '$value'>\n";
+ return "<input $attributes ".$idStr." $strClass type='hidden' name='" .$name. "' value = '$value'>";
}
//return the HTML of a password entry
@@ -149,7 +149,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- return "<input $attributes ".$idStr." $strClass type='password' name='" .$name. "' value='$value' />\n";
+ return "<input $attributes ".$idStr." $strClass type='password' name='" .$name. "' value='$value' />";
}
//return the HTML of a textarea
@@ -161,7 +161,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- return "<textarea $attributes ".$idStr." $strClass name='" .$name. "'>$value</textarea>\n";
+ return "<textarea $attributes ".$idStr." $strClass name='" .$name. "'>$value</textarea>";
}
//return the HTML of a radio button
@@ -202,7 +202,7 @@ class Html_Form {
}
$str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null;
- $returnString .= "$before<input $attributes ".$idStr." $strClass type='radio' name='".$name."' value='".$optionValue."' $str />$after\n";
+ $returnString .= "$before<input $attributes ".$idStr." $strClass type='radio' name='".$name."' value='".$optionValue."' $str />$after";
}
return $returnString;
@@ -222,12 +222,13 @@ class Html_Form {
if (isset($image))
{
- $returnString = "<input $attributes $idStr $strClass type='image' src='".$image."' value='$value'>\n";
- $returnString .= "<input type='hidden' name='".$name."' value='$value'>\n";
+ $returnString = "<input $attributes $idStr $strClass type='image' src='".$image."' value='$value'>";
+ $returnString .= "<input type='hidden' name='".$name."' value='$value'>";
}
else
{
- $returnString ="<input $attributes $idStr $strClass type='submit' name='" .$name. "' value = '$value' />\n";
+ $returnString = '<button '.$idStr.' '.$attributes.' '.$strClass.' type="submit" name="' .$name. '">'.$value.'</button>';
+ $returnString .= "<input type='hidden' name='".$name."' value='$value'>";
}
return $returnString;
diff --git a/h-source/Library/Image/Gd/Captcha.php b/h-source/Library/Image/Gd/Captcha.php
index 1e8d706..d4285c2 100644
--- a/h-source/Library/Image/Gd/Captcha.php
+++ b/h-source/Library/Image/Gd/Captcha.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Image/Gd/Thumbnail.php b/h-source/Library/Image/Gd/Thumbnail.php
index 1fd7796..bb69891 100644
--- a/h-source/Library/Image/Gd/Thumbnail.php
+++ b/h-source/Library/Image/Gd/Thumbnail.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -47,9 +47,10 @@ class Image_Gd_Thumbnail
'resample' => 'yes',
'function' => 'none',
'outputFormat' => 'jpeg',
+ 'backgroundColor' => null, //must be hex color
);
- //set the $this->scaffold->params array
+ //set the $this->params array
if (is_array($params))
{
foreach ($params as $key => $value)
@@ -60,6 +61,46 @@ class Image_Gd_Thumbnail
$this->params = $defaultParams;
}
+ public function getSourceCoordinates($direction, $oldDim, $dim)
+ {
+ if ($direction === "x")
+ {
+ switch ($this->params['horizAlign'])
+ {
+ case 'left':
+ $coordSrc = 0;
+ break;
+ case 'right':
+ $coordSrc = floor(($oldDim-$dim));
+ break;
+ case 'center':
+ $coordSrc = floor(($oldDim-$dim)/2);
+ break;
+ default:
+ $coordSrc = $this->params['horizAlign'];
+ }
+ }
+ else
+ {
+ switch ($this->params['vertAlign'])
+ {
+ case 'top':
+ $coordSrc = 0;
+ break;
+ case 'bottom':
+ $coordSrc = floor(($oldDim-$dim));
+ break;
+ case 'center':
+ $coordSrc = floor(($oldDim-$dim)/2);
+ break;
+ default:
+ $coordSrc = $this->params['vertAlign'];
+ }
+ }
+
+ return $coordSrc;
+ }
+
//create the thumbnail
//$imageName: the name of the file inside $this->basePath
//$outputFile: the name of the output file
@@ -112,92 +153,172 @@ class Image_Gd_Thumbnail
$scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height);
}
- if ($scale < 1) {
-
- $xSrc = 0;
- $ySrc = 0;
-
- if ($this->params['cropImage'] === 'no')
+ $xSrc = 0; //x coordinate of source image
+ $ySrc = 0; //y coordinate of source image
+
+ $xDst = 0; //x coordinate of destination image
+ $yDst = 0; //y coordinate of destination image
+
+ if ($this->params['cropImage'] === 'no')
+ {
+ if ($scale <= 1)
{
- $newWidth = floor($scale*$width);
- $newHeight = floor($scale*$height);
+ $newWidth = $backWidth = floor($scale*$width);
+ $newHeight = $backHeight = floor($scale*$height);
+
+ if ($this->params['backgroundColor'])
+ {
+ $backWidth = $this->params['imgWidth'];
+ $backHeight = $this->params['imgHeight'];
+
+ if ($backWidth > $newWidth)
+ {
+ $xDst = floor(($backWidth-$newWidth)/2);
+ }
+ else if ($backHeight > $newHeight)
+ {
+ $yDst = floor(($backHeight-$newHeight)/2);
+ }
+ }
}
- else if ($this->params['cropImage'] === 'yes')
+ else
{
-
- $newWidth = $this->params['imgWidth'];
- $newHeight = $this->params['imgHeight'];
+ $newWidth = $backWidth = $width;
+ $newHeight = $backHeight = $height;
+
+ if ($this->params['backgroundColor'])
+ {
+ $backWidth = $this->params['imgWidth'];
+ $backHeight = $this->params['imgHeight'];
+
+ $xDst = floor(($backWidth-$newWidth)/2);
+ $yDst = floor(($backHeight-$newHeight)/2);
+ }
+ }
+ }
+ else if ($this->params['cropImage'] === 'yes')
+ {
+ if ($scale < 1)
+ {
+ $newWidth = $backWidth = $this->params['imgWidth'];
+ $newHeight = $backHeight = $this->params['imgHeight'];
$oldWidth = $width;
$oldHeight = $height;
$width = floor($newWidth/$scale);
$height = floor($newHeight/$scale);
- switch ($this->params['horizAlign'])
+ $xSrc = $this->getSourceCoordinates("x",$oldWidth,$width);
+ $ySrc = $this->getSourceCoordinates("y",$oldHeight,$height);
+
+ }
+ else
+ {
+ $oldWidth = $width;
+ $oldHeight = $height;
+
+ if ($width <= $this->params['imgWidth'] and $height <= $this->params['imgHeight'])
{
- case 'left':
- $xSrc = 0;
- break;
- case 'right':
- $xSrc = floor(($oldWidth-$width));
- break;
- case 'center':
- $xSrc = floor(($oldWidth-$width)/2);
- break;
- default:
- $xSrc = $this->params['horizAlign'];
+ $newWidth = $backWidth = $width;
+ $newHeight = $backHeight = $height;
+
+ if ($this->params['backgroundColor'])
+ {
+ $backWidth = $this->params['imgWidth'];
+ $backHeight = $this->params['imgHeight'];
+
+ $xDst = floor(($backWidth-$newWidth)/2);
+ $yDst = floor(($backHeight-$newHeight)/2);
+ }
+
}
-
- switch ($this->params['vertAlign'])
+ else if ($width <= $this->params['imgWidth'])
{
- case 'top':
- $ySrc = 0;
- break;
- case 'bottom':
- $ySrc = floor(($oldHeight-$height));
- break;
- case 'center':
- $ySrc = floor(($oldHeight-$height)/2);
- break;
- default:
- $ySrc = $this->params['vertAlign'];
+ $newWidth = $backWidth = $width;
+ $newHeight = $backHeight = $height = $this->params['imgHeight'];
+
+ $ySrc = $this->getSourceCoordinates("y",$oldHeight,$height);
+
+ if ($this->params['backgroundColor'])
+ {
+ $backWidth = $this->params['imgWidth'];
+ $backHeight = $this->params['imgHeight'];
+
+ $xDst = floor(($backWidth-$newWidth)/2);
+ }
+
+ }
+ else if ($height <= $this->params['imgHeight'])
+ {
+ $newHeight = $backHeight = $height;
+ $newWidth = $backWidth = $width = $this->params['imgWidth'];
+
+ $xSrc = $this->getSourceCoordinates("x",$oldWidth,$width);
+
+ if ($this->params['backgroundColor'])
+ {
+ $backWidth = $this->params['imgWidth'];
+ $backHeight = $this->params['imgHeight'];
+
+ $yDst = floor(($backHeight-$newHeight)/2);
+ }
+
}
-
}
+ }
- //temp image
- $tmpImg = imagecreatetruecolor($newWidth, $newHeight);
-
- if(strcmp($type,'png') === 0 or strcmp($type,'gif') === 0){
- imagealphablending($tmpImg, false);
- imagesavealpha($tmpImg, true);
- }
-
- if ($this->params['resample'] === 'yes')
+ //temp image
+ $tmpImg = imagecreatetruecolor($backWidth, $backHeight);
+
+ //set background color if backgroundColor param is not null (hex value)
+ if ($this->params['backgroundColor'])
+ {
+ if (strcmp($this->params['backgroundColor'],"transparent") !== 0)
{
- //copy and resample
- imagecopyresampled($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
+ $rgbColor = hex2rgb($this->params['backgroundColor']);
+
+ $backgroundC = imagecolorallocate($tmpImg,$rgbColor[0],$rgbColor[1],$rgbColor[2]);
}
else
{
- //copy and resize
- imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
+ $backgroundC = imagecolortransparent($tmpImg);
}
- imagedestroy($img);
- $img = $tmpImg;
-
- if (!function_exists($this->params['function'])) {
- throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$this->params['function']. '</b> does not exist');
+
+ imagefill($tmpImg, 0, 0, $backgroundC);
+ }
+
+ if(strcmp($type,'png') === 0 or strcmp($type,'gif') === 0){
+
+ if ($this->params['backgroundColor'])
+ {
+ imagealphablending($tmpImg, true);
+ }
+ else
+ {
+ imagealphablending($tmpImg, false);
}
+
+ imagesavealpha($tmpImg, true);
+ }
- $img = call_user_func($this->params['function'],$img);
+ if ($this->params['resample'] === 'yes')
+ {
+ //copy and resample
+ imagecopyresampled($tmpImg, $img, $xDst, $yDst, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
}
else
{
- if(strcmp($type,'png') === 0 or strcmp($type,'gif') === 0){
- imagealphablending($img, false);
- imagesavealpha($img, true);
- }
+ //copy and resize
+ imagecopyresized($tmpImg, $img, $xDst, $yDst, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
}
+ imagedestroy($img);
+ $img = $tmpImg;
+
+ if (!function_exists($this->params['function']))
+ {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$this->params['function']. '</b> does not exist');
+ }
+
+ $img = call_user_func($this->params['function'],$img);
}
if (!$img)
diff --git a/h-source/Library/Lang/En/DbCondStrings.php b/h-source/Library/Lang/En/DbCondStrings.php
index bfc5867..0c72d95 100644
--- a/h-source/Library/Lang/En/DbCondStrings.php
+++ b/h-source/Library/Lang/En/DbCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -23,12 +23,12 @@
if (!defined('EG')) die('Direct access not allowed!');
//error strings in the case database conditions are not satisfied
-class Lang_En_DbCondStrings {
+class Lang_En_DbCondStrings extends Lang_En_ValCondStrings {
//get the error string in the case that the value of the field $field is already present in the table $table
public function getNotUniqueString($field)
{
- return "<div class='alert'>The value of <i>". $field ."</i> is already present. Please choose a different value.</div>\n";
+ return "<div class='alert'>The value of <i>". getFieldLabel($field) ."</i> is already present. Please choose a different value.</div>\n".$this->getHiddenAlertElement($field);
}
}
diff --git a/h-source/Library/Lang/En/Formats/Fields.php b/h-source/Library/Lang/En/Formats/Fields.php
new file mode 100644
index 0000000..c91a1f0
--- /dev/null
+++ b/h-source/Library/Lang/En/Formats/Fields.php
@@ -0,0 +1,46 @@
+<?php
+
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_En_Formats_Fields
+{
+
+ public static function getLabel($fieldName)
+ {
+ if (strstr($fieldName,","))
+ {
+ $temp = explode(",",$fieldName);
+ for ($i=0; $i< count($temp); $i++)
+ {
+ $temp[$i] = self::getLabel($temp[$i]);
+ }
+ return implode (" and ",$temp);
+ }
+ else
+ {
+ $fieldName = str_replace("_"," ", $fieldName);
+ return ucfirst($fieldName);
+ }
+ }
+
+}
diff --git a/h-source/Library/Lang/En/Formats/From/Mysql.php b/h-source/Library/Lang/En/Formats/From/Mysql.php
new file mode 100644
index 0000000..5e4ea07
--- /dev/null
+++ b/h-source/Library/Lang/En/Formats/From/Mysql.php
@@ -0,0 +1,64 @@
+<?php
+
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_En_Formats_From_Mysql
+{
+
+ //convert the string from MySQL decimal format to En decimal format
+ public function decimal($string)
+ {
+ return $string;
+ }
+
+ //convert the string from MySQL float format to En float format
+ public function float($string)
+ {
+ return $string;
+ }
+
+ //convert the string from MySQL double format to En double format
+ public function double($string)
+ {
+ return $string;
+ }
+
+
+ //convert the string from MySQL date format to En date format
+ public function date($date)
+ {
+ if (preg_match('/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/',$date))
+ {
+ $dateArray = explode('-',$date);
+ return $dateArray[1]."-".$dateArray[2]."-".$dateArray[0];
+ }
+ return $date;
+ }
+
+ //convert the string from MySQL enum format to En enum format
+ public function enum($string)
+ {
+ return $string;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Formats/From/index.html b/h-source/Library/Lang/En/Formats/From/index.html
new file mode 100755
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/Library/Lang/En/Formats/From/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/Library/Lang/En/Formats/To/Mysql.php b/h-source/Library/Lang/En/Formats/To/Mysql.php
new file mode 100644
index 0000000..31daab8
--- /dev/null
+++ b/h-source/Library/Lang/En/Formats/To/Mysql.php
@@ -0,0 +1,62 @@
+<?php
+
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_En_Formats_To_Mysql
+{
+
+ //convert the string from En decimal format to MySQL decimal format
+ public function decimal($string)
+ {
+ return $string;
+ }
+
+ //convert the string from En float format to MySQL float format
+ public function float($string)
+ {
+ return $string;
+ }
+
+ //convert the string from En double format to MySQL double format
+ public function double($string)
+ {
+ return $string;
+ }
+
+ //convert the string from En date format to MySQL date format
+ public function date($date)
+ {
+ if (preg_match('/^[0-9]{2}\-[0-9]{2}\-[0-9]{4}$/',$date))
+ {
+ $dateArray = explode('-',$date);
+ return $dateArray[2]."-".$dateArray[0]."-".$dateArray[1];
+ }
+ return $date;
+ }
+
+ //convert the string from En enum format to MySQL enum format
+ public function enum($string)
+ {
+ return $string;
+ }
+} \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Formats/To/index.html b/h-source/Library/Lang/En/Formats/To/index.html
new file mode 100755
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/Library/Lang/En/Formats/To/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/Library/Lang/En/Formats/index.html b/h-source/Library/Lang/En/Formats/index.html
new file mode 100755
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/Library/Lang/En/Formats/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/Library/Lang/En/Generic.php b/h-source/Library/Lang/En/Generic.php
index c940949..8df27a9 100644
--- a/h-source/Library/Lang/En/Generic.php
+++ b/h-source/Library/Lang/En/Generic.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -50,6 +50,8 @@ class Lang_En_Generic
'filter' => 'filter',
'clear the filter' => 'clear the filter',
'Save' => 'Save',
+ 'Actions' => 'Actions',
+ '-- Select bulk action --' => '-- Select bulk action --',
);
public function gtext($string)
diff --git a/h-source/Library/Lang/En/ModelStrings.php b/h-source/Library/Lang/En/ModelStrings.php
index cf26b8f..266b1d2 100644
--- a/h-source/Library/Lang/En/ModelStrings.php
+++ b/h-source/Library/Lang/En/ModelStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -24,13 +24,19 @@ if (!defined('EG')) die('Direct access not allowed!');
class Lang_En_ModelStrings extends Lang_ResultStrings {
- public $string = array(
- "error" => "<div class='alert'>Query error: Contact the administrator!</div>\n",
- "executed" => "<div class='executed'>Operation executed!</div>\n",
- "associate" => "<div class='alert'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
- "no-id" => "<div class='alert'>Alert: record identifier not defined!</div>\n",
- "not-linked" => "<div class='alert'>The Item is not associated : you can't dissociate it</div>",
- "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>"
- );
+ public function __construct() {
+
+ $this->string = array(
+ "error" => "<div class='".Params::$errorStringClassName."'>Query error: Contact the administrator!</div>\n",
+ "executed" => "<div class='".Params::$infoStringClassName."'>Operation executed!</div>\n",
+ "associate" => "<div class='".Params::$errorStringClassName."'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
+ "no-id" => "<div class='".Params::$errorStringClassName."'>Alert: record identifier not defined!</div>\n",
+ "not-linked" => "<div class='".Params::$errorStringClassName."'>The Item is not associated : you can't dissociate it</div>",
+ "linked" => "<div class='".Params::$errorStringClassName."'>The Item is already associated: you can't associate it another time</div>",
+ "not-existing-fields" => "<div class='".Params::$errorStringClassName."'>Some fields in the query do not exist</div>\n",
+ "no-fields" => "<div class='".Params::$errorStringClassName."'>There are no values in the insert/update query</div>\n",
+ );
+
+ }
}
diff --git a/h-source/Library/Lang/En/UploadStrings.php b/h-source/Library/Lang/En/UploadStrings.php
index 61bc0c5..572f7bb 100644
--- a/h-source/Library/Lang/En/UploadStrings.php
+++ b/h-source/Library/Lang/En/UploadStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Lang/En/ValCondStrings.php b/h-source/Library/Lang/En/ValCondStrings.php
index 7f4e7ea..8742c23 100644
--- a/h-source/Library/Lang/En/ValCondStrings.php
+++ b/h-source/Library/Lang/En/ValCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -24,70 +24,106 @@ if (!defined('EG')) die('Direct access not allowed!');
class Lang_En_ValCondStrings {
+ //get the HTMl of the hidden alert notices
+ public function getHiddenAlertElement($element)
+ {
+ $html = "";
+ $t = explode(",",$element);
+
+ foreach ($t as $el)
+ {
+ $html .= "<div style='display:none;' rel='hidden_alert_notice'>$el</div>";
+ }
+
+ return $html;
+ }
+
//if the element is not defined
public function getNotDefinedResultString($element)
{
- return "<div class='alert'>". $element ." not defined!</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please fill the field <i>". getFieldLabel($element) ."</i>.</div>\n".$this->getHiddenAlertElement($element);
}
//if the elements are not equal
public function getNotEqualResultString($element)
{
- return "<div class='alert'>Different values: $element</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the fields <i>".getFieldLabel($element)."</i> are equal</div>\n".$this->getHiddenAlertElement($element);
}
//if the element is not alphabetic
public function getNotAlphabeticResultString($element)
{
- return "<div class='alert'>".$element." has to be alphabetic</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is alphabetic</div>\n".$this->getHiddenAlertElement($element);
}
//if the element is not alphanumeric
public function getNotAlphanumericResultString($element)
{
- return "<div class='alert'>".$element." has to be alphanumeric</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> has to be alphanumeric</div>\n".$this->getHiddenAlertElement($element);
}
//if the element is not a decimal digit
public function getNotDecimalDigitResultString($element)
{
- return "<div class='alert'>".$element." has to be a decimal digit</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is a decimal digit</div>\n".$this->getHiddenAlertElement($element);
}
-
- //if the element has the mail format
+
+ //if the element hasn't the mail format
public function getNotMailFormatResultString($element)
{
- return "<div class='alert'>".$element." doesn't seem an e-mail address</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is an e-mail address</div>\n".$this->getHiddenAlertElement($element);
}
- //if the element is numeric
+ //if the element is not numeric
public function getNotNumericResultString($element)
{
- return "<div class='alert'>".$element." has to be a numeric</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is numeric</div>\n".$this->getHiddenAlertElement($element);
+ }
+
+ //if the element is not an integer
+ public function getNotIntegerFormatResultString($element)
+ {
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is an integer number</div>\n".$this->getHiddenAlertElement($element);
+ }
+
+ //if the element is not a real date
+ public function getNotDateResultString($element)
+ {
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is a real date</div>\n".$this->getHiddenAlertElement($element);
}
//if the element (string) length exceeds the value of characters (defined by $maxLength)
public function getLengthExceedsResultString($element,$maxLength)
{
- return "<div class='alert'>".$element." exceeds the value of $maxLength characters</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> does not exceed the value of $maxLength characters</div>\n".$this->getHiddenAlertElement($element);
}
//if the element is one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsForbiddenStringResultString($element,$stringList)
{
- return "<div class='alert'>".$element." can't be one of the following strings: $stringList</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is not one of the following strings: $stringList</div>\n".$this->getHiddenAlertElement($element);
}
//if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsNotStringResultString($element,$stringList)
{
- return "<div class='alert'>".$element." has to be one of the following strings: $stringList</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is one of the following strings: $stringList</div>\n".$this->getHiddenAlertElement($element);
}
- //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
+ //if the element does not match the reg expr indicated by $regExp
public function getDoesntMatchResultString($element,$regExp)
{
- return "<div class='alert'>".$element." has to match the following regular expression: $regExp</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> matchs the following regular expression: $regExp</div>\n".$this->getHiddenAlertElement($element);
+ }
+
+ //if the element is not decimal
+ public function getNotDecimalResultString($element, $format)
+ {
+ $t = explode(",",$format);
+ $M = (int)$t[0];
+ $D = (int)$t[1];
+ $I = $M - $D;
+ return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is a decimal number (maximum number of integer digits:$I, maximum number of decimal digits: $D)</div>\n".$this->getHiddenAlertElement($element);
}
}
diff --git a/h-source/Library/Lang/Eng/DbCondStrings.php b/h-source/Library/Lang/Eng/DbCondStrings.php
index e4196b6..cd625af 100644
--- a/h-source/Library/Lang/Eng/DbCondStrings.php
+++ b/h-source/Library/Lang/Eng/DbCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Lang/Eng/Generic.php b/h-source/Library/Lang/Eng/Generic.php
index bb0ab99..29947fd 100644
--- a/h-source/Library/Lang/Eng/Generic.php
+++ b/h-source/Library/Lang/Eng/Generic.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -33,6 +33,25 @@ class Lang_Eng_Generic
'move up' => 'move up',
'move down' => 'move down',
'associate' => 'associate',
+ 'up' => 'su',
+ 'down' => 'down',
+ 'link' => 'link',
+ 'del' => 'del',
+ 'back' => 'back',
+ 'Back' => 'Back',
+ 'add a new record' => 'add a new record',
+ 'Add' => 'Add',
+ 'back to the Panel' => 'back to the Panel',
+ 'Panel' => 'Panel',
+ 'previous' => 'previous',
+ 'next' => 'next',
+ 'All' => 'All',
+ 'pages' => 'pages',
+ 'filter' => 'filter',
+ 'clear the filter' => 'clear the filter',
+ 'Save' => 'Save',
+ 'Actions' => 'Actions',
+ '-- Select bulk action --' => '-- Select bulk action --',
);
public function gtext($string)
diff --git a/h-source/Library/Lang/Eng/ModelStrings.php b/h-source/Library/Lang/Eng/ModelStrings.php
index fa741a2..20b8173 100644
--- a/h-source/Library/Lang/Eng/ModelStrings.php
+++ b/h-source/Library/Lang/Eng/ModelStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -30,7 +30,8 @@ class Lang_Eng_ModelStrings extends Lang_ResultStrings {
"associate" => "<div class='alert'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
"no-id" => "<div class='alert'>Alert: record identifier not defined!</div>\n",
"not-linked" => "<div class='alert'>The Item is not associated : you can't dissociate it</div>",
- "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>"
+ "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>",
+ "not-existing-fields" => "<div class='alert'>Some fields in the query do not exist</div>\n",
);
}
diff --git a/h-source/Library/Lang/Eng/UploadStrings.php b/h-source/Library/Lang/Eng/UploadStrings.php
index 2ae4c9b..ca0332b 100644
--- a/h-source/Library/Lang/Eng/UploadStrings.php
+++ b/h-source/Library/Lang/Eng/UploadStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Lang/Eng/ValCondStrings.php b/h-source/Library/Lang/Eng/ValCondStrings.php
index 42e70d8..f5d40a2 100644
--- a/h-source/Library/Lang/Eng/ValCondStrings.php
+++ b/h-source/Library/Lang/Eng/ValCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -27,67 +27,89 @@ class Lang_Eng_ValCondStrings {
//if the element is not defined
public function getNotDefinedResultString($element)
{
- return "<div class='alert'>". $element ." not defined!</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>". $element ." not defined!</div>\n";
}
//if the elements are not equal
public function getNotEqualResultString($element)
{
- return "<div class='alert'>Different values: $element</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>Different values: $element</div>\n";
}
//if the element is not alphabetic
public function getNotAlphabeticResultString($element)
{
- return "<div class='alert'>".$element." has to be alphabetic</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be alphabetic</div>\n";
}
//if the element is not alphanumeric
public function getNotAlphanumericResultString($element)
{
- return "<div class='alert'>".$element." has to be alphanumeric</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be alphanumeric</div>\n";
}
//if the element is not a decimal digit
public function getNotDecimalDigitResultString($element)
{
- return "<div class='alert'>".$element." has to be a decimal digit</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be a decimal digit</div>\n";
}
- //if the element has the mail format
+ //if the element hasn't the mail format
public function getNotMailFormatResultString($element)
{
- return "<div class='alert'>".$element." doesn't seem an e-mail address</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." doesn't seem an e-mail address</div>\n";
}
- //if the element is numeric
+ //if the element is not numeric
public function getNotNumericResultString($element)
{
- return "<div class='alert'>".$element." has to be a numeric</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be a numeric</div>\n";
+ }
+
+ //if the element is not an integer
+ public function getNotIntegerFormatResultString($element)
+ {
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be an integer</div>\n";
+ }
+
+ //if the element is not a real date
+ public function getNotDateResultString($element)
+ {
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be a real date (YYYY-MM-DD)</div>\n";
}
//if the element (string) length exceeds the value of characters (defined by $maxLength)
public function getLengthExceedsResultString($element,$maxLength)
{
- return "<div class='alert'>".$element." exceeds the value of $maxLength characters</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." exceeds the value of $maxLength characters</div>\n";
}
//if the element is one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsForbiddenStringResultString($element,$stringList)
{
- return "<div class='alert'>".$element." can't be one of the following strings: $stringList</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." can't be one of the following strings: $stringList</div>\n";
}
//if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsNotStringResultString($element,$stringList)
{
- return "<div class='alert'>".$element." has to be one of the following strings: $stringList</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to be one of the following strings: $stringList</div>\n";
}
- //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
+ //if the element does not match the reg expr indicated by $regExp
public function getDoesntMatchResultString($element,$regExp)
{
- return "<div class='alert'>".$element." has to match the following regular expression: $regExp</div>\n";
+ return "<div class='".Params::$errorStringClassName."'>".$element." has to match the following regular expression: $regExp</div>\n";
+ }
+
+ //if the element is not decimal
+ public function getNotDecimalResultString($element, $format)
+ {
+ $t = explode(",",$format);
+ $M = (int)$t[0];
+ $D = (int)$t[1];
+ $I = $M - $D;
+ return "<div class='".Params::$errorStringClassName."'><i>".$element."</i> has to be a decimal number (maximum number of integer digits:$I, maximum number of decimal digits: $D)</div>\n";
}
}
diff --git a/h-source/Library/Lang/ResultStrings.php b/h-source/Library/Lang/ResultStrings.php
index 2181b90..6f84090 100644
--- a/h-source/Library/Lang/ResultStrings.php
+++ b/h-source/Library/Lang/ResultStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/ModAbstract.php b/h-source/Library/ModAbstract.php
index f576c10..de4f68f 100644
--- a/h-source/Library/ModAbstract.php
+++ b/h-source/Library/ModAbstract.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Model/Base.php b/h-source/Library/Model/Base.php
index cdd1843..67bd91c 100755
--- a/h-source/Library/Model/Base.php
+++ b/h-source/Library/Model/Base.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,10 +25,12 @@ if (!defined('EG')) die('Direct access not allowed!');
abstract class Model_Base
{
+ public $foreignKeys = array(); //list of foreign keys
+
public $fields = ''; //the fields that have to be manipulated by the update and insert query
public $values = array(); //the values that corresponding to the $this->fields fields
public $form = null; //reference to a Form_Form object
- public $formStruct = null; //the form structure
+ public $formStruct = array("entries" => array()); //the form structure
public $submitName = null; //the current submitName (from the form)
public $identifierName = 'identifier';
@@ -37,15 +39,18 @@ abstract class Model_Base
public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false'
public $queryResult = false; //the result of the query
- //conditions that have to be satisfied before applying the query
- //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
+ //conditions that the $_POST array has to satisfy (strong)
public $strongConditions = array();
- //conditions that have to be satisfied before applying the query
- //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
- //do not return error if a value is equal to '' or null
+ //conditions that the $_POST array has to satisfy (soft)
public $softConditions = array();
+ //conditions that $this->values has to satisfy (strong)
+ public $valuesConditions = array();
+
+ //array where the conditions are temporary saved when the saveConditions is called
+ public $backupConditions = array();
+
//conditions that have to be satisfied before applying the query
//check that the new values inserted satisfy some conditions
//Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo'
@@ -57,13 +62,17 @@ abstract class Model_Base
public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...)
+ public $backupSelect = array(); //where the status of the where clause is stored when the save() method is called
public $select = null; //fields that have to be selected in select queries
+ public $sWhere = null; //string: free where clause
public $where = array(); //associative array containing all the where clauses ($field => $value)
//group by, order by and limit clauses
public $groupBy = null;
public $orderBy = null;
public $limit = null;
+ public $convert = false; //It can be tru or false. If true the extracted values are converted from MySQL format to $_lang format
+
public $from = null; //from clause of the select queries
public $on = array(); //on array
public $using = array(); //using array
@@ -104,6 +113,9 @@ abstract class Model_Base
protected $_resultString; //reference to the class containing all the result strings of the db queries
protected $_dbCondString; //reference to the class containing all the result strings of the database conditions
+ protected $_conversionToDbObject = null; //reference to the class to convert the values from current lang formats to MySQL formats
+ protected $_conversionFromDbObject = null; //reference to the class to convert the values from MySQL formats to current lang formats
+
protected $_backupFields = ''; //field saved after the delFields method has been applied
protected $_backupValues = array(); //values saved after the delFields method has been applied
protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method
@@ -121,6 +133,7 @@ abstract class Model_Base
protected $_arrayStrongCheck; //Array_Validate_Strong object
protected $_arraySoftCheck; //Array_Validate_Soft object
+ protected $_arrayValuesCheck; //Array_Validate_Values object
public $db; //reference to the database layer class
protected $_lang = null; //language of notices
@@ -138,6 +151,7 @@ abstract class Model_Base
//initialize the validate objects
$this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang);
$this->_arraySoftCheck = new Array_Validate_Soft($this->_lang);
+ $this->_arrayValuesCheck = new Array_Validate_Values($this->_lang);
$this->identifierName = $this->_idFieldsArray[0];
@@ -157,6 +171,24 @@ abstract class Model_Base
}
$this->_dbCondString = new $dbCondStringClass();
+ //create the references of the classes to convert to e from MySQL formats
+ if (DATABASE_TYPE === "Mysqli" or DATABASE_TYPE === "Mysql")
+ {
+ $_conversionToDbObject = 'Lang_'.$this->_lang.'_Formats_To_Mysql';
+ if (!class_exists($_conversionToDbObject))
+ {
+ $_conversionToDbObject = 'Lang_En_Formats_To_Mysql';
+ }
+ $this->_conversionToDbObject = new $_conversionToDbObject();
+
+ $_conversionFromDbObject = 'Lang_'.$this->_lang.'_Formats_From_Mysql';
+ if (!class_exists($_conversionFromDbObject))
+ {
+ $_conversionFromDbObject = 'Lang_En_Formats_From_Mysql';
+ }
+ $this->_conversionFromDbObject = new $_conversionFromDbObject();
+ }
+
//instantiate the database class
$this->db = Factory_Db::getInstance(DATABASE_TYPE);
@@ -173,12 +205,22 @@ abstract class Model_Base
}
//sanitize all the $values property
- public function sanitize()
+ public function sanitize($function = "sanitizeDb")
{
+ if (!function_exists($function)) {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$function.'</b> does not exists.');
+ }
+
$keys = implode(',',array_keys($this->values));
- $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb');
+ $this->values = $this->arrayExt->subset($this->values,$keys,$function);
}
+ //return the name of the primary key
+ public function getPrimaryKey()
+ {
+ return $this->_idFields;
+ }
+
//change a resulting string from a db query
public function setString($key,$value)
{
@@ -326,7 +368,129 @@ abstract class Model_Base
}
-
+ //converts values from MySQl to $_lang format when filling the form with values coming from the DB
+ public function convertFromMysql($values)
+ {
+ if (Params::$automaticConversionFromDbFormat)
+ {
+ if (isset($this->_conversionFromDbObject))
+ {
+ //get all types as associative array
+ $types = $this->db->getTypes($this->_tables, "*", false, true);
+
+ if ($types)
+ {
+ $values = $this->convertFromMysqlT($types, $values, $this->db->getEnumTypes());
+ }
+ }
+ }
+
+ return $values;
+ }
+
+ //convert an array associaive from MySQL format to $_lang format
+ //$values: array associative to convert
+ //$types: types of the elements of the associative array
+ //$excludeTypes: array of type whose conversion has to be avoided
+ public function convertFromMysqlT($types, $values, $excludeTypes = array())
+ {
+ foreach ($values as $field => $value)
+ {
+ if (array_key_exists($field, $types))
+ {
+ if (!in_array(strtolower($types[$field]),$excludeTypes))
+ {
+ if (method_exists($this->_conversionFromDbObject,strtolower($types[$field])))
+ {
+ $values[$field] = call_user_func(array($this->_conversionFromDbObject, strtolower($types[$field])), $values[$field]);
+ }
+ }
+ }
+ }
+ return $values;
+ }
+
+ //set the default values taking it from DB or from type definition
+ public function setDefaultFormValues($fields)
+ {
+ $returnDefaultValues = array();
+
+ if (Params::$automaticallySetFormDefaultValues)
+ {
+ if (isset($this->_conversionFromDbObject))
+ {
+ //get all types as associative array
+ $types = $this->db->getTypes($this->_tables, "*", true, true);
+
+ //get all default values as associative array
+ $defaultValues = $this->db->getDefaultValues($this->_tables, "*", false, true);
+
+ $fieldsArray = explode(",",$fields);
+
+ foreach ($fieldsArray as $field)
+ {
+ if (array_key_exists($field,$defaultValues))
+ {
+ if (preg_match('/^('.implode("|",$this->db->getCharTypes()).')/i',$types[$field],$matches) or preg_match('/^('.implode("|",$this->db->getTextTypes()).')/i',$types[$field],$matches))
+ {
+ if (strcmp($defaultValues[$field],"") !== 0)
+ {
+ $returnDefaultValues[$field] = $defaultValues[$field];
+ }
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getIntegerTypes()).')/i',$types[$field],$matches) or preg_match('/^('.implode("|",$this->db->getFloatTypes()).')$/i',$types[$field],$matches) or preg_match('/^('.implode("|",$this->db->getDecimalTypes()).')/i',$types[$field],$matches))
+ {
+ if (strcmp($defaultValues[$field],"") !== 0)
+ {
+ $returnDefaultValues[$field] = method_exists($this->_conversionFromDbObject,strtolower($matches[1])) ? call_user_func(array($this->_conversionFromDbObject, strtolower($matches[1])), $defaultValues[$field]) : $defaultValues[$field];
+ }
+ else
+ {
+ $returnDefaultValues[$field] = 0;
+ }
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getDateTypes()).')$/i',$types[$field],$matches))
+ {
+ $defDate = Params::$useCurrentDateAsDefaultDate ? date("Y-m-d") : "";
+ if (strcmp($defaultValues[$field],"") !== 0)
+ {
+ $defDate = $defaultValues[$field];
+ }
+
+ if (method_exists($this->_conversionFromDbObject,strtolower($types[$field])))
+ {
+ $returnDefaultValues[$field] = call_user_func(array($this->_conversionFromDbObject, strtolower($types[$field])), $defDate);
+ }
+ else
+ {
+ $returnDefaultValues[$field] = $defDate;
+ }
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)$/i',$types[$field],$matches))
+ {
+ if (strcmp($defaultValues[$field],"") !== 0)
+ {
+ $returnDefaultValues[$field] = $defaultValues[$field];
+ }
+ else
+ {
+ $temp = array();
+ $strings = explode(",",$matches[2]);
+ for ($i=0;$i<count($strings);$i++)
+ {
+ $returnDefaultValues[$field] = trim($strings[$i],"'\"");
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return $returnDefaultValues;
+ }
+
//return the values, taken from the $_POST array, to be inserted inside the forms
//$queryType: insert or update
//$func: sanitize function to apply upon each value
@@ -369,14 +533,11 @@ abstract class Model_Base
{
$recordArray = $this->selectId($ident);
+ $recordArray = $this->convertFromMysql($recordArray);
+
$fieldsArray = explode(',',$this->fields);
-
- $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb);
-// foreach ($fieldsArray as $field)
-// {
-// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : '';
-// }
+ $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb);
$values[$idName] = $ident;
@@ -408,8 +569,16 @@ abstract class Model_Base
}
else if ($queryType === 'insert')
{
+ //set the default values taking it from DB or from type definition
+ $tempArray = $this->setDefaultFormValues($this->fields);
- $tempArray = is_array($defaultValues) ? $defaultValues : array();
+ if (is_array($defaultValues))
+ {
+ foreach ($defaultValues as $field => $value)
+ {
+ $tempArray[$field] = $value;
+ }
+ }
$values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost);
@@ -528,6 +697,8 @@ abstract class Model_Base
//if $whereClause is set then use $whereClause as where clause of the update query
public function update($id = null, $whereClause = null)
{
+ $this->notice = null;
+
if (!is_array($this->supplUpdateValues))
{
throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplUpdateValues</b> property has to be an array.');
@@ -535,50 +706,70 @@ abstract class Model_Base
$el = $this->setSupplValues('update');
$this->queryResult = false;
- if (isset($whereClause))
- {
- $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause);
- $this->setNotice($result);
- return $result;
- }
- else
+ if (count($this->values) > 0)
{
- if (isset($id))
+ if (isset($whereClause))
{
- $where = $this->_idFieldsArray[0].'='.(int)($id);
- $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where);
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause);
$this->setNotice($result);
return $result;
}
else
{
- $this->notice = $this->_resultString->getString('no-id');
- $this->result = false;
- $this->identifierValue = null;
- return false;
+ if (isset($id))
+ {
+ $where = $this->_idFieldsArray[0].'='.(int)($id);
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ $this->notice .= $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
}
}
+ else
+ {
+ $this->notice .= $this->_resultString->getString('no-fields');
+ $this->result = true;
+ $this->queryResult = true;
+ return false;
+ }
}
//method to call the insert query (overriding of the base_db del method)
public function insert() {
-
+ $this->notice = null;
$this->queryResult = false;
if (!is_array($this->supplInsertValues)) {
throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplInsertValues</b> property has to be an array.');
}
- if (isset($this->_idOrder))
+ if (count($this->values) > 0)
{
- $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder);
- $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1;
- }
-
- $el = $this->setSupplValues('insert');
+ if (isset($this->_idOrder))
+ {
+ $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder);
+ $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1;
+ }
+
+ $el = $this->setSupplValues('insert');
- $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]);
- $this->setNotice($result);
- return $result;
+ $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ $this->notice .= $this->_resultString->getString('no-fields');
+ $this->result = true;
+ $this->queryResult = true;
+ return false;
+ }
}
//method to call the delete query (overriding of the base_db del method)
@@ -600,7 +791,7 @@ abstract class Model_Base
$this->setNotice($result);
return $result;
} else {
- $this->notice = $this->_resultString->getString('no-id');
+ $this->notice .= $this->_resultString->getString('no-id');
$this->result = false;
$this->identifierValue = null;
return false;
@@ -627,6 +818,8 @@ abstract class Model_Base
//where clause
public function move($id,$par = 'up')
{
+ $this->notice = null;
+
$this->queryResult = false;
if (isset($id))
{
@@ -662,7 +855,7 @@ abstract class Model_Base
}
else
{
- $this->notice = $this->_resultString->getString('no-id');
+ $this->notice .= $this->_resultString->getString('no-id');
$this->result = false;
$this->identifierValue = null;
return false;
@@ -672,11 +865,11 @@ abstract class Model_Base
public function setNotice($result) {
if ($result) {
- $this->notice = $this->_resultString->getString('executed');
+ $this->notice .= $this->_resultString->getString('executed');
$this->result = true;
$this->queryResult = true;
} else {
- $this->notice = $this->_resultString->getString('error');
+ $this->notice .= $this->_resultString->getString('error');
$this->result = false;
$this->queryResult = false;
}
@@ -798,39 +991,107 @@ abstract class Model_Base
}
//add a condition to the strongCondition array
+ public function addDatabaseCondition($queryType,$condition,$field)
+ {
+ if ($queryType === "both")
+ {
+ $this->addChooseCondition($this->databaseConditions,"insert",$condition,$field);
+ $this->addChooseCondition($this->databaseConditions,"update",$condition."Compl",$field);
+ }
+ else
+ {
+ $this->addChooseCondition($this->databaseConditions,$queryType,$condition,$field);
+ }
+ }
+
+ //add a condition to the strongCondition array
public function addStrongCondition($queryType,$condition,$field)
{
$this->addChooseCondition($this->strongConditions,$queryType,$condition,$field);
}
- //add a condition to the strongCondition array
+ //add a condition to the softCondition array
public function addSoftCondition($queryType,$condition,$field)
{
$this->addChooseCondition($this->softConditions,$queryType,$condition,$field);
}
+ //add a condition to the valuesCondition array
+ public function addValuesCondition($queryType,$condition,$field)
+ {
+ $this->addChooseCondition($this->valuesConditions,$queryType,$condition,$field);
+ }
+
+ //return the correct conditions array
+ //$strength: strong,soft,values
+ public function &getConditions($strength)
+ {
+ if ($strength === 'strong')
+ {
+ return $this->strongConditions;
+ }
+ else if ($strength === 'values')
+ {
+ return $this->valuesConditions;
+ }
+ else if ($strength === 'database')
+ {
+ return $this->databaseConditions;
+ }
+
+ return $this->softConditions;
+ }
+
+ //save the conditions
+ //$strength: strong,soft,values
+ public function saveConditions($strength)
+ {
+ $this->backupConditions[$strength] = $this->getConditions($strength);
+ }
+
+ //restore the conditions taking them from $this->backupConditions
+ public function restoreConditions($strength)
+ {
+ $c = &$this->getConditions($strength);
+
+ if (isset($this->backupConditions[$strength]))
+ {
+ $c = $this->backupConditions[$strength];
+ }
+ }
+
+ //clear the conditions
+ //$strength: strong,soft,values
+ public function clearConditions($strength)
+ {
+ $c = &$this->getConditions($strength);
+ $c = array();
+ }
+
//method to apply the validate conditions listed in the $this->strongConditions associative array
//$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array)
- //$strength: 'strong' or 'soft'
+ //$strength: strong,soft,values
public function applyValidateConditions($queryType,$strength = 'strong')
{
+ $arrayToCheck = $_POST;
if ($strength === 'strong')
{
$validateObj = $this->_arrayStrongCheck;
$conditions = $this->strongConditions;
$errString = 'strongConditions';
}
+ else if ($strength === 'values')
+ {
+ $validateObj = $this->_arrayValuesCheck;
+ $conditions = $this->valuesConditions;
+ $errString = 'valuesConditions';
+ $arrayToCheck = $this->values;
+ }
else
{
$validateObj = $this->_arraySoftCheck;
$conditions = $this->softConditions;
$errString = 'softConditions';
-
-// if (Params::$nullQueryValue !== false)
-// {
-// $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
-// $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
-// }
}
if (array_key_exists($queryType,$conditions))
@@ -856,7 +1117,7 @@ abstract class Model_Base
$values = $temp[0];
}
- $baseArgs = array($_POST,$values);
+ $baseArgs = array($arrayToCheck,$values);
if (strstr($key,'|'))
{
@@ -889,7 +1150,6 @@ abstract class Model_Base
}
}
-
//apply, in sequence, the strong,soft and database conditions
//$methodName: insert,update
//$id: the id of the record. It is necessary for database conditions
@@ -1046,6 +1306,13 @@ abstract class Model_Base
return $this;
}
+ //set the $convert property and return the current object
+ public function convert($convert = true)
+ {
+ $this->convert = $convert;
+ return $this;
+ }
+
//set the $from property and return the current object
public function from($tables = null)
{
@@ -1104,6 +1371,12 @@ abstract class Model_Base
return $this;
}
+ public function sWhere($sWhere)
+ {
+ $this->sWhere = $sWhere;
+ return $this;
+ }
+
//set the $groupBy property and return the current object
public function groupBy($groupBy = null)
{
@@ -1138,6 +1411,7 @@ abstract class Model_Base
{
$this->select = null;
$this->where = array();
+ $this->sWhere = null;
$this->groupBy = null;
$this->orderBy = null;
$this->limit = null;
@@ -1146,9 +1420,84 @@ abstract class Model_Base
$this->using = array();
$this->join = array();
$this->toList = false;
+ $this->convert = false;
return $this;
}
+ //save all the clauses of the select query
+ public function save()
+ {
+ $this->backupSelect["select"] = $this->select;
+ $this->backupSelect["where"] = $this->where;
+ $this->backupSelect["sWhere"] = $this->sWhere;
+ $this->backupSelect["groupBy"] = $this->groupBy;
+ $this->backupSelect["orderBy"] = $this->orderBy;
+ $this->backupSelect["limit"] = $this->limit;
+ $this->backupSelect["from"] = $this->from;
+ $this->backupSelect["on"] = $this->on;
+ $this->backupSelect["using"] = $this->using;
+ $this->backupSelect["join"] = $this->join;
+ $this->backupSelect["toList"] = $this->toList;
+ $this->backupSelect["convert"] = $this->convert;
+ return $this;
+ }
+
+ //restored all the saved clauses of the select query
+ public function restore()
+ {
+ if (count($this->backupSelect) > 0)
+ {
+ $this->select = $this->backupSelect["select"];
+ $this->where = $this->backupSelect["where"];
+ $this->sWhere = $this->backupSelect["sWhere"];
+ $this->groupBy = $this->backupSelect["groupBy"];
+ $this->orderBy = $this->backupSelect["orderBy"];
+ $this->limit = $this->backupSelect["limit"];
+ $this->from = $this->backupSelect["from"];
+ $this->on = $this->backupSelect["on"];
+ $this->using = $this->backupSelect["using"];
+ $this->join = $this->backupSelect["join"];
+ $this->toList = $this->backupSelect["toList"];
+ $this->convert = $this->backupSelect["convert"];
+ }
+ return $this;
+ }
+
+ public function getSelectArrayFromEnumField($fieldName)
+ {
+ $types = $this->db->getTypes($this->_tables, $fieldName, true, true);
+
+ if ($types)
+ {
+ if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)/i',$types[$fieldName],$matches))
+ {
+ return $this->getSelectArrayFromEnumValues($matches[1], $matches[2]);
+ }
+ }
+ }
+
+ public function getSelectArrayFromEnumValues($enumFunc, $enumValues)
+ {
+ $enumFunc = strtolower($enumFunc);
+
+ $temp = array();
+ $strings = explode(",",$enumValues);
+ for ($i=0;$i<count($strings);$i++)
+ {
+ $val = trim($strings[$i],"'\"");
+
+ if (isset($this->_conversionFromDbObject) and method_exists($this->_conversionFromDbObject, $enumFunc))
+ {
+ $temp[$val] = call_user_func(array($this->_conversionFromDbObject, $enumFunc), $val);
+ }
+ else
+ {
+ $temp[$val] = $val;
+ }
+ }
+ return $temp;
+ }
+
//initialize and populate the ::form property (reference to a Form_Form object)
public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null)
{
@@ -1162,6 +1511,67 @@ abstract class Model_Base
$this->form = new Form_Form($action,$submit,$method,$enctype);
+ //get the entries from DB definition
+ $types = $this->db->getTypes($this->_tables, "*", true, true);
+
+ foreach ($types as $field => $type)
+ {
+ $entryType = "InputText";
+ $classType = "varchar_input";
+ $options = null;
+
+ if (strcmp($field, $this->_idFieldsArray[0]) === 0)
+ {
+ $entryType = "Hidden";
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getTextTypes()).')/i',$type,$matches))
+ {
+ $entryType = "Textarea";
+ $classType = "text_input";
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getDateTypes()).')/i',$type,$matches))
+ {
+ $classType = "date_input";
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)/i',$type,$matches))
+ {
+ $entryType = "Select";
+ $classType = "select_input";
+ $options = $this->getSelectArrayFromEnumValues($matches[1], $matches[2]);
+ }
+
+ if (array_key_exists($field,$entries))
+ {
+ if (!array_key_exists("type",$entries[$field]))
+ {
+ $entries[$field]["type"] = $entryType;
+ }
+
+ if ($entryType === "Select" and !array_key_exists("options",$entries[$field]))
+ {
+ $entries[$field]["options"] = $options;
+ $entries[$field]["reverse"] = "yes";
+ }
+
+ if (!array_key_exists("className",$entries[$field]))
+ {
+ $entries[$field]["className"] = $classType." ".Form_Form::$defaultEntryAttributes['className'];
+ }
+ }
+ else
+ {
+ $entries[$field]["type"] = $entryType;
+
+ if ($entryType === "Select")
+ {
+ $entries[$field]["options"] = $options;
+ $entries[$field]["reverse"] = "yes";
+ }
+
+ $entries[$field]["className"] = $classType." ".Form_Form::$defaultEntryAttributes['className'];
+ }
+ }
+
if (isset($entries))
{
$this->form->setEntries($entries);
diff --git a/h-source/Library/Model/Map.php b/h-source/Library/Model/Map.php
index 7a093e1..e6d9f6b 100755
--- a/h-source/Library/Model/Map.php
+++ b/h-source/Library/Model/Map.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Model/Tree.php b/h-source/Library/Model/Tree.php
index f7f95ea..849fd7d 100755
--- a/h-source/Library/Model/Tree.php
+++ b/h-source/Library/Model/Tree.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -28,54 +28,54 @@ class Model_Tree extends Model_Base {
parent::__construct();
}
- //method to create the first part of where clause
- //$index: the index of $this->_tablesArray
- public function createTreeWhere($index) {
- if (!empty($this->on))
- {
- return $this->on;
- }
- else
- {
- $whereArray = array();
- for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
- {
- $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1];
- }
- $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null;
- return $whereString;
- }
- }
-
- //create the list of tables of the select query
- //$index: the index of $this->_tablesArray
- public function createTablesList($index) {
- if (isset($this->from))
- {
- return $this->from;
- }
- else
- {
- $tablesString = null;
- for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
- {
- $tablesString .= $this->_tablesArray[$i] . ',';
- }
- $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1];
- return $tablesString;
- }
- }
+// //method to create the first part of where clause
+// //$index: the index of $this->_tablesArray
+// public function createTreeWhere($index) {
+// if (!empty($this->on))
+// {
+// return $this->on;
+// }
+// else
+// {
+// $whereArray = array();
+// for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+// {
+// $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1];
+// }
+// $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null;
+// return $whereString;
+// }
+// }
- //method to create the list of fields of the select query
- public function createFieldsList($index) {
- $fieldsString = null;
- for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
- {
- $fieldsString .= $this->_tablesArray[$i] . '.*,';
- }
- $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*';
- return $fieldsString;
- }
+// //create the list of tables of the select query
+// //$index: the index of $this->_tablesArray
+// public function createTablesList($index) {
+// if (isset($this->from))
+// {
+// return $this->from;
+// }
+// else
+// {
+// $tablesString = null;
+// for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+// {
+// $tablesString .= $this->_tablesArray[$i] . ',';
+// }
+// $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1];
+// return $tablesString;
+// }
+// }
+//
+// //method to create the list of fields of the select query
+// public function createFieldsList($index) {
+// $fieldsString = null;
+// for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+// {
+// $fieldsString .= $this->_tablesArray[$i] . '.*,';
+// }
+// $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*';
+// return $fieldsString;
+// }
//method to create the where clause and the list of tables and fields of the select query
@@ -84,32 +84,51 @@ class Model_Tree extends Model_Base {
//return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields)
public function treeQueryElements($tableName,$choice = 'all')
{
- $index = array_search($tableName,$this->_tablesArray);
- $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense
- $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName;
- $where = ($choice === 'all') ? $this->createTreeWhere($index) : null;
- $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*';
-
- $wherePlus = $this->createWhereClause();
-
- if (empty($this->on))
+// $index = array_search($tableName,$this->_tablesArray);
+// $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense
+// $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName;
+// $where = ($choice === 'all') ? $this->createTreeWhere($index) : null;
+// $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*';
+//
+// $wherePlus = $this->createWhereClause();
+//
+// if (empty($this->on))
+// {
+// $on = array();
+//
+// if (isset($where) and isset($wherePlus))
+// {
+// $where .= ' AND ' . $wherePlus;
+// }
+// else if (!isset($where) and isset($wherePlus))
+// {
+// $where .= $wherePlus;
+// }
+// }
+// else
+// {
+// $on = $where;
+// $where = $wherePlus;
+// }
+
+ $where = $this->createWhereClause();
+
+ if (isset($where))
{
- $on = array();
-
- if (isset($where) and isset($wherePlus))
+ if (isset($this->sWhere))
{
- $where .= ' AND ' . $wherePlus;
- }
- else if (!isset($where) and isset($wherePlus))
- {
- $where .= $wherePlus;
+ $where .= " AND " . $this->sWhere;
}
}
else
{
- $on = $where;
- $where = $wherePlus;
+ $where = $this->sWhere;
}
+
+ $tables = isset($this->from) ? $this->from : $tableName;
+
+ $fields = $tableName.".*";
+ $on = $this->on;
return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on);
}
@@ -127,10 +146,37 @@ class Model_Tree extends Model_Base {
public function getFields($fields = '',$choice = 'all')
{
$elements = $this->treeQueryElements($this->_tablesArray[0],$choice);
-
+
$queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields;
- return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using,$this->join);
+ $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using,$this->join);
+
+ //convert from MySQL values
+ if ($this->convert)
+ {
+ if (count($row) > 0)
+ {
+ $types = array();
+
+ $tablesList = array_keys($row[0]);
+
+ foreach ($tablesList as $table)
+ {
+ $types[$table] = $this->db->getTypes($table, "*", false, true);
+ }
+
+ for ($i=0;$i< count ($row); $i++)
+ {
+ foreach ($tablesList as $table)
+ {
+ $row[$i][$table] = $this->convertFromMysqlT($types[$table], $row[$i][$table]);
+ }
+
+ }
+ }
+ }
+
+ return $row;
}
public function send()
@@ -160,8 +206,8 @@ class Model_Tree extends Model_Base {
//$id: the id (primary key) of the record
//$fields: the comma separated list of fields that have to be extracted
public function selectId($id,$fields = null) {
- $tempWhere = $this->where;
- $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id));
+
+ $this->save()->clear()->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id));
$this->using = null;
@@ -174,7 +220,7 @@ class Model_Tree extends Model_Base {
$values = $this->getAll('other');
}
- $this->where = $tempWhere;
+ $this->restore();
return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array();
@@ -218,49 +264,373 @@ class Model_Tree extends Model_Base {
return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join);
}
-// //get the number of records of the table $this->_tablesArray[0]
-// public function rowNumber() {
-// return $this->recordNumber($this->_tablesArray[0]);
-// }
-
- //method to call the delete query (overriding of the del method of Model.php)
- //check the referential integrity
- public function del($id = null, $whereClause = null)
+ //check referential integrity during delete
+ public function checkOnDeleteIntegrity($id = null, $whereClause = null)
{
- $this->queryResult = false;
+ $this->save();
- if (isset($whereClause))
+ $result = true;
+
+ if (count($this->foreignKeys) > 0)
{
- return parent::del(null,$whereClause);
+ foreach ($this->foreignKeys as $f)
+ {
+ if (preg_match('/^(.*?)\s(parent of)\s(.*?)\((.*?)\)(\s(on delete)\s(cascade|restrict)\s\((.*?)\))?$/i',$f,$matches))
+ {
+ $parentKey = $matches[1];
+ $childModel = $matches[3];
+ $childField = $matches[4];
+
+ if (isset($whereClause))
+ {
+ $this->clear()->sWhere($whereClause);
+ }
+ else
+ {
+ $this->clear()->where(array($this->_idFields=>(int)$id));
+ }
+
+ $keys = sanitizeDbDeep($this->toList($parentKey)->send());
+ $this->restore();
+
+ if (count($keys) > 0)
+ {
+ $child = new $childModel();
+ $childrenIds = $child->clear()->where(array($childField=>"in('".implode("','",$keys)."')"))->toList($child->getPrimaryKey())->send();
+
+ if (count($childrenIds) > 0)
+ {
+ if (isset($matches[7]) and strcmp($matches[7],"cascade") === 0)
+ {
+ foreach ($childrenIds as $childId)
+ {
+ $child->del((int)$childId);
+ }
+
+ if (strcmp($matches[8],"") !== 0)
+ {
+ $this->notice .= "<div class='".Params::$infoStringClassName."'>".$matches[8]."</div>";
+ }
+ }
+ else
+ {
+ $this->notice .= isset($matches[8]) ? "<div class='".Params::$errorStringClassName."'>".$matches[8]."</div>" : $this->_resultString->getString('associate');
+ $result = false;
+ }
+ }
+ }
+
+ }
+ }
}
- else
+
+ return $result;
+ }
+
+ //check referential integrity during insert or update
+ public function checkOnUpdateIntegrity($queryType)
+ {
+ $result = true;
+
+ if (count($this->foreignKeys) > 0)
{
- if ($this->_onDelete === 'check' and isset($this->_reference))
+ foreach ($this->foreignKeys as $f)
{
- if (isset($this->_reference[0]) and isset($this->_reference[1]))
+ if (preg_match('/^(.*?)\s(child of)\s(.*?)\((.*?)\)(\s(on update)\s(restrict)\s\((.*?)\))?$/i',$f,$matches))
{
- if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id))
+ $childKey = $matches[1];
+ $ParentModel = $matches[3];
+ $ParentField = $matches[4];
+
+ $notice = isset($matches[8]) ? "<div class='".Params::$errorStringClassName."'>".$matches[8]."</div>" : "";
+
+ if (array_key_exists($childKey,$this->values))
{
- $this->notice = $this->_resultString->getString('associate');
- $this->identifierValue = null;
+ $parent = new $ParentModel();
+ $res = $parent->clear()->where(array($ParentField=>sanitizeDb($this->values[$childKey])))->send();
+
+ if (count($res) === 0)
+ {
+ $this->notice .= $notice;
+ $this->result = false;
+ $result = false;
+ }
+ }
+ else if ($queryType === "insert")
+ {
+ $this->notice .= $notice;
$this->result = false;
+ $result = false;
}
- else
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ //get the first extracted full record
+ public function record()
+ {
+ $res = $this->getFields($this->select);
+
+ if (count($res) > 0)
+ {
+ return $res[0][$this->_tables];
+ }
+ return array();
+ }
+
+ //get a single field from the first extracted record
+ public function field($fieldName)
+ {
+ $res = $this->save()->select($fieldName)->send();
+ $this->restore();
+
+ if (count($res) > 0 and isset($res[0][$this->_tables][$fieldName]))
+ {
+ return $res[0][$this->_tables][$fieldName];
+ }
+ return "";
+ }
+
+ //get the types of the fields in $this->values
+ public function getTypes($full = false)
+ {
+ return $types = $this->db->getTypes($this->_tables,implode(",",array_keys($this->values)),$full);
+ }
+
+ //automatically set the values conditions
+ public function setValuesConditionsFromDbFields($queryType)
+ {
+ $fields = array_keys($this->values);
+ $fieldsAsString = implode(",",$fields);
+
+ $types = $this->getTypes(true);
+ $fieldKeys = $this->db->getKeys($this->_tables,$fieldsAsString,true,false);
+
+ if (count($this->values) > 0)
+ {
+ if (!$types)
+ {
+ $this->notice .= $this->_resultString->getString('not-existing-fields');
+ $this->result = false;
+ return false;
+ }
+ else
+ {
+ $this->saveConditions("values");
+ $this->saveConditions("database");
+
+ if (Params::$setValuesConditionsFromDbTableStruct)
+ {
+ foreach ($types as $index => $t)
+ {
+ if (preg_match('/^('.implode("|",$this->db->getCharTypes()).')\(([0-9]*?)\)$/i',$t,$matches))
+ {
+ $this->addValuesCondition($queryType,'checkLength|'.$matches[2],$fields[$index]);
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getIntegerTypes()).')/i',$t,$matches))
+ {
+ $this->addValuesCondition($queryType,'checkInteger',$fields[$index]);
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getFloatTypes()).')$/i',$t,$matches))
+ {
+ $this->addValuesCondition($queryType,'checkNumeric',$fields[$index]);
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getDateTypes()).')$/i',$t,$matches))
+ {
+ $this->addValuesCondition($queryType,'checkIsoDate',$fields[$index]);
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)$/i',$t,$matches))
+ {
+ $temp = array();
+ $strings = explode(",",$matches[2]);
+ for ($i=0;$i<count($strings);$i++)
+ {
+ $temp[] = trim($strings[$i],"'\"");
+ }
+ $this->addValuesCondition($queryType,'checkIsStrings|'.implode(",",$temp),$fields[$index]);
+ }
+ else if (preg_match('/^('.implode("|",$this->db->getDecimalTypes()).')\((.*?)\)$/i',$t,$matches))
+ {
+ $this->addValuesCondition($queryType,'checkDecimal|'.$matches[2],$fields[$index]);
+ }
+ }
+
+ //set unique conditions
+ foreach ($fieldKeys as $index => $fk)
{
- return parent::del((int)$id);
+ if (preg_match('/^('.implode("|",$this->db->getUniqueIndexStrings()).')$/i',$fk,$matches))
+ {
+ if ($queryType === "insert")
+ {
+ $this->addDatabaseCondition($queryType,'checkUnique',$fields[$index]);
+ }
+ else
+ {
+ $this->addDatabaseCondition($queryType,'checkUniqueCompl',$fields[$index]);
+ }
+ }
}
}
- else
+
+ foreach (Params::$valuesConditionsFromFormatsOfFieldsNames as $regExpr => $function)
{
- throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\'');
+ foreach ($fields as $f)
+ {
+ if (preg_match($regExpr,$f,$matches))
+ {
+ $this->addValuesCondition($queryType,$function,$f);
+ }
+ }
+
}
}
- else
+ }
+
+// print_r($fields);
+// print_r($types);
+
+ return true;
+ }
+
+ //convert values of the $this->values to MySQL formats
+ public function convertValuesToDb()
+ {
+ if (Params::$automaticConversionToDbFormat)
+ {
+ if (isset($this->_conversionToDbObject))
{
- return parent::del((int)$id);
+ $types = $this->getTypes();
+
+ if ($types)
+ {
+ $fields = array_keys($this->values);
+
+ foreach ($types as $index => $t)
+ {
+ if (method_exists($this->_conversionToDbObject,strtolower($t)))
+ {
+ $this->values[$fields[$index]] = call_user_func(array($this->_conversionToDbObject, strtolower($t)), $this->values[$fields[$index]]);
+ }
+ }
+ }
}
}
+ }
+
+ public function insert()
+ {
+ $this->db->setAutocommit(true);
+
+ $this->notice = null;
+ $this->queryResult = false;
+
+ $this->convertValuesToDb();
+
+ if ($this->checkOnUpdateIntegrity("insert"))
+ {
+ //set the values conditions from the table description
+ if ($this->setValuesConditionsFromDbFields("insert"))
+ {
+ if ($this->applyDatabaseConditions("insert",null))
+ {
+ $this->restoreConditions("database");
+ if ($this->applyValidateConditions("insert",'values'))
+ {
+ $this->restoreConditions("values");
+ return parent::insert();
+ }
+ $this->restoreConditions("values");
+ }
+ $this->restoreConditions("database");
+ }
+ }
+
return false;
+
+ }
+
+ public function update($id = null, $whereClause = null)
+ {
+ $this->db->setAutocommit(true);
+
+ $this->notice = null;
+ $this->queryResult = false;
+
+ $this->convertValuesToDb();
+
+ if ($this->checkOnUpdateIntegrity("update"))
+ {
+ //set the values conditions from the table description
+ if ($this->setValuesConditionsFromDbFields("update"))
+ {
+ if (!isset($id) or $this->applyDatabaseConditions("update",(int)$id))
+ {
+ $this->restoreConditions("database");
+ //check the values conditions
+ if ($this->applyValidateConditions("update",'values'))
+ {
+ $this->restoreConditions("values");
+ return parent::update($id, $whereClause);
+ }
+ $this->restoreConditions("values");
+ }
+ $this->restoreConditions("database");
+ }
+ }
+
+ return false;
+ }
+
+ //method to call the delete query (overriding of the del method of Model.php)
+ //check the referential integrity
+ public function del($id = null, $whereClause = null)
+ {
+ $this->notice = null;
+ $this->queryResult = false;
+
+ if ($this->checkOnDeleteIntegrity($id, $whereClause))
+ {
+ return parent::del($id, $whereClause);
+ }
+ else
+ {
+ return false;
+ }
+// if (isset($whereClause))
+// {
+// return parent::del(null,$whereClause);
+// }
+// else
+// {
+// if ($this->_onDelete === 'check' and isset($this->_reference))
+// {
+// if (isset($this->_reference[0]) and isset($this->_reference[1]))
+// {
+// if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id))
+// {
+// $this->notice = $this->_resultString->getString('associate');
+// $this->identifierValue = null;
+// $this->result = false;
+// }
+// else
+// {
+// return parent::del((int)$id);
+// }
+// }
+// else
+// {
+// throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\'');
+// }
+// }
+// else
+// {
+// return parent::del((int)$id);
+// }
+// }
+// return false;
}
//method to obtain one columns from the tables $this->_tablesArray as an associative array
diff --git a/h-source/Library/Params.php b/h-source/Library/Params.php
index 433a952..e22c1bf 100644
--- a/h-source/Library/Params.php
+++ b/h-source/Library/Params.php
@@ -1,7 +1,24 @@
<?php
-// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
if (!defined('EG')) die('Direct access not allowed!');
@@ -18,9 +35,15 @@ class Params
//conventional null value for the value of the field in the createWhereClause method of the Model class
public static $nullQueryValue = false;
+ //use HTTPS for links or not
+ public static $useHttps = false;
+
//class name of the div that contains the error strings
public static $errorStringClassName = 'alert';
+ //class name of the div that contains the error strings
+ public static $infoStringClassName = 'executed';
+
//table name in the returning structure of the select queries in the case of an aggregate function. Ex count(*),sum(*)
public static $aggregateKey = 'aggregate';
@@ -37,7 +60,51 @@ class Params
//subfolder of the View folder where to look for view files
public static $viewSubfolder = null;
- //global website language used by the models and by the helpers
+ //global website language used by the models and by the helpers for reporting
public static $language = 'It';
+
+ //array of languages allowed for the website front-end
+ public static $frontEndLanguages = array();
+
+ //default front-end language
+ public static $defaultFrontEndLanguage = "it";
+
+ //current front-end language
+ public static $lang = null;
+
+ //if true, it redirect to current language if language is expected ($frontEndLanguages not empty) but not present
+ public static $redirectToDefaultLanguage = false;
+
+ //if the URL status variables have to be rewritten or left in the standard query string form
+ public static $rewriteStatusVariables = true;
+
+ //if the URL has to be rewritten only if an exact match has been found (true) or if a match has been found starting from the beginning (false)
+ public static $exactUrlMatchRewrite = false;
+
+ //list of installed applications
+ //the name of the applications has to match a subfolder of tha Apps folder
+ public static $installed = array();
+
+ //the application called
+ public static $currentApplication = null;
+
+ //if true, automatically set the values conditions from the table types
+ public static $setValuesConditionsFromDbTableStruct = false;
+
+ //if true, automatically convert values to MySQL format during insert and update queries (using types taken from table definition)
+ public static $automaticConversionToDbFormat = false;
+
+ //if true, convert values from MySQl to $_lang format when filling the form with values coming from the DB
+ public static $automaticConversionFromDbFormat = false;
+
+ //if true, set the default value for each field when filling the form
+ //default values are taken from DB where present or from type definition
+ public static $automaticallySetFormDefaultValues = false;
+
+ //if true, set date("Y-m-d") as default date when setting the default values of the form or of the $this->values array
+ public static $useCurrentDateAsDefaultDate = true;
+
+ //definition of values conditions from the formats of the fields names
+ public static $valuesConditionsFromFormatsOfFieldsNames = array();
} \ No newline at end of file
diff --git a/h-source/Library/Popup.php b/h-source/Library/Popup.php
index 186e4b3..d2d51a7 100755
--- a/h-source/Library/Popup.php
+++ b/h-source/Library/Popup.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Request.php b/h-source/Library/Request.php
index d99585d..8ad9226 100644
--- a/h-source/Library/Request.php
+++ b/h-source/Library/Request.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Scaffold.php b/h-source/Library/Scaffold.php
index 4c5b46c..a418b7c 100755
--- a/h-source/Library/Scaffold.php
+++ b/h-source/Library/Scaffold.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -32,6 +32,9 @@ class Scaffold
protected $_primaryKey = null; //the primary key of the table
protected $_controller = null; //the name of the controller
+ public $application = null; //the name of the application
+ public $applicationUrl = null; //the url of the application
+ public $controller = null; //the name of the controller
public $model = null; //the reference to the model associated with the controller
public $viewArgs = array(); //the associative array representing the status args of the main action of the controller.
@@ -54,30 +57,37 @@ class Scaffold
//instance of Lang_{language}_Generic
public $strings = null;
- public function __construct($type,$controller,$model,$viewArgs,$params = null) {
+ public static $autoParams = array(
+ 'mainAction' => 'main',
+ 'modifyAction' => 'form/update',
+ 'associateAction' => 'associate',
+ 'panelController' => 'panel',
+ 'pageList' => true,
+ 'pageVariable' => 'page',
+ 'recordPerPage' => 20,
+ 'mainMenu' => 'panel,add',
+ 'formMenu' => 'panel,back',
+ 'popup' => false,
+ 'popupType' => 'exclusive'
+ );
+
+ public function __construct($type,$application, $controller,$model,$viewArgs,$params = null) {
$this->_type = $type;
- $this->_controller = $controller;
+ $this->application = $application;
+ $this->controller = $controller;
$this->model = $model;
$this->viewArgs = $viewArgs;
//get the generic language class
$this->strings = Factory_Strings::generic(Params::$language);
- $autoParams = array(
- 'mainAction' => 'main',
- 'modifyAction' => 'form/update',
- 'associateAction' => 'associate',
- 'panelController' => 'panel',
- 'pageList' => true,
- 'pageVariable' => 'page',
- 'recordPerPage' => 10,
- 'mainMenu' => 'panel,add',
- 'formMenu' => 'panel,back',
- 'postSubmitValue' => $this->strings->gtext('Save'),
- 'popup' => false,
- 'popupType' => 'exclusive'
- );
+ $autoParams = self::$autoParams;
+
+ if (!array_key_exists("postSubmitValue",$autoParams))
+ {
+ $autoParams['postSubmitValue'] = $this->strings->gtext('Save');
+ }
//set the $this->scaffold->params array
if (is_array($params)) {
@@ -87,6 +97,7 @@ class Scaffold
}
$this->params = $autoParams;
+ $this->applicationUrl = isset($application) ? $application . "/" : null;
}
//ad some clauses to the select query
@@ -109,11 +120,35 @@ class Scaffold
{
$this->_primaryKey = $primaryKey;
- if (strcmp($recordList,'') !== 0)
+ if (is_array($recordList) or strcmp($recordList,'') !== 0)
{
- $recordListArray = explode(',',$recordList);
+ $recordListArray = is_array($recordList) ? $recordList : explode(',',$recordList);
+
foreach ($recordListArray as $record) {
- $this->itemList->addItem("simpleText",";$record;");
+ if (preg_match('/\[\[checkbox\]\](\;)(.*?)(\;)/',$record,$matches))
+ {
+ $this->itemList->addItem("checkbox",encode($matches[2]),";".$matches[2].";","",";".$primaryKey.";");
+ }
+ else if (preg_match('/\[\[checkbox\:(.*?)\]\](\;)(.*?)(\;)/',$record,$matches))
+ {
+ $this->itemList->addItem("checkbox",encode($matches[3]),";".$matches[3].";",$matches[1],";".$primaryKey.";");
+ }
+ else if (preg_match('/\[\[input\]\](\;)(.*?)(\;)/',$record,$matches))
+ {
+ $this->itemList->addItem("input",encode($matches[2]),";".$matches[2].";",";".$primaryKey.";");
+ }
+ else if (preg_match('/\[\[ledit\]\](\;)(.*?)(\;)/',$record,$matches))
+ {
+ $this->itemList->addItem("link",$this->applicationUrl . $this->controller.'/'.$this->params['modifyAction']."/;$primaryKey;","",";".$matches[2].";");
+ }
+ else if (strstr($record, ';'))
+ {
+ $this->itemList->addItem("simpleText","$record");
+ }
+ else
+ {
+ $this->itemList->addItem("simpleText",";$record;");
+ }
}
}
@@ -123,26 +158,33 @@ class Scaffold
{
foreach ($themeArray as $el)
{
- switch ($el)
+ if (preg_match('/ledit\|(.*)/',$el,$matches))
{
- case 'moveup':
- $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
- break;
- case 'movedown':
- $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
- break;
- case 'link':
- $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],";".$primaryKey.";");
- break;
- case 'edit':
- $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],";".$primaryKey.";");
- break;
- case 'del':
- $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
- break;
- case 'ledit':
- $this->itemList->addItem('ledit',$this->_controller.'/'.$this->params['modifyAction'].'/;'.$primaryKey.';','Edit','Edit');
- break;
+ $this->itemList->addItem('ledit',$matches[1],'Edit','Edit');
+ }
+ else
+ {
+ switch ($el)
+ {
+ case 'moveup':
+ $this->itemList->addItem('moveupForm',$this->applicationUrl . $this->controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
+ break;
+ case 'movedown':
+ $this->itemList->addItem('movedownForm',$this->applicationUrl . $this->controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
+ break;
+ case 'link':
+ $this->itemList->addItem('associateForm',$this->applicationUrl . $this->controller.'/'.$this->params['associateAction'],";".$primaryKey.";");
+ break;
+ case 'edit':
+ $this->itemList->addItem('editForm',$this->applicationUrl . $this->controller.'/'.$this->params['modifyAction'],";".$primaryKey.";");
+ break;
+ case 'del':
+ $this->itemList->addItem('delForm',$this->applicationUrl . $this->controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
+ break;
+ case 'ledit':
+ $this->itemList->addItem('ledit',$this->applicationUrl . $this->controller.'/'.$this->params['modifyAction'].'/;'.$primaryKey.';','Edit','Edit');
+ break;
+ }
}
}
}
@@ -157,7 +199,8 @@ class Scaffold
$this->queryType = $queryType;
$submitName = $this->model->getSubmitName($queryType);
$value = $this->params['postSubmitValue'];
- $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $viewStatus = Url::createUrl($this->viewArgs);
+
$this->model->setForm($action.$viewStatus,array($submitName => $value),$method,$enctype);
$this->form = $this->model->form;
}
diff --git a/h-source/Library/Strings/Functions.php b/h-source/Library/Strings/Functions.php
index 1ee17af..c63d165 100644
--- a/h-source/Library/Strings/Functions.php
+++ b/h-source/Library/Strings/Functions.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Theme.php b/h-source/Library/Theme.php
index a001631..1ddec92 100755
--- a/h-source/Library/Theme.php
+++ b/h-source/Library/Theme.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -34,13 +34,21 @@ class Theme {
public $viewArgs = array();
public $viewStatus = '';
public $controller = 'controller';
+ public $application = null;
public $action = '';
public $currPage; //the URL of the current page
- function __construct($controller) {
+ function __construct($application, $controller) {
+
$this->controller = $controller;
- $this->baseUrl = MOD_REWRITE_MODULE === true ? 'http://' . DOMAIN_NAME : 'http://' . DOMAIN_NAME . '/index.php';
- $this->baseUrlSrc = 'http://' . DOMAIN_NAME;
+ $this->application = $application;
+
+ $langUrl = isset(Params::$lang) ? "/".Params::$lang : null;
+ $protocol = Params::$useHttps ? "https" : "http";
+
+ $this->baseUrl = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . $langUrl : "$protocol://" . DOMAIN_NAME . '/index.php' . $langUrl;
+
+ $this->baseUrlSrc = "$protocol://" . DOMAIN_NAME;
}
@@ -71,15 +79,22 @@ class Theme {
}
}
-
public function render() {
extract($this->_data);
-
+
//find the View subfolder where to look for view files
$subfolder = isset(Params::$viewSubfolder) ? Params::$viewSubfolder . DS : null;
foreach ($this->_viewFiles as $file) {
- if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php')) {
+ if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php'))
+ {
+ include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS . $subfolder. ucwords($this->controller) . DS . $file . '.php');
+ }
+ else if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS . $subfolder. $file . '.php'))
+ {
+ include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. $file . '.php');
+ }
+ else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php')) {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php');
} else {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $file . '.php');
@@ -87,7 +102,15 @@ class Theme {
}
if (isset($this->_lastView)) {
- if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php')) {
+ if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php'))
+ {
+ include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php');
+ }
+ else if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS . $subfolder . $this->_lastView . '.php'))
+ {
+ include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder . $this->_lastView . '.php');
+ }
+ else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php')) {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php');
} else {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $this->_lastView . '.php');
diff --git a/h-source/Library/Url.php b/h-source/Library/Url.php
index da312b1..26ff3df 100755
--- a/h-source/Library/Url.php
+++ b/h-source/Library/Url.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -26,28 +26,35 @@ class Url {
//get the url starting from the root folder
public static function getRoot($pathFromRootFolder = null) {
- $url = MOD_REWRITE_MODULE === true ? 'http://' . DOMAIN_NAME . '/' . $pathFromRootFolder : 'http://' . DOMAIN_NAME . '/index.php/' . $pathFromRootFolder;
+
+ $langUrl = isset(Params::$lang) ? "/".Params::$lang : null;
+
+ $protocol = Params::$useHttps ? "https" : "http";
+
+ $url = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . $langUrl . '/' . $pathFromRootFolder : "$protocol://" . DOMAIN_NAME . '/index.php/' . $langUrl . $pathFromRootFolder;
return $url;
}
- //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString (in this case '1,2,4')
- public static function createUrl($valuesArray,$numericString = null) {
+ //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString
+ //$forceRewrite: if true it always rewrite the status variables
+ public static function createUrl($variablesArray, $numericString = null, $forceRewrite = false) {
$elementsArray = explode(',',$numericString);
- $valuesArray = array_values($valuesArray);
+ $valuesArray = array_values($variablesArray);
+ $keysArray = array_keys($variablesArray);
$urlString = null;
for ($i = 0; $i < count($valuesArray); $i++)
{
if (isset($numericString)) {
if (isset($valuesArray[$i]) and in_array($i,$elementsArray)) {
- $urlString .= "/".$valuesArray[$i];
+ $urlString .= (Params::$rewriteStatusVariables or $forceRewrite) ? "/".$valuesArray[$i] : "&".$keysArray[$i]."=".$valuesArray[$i];
}
} else {
if (isset($valuesArray[$i])) {
- $urlString .= "/".$valuesArray[$i];
+ $urlString .= (Params::$rewriteStatusVariables or $forceRewrite) ? "/".$valuesArray[$i] : "&".$keysArray[$i]."=".$valuesArray[$i];
}
}
}
- return $urlString;
+ return (Params::$rewriteStatusVariables or $forceRewrite) ? $urlString : "?".ltrim($urlString,"&");
}
}
diff --git a/h-source/Library/Users/CheckAdmin.php b/h-source/Library/Users/CheckAdmin.php
index 701b47e..aa4e33f 100755
--- a/h-source/Library/Users/CheckAdmin.php
+++ b/h-source/Library/Users/CheckAdmin.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -65,6 +65,11 @@ class Users_CheckAdmin {
$this->_params[$key] = $value;
}
+ public function getUid()
+ {
+ return $this->uid;
+ }
+
private function cleanSessions()
{
#cancello le sessioni scadute