Remove all the {{{ and }}} folding
This commit is contained in:
@@ -68,12 +68,10 @@ class Authentication
|
||||
* @param object $route The route object
|
||||
*/
|
||||
public function __construct ($route)
|
||||
// {{{
|
||||
{
|
||||
$this->route = $route;
|
||||
$this->loggingFunc = array ($this, "logging");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/* public function email ()
|
||||
{
|
||||
@@ -85,21 +83,18 @@ class Authentication
|
||||
* @return integer|self the actual value or this
|
||||
*/
|
||||
public function debug ($debug = null)
|
||||
// {{{
|
||||
{
|
||||
if ($debug === null)
|
||||
return $this->debug;
|
||||
$this->debug = intval ($debug);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Disconnect the user
|
||||
* @param string|null $url The url to be redirected after a valid
|
||||
* logout
|
||||
*/
|
||||
public function logout ($url = "")
|
||||
// {{{
|
||||
{
|
||||
// TODO : Foreach authentication methods->logout ();
|
||||
if (session_id () === "")
|
||||
@@ -148,14 +143,12 @@ class Authentication
|
||||
else
|
||||
$this->route->redirect ($url);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Display the login page
|
||||
* @param string|null $url The url to be redirected after a valid
|
||||
* authentication
|
||||
*/
|
||||
public function pageHTML ($url = "")
|
||||
// {{{
|
||||
{
|
||||
// If the user is already connected, redirect to the main page of the site
|
||||
if (session_id () === "")
|
||||
@@ -176,14 +169,12 @@ class Authentication
|
||||
echo $auth->pageHTML ($this->route->baseURL(), $message, $url,
|
||||
$alreadyAuth);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check the authentication page
|
||||
* @param string|null $url The url to be redirected after a valid
|
||||
* authentication
|
||||
*/
|
||||
public function verifAuthLoginPage ($url = "")
|
||||
// {{{
|
||||
{
|
||||
if (session_id () === "")
|
||||
session_start ();
|
||||
@@ -265,7 +256,6 @@ class Authentication
|
||||
else
|
||||
$this->route->redirect ("/$url", "");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check all the REST API
|
||||
* @param boolean|null $savePassword return the user password if the
|
||||
@@ -273,7 +263,6 @@ class Authentication
|
||||
* @return array The details provided by the authentication mecanism
|
||||
*/
|
||||
public function verifAuthREST ($savePassword = false)
|
||||
// {{{
|
||||
{
|
||||
if ($this->debug)
|
||||
echo "=== entering verifAuthREST (restMethods=".
|
||||
@@ -298,7 +287,6 @@ class Authentication
|
||||
$res["password"] = $authparams->password;
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the JSON Web Token
|
||||
* @param string|array $auth The user data to store in JSON Web Token cache.
|
||||
@@ -307,7 +295,6 @@ class Authentication
|
||||
* $this->authServers["authjwt"]["serverKey"] can be set
|
||||
*/
|
||||
public function createJwtToken ($auth)
|
||||
// {{{
|
||||
{
|
||||
if (isset ($this->authServers["authjwt"]["serverKey"]))
|
||||
{
|
||||
@@ -336,13 +323,11 @@ class Authentication
|
||||
return $authjwt->createJwtToken ($payloadArray);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check all the others pages of the site
|
||||
* @return array The details provided by the authentication mecanism
|
||||
*/
|
||||
public function verifAuthHTML ()
|
||||
// {{{
|
||||
{
|
||||
// Do not force the session_start ! We don't want the cookie on all the
|
||||
// pages
|
||||
@@ -374,7 +359,6 @@ class Authentication
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Do the real authentication process on all the providers defined in the
|
||||
* properties of the class.
|
||||
@@ -385,7 +369,6 @@ class Authentication
|
||||
* an exception if noting is found
|
||||
*/
|
||||
private function verifAuth ($email, $password)
|
||||
// {{{
|
||||
{
|
||||
if ($this->debug)
|
||||
echo "Entering in verifAuth ($email, xxxxxxxx)\n";
|
||||
@@ -469,13 +452,11 @@ class Authentication
|
||||
}
|
||||
return dgettext ("domframework", "Bad login/password");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add the authentication routes to the routing model for HTML
|
||||
* authentication. Not needed if using shibboleth, HTTP auth...
|
||||
*/
|
||||
public function routes ()
|
||||
// {{{
|
||||
{
|
||||
$authObj = $this;
|
||||
$route=$this->route;
|
||||
@@ -510,7 +491,6 @@ class Authentication
|
||||
;
|
||||
$this->route->authenticationURL = "/authentication/";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The default method to display the error messages.
|
||||
* Do not display the debug messages, and write the errors on screen
|
||||
@@ -518,11 +498,9 @@ class Authentication
|
||||
* @param string $message The message to log
|
||||
*/
|
||||
private function logging ($priority, $message)
|
||||
// {{{
|
||||
{
|
||||
if ($this->debug === 0 && $priority > 4)
|
||||
return;
|
||||
file_put_contents ("/tmp/auth.log", "$priority : $message\n", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -48,11 +48,9 @@ class Authjwt extends Auth
|
||||
/** No connection to JWT
|
||||
*/
|
||||
public function connect ()
|
||||
// {{{
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Try to authenticate the email/password of the user
|
||||
* If the token is valid, return all the data available in payload. Can
|
||||
@@ -61,7 +59,6 @@ class Authjwt extends Auth
|
||||
* @param string $password Password not used (wait for Bearer)
|
||||
*/
|
||||
public function authentication ($email, $password)
|
||||
// {{{
|
||||
{
|
||||
if (! isset ($_SERVER["HTTP_AUTHENTICATION"]))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -86,12 +83,10 @@ class Authjwt extends Auth
|
||||
$this->payload = $payload;
|
||||
return $payload;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return all the parameters recorded for the authenticate user
|
||||
*/
|
||||
public function getdetails ()
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($this->payload) ||
|
||||
key_exists ("email", $this->payload) &&
|
||||
@@ -101,7 +96,6 @@ class Authjwt extends Auth
|
||||
"email" => "anonymous");
|
||||
return $this->payload;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Save the auth data in cache directory and return the JWT token
|
||||
* Do not allow to store data if the $auth is anonymous
|
||||
@@ -109,7 +103,6 @@ class Authjwt extends Auth
|
||||
* @return string JWT token
|
||||
*/
|
||||
public function createJwtToken ($auth)
|
||||
// {{{
|
||||
{
|
||||
if ($this->serverKey === null)
|
||||
return "";
|
||||
@@ -127,7 +120,6 @@ class Authjwt extends Auth
|
||||
return $jwt->encode ($uuid,
|
||||
$this->serverKey, $this->algorithm, $this->cipherKey);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Method to change the password : unavailable in SESSION auth
|
||||
* @param string $oldpassword The old password (to check if the user have the
|
||||
@@ -135,12 +127,10 @@ class Authjwt extends Auth
|
||||
* @param string $newpassword The new password to be recorded
|
||||
*/
|
||||
public function changepassword ($oldpassword, $newpassword)
|
||||
// {{{
|
||||
{
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"The password can't be change for JWT users"), 405);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Method to overwrite the password (without oldpassword check)
|
||||
* Must be reserved to the administrators. For the users, use changepassword
|
||||
@@ -149,17 +139,14 @@ class Authjwt extends Auth
|
||||
* @param string $newpassword The new password to be recorded
|
||||
*/
|
||||
public function overwritepassword ($email, $newpassword)
|
||||
// {{{
|
||||
{
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"The password can't be overwrite for JWT users"), 405);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Remove the information from the session
|
||||
*/
|
||||
public function logout ()
|
||||
// {{{
|
||||
{
|
||||
if (! isset ($_SERVER["HTTP_AUTHENTICATION"]))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -180,5 +167,4 @@ class Authjwt extends Auth
|
||||
$cachefile->delete ($uuid);
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ class Authparams
|
||||
* @param array|null $authprocesses The authentication process to use
|
||||
*/
|
||||
public function __construct ($authprocesses = array ("session", "post"))
|
||||
// {{{
|
||||
{
|
||||
if (php_sapi_name () === "cli")
|
||||
{
|
||||
@@ -52,24 +51,20 @@ class Authparams
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get information from $POST variables
|
||||
*/
|
||||
public function post ()
|
||||
// {{{
|
||||
{
|
||||
if (!isset ($_POST["email"]) || !isset ($_POST["password"]))
|
||||
throw new \Exception ("No POST provided", 403);
|
||||
return array ("email" => trim ($_POST["email"]),
|
||||
"password" => $_POST["password"]);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get information from previous recorded session
|
||||
*/
|
||||
public function session ()
|
||||
// {{{
|
||||
{
|
||||
if (!isset ($_SESSION) || session_id () === "")
|
||||
throw new \Exception ("No session previously enabled", 403);
|
||||
@@ -79,12 +74,10 @@ class Authparams
|
||||
return array ("email" => $_SESSION["domframework"]["auth"]["email"],
|
||||
"password" => $_SESSION["domframework"]["auth"]["password"]);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get information from a HTTP authentication
|
||||
*/
|
||||
public function http ()
|
||||
// {{{
|
||||
{
|
||||
$realm = dgettext ("domframework", "Restricted access");
|
||||
if (!isset ($_SERVER['PHP_AUTH_USER']))
|
||||
@@ -102,12 +95,10 @@ class Authparams
|
||||
"password" => $_SERVER["PHP_AUTH_PW"]);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the information from a shibboleth provider
|
||||
*/
|
||||
public function shibboleth ()
|
||||
// {{{
|
||||
{
|
||||
if (! isset ($_SERVER["Shib-Session-ID"]))
|
||||
throw new \Exception ("No Shibboleth information available", 403);
|
||||
@@ -116,7 +107,6 @@ class Authparams
|
||||
return array ("email" => $_SERVER["mail"],
|
||||
"password" => "NONE IN SHIBBOLETH");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the information from a Bearer Token
|
||||
* The token MUST be set in HTTP Header :
|
||||
@@ -132,7 +122,6 @@ class Authparams
|
||||
* jwtServerKey defined in property : the execution is done in constructor
|
||||
*/
|
||||
public function bearer ()
|
||||
// {{{
|
||||
{
|
||||
if (! isset ($_SERVER["HTTP_AUTHENTICATION"]))
|
||||
throw new \Exception ("No Authentication available", 401);
|
||||
@@ -142,5 +131,4 @@ class Authparams
|
||||
return array ("email" => "NOT YET VALID : TOKEN IN JWT",
|
||||
"password" => "NONE IN JWT");
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -31,38 +31,30 @@ class Authzgroupsoo
|
||||
/** Get the dbObject
|
||||
*/
|
||||
public function dbObject ()
|
||||
// {{{
|
||||
{
|
||||
return $this->dbObject;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the dbGroup
|
||||
*/
|
||||
public function dbGroup ()
|
||||
// {{{
|
||||
{
|
||||
return $this->dbGroup;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the dbGroupMember
|
||||
*/
|
||||
public function dbGroupMember ()
|
||||
// {{{
|
||||
{
|
||||
return $this->dbGroupMember;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the dbRight
|
||||
*/
|
||||
public function dbRight ()
|
||||
// {{{
|
||||
{
|
||||
return $this->dbRight;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/////////////////////
|
||||
// USER RIGHTS //
|
||||
|
||||
@@ -24,7 +24,6 @@ class Cachefile
|
||||
* @return $this or $this->directory value
|
||||
*/
|
||||
public function directory ($val = null)
|
||||
// {{{
|
||||
{
|
||||
if ($val === null)
|
||||
return $this->directory;
|
||||
@@ -33,12 +32,10 @@ class Cachefile
|
||||
$this->directory = $val;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check if there is some garbage to clean
|
||||
*/
|
||||
public function garbage ()
|
||||
// {{{
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -93,7 +90,6 @@ class Cachefile
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function check if the cachedir exists and create it if it is not the
|
||||
* case.
|
||||
@@ -102,7 +98,6 @@ class Cachefile
|
||||
* @throw Exception if an error occured
|
||||
*/
|
||||
public function cachedir ()
|
||||
// {{{
|
||||
{
|
||||
if (! isset ($this->directory) || $this->directory === "")
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -133,7 +128,6 @@ class Cachefile
|
||||
file_put_contents ($this->directory."/.htaccess", "deny from all\n");
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function write data in cache
|
||||
* @param string $id Cache identifier (add the authentication, the METHOD...)
|
||||
@@ -144,7 +138,6 @@ class Cachefile
|
||||
* @throw if an error occured
|
||||
*/
|
||||
public function write ($id, $data, $ttl = 3600)
|
||||
// {{{
|
||||
{
|
||||
if ($this->nocache !== false)
|
||||
return false;
|
||||
@@ -175,7 +168,6 @@ class Cachefile
|
||||
chmod ($fileCache, 0666);
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function read data from cache. Return FALSE in case of empty or too
|
||||
* older cache
|
||||
@@ -184,7 +176,6 @@ class Cachefile
|
||||
* @return mixed The data stored in cache
|
||||
*/
|
||||
public function read ($id)
|
||||
// {{{
|
||||
{
|
||||
if ($this->nocache !== false)
|
||||
return false;
|
||||
@@ -249,14 +240,12 @@ class Cachefile
|
||||
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function delete an id in cache
|
||||
* @param string $id Cache identifier (add the authentication, the METHOD...)
|
||||
* @return boolean The cache is well deleted
|
||||
*/
|
||||
public function delete ($id)
|
||||
// {{{
|
||||
{
|
||||
$fileCache = $this->directory."/".sha1 ($id);
|
||||
if (!file_exists ($fileCache))
|
||||
@@ -264,5 +253,4 @@ class Cachefile
|
||||
unlink ($fileCache);
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
-102
@@ -26,7 +26,6 @@ namespace Domframework;
|
||||
class Console
|
||||
{
|
||||
// PROPERTIES
|
||||
// {{{
|
||||
/** Set the debug on if a filename is provided, or do not debug if false is
|
||||
* provided
|
||||
*/
|
||||
@@ -79,13 +78,11 @@ class Console
|
||||
/** Store the last cursor position in the last readline
|
||||
*/
|
||||
private $cursorPos = 1;
|
||||
// }}}
|
||||
|
||||
/** The constructor init the console.
|
||||
* Check if we have the rights to execute, if wa have in cli...
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("exec"))
|
||||
throw $this->ConsoleException ("No exec support in PHP");
|
||||
@@ -98,12 +95,10 @@ class Console
|
||||
exec ("stty -echo -icanon min 1 time 0 2>/dev/null");
|
||||
$this->updateTerminalSize ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Update the terminal size
|
||||
*/
|
||||
public function updateTerminalSize ()
|
||||
// {{{
|
||||
{
|
||||
$this->termWidth = 80;
|
||||
$this->termHeight = 25;
|
||||
@@ -121,12 +116,10 @@ class Console
|
||||
$this->termHeight = intval ($termHeight);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The destructor return the terminal to initial state
|
||||
*/
|
||||
public function __destruct ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->initSttyState !== "")
|
||||
exec ("stty $this->initSttyState");
|
||||
@@ -134,38 +127,31 @@ class Console
|
||||
$this->textUnderline (false);
|
||||
$this->textBold (false);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Each time a key is pressed by the user, display the value on screen (echo)
|
||||
*/
|
||||
public function setEcho ()
|
||||
// {{{
|
||||
{
|
||||
$this->echoMode = true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Each time a key is pressed by the user, DO NOT display the value on screen
|
||||
* (echo disabled)
|
||||
*/
|
||||
public function unsetEcho ()
|
||||
// {{{
|
||||
{
|
||||
$this->echoMode = false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Display a text on screen. Must be used before "readline" method because
|
||||
* the provided message will not be deleted by readline process.
|
||||
* @param string $message The message to display
|
||||
*/
|
||||
public function echo ($message)
|
||||
// {{{
|
||||
{
|
||||
echo $message;
|
||||
$this->lineContent .= $message;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Wait one valid character from the user.
|
||||
* The non printable chars are not displayed, nor returned
|
||||
@@ -173,14 +159,12 @@ class Console
|
||||
* @return the pressed char
|
||||
*/
|
||||
public function getc ()
|
||||
// {{{
|
||||
{
|
||||
$char = $this->getKey ();
|
||||
while (in_array (ord ($char), $this->nonWriteableChar))
|
||||
$char = $this->getKey ();
|
||||
return $char;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Wait one key pressed by the user. If the key pressed is an ESC sequence,
|
||||
* return this sequence
|
||||
@@ -189,7 +173,6 @@ class Console
|
||||
* @return the pressed char
|
||||
*/
|
||||
public function getKey ()
|
||||
// {{{
|
||||
{
|
||||
$char = fgetc (STDIN);
|
||||
if ($char === chr (27))
|
||||
@@ -262,7 +245,6 @@ class Console
|
||||
echo $char;
|
||||
return $char;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the line of characters pressed by the user and return the result.
|
||||
* Stop when the user valid by \n.
|
||||
@@ -273,7 +255,6 @@ class Console
|
||||
* @return string The typed string
|
||||
*/
|
||||
public function readline ($propo = "", $stopperChar = false)
|
||||
// {{{
|
||||
{
|
||||
// Gets can not delete chars before the call. Keep the prompt (if exists)
|
||||
if (! is_string ($propo))
|
||||
@@ -307,7 +288,6 @@ class Console
|
||||
if ($this->completionKeys !== false &&
|
||||
in_array ($char, $this->mb_str_split ($this->completionKeys)))
|
||||
// Manage autocompletion
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Autocompletion starting");
|
||||
// Take the last part of the string without space or double quotes
|
||||
@@ -412,7 +392,6 @@ class Console
|
||||
}
|
||||
$this->debug ("Autocompletion : end '$prompt.$string'");
|
||||
}
|
||||
// }}}
|
||||
elseif (ord ($char) === 0)
|
||||
// End of file
|
||||
{
|
||||
@@ -422,7 +401,6 @@ class Console
|
||||
}
|
||||
elseif (ord ($char) === 3)
|
||||
// Abort (Ctrl+C)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Abort Ctrl+C : ".ord ($char));
|
||||
$this->lineContent = "";
|
||||
@@ -431,20 +409,16 @@ class Console
|
||||
echo "$prompt\n";
|
||||
break;
|
||||
}
|
||||
// }}}
|
||||
elseif (ord ($char) === 4)
|
||||
// Logout (Ctrl+D)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Logout Ctrl+D : ".ord ($char));
|
||||
$string = "exit\n";
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
return $string;
|
||||
}
|
||||
// }}}
|
||||
elseif (ord($char) === 12)
|
||||
// Refresh page (Ctrl+L)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Refresh Ctrl+L : ".ord ($char));
|
||||
echo "\033[2J\033[;H\033c";
|
||||
@@ -452,10 +426,8 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif (ord($char) === 21)
|
||||
// Empty line from prompt to cursor (Ctrl+U)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Empty line from prompt to cursor Ctrl+U : ".ord ($char));
|
||||
$string = mb_substr ($string, $cursorPos - $minLength);
|
||||
@@ -463,10 +435,8 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif (ord($char) === 23)
|
||||
// Remove the last word (Ctrl+W)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Remove the last word Ctrl+W : ".ord ($char));
|
||||
$tmp = mb_substr ($string, 0, $cursorPos - $minLength);
|
||||
@@ -480,10 +450,8 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif (ord($char) === 127 || ord($char) === 8)
|
||||
// Remove the previous char (Backspace)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Remove the previous char (Backspace) : ".ord ($char));
|
||||
if ($cursorPos <= $minLength)
|
||||
@@ -495,7 +463,6 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif (ord ($char[0]) === 27)
|
||||
{
|
||||
// ESC SEQUENCE
|
||||
@@ -505,7 +472,6 @@ class Console
|
||||
$this->debug ("ESC SEQUENCE : $sequence");
|
||||
if ($char === chr (27).chr (91).chr (49).chr (59).chr (53).chr (67))
|
||||
// Cursor right + Ctrl : cursor jump by word
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Cursor right + Ctrl");
|
||||
$tmp = mb_substr ($string, $cursorPos - $minLength);
|
||||
@@ -517,10 +483,8 @@ class Console
|
||||
$cursorPos = mb_strlen ($prompt.$string) + 1;
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (49).chr (59).chr (53).chr (68))
|
||||
// Cursor left + Ctrl : cursor jump by word
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Cursor left + Ctrl");
|
||||
$tmp = mb_substr ($string, 0, $cursorPos - $minLength);
|
||||
@@ -530,10 +494,8 @@ class Console
|
||||
$cursorPos = $minLength + $pos;
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (65))
|
||||
// Cursor up : display the previous history if defined
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Cursor up");
|
||||
if (! isset ($historyTmp))
|
||||
@@ -551,10 +513,8 @@ class Console
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (66))
|
||||
// Cursor down : display the next history if defined
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Cursor down");
|
||||
if ($historyPos < count ($this->history) - 1)
|
||||
@@ -573,10 +533,8 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (67))
|
||||
// Cursor right
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Cursor right");
|
||||
if ($cursorPos <= mb_strlen ($this->lineContent))
|
||||
@@ -585,10 +543,8 @@ class Console
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (68))
|
||||
// Cursor left
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Cursor left");
|
||||
if ($cursorPos > $minLength)
|
||||
@@ -597,28 +553,22 @@ class Console
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (70))
|
||||
// End key
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("End key");
|
||||
$cursorPos = $minLength + mb_strlen ($string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (72))
|
||||
// Home key
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Home key");
|
||||
$cursorPos = $minLength;
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
elseif ($char === chr (27).chr (91).chr (51).chr (126))
|
||||
// Remove the char under the cursor (Delete)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Delete key");
|
||||
if ($cursorPos > mb_strlen ($prompt.$string))
|
||||
@@ -629,18 +579,14 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
elseif (in_array (ord ($char), $this->nonWriteableChar))
|
||||
// Non writeable char : skip it
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Non writeable char : ".ord ($char));
|
||||
}
|
||||
// }}}
|
||||
else
|
||||
// Normal char : Add it to the string
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Normal char : ".ord ($char));
|
||||
$strArr = $this->mb_str_split ($string);
|
||||
@@ -653,19 +599,16 @@ class Console
|
||||
$this->rewriteLine ($prompt.$string);
|
||||
$this->moveCursor ($cursorPos);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
$this->debug ("End of readline '$string'");
|
||||
return $string;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Rewrite the line with the provided $text.
|
||||
* Delete all the old data
|
||||
* @param string $text The new text to use on line
|
||||
*/
|
||||
private function rewriteLine ($text)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Call rewriteLine ($text)");
|
||||
if ($this->echoMode)
|
||||
@@ -676,13 +619,11 @@ class Console
|
||||
$this->cursorPos = mb_strlen ($this->lineContent);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Move the cursor on position $position. The first column is $cursorPos=1
|
||||
* @param integer $cursorPos The new position on line
|
||||
*/
|
||||
private function moveCursor ($cursorPos)
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Call moveCursor ($cursorPos)");
|
||||
if ($cursorPos < 1)
|
||||
@@ -708,12 +649,10 @@ class Console
|
||||
$this->cursorPos = $cursorPos;
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Clear the existing line.
|
||||
*/
|
||||
public function clearLine ()
|
||||
// {{{
|
||||
{
|
||||
$this->debug ("Call clearLine");
|
||||
$oldLength = mb_strlen ($this->lineContent);
|
||||
@@ -742,34 +681,27 @@ class Console
|
||||
$this->lineContent = "";
|
||||
$this->cursorPos = 1;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Clear all the screen and remove the scroll of the screen
|
||||
*/
|
||||
public function clearScreen ()
|
||||
// {{{
|
||||
{
|
||||
echo "\033[2J\033[;H\033c";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the terminal Height
|
||||
*/
|
||||
public function getTermHeight ()
|
||||
// {{{
|
||||
{
|
||||
return $this->termHeight;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the terminal Width
|
||||
*/
|
||||
public function getTermWidth ()
|
||||
// {{{
|
||||
{
|
||||
return $this->termWidth;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Call a specific function when a completion key is pressed
|
||||
* The function must get the partial text as first parameter, and must return
|
||||
@@ -782,7 +714,6 @@ class Console
|
||||
* completion keys is pressed.
|
||||
*/
|
||||
public function completeFunction ($completionKeys, $completionFunction)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($completionKeys) && ! is_boolean ($completionKeys))
|
||||
$this->consoleException ("Can not set the completionKeys : not a string");
|
||||
@@ -794,33 +725,27 @@ class Console
|
||||
$this->completionKeys = $completionKeys;
|
||||
$this->completionFunction = $completionFunction;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the actual history in memory
|
||||
*/
|
||||
public function getHistory ()
|
||||
// {{{
|
||||
{
|
||||
return $this->history;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Clear the history
|
||||
* This method do NOT write the empty history on disk
|
||||
*/
|
||||
public function clearHistory ()
|
||||
// {{{
|
||||
{
|
||||
$this->history = array ();
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Write the history to disk.
|
||||
* @param string $historyFile The history file where the history is stored
|
||||
*/
|
||||
public function writeHistory ($historyFile)
|
||||
// {{{
|
||||
{
|
||||
if (file_exists ($historyFile))
|
||||
{
|
||||
@@ -848,7 +773,6 @@ class Console
|
||||
file_put_contents ($historyFile, $history, FILE_APPEND|LOCK_EX);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Read the history from the disk
|
||||
* If the file doesn't exists, return an empty array
|
||||
@@ -856,7 +780,6 @@ class Console
|
||||
* @return the read history with timestamp as key and command as value
|
||||
*/
|
||||
public function readHistory ($historyFile)
|
||||
// {{{
|
||||
{
|
||||
if (! file_exists ($historyFile))
|
||||
{
|
||||
@@ -882,7 +805,6 @@ class Console
|
||||
}
|
||||
return $this->history;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new entry in history.
|
||||
* The new line can not be empty : it is not stored, but without error
|
||||
@@ -890,7 +812,6 @@ class Console
|
||||
* @param string The new entry to add in history
|
||||
*/
|
||||
public function addHistory ($line)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($line))
|
||||
$this->consoleException ("Can not add line to history : ".
|
||||
@@ -902,14 +823,12 @@ class Console
|
||||
true);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set the maximum number of entries in the history
|
||||
* If null, get the defined maximum number
|
||||
* @param integer|null $historyMaxSize The maximum number of entries
|
||||
*/
|
||||
public function historyMaxSize ($historyMaxSize = null)
|
||||
// {{{
|
||||
{
|
||||
if ($historyMaxSize === null)
|
||||
return $this->historyMaxSize;
|
||||
@@ -918,58 +837,48 @@ class Console
|
||||
"negative value provided");
|
||||
$this->historyMaxSize = intval ($historyMaxSize);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Error management
|
||||
* @param string $message The message to throw in the exception
|
||||
*/
|
||||
public function consoleException ($message)
|
||||
// {{{
|
||||
{
|
||||
throw new \Exception ($message, 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the text color
|
||||
* @param integer $colorNum The color number to use
|
||||
*/
|
||||
public function colorText ($colorNum)
|
||||
// {{{
|
||||
{
|
||||
if (! is_int ($colorNum))
|
||||
$this->consoleException ("ColorNum provided to colorText is not an ".
|
||||
"integer");
|
||||
echo "\033[38;5;${colorNum}m";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the background text color
|
||||
* @param integer $colorNum The color number to use
|
||||
*/
|
||||
public function colorBackgroundText ($colorNum)
|
||||
// {{{
|
||||
{
|
||||
if (! is_int ($colorNum))
|
||||
$this->consoleException ("ColorNum provided to colorBackgroundText not ".
|
||||
"an integer");
|
||||
echo "\033[48;5;${colorNum}m";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Reset the colors
|
||||
*/
|
||||
public function colorReset ()
|
||||
// {{{
|
||||
{
|
||||
echo "\033[0m";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Underline the text
|
||||
* @param boolean $underline True to underline, false to remove the underline
|
||||
*/
|
||||
public function textUnderline ($underline)
|
||||
// {{{
|
||||
{
|
||||
if ($underline === false)
|
||||
$underline = 2;
|
||||
@@ -977,13 +886,11 @@ class Console
|
||||
$underline = "";
|
||||
echo "\033[${underline}4m";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Bold the text
|
||||
* @param boolean $bold True to bold, false to remove the bold
|
||||
*/
|
||||
public function textBold ($bold)
|
||||
// {{{
|
||||
{
|
||||
if ($bold === false)
|
||||
$bold = 0;
|
||||
@@ -991,7 +898,6 @@ class Console
|
||||
$bold = 1;
|
||||
echo "\033[${bold}m";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the TTY is enabled, or false if the program is called from pipe
|
||||
*/
|
||||
@@ -1007,7 +913,6 @@ class Console
|
||||
* @return array The tokens
|
||||
*/
|
||||
static public function tokenize ($line)
|
||||
// {{{
|
||||
{
|
||||
$tokens = array ();
|
||||
$token = strtok (trim ($line),' ');
|
||||
@@ -1022,7 +927,6 @@ class Console
|
||||
}
|
||||
return $tokens;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function return an array with each char, but supports UTF-8
|
||||
* @param string $string The string to explode
|
||||
@@ -1030,20 +934,17 @@ class Console
|
||||
* @return array
|
||||
*/
|
||||
private function mb_str_split ($string, $split_length = 1)
|
||||
// {{{
|
||||
{
|
||||
$res = array();
|
||||
for ($i = 0; $i < mb_strlen ($string); $i += $split_length)
|
||||
$res[] = mb_substr ($string, $i, $split_length);
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function debug the data
|
||||
* @param mixed $data The data to store
|
||||
*/
|
||||
private function debug ($data)
|
||||
// {{{
|
||||
{
|
||||
if ($this->debug === false)
|
||||
return;
|
||||
@@ -1051,14 +952,12 @@ class Console
|
||||
$data = var_export ($data, true);
|
||||
file_put_contents ($this->debug, date ("H:i:s")." $data\n", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Look in the array which first chars of each possibilites are identical.
|
||||
* @param array $completeArr The values to examine
|
||||
* @return string the identical chars
|
||||
*/
|
||||
private function shortestIdenticalValues ($completeArr)
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($completeArr))
|
||||
return "";
|
||||
@@ -1087,5 +986,4 @@ class Console
|
||||
}
|
||||
return $identicalString;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ class Convert
|
||||
$exception = true,
|
||||
$inputTimezone = "Europe/Paris",
|
||||
$outputTimezone = "Europe/Paris")
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($inputDate))
|
||||
throw new \Exception ("The date to convert is not a string", 500);
|
||||
@@ -60,14 +59,12 @@ class Convert
|
||||
$date->setTimezone(new \DateTimeZone ($outputTimezone));
|
||||
return $date->format ($outputFormat);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert the first char to capital and the rest of the sentence in
|
||||
* lowercase (like ucfirst, but UTF8 compliant)
|
||||
* @param string $str The string to convert
|
||||
*/
|
||||
public static function ucfirst ($str)
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("mb_strtoupper"))
|
||||
throw new \Exception ("PHP don't have the MB Support. Please add it !",
|
||||
@@ -75,7 +72,6 @@ class Convert
|
||||
$a = mb_strtoupper (mb_substr ($str, 0, 1, 'UTF-8'), 'UTF-8');
|
||||
return $a . mb_substr ($str, 1, null, 'UTF-8');
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert the first char of each word of a sentence to capital. The word
|
||||
* delimiter can be provided.
|
||||
@@ -87,7 +83,6 @@ class Convert
|
||||
* @return string
|
||||
*/
|
||||
public static function ucwords ($str, $delimiters = " \t\r\n\f\v")
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("mb_strtolower"))
|
||||
throw new \Exception ("PHP don't have the MB Support. Please add it !",
|
||||
@@ -101,7 +96,6 @@ class Convert
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert the provided float to human readable format
|
||||
* Example : 1440000 => 1.44MB
|
||||
@@ -113,7 +107,6 @@ class Convert
|
||||
*/
|
||||
public static function humanSize ($value, $decimals = 2, $power = 1000,
|
||||
$unit = "B")
|
||||
// {{{
|
||||
{
|
||||
if (! is_integer ($value) && ! is_float ($value))
|
||||
throw new \Exception ("convert::humanSize value not numerical : ".
|
||||
@@ -163,5 +156,4 @@ class Convert
|
||||
|
||||
return sprintf ("%.${decimals}f", $display).$size[$factor].$unit;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ class Csrf
|
||||
/** Manage the singleton
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
if (isset ($GLOBALS["domframework"]["csrf"]))
|
||||
{
|
||||
@@ -43,13 +42,11 @@ class Csrf
|
||||
$GLOBALS["domframework"]["csrf"] = $this;
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the status of the CSRF protection
|
||||
* @param boolean|null $val The value to set/get if null
|
||||
*/
|
||||
public function csrfState ($val = null)
|
||||
// {{{
|
||||
{
|
||||
if ($val === null)
|
||||
return $this->csrf;
|
||||
@@ -57,13 +54,11 @@ class Csrf
|
||||
$GLOBALS["domframework"]["csrf"] = $this;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the name of the field in HTML
|
||||
* @param string|null $val The value to set/get if null
|
||||
*/
|
||||
public function field ($val = null)
|
||||
// {{{
|
||||
{
|
||||
if ($val === null)
|
||||
return $this->field;
|
||||
@@ -71,12 +66,10 @@ class Csrf
|
||||
$GLOBALS["domframework"]["csrf"] = $this;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function return the token
|
||||
*/
|
||||
public function createToken ()
|
||||
// {{{
|
||||
{
|
||||
$l = 30; // Number of chars in token
|
||||
$c = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
@@ -88,14 +81,12 @@ class Csrf
|
||||
$GLOBALS["domframework"]["csrf"] = $this;
|
||||
return $this->csrfToken;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check if the provided token is the right token, defined last displayed
|
||||
* page
|
||||
* @param string $tokenFromUser The value csrf the user's token
|
||||
*/
|
||||
public function checkToken ($tokenFromUser)
|
||||
// {{{
|
||||
{
|
||||
if ($this->csrf === FALSE )
|
||||
return TRUE;
|
||||
@@ -135,12 +126,10 @@ class Csrf
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the CSRF token in a hidden field
|
||||
*/
|
||||
public function displayFormCSRF ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->csrfToken == "")
|
||||
$this->createToken ();
|
||||
@@ -148,40 +137,33 @@ class Csrf
|
||||
$res .= "value='$this->csrfToken'/>\n";
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the token if exists or create a new one if needed
|
||||
*/
|
||||
public function getToken ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->csrfToken === "")
|
||||
$this->createToken ();
|
||||
return $this->csrfToken;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add more time to existing CSRF token
|
||||
* @param string $tokenFromUser The existing token
|
||||
*/
|
||||
public function extendToken ($tokenFromUser)
|
||||
// {{{
|
||||
{
|
||||
$this->checkToken ($tokenFromUser);
|
||||
$_SESSION["domframework"]["csrf"][$tokenFromUser] = microtime (TRUE);
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check an existing token, then delete it
|
||||
* @param string $tokenFromUser The existing token
|
||||
*/
|
||||
public function checkThenDeleteToken ($tokenFromUser)
|
||||
// {{{
|
||||
{
|
||||
$this->checkToken ($tokenFromUser);
|
||||
unset ($_SESSION["domframework"]["csrf"][$tokenFromUser]);
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -14,13 +14,11 @@ class Encrypt
|
||||
/** Check if openssl library is enabled
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("openssl_random_pseudo_bytes"))
|
||||
throw new \Exception ("No OpenSSL support in PHP. Please install it",
|
||||
500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Encrypt the payload to not be readable by anybody
|
||||
* @param string $payload The payload to encrypt
|
||||
@@ -29,7 +27,6 @@ class Encrypt
|
||||
* @return encrypted payload
|
||||
*/
|
||||
public function encrypt ($payload, $ckey, $cipherMethod = "des-ede3-cbc")
|
||||
// {{{
|
||||
{
|
||||
if (! in_array ($cipherMethod, openssl_get_cipher_methods()))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -55,7 +52,6 @@ class Encrypt
|
||||
$ciphertext = $iv . $ciphertext;
|
||||
return $ciphertext;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Decrypt the ciphertext
|
||||
* @param string $ciphertext The payload to decrypt
|
||||
@@ -64,7 +60,6 @@ class Encrypt
|
||||
* @return decrypted text
|
||||
*/
|
||||
public function decrypt ($ciphertext, $ckey, $cipherMethod = "des-ede3-cbc")
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($ciphertext))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -96,5 +91,4 @@ class Encrypt
|
||||
$ciphertext = substr ($ciphertext, $ivlen);
|
||||
return openssl_decrypt ($ciphertext, $cipherMethod, $ckey, $options, $iv);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ class File
|
||||
* @throws If directory not exists, or the directory is not executable
|
||||
*/
|
||||
public function chdir ($directory)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "chdir ($directory)");
|
||||
$tmpdirectory = $this->realpath ($directory);
|
||||
@@ -46,7 +45,6 @@ class File
|
||||
$this->debug (1, "chdir $directory -> $this->cwd");
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Change the group for a file/dir...
|
||||
* @param string $filename The file/directory to change
|
||||
@@ -54,7 +52,6 @@ class File
|
||||
* @throws If filename not exists, or the directory is not RW
|
||||
*/
|
||||
public function chgrp ($filename, $group)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "chgrp ($filename, $group)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -71,7 +68,6 @@ class File
|
||||
$this->debug (1, "chgrp ($filename, $group) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Change the rights mode for a file/dir...
|
||||
* @param string $filename The file/directory to change
|
||||
@@ -79,7 +75,6 @@ class File
|
||||
* @throws If filename not exists, or the directory is not RW
|
||||
*/
|
||||
public function chmod ($filename, $mode)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "chmod ($filename, $mode)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -96,7 +91,6 @@ class File
|
||||
$this->debug (1, "chmod ($filename, $mode) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Change the owner for a file/dir...
|
||||
* @param string $filename The file/directory to change
|
||||
@@ -104,7 +98,6 @@ class File
|
||||
* @throws If filename not exists, or the directory is not RW
|
||||
*/
|
||||
public function chown ($filename, $user)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "chown ($filename, $user)");
|
||||
if (posix_getuid () !== 0 &&
|
||||
@@ -127,7 +120,6 @@ class File
|
||||
$this->debug (1, "chown ($filename, $user) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Chroot in the provided directory
|
||||
* @param string $directory The directory to chroot
|
||||
@@ -135,7 +127,6 @@ class File
|
||||
* @throws If directory not exists, or the directory is not executable
|
||||
*/
|
||||
public function chroot ($directory)
|
||||
// {{{
|
||||
{
|
||||
// Use the checkPathRO (using the $this->baseDir) to not allow to go away of
|
||||
// the chroot.
|
||||
@@ -147,7 +138,6 @@ class File
|
||||
$this->debug (1, "chroot $directory -> $this->baseDir");
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the file contents in an array (like 'file' function, but can not
|
||||
* have the same name as the class...)
|
||||
@@ -157,7 +147,6 @@ class File
|
||||
* exists or is not readable
|
||||
*/
|
||||
public function fileArray ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "file ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -174,7 +163,6 @@ class File
|
||||
$this->debug (1, "file ($filename) => ". count ($contents). " rows");
|
||||
return $contents;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Checks whether a file or directory exists
|
||||
* @param string $filename The file or directory to verify
|
||||
@@ -182,7 +170,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function file_exists ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "file_exists ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -199,7 +186,6 @@ class File
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the file contents
|
||||
* @param string $filename Name of the file to read
|
||||
@@ -208,7 +194,6 @@ class File
|
||||
* exists or is not readable
|
||||
*/
|
||||
public function file_get_contents ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "file_get_contents ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -226,7 +211,6 @@ class File
|
||||
" bytes");
|
||||
return $contents;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Write a string to a file
|
||||
* @param string $filename Path to the file where to write the data
|
||||
@@ -237,7 +221,6 @@ class File
|
||||
* exists and is not writeable
|
||||
*/
|
||||
public function file_put_contents ($filename, $data, $flags=0)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "file_put_contents ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -256,7 +239,6 @@ class File
|
||||
return $contents;
|
||||
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the file modification time of a file
|
||||
* @param string $filename Path to the file
|
||||
@@ -266,14 +248,12 @@ class File
|
||||
* @throws If parent directory not exists, is not writeable
|
||||
*/
|
||||
public function filemtime ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "filemtime ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
$this->checkPathRO (dirname ($filename));
|
||||
return filemtime ($filename);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the file size
|
||||
* @param string $filename Path to the file
|
||||
@@ -281,14 +261,12 @@ class File
|
||||
* @throws If parent directory not exists, is not writeable
|
||||
*/
|
||||
public function filesize ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "filesize ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
$this->checkPathRO (dirname ($filename));
|
||||
return filesize ($filename);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the file info of the provided filename
|
||||
* @param string $filename Path to the file
|
||||
@@ -296,7 +274,6 @@ class File
|
||||
* @throws If parent directory not exists, is not writeable
|
||||
*/
|
||||
public function fileinfoMimeType ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "filesize ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -304,17 +281,14 @@ class File
|
||||
$finfo = new \finfo (FILEINFO_MIME_TYPE);
|
||||
return $finfo->file ($filename);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the current working directory
|
||||
* @return string the current working directory */
|
||||
public function getcwd ()
|
||||
// {{{
|
||||
{
|
||||
$this->debug (1, "getcwd $this->cwd");
|
||||
return $this->cwd;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Find pathnames matching a pattern
|
||||
* If there is some unreadable files, skip them quietly
|
||||
@@ -325,7 +299,6 @@ class File
|
||||
* or if there is one file unreadable
|
||||
*/
|
||||
public function glob ($pattern, $flags=0)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "glob ($pattern, $flags)");
|
||||
$this->checkPathRO ($this->baseDir);
|
||||
@@ -355,7 +328,6 @@ class File
|
||||
}
|
||||
return $files;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Tells whether the given filename is a directory
|
||||
* @param string $filename The filename to test
|
||||
@@ -364,7 +336,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function is_dir ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "is_dir ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -373,7 +344,6 @@ class File
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Tells whether the given filename is a valid file
|
||||
* @param string $filename The filename to test
|
||||
@@ -381,7 +351,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function is_file ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "is_file ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -390,7 +359,6 @@ class File
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Tells whether a file exists and is executable
|
||||
* @param string $filename The filename to test
|
||||
@@ -398,7 +366,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function is_executable ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "is_executable ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -407,7 +374,6 @@ class File
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Tells whether a file exists and is readable
|
||||
* @param string $filename The filename to test
|
||||
@@ -415,7 +381,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function is_readable ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "is_readable ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -424,7 +389,6 @@ class File
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Tells whether a file exists and is writeable
|
||||
* @param string $filename The filename to test
|
||||
@@ -432,7 +396,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function is_writeable ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "is_writeable ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -441,7 +404,6 @@ class File
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Lock a file exclusively
|
||||
* @param string $filename The file to lock
|
||||
@@ -449,7 +411,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not writeable
|
||||
*/
|
||||
public function lockEX ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "lockEX ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -465,7 +426,6 @@ class File
|
||||
$this->locks[$filename] = fopen ($filename, "rt");
|
||||
return flock ($this->locks[$filename], LOCK_EX);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Lock a file shared (allow multiple read)
|
||||
* @param string $filename The file to lock
|
||||
@@ -473,7 +433,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not writeable
|
||||
*/
|
||||
public function lockSH ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "lockSH ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -489,7 +448,6 @@ class File
|
||||
$this->locks[$filename] = fopen ($filename, "rt");
|
||||
return flock ($this->locks[$filename], LOCK_SH);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Unlock a file previously locked
|
||||
* @param string $filename The file to lock
|
||||
@@ -497,7 +455,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not writeable
|
||||
*/
|
||||
public function lockUN ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "lockUN ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -511,7 +468,6 @@ class File
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Calculate the md5 sum of a file
|
||||
* @param string $filename The file to hash
|
||||
@@ -519,7 +475,6 @@ class File
|
||||
* @throws If the file doesn't exists
|
||||
*/
|
||||
public function md5_file ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "md5_file ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -534,7 +489,6 @@ class File
|
||||
$filename), 500);
|
||||
return md5_file ($filename);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a new directory
|
||||
* @param string $pathname The directory to create
|
||||
@@ -545,7 +499,6 @@ class File
|
||||
* @throws If parent directory not exists, is not writeable
|
||||
*/
|
||||
public function mkdir ($pathname, $mode = 0777, $recursive = false)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "mkdir ($pathname, $mode, $recursive)");
|
||||
$pathname = $this->realpath ($pathname);
|
||||
@@ -583,7 +536,6 @@ class File
|
||||
$this->debug (1, "mkdir ($pathname, $mode, $recursive) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Copy a file or a directory
|
||||
* @param string $oldname The file to copy
|
||||
@@ -592,7 +544,6 @@ class File
|
||||
* @return bool
|
||||
*/
|
||||
public function copy ($oldname, $newname)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "copy ($oldname, $newname)");
|
||||
$oldname = $this->realpath ($oldname);
|
||||
@@ -615,7 +566,6 @@ class File
|
||||
$this->debug (1, "copy ($oldname, $newname) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Renames a file or directory
|
||||
* @param string $oldname The file or directory to rename
|
||||
@@ -624,7 +574,6 @@ class File
|
||||
* @return bool
|
||||
*/
|
||||
public function rename ($oldname, $newname)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "rename ($oldname, $newname)");
|
||||
$oldname = $this->realpath ($oldname);
|
||||
@@ -635,7 +584,6 @@ class File
|
||||
$this->debug (1, "rename ($oldname, $newname) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return a ini file converted to an array
|
||||
* @param string $filename The filename of the ini file being parsed.
|
||||
@@ -643,7 +591,6 @@ class File
|
||||
* @return array
|
||||
*/
|
||||
public function parse_ini_file ($filename, $process_sections = false)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "parse_ini_file ($filename, $process_sections)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -658,7 +605,6 @@ class File
|
||||
$filename), 500);
|
||||
return parse_ini_file ($filename, $process_sections);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the canonical absolute path. Do not check if the directory exists,
|
||||
* if there is links. Just calculate the realpath based on the chroot value
|
||||
@@ -666,7 +612,6 @@ class File
|
||||
* @return string the canonical absolute path
|
||||
*/
|
||||
public function realpath ($path)
|
||||
// {{{
|
||||
{
|
||||
$oriPath = $path;
|
||||
$this->debug (2, "realpath ($oriPath)");
|
||||
@@ -705,7 +650,6 @@ class File
|
||||
$this->debug (1, "realpath ($oriPath) => $path");
|
||||
return $path;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Remove the provided directory
|
||||
* If the recurse flag is true, remove the content too (files and
|
||||
@@ -717,7 +661,6 @@ class File
|
||||
* dir is not writeable
|
||||
*/
|
||||
public function rmdir ($dirname, $recursive=false)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "rmdir ($dirname, $recursive)");
|
||||
$tmpdirname = $this->realpath ($dirname);
|
||||
@@ -739,7 +682,6 @@ class File
|
||||
}
|
||||
return rmdir ($tmpdirname);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the list of files and directories in the directory.
|
||||
* Do not return the . and .. virtual dirs.
|
||||
@@ -749,7 +691,6 @@ class File
|
||||
* @throws If directory not exists, or is not executable
|
||||
*/
|
||||
public function scandir ($directory)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "scandir ($directory)");
|
||||
$directory = $this->realpath ($directory);
|
||||
@@ -758,7 +699,6 @@ class File
|
||||
natsort ($res);
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the list of files and directories in the directory.
|
||||
* Do not return the . and .. virtual dirs.
|
||||
@@ -768,7 +708,6 @@ class File
|
||||
* @throws If directory not exists, or is not executable
|
||||
*/
|
||||
public function scandirNotSorted ($directory)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "scandirNotSorted ($directory)");
|
||||
$directory = $this->realpath ($directory);
|
||||
@@ -777,7 +716,6 @@ class File
|
||||
array('..', '.')));
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Calculate the sha1 sum of a file
|
||||
* @param string $filename The file to hash
|
||||
@@ -785,7 +723,6 @@ class File
|
||||
* @throws If the file doesn't exists
|
||||
*/
|
||||
public function sha1_file ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "sha1_file ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -800,7 +737,6 @@ class File
|
||||
$filename), 500);
|
||||
return sha1_file ($filename);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a new file or update the timestamp if the file exists
|
||||
* @param string $filename the filename
|
||||
@@ -812,7 +748,6 @@ class File
|
||||
* @throws If parent directory not exists, is not writeable
|
||||
*/
|
||||
public function touch ($filename, $time = null, $atime = null)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "touch ($filename, $time, $atime)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -825,7 +760,6 @@ class File
|
||||
$this->debug (1, "touch ($filename, $time, $atime) => $rc");
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Delete an existing file.
|
||||
* @param string $filename The filename to remove
|
||||
@@ -833,7 +767,6 @@ class File
|
||||
* @throws If parent directory not exists, or is not executable
|
||||
*/
|
||||
public function unlink ($filename)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "unlink ($filename)");
|
||||
$filename = $this->realpath ($filename);
|
||||
@@ -842,7 +775,6 @@ class File
|
||||
return false;
|
||||
return unlink ($filename);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check all the parents of the $directory if they are available, and
|
||||
* executable. The path must exists.
|
||||
@@ -854,7 +786,6 @@ class File
|
||||
* @throws if there is a missing part, or a parent is not executable
|
||||
*/
|
||||
private function checkPathRO ($path)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "checkPathRO ($path)");
|
||||
$path = preg_replace ("#//+#", "/", $path);
|
||||
@@ -925,7 +856,6 @@ class File
|
||||
}
|
||||
return $this->checkExternalPathRO ($path);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check all the parents of the $directory if they are available, and
|
||||
* executable. The path must exists.
|
||||
@@ -937,7 +867,6 @@ class File
|
||||
* @throws if there is a missing part, or a parent is not executable
|
||||
*/
|
||||
private function checkPathRW ($path)
|
||||
// {{{
|
||||
{
|
||||
$this->debug (2, "checkPathRW ($path)");
|
||||
$this->checkPathRO ($path);
|
||||
@@ -961,7 +890,6 @@ class File
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Save a debug log
|
||||
* @param integer $prio The message priority. Should be higher than
|
||||
@@ -970,7 +898,6 @@ class File
|
||||
* @return null
|
||||
*/
|
||||
private function debug ($prio, $message)
|
||||
// {{{
|
||||
{
|
||||
if ($this->debug === false || $this->debug === 0)
|
||||
return;
|
||||
@@ -982,7 +909,6 @@ class File
|
||||
// FILE_APPEND);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** External function allowed to be overloaded to test the RO access to a
|
||||
* resource
|
||||
@@ -990,11 +916,9 @@ class File
|
||||
* @return boolean true if RO access, false if not
|
||||
*/
|
||||
public function checkExternalPathRO ($path)
|
||||
// {{{
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** External function allowed to be overloaded to test the RW access to a
|
||||
* resource
|
||||
@@ -1002,9 +926,7 @@ class File
|
||||
* @return boolean true if RW access, false if not
|
||||
*/
|
||||
public function checkExternalPathRW ($path)
|
||||
// {{{
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -66,14 +66,11 @@ class Form
|
||||
* @param string|null $formName The form name
|
||||
*/
|
||||
public function __construct ($formName = "form")
|
||||
// {{{
|
||||
{
|
||||
$this->formName = $formName;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// The setters of the properties
|
||||
// {{{
|
||||
/** Set the debug level
|
||||
* @param integer $val The debug value
|
||||
*/
|
||||
@@ -161,14 +158,12 @@ class Form
|
||||
$this->formTemplate = $formTemplate;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The private method to log if the $this->loggingCallable is defined
|
||||
* @param integer $prio The priority of the message
|
||||
* @param string $msg The message to store
|
||||
*/
|
||||
private function loggingCallable ($prio, $msg)
|
||||
// {{{
|
||||
{
|
||||
if (! is_callable ($this->loggingCallable))
|
||||
return;
|
||||
@@ -177,7 +172,6 @@ class Form
|
||||
$base = $this->loggingBasemsg. " ";
|
||||
call_user_func ($this->loggingCallable, $prio, $base.$msg);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Save the array of fields into the structure.
|
||||
* Available :
|
||||
@@ -208,29 +202,24 @@ class Form
|
||||
* @param array $fields The fields to be displayed
|
||||
*/
|
||||
public function fields ($fields)
|
||||
// {{{
|
||||
{
|
||||
$this->fields = $fields;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a field to the form. For the details of a field, see the description
|
||||
* in fields method
|
||||
* @param object $field The field to add
|
||||
*/
|
||||
public function addfield ($field)
|
||||
// {{{
|
||||
{
|
||||
$this->fields[] = $field;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the values provided by the user. Test the CSRF before continue
|
||||
* NEVER read the values from $_POST in your codes or CSRF will not be
|
||||
* checked
|
||||
*/
|
||||
public function values ()
|
||||
// {{{
|
||||
{
|
||||
$values = array ();
|
||||
if ($this->method === "post")
|
||||
@@ -286,7 +275,6 @@ class Form
|
||||
|
||||
return $values;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the fields in HTML code. If $values is provided, use it in place
|
||||
* of default values. In case of select boxes, $values are the selected
|
||||
@@ -300,7 +288,6 @@ class Form
|
||||
*/
|
||||
public function printHTML ($method = 'post', $values = NULL,
|
||||
$errors = array())
|
||||
// {{{
|
||||
{
|
||||
if (count ($this->fields) === 0)
|
||||
{
|
||||
@@ -425,13 +412,11 @@ class Form
|
||||
$res .= "</form>\n";
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check the token from the user
|
||||
* @param string $tokenFromUser The value form the user's token
|
||||
*/
|
||||
public function checkToken ($tokenFromUser)
|
||||
// {{{
|
||||
{
|
||||
$csrf = new Csrf ();
|
||||
$csrf->field = $this->csrfField;
|
||||
@@ -439,18 +424,15 @@ class Form
|
||||
// problem. If there is no problem, it delete the token
|
||||
$csrf->checkThenDeleteToken ($tokenFromUser);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the token generated in form
|
||||
*/
|
||||
public function getToken ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->csrfToken === "")
|
||||
$this->createToken ();
|
||||
return $this->csrfToken;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check if the parameters are correct with the defined fields
|
||||
* Need the session !
|
||||
@@ -460,7 +442,6 @@ class Form
|
||||
* @return array containing the errors
|
||||
*/
|
||||
public function verify ($values, $fields=array ())
|
||||
// {{{
|
||||
{
|
||||
if (count ($fields) === 0)
|
||||
{
|
||||
@@ -479,7 +460,6 @@ class Form
|
||||
}
|
||||
return $errors;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** If there is at least one error reported in $errors, save the old values
|
||||
* and the errors in the session, and redirect to the provided url.
|
||||
@@ -501,7 +481,6 @@ class Form
|
||||
$route->redirect ("/admin/space/");
|
||||
*/
|
||||
public function redirectIfError ($values, $errors, $route, $url = "")
|
||||
// {{{
|
||||
{
|
||||
$this->saveValuesErrors ($values, $errors);
|
||||
if ($url === "")
|
||||
@@ -509,7 +488,6 @@ class Form
|
||||
if (count ($errors)) $route->redirect ($url);
|
||||
$this->saveValuesErrorsReset ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Save the values and errors to be displayed in the next page if the session
|
||||
* is available
|
||||
@@ -518,7 +496,6 @@ class Form
|
||||
* @param array|null $errors The errors detected by a verify
|
||||
*/
|
||||
public function saveValuesErrors ($values, $errors=array ())
|
||||
// {{{
|
||||
{
|
||||
if (isset ($_SESSION))
|
||||
{
|
||||
@@ -526,18 +503,15 @@ class Form
|
||||
$_SESSION["domframework"]["form"][$this->formName]["errors"] = $errors;
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Reset the saved values to provide a clean form next page
|
||||
* Need the session to work
|
||||
*/
|
||||
public function saveValuesErrorsReset ()
|
||||
// {{{
|
||||
{
|
||||
unset ($_SESSION["domframework"]["form"][$this->formName]["values"]);
|
||||
unset ($_SESSION["domframework"]["form"][$this->formName]["errors"]);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the stored values if there is one. If there is no stored values,
|
||||
* return the values provided as parameter
|
||||
@@ -545,7 +519,6 @@ class Form
|
||||
* @return array The values to use
|
||||
*/
|
||||
public function getOldValues ($values)
|
||||
// {{{
|
||||
{
|
||||
if (isset ($_SESSION["domframework"]["form"][$this->formName]["values"]))
|
||||
{
|
||||
@@ -554,7 +527,6 @@ class Form
|
||||
}
|
||||
return $values;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the stored errors if there is one. If there is no sorted errors,
|
||||
* return the errors provided as parameter
|
||||
@@ -562,7 +534,6 @@ class Form
|
||||
* @return array The errors to use
|
||||
*/
|
||||
public function getOldErrors ($errors)
|
||||
// {{{
|
||||
{
|
||||
if (isset ($_SESSION["domframework"]["form"][$this->formName]["errors"]))
|
||||
{
|
||||
@@ -571,7 +542,6 @@ class Form
|
||||
}
|
||||
return $errors;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert Date received in one format to another.
|
||||
* If the provided string is not corresponding to the format, don't change
|
||||
@@ -583,7 +553,6 @@ class Form
|
||||
* @return string
|
||||
*/
|
||||
public function convertDate ($inputDate, $inputFormat, $outputFormat)
|
||||
// {{{
|
||||
{
|
||||
$date = \DateTime::CreateFromFormat ($inputFormat, $inputDate);
|
||||
if ($date === false)
|
||||
@@ -593,5 +562,4 @@ class Form
|
||||
return $inputDate;
|
||||
return $date->format ($outputFormat);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -72,25 +72,20 @@ class Formfield
|
||||
* @param string|null $label Label of the field
|
||||
*/
|
||||
public function __construct ($name, $label = "")
|
||||
// {{{
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->label = $label;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Display really the form
|
||||
*/
|
||||
public function display ()
|
||||
// {{{
|
||||
{
|
||||
$func = "field".$this->formTemplate.$this->type;
|
||||
return $this->$func ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
// Setters for all the properties of the class
|
||||
// {{{
|
||||
/** Set the type of the field
|
||||
* @param string $val The value of the type of the field
|
||||
*/
|
||||
@@ -180,16 +175,13 @@ class Formfield
|
||||
$this->cols = $val;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
//////////////////////////
|
||||
//// BOOTSTRAP3 ////
|
||||
//////////////////////////
|
||||
// {{{
|
||||
/** Return the checkbox defined
|
||||
*/
|
||||
private function fieldBootstrap3checkbox ()
|
||||
// {{{
|
||||
{
|
||||
// No $this->multiple, $this->rows $this->cols $this->placeholder,
|
||||
// $this->maxlength
|
||||
@@ -317,12 +309,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the hidden field defined
|
||||
*/
|
||||
private function fieldBootstrap3hidden ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->label, $this->multiple, $this->readonly, $this->hidden,
|
||||
@@ -339,12 +329,10 @@ class Formfield
|
||||
$res .= "/>\n";
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the password field defined
|
||||
*/
|
||||
private function fieldBootstrap3password ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->rows $this->cols
|
||||
@@ -413,12 +401,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the radio field defined
|
||||
*/
|
||||
private function fieldBootstrap3radio ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->rows $this->cols $this->placeholder
|
||||
@@ -505,12 +491,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the checkbox defined
|
||||
*/
|
||||
private function fieldBootstrap3select ()
|
||||
// {{{
|
||||
{
|
||||
// No $this->placeholder $this->maxlength
|
||||
$res = "";
|
||||
@@ -631,12 +615,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the submit defined
|
||||
*/
|
||||
private function fieldBootstrap3submit ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->label, $this->multiple, $this->error, $this->rows,
|
||||
@@ -674,12 +656,10 @@ class Formfield
|
||||
$res .= " </div>\n";
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the textarea defined
|
||||
*/
|
||||
private function fieldBootstrap3textarea ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->titles
|
||||
@@ -751,12 +731,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the text defined
|
||||
*/
|
||||
private function fieldBootstrap3text ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->titles, $this->rows, $this->cols
|
||||
@@ -825,12 +803,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the file defined
|
||||
*/
|
||||
private function fieldBootstrap3file ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->titles, $this->rows, $this->cols
|
||||
@@ -912,17 +888,13 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
// }}}
|
||||
|
||||
//////////////////////////
|
||||
//// BOOTSTRAP4 ////
|
||||
//////////////////////////
|
||||
// {{{
|
||||
/** Return the checkbox defined
|
||||
*/
|
||||
private function fieldBootstrap4checkbox ()
|
||||
// {{{
|
||||
{
|
||||
// No $this->multiple, $this->rows $this->cols $this->placeholder,
|
||||
// $this->maxlength
|
||||
@@ -1061,12 +1033,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the hidden field defined
|
||||
*/
|
||||
private function fieldBootstrap4hidden ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->label, $this->multiple, $this->readonly, $this->hidden,
|
||||
@@ -1083,12 +1053,10 @@ class Formfield
|
||||
$res .= "/>\n";
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the password field defined
|
||||
*/
|
||||
private function fieldBootstrap4password ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->rows $this->cols
|
||||
@@ -1166,12 +1134,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the radio field defined
|
||||
*/
|
||||
private function fieldBootstrap4radio ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->rows $this->cols $this->placeholder
|
||||
@@ -1267,12 +1233,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the checkbox defined
|
||||
*/
|
||||
private function fieldBootstrap4select ()
|
||||
// {{{
|
||||
{
|
||||
// No $this->placeholder $this->maxlength
|
||||
$res = "";
|
||||
@@ -1402,12 +1366,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the submit defined
|
||||
*/
|
||||
private function fieldBootstrap4submit ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->label, $this->multiple, $this->error, $this->rows,
|
||||
@@ -1445,12 +1407,10 @@ class Formfield
|
||||
$res .= " </div>\n";
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the textarea defined
|
||||
*/
|
||||
private function fieldBootstrap4textarea ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->titles
|
||||
@@ -1531,12 +1491,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the text defined
|
||||
*/
|
||||
private function fieldBootstrap4text ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->titles, $this->rows, $this->cols
|
||||
@@ -1614,12 +1572,10 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the file defined
|
||||
*/
|
||||
private function fieldBootstrap4file ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
// No $this->multiple, $this->titles, $this->rows, $this->cols
|
||||
@@ -1709,7 +1665,5 @@ class Formfield
|
||||
$res .= " </div>\n"; // End form-group
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// }}}
|
||||
}
|
||||
|
||||
-28
@@ -21,7 +21,6 @@ class Fts
|
||||
///////////////////////////
|
||||
//// PROPERTIES ////
|
||||
///////////////////////////
|
||||
// {{{
|
||||
/** The minimum length of a token to search
|
||||
*/
|
||||
public $minLength = 3;
|
||||
@@ -46,7 +45,6 @@ class Fts
|
||||
/** The callable method to run on each sentence of the query
|
||||
*/
|
||||
private $callTokenSentence = null;
|
||||
// }}}
|
||||
|
||||
////////////////////////////
|
||||
//// CONSTRUCTOR ////
|
||||
@@ -54,13 +52,11 @@ class Fts
|
||||
/** The constructor check the availability of the MB module
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("mb_strlen"))
|
||||
throw new \Exception ("PHP don't have the MB Support. Please add it !",
|
||||
500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
////////////////////////
|
||||
//// GETTERS ////
|
||||
@@ -68,29 +64,23 @@ class Fts
|
||||
/** Get the tokens store after the search
|
||||
*/
|
||||
public function getTokens ()
|
||||
// {{{
|
||||
{
|
||||
return $this->tokens;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the tokens store after the search, without the too small ones
|
||||
*/
|
||||
public function getTokensMin ()
|
||||
// {{{
|
||||
{
|
||||
return $this->tokensMin;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the regexes defined after the analyzer
|
||||
*/
|
||||
public function getRegexes ()
|
||||
// {{{
|
||||
{
|
||||
return $this->regexes;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the method to call on tokens word only
|
||||
* The method must return the token updated
|
||||
@@ -98,7 +88,6 @@ class Fts
|
||||
* @return $this
|
||||
*/
|
||||
public function callTokenWord ($callable)
|
||||
// {{{
|
||||
{
|
||||
if (! is_callable ($callable))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -106,7 +95,6 @@ class Fts
|
||||
$this->callTokenWord = $callable;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the method to call on tokens sentence only
|
||||
* The method must return the token updated
|
||||
@@ -114,7 +102,6 @@ class Fts
|
||||
* @return $this
|
||||
*/
|
||||
public function callTokenSentence ($callable)
|
||||
// {{{
|
||||
{
|
||||
if (! is_callable ($callable))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -122,7 +109,6 @@ class Fts
|
||||
$this->callTokenSentence = $callable;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
//////////////////////////////
|
||||
//// PUBLIC METHODS ////
|
||||
@@ -133,7 +119,6 @@ class Fts
|
||||
* @return array The operator and the associated regex value to search
|
||||
*/
|
||||
public function search ($query)
|
||||
// {{{
|
||||
{
|
||||
$query = trim ($query);
|
||||
$this->tokens = $this->tokenizer ($query);
|
||||
@@ -151,7 +136,6 @@ class Fts
|
||||
$this->tokensMin["minuses"]);
|
||||
return $this->regexes;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Construct the query based on the tokens.
|
||||
* The tokens can be updated by methods so the query may be modified by the
|
||||
@@ -159,7 +143,6 @@ class Fts
|
||||
* @return string
|
||||
*/
|
||||
public function getQuery ()
|
||||
// {{{
|
||||
{
|
||||
$res = "";
|
||||
foreach ($this->tokens["tokens"] as $key => $token)
|
||||
@@ -173,7 +156,6 @@ class Fts
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return $line if the $query match against $line, or false if not
|
||||
* @param string $line The line to examine
|
||||
@@ -181,7 +163,6 @@ class Fts
|
||||
* @return string|false The $line if match, false
|
||||
*/
|
||||
public function searchString ($line, $query)
|
||||
// {{{
|
||||
{
|
||||
$regexes = $this->search ($query);
|
||||
if (empty ($this->tokens))
|
||||
@@ -198,7 +179,6 @@ class Fts
|
||||
}
|
||||
return $line;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Search in SQL
|
||||
* @param string $query The text to found in the database
|
||||
@@ -208,7 +188,6 @@ class Fts
|
||||
* @return array The result of the query
|
||||
*/
|
||||
public function searchSQL ($query, $dblayeroo, $fields)
|
||||
// {{{
|
||||
{
|
||||
$regexes = $this->search ($query);
|
||||
if (empty ($regexes["operator"]))
|
||||
@@ -251,7 +230,6 @@ class Fts
|
||||
}
|
||||
return $dbl->execute ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
///////////////////////////////
|
||||
//// PRIVATE METHODS ////
|
||||
@@ -262,7 +240,6 @@ class Fts
|
||||
* @return array The operator and the associated regex value to search
|
||||
*/
|
||||
private function regex ($tokens, $minuses)
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($tokens))
|
||||
throw new \Exception ("Invalid tokens provided to fts:tokenMinLength",
|
||||
@@ -284,7 +261,6 @@ class Fts
|
||||
}
|
||||
return array ("operator"=>$operator, "value"=>$value);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Remove the tokens with too small length. Remove the not desired minuses
|
||||
* too.
|
||||
@@ -293,7 +269,6 @@ class Fts
|
||||
* @return array tokens and minuses
|
||||
*/
|
||||
private function tokenMinLength ($tokens, $minuses)
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($tokens))
|
||||
throw new \Exception ("Invalid tokens provided to fts:tokenMinLength",
|
||||
@@ -313,14 +288,12 @@ class Fts
|
||||
}
|
||||
return array ("tokens"=>$newTokens, "minuses"=>$newMinuses);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return an array with the $query tokenized
|
||||
* @param string $query The text to tokenize
|
||||
* @return array tokens and minuses
|
||||
*/
|
||||
private function tokenizer ($query)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($query))
|
||||
throw new \Exception ("Invalid query provided to fts:tokenizer", 500);
|
||||
@@ -382,5 +355,4 @@ class Fts
|
||||
"sentences" => $sentences,
|
||||
"minuses" => $minuses);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -41,19 +41,16 @@ class Getopts
|
||||
/** The constructor check the availability of the MB module
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("mb_strlen"))
|
||||
throw new \Exception ("PHP don't have the MB Support. Please add it !",
|
||||
500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set/Get the simulate value
|
||||
* @param string|null $simulate The simulate to get/set
|
||||
*/
|
||||
public function simulate ($simulate = null)
|
||||
// {{{
|
||||
{
|
||||
if ($simulate === null)
|
||||
return $this->simulate;
|
||||
@@ -65,7 +62,6 @@ class Getopts
|
||||
$this->simulate = $simulate;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new option to check
|
||||
* @param string $identifier The identifier of the options
|
||||
@@ -81,7 +77,6 @@ class Getopts
|
||||
*/
|
||||
public function add ($identifier, $short, $long, $description,
|
||||
$paramName = "", $multiple = 0)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($identifier))
|
||||
throw new \Exception ("Identifier provided to getopts is not a string",
|
||||
@@ -210,7 +205,6 @@ class Getopts
|
||||
"multiple" => $multiple);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Scan the command line and fill the parameters.
|
||||
* Use the simulate line if provided or use the $argv if not
|
||||
@@ -218,7 +212,6 @@ class Getopts
|
||||
* @return $this;
|
||||
*/
|
||||
public function scan ()
|
||||
// {{{
|
||||
{
|
||||
global $argv;
|
||||
if ($argv === null)
|
||||
@@ -450,7 +443,6 @@ class Getopts
|
||||
$this->parameters = array ();
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the value of the option if set in the command line. If simulate is
|
||||
* defined, use it.
|
||||
@@ -462,7 +454,6 @@ class Getopts
|
||||
* @param string $identifier The identifier option to get
|
||||
*/
|
||||
public function get ($identifier)
|
||||
// {{{
|
||||
{
|
||||
$exists = false;
|
||||
foreach ($this->options as $opt)
|
||||
@@ -484,34 +475,28 @@ class Getopts
|
||||
return array ();
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the value found in the rest of line (after the double dashes)
|
||||
*/
|
||||
public function restOfLine ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->restOfLine === null)
|
||||
$this->scan ();
|
||||
return $this->restOfLine;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the name of the program found in the command line
|
||||
*/
|
||||
public function programName ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->programName === null)
|
||||
$this->scan ();
|
||||
return $this->programName;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the Help message with all the descriptions and options
|
||||
*/
|
||||
public function help ()
|
||||
// {{{
|
||||
{
|
||||
if (count ($this->options) === 0)
|
||||
return dgettext ("domframework", "No option defined")."\n";
|
||||
@@ -549,5 +534,4 @@ class Getopts
|
||||
}
|
||||
return $d;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ namespace Domframework;
|
||||
* ->height ($height) or ->width ($width) The heigh/width of the graph
|
||||
*/
|
||||
class Graph
|
||||
/* {{{ */
|
||||
{
|
||||
/** The X axis object
|
||||
*/
|
||||
@@ -388,11 +387,9 @@ class Graph
|
||||
return base64_encode (ob_get_clean());
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The series objects */
|
||||
class GraphSeries
|
||||
/* {{{ */
|
||||
{
|
||||
/** The series stored */
|
||||
private $series = array ();
|
||||
@@ -441,11 +438,9 @@ class GraphSeries
|
||||
unset ($this->series[$name]);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The serie object */
|
||||
class GraphSerie
|
||||
/* {{{ */
|
||||
{
|
||||
/** The name of the serie
|
||||
*/
|
||||
@@ -695,11 +690,9 @@ class GraphSerie
|
||||
$this->style->draw ($gd, $free, $this->data, $axisX, $axisY);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** Read the data */
|
||||
class GraphData
|
||||
/* {{{ */
|
||||
{
|
||||
/** Store the data when the user provided them. Store them in array form
|
||||
*/
|
||||
@@ -964,11 +957,9 @@ class GraphData
|
||||
return $series;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graphTitle object */
|
||||
class GraphTitle
|
||||
/* {{{ */
|
||||
{
|
||||
/** The title text
|
||||
*/
|
||||
@@ -1092,11 +1083,9 @@ class GraphTitle
|
||||
intval ($free[2]), intval ($free[3]));
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graphLegend object */
|
||||
class GraphLegend
|
||||
/* {{{ */
|
||||
{
|
||||
/** Show the legend (no legend by default)
|
||||
*/
|
||||
@@ -1298,11 +1287,9 @@ class GraphLegend
|
||||
return $free;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The general axis management */
|
||||
class GraphAxisGeneral
|
||||
/* {{{ */
|
||||
{
|
||||
/** The min value of the axis. Do not use it if the axis is composed of labels
|
||||
*/
|
||||
@@ -1692,11 +1679,9 @@ class GraphAxisGeneral
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graph Axis Horizontal class */
|
||||
class GraphAxisHorizontal extends GraphAxisGeneral
|
||||
/* {{{ */
|
||||
{
|
||||
/** Calculate the position in pixels for a value
|
||||
* If the value is out of range, return null to not draw the point
|
||||
@@ -1776,11 +1761,9 @@ class GraphAxisHorizontal extends GraphAxisGeneral
|
||||
return intval ($this->left + $width * $pos + $width);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The X axis management */
|
||||
class GraphAxisX extends GraphAxisHorizontal
|
||||
/* {{{ */
|
||||
{
|
||||
/** The angle choosed to draw the graph
|
||||
*/
|
||||
@@ -1948,11 +1931,9 @@ class GraphAxisX extends GraphAxisHorizontal
|
||||
imageline ($gd, $position, $y, $position, $this->top, $gridColor);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** Manage the vertical axis */
|
||||
class GraphAxisVertical extends GraphAxisGeneral
|
||||
/* {{{ */
|
||||
{
|
||||
/** The angle choosed to draw the graph
|
||||
*/
|
||||
@@ -2128,11 +2109,9 @@ class GraphAxisVertical extends GraphAxisGeneral
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The Y1 axis management */
|
||||
class GraphAxisY1 extends GraphAxisVertical
|
||||
/* {{{ */
|
||||
{
|
||||
/** Draw one value on the axis
|
||||
* @param resource $gd The resource to modify
|
||||
@@ -2206,11 +2185,9 @@ die ("graphAxisY1:: drawGrid NOT numerical line ".__LINE__."\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The Y2 axis management */
|
||||
class GraphAxisY2 extends GraphAxisVertical
|
||||
/* {{{ */
|
||||
{
|
||||
/** Draw one value on the axis
|
||||
* @param resource $gd The resource to modify
|
||||
@@ -2273,11 +2250,9 @@ die ("graphAxisY2:: drawOne NOT numerical line ".__LINE__."\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graphStyleLine : draw a graph with lines */
|
||||
class GraphStyleLinePoints
|
||||
/* {{{ */
|
||||
{
|
||||
/** The line color. To hide the lines, choose "transparent"
|
||||
*/
|
||||
@@ -2567,11 +2542,9 @@ class GraphStyleLinePoints
|
||||
$this->drawPoint ($gd, $x, $y);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graphStylePoints : draw a graph with points */
|
||||
class GraphStylePoints extends GraphStyleLinePoints
|
||||
/* {{{ */
|
||||
{
|
||||
/** The line color : transparent
|
||||
*/
|
||||
@@ -2583,11 +2556,9 @@ class GraphStylePoints extends GraphStyleLinePoints
|
||||
return "points";
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graphStyleLine : draw a graph with line */
|
||||
class GraphStyleLine extends GraphStyleLinePoints
|
||||
/* {{{ */
|
||||
{
|
||||
/** The point color background. To hide the points, choose "transparent"
|
||||
*/
|
||||
@@ -2603,11 +2574,9 @@ class GraphStyleLine extends GraphStyleLinePoints
|
||||
return "line";
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/** The graphPalette class */
|
||||
class GraphPalette
|
||||
/* {{{ */
|
||||
{
|
||||
/** Get the complete palette
|
||||
* @param string $name The palette name to get
|
||||
@@ -2633,4 +2602,3 @@ class GraphPalette
|
||||
return $palette[$name];
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -27,7 +27,6 @@ class Http
|
||||
* @return string The prefered choice
|
||||
*/
|
||||
function bestChoice ($uservar, $available=array(), $default=FALSE)
|
||||
// {{{
|
||||
{
|
||||
$uservar = str_replace (" ", "", $uservar);
|
||||
$userchoices = explode (",", $uservar);
|
||||
@@ -85,13 +84,11 @@ class Http
|
||||
// No best solution found. Use the default available solution
|
||||
return $default;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the associated text for a HTTP code
|
||||
* @param integer $code The HTTP code to translate in text
|
||||
*/
|
||||
function codetext ($code)
|
||||
// {{{
|
||||
{
|
||||
switch ($code)
|
||||
{
|
||||
@@ -138,5 +135,4 @@ class Http
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ class Httpclient
|
||||
//////////////////////////
|
||||
//// PROPERTIES ////
|
||||
//////////////////////////
|
||||
// {{{
|
||||
/** The debug depth. 0: Nothing is displayed, 1: Only URL are displayed,
|
||||
* 2: headers only, 3: all the content
|
||||
*/
|
||||
@@ -121,12 +120,10 @@ class Httpclient
|
||||
*/
|
||||
private $acceptEncoding = "gzip, deflate";
|
||||
|
||||
// }}}
|
||||
|
||||
/** The constructor
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
$maxsize = str_replace (array ('G', 'M', 'K'),
|
||||
array ('000000000', '000000', '000'),
|
||||
@@ -138,7 +135,6 @@ class Httpclient
|
||||
$this->maxsize = $maxsize;
|
||||
$this->headersReset ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/////////////////////////////////
|
||||
//// GETTERS / SETTERS ////
|
||||
@@ -147,7 +143,6 @@ class Httpclient
|
||||
* @param string|null $url Set / Get the url
|
||||
*/
|
||||
public function url ($url = null)
|
||||
// {{{
|
||||
{
|
||||
if ($url === null)
|
||||
return $this->url;
|
||||
@@ -156,13 +151,11 @@ class Httpclient
|
||||
$this->url = $url;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set / Get the cookies stored
|
||||
* @param array|null $cookies Set / Get the cookies
|
||||
*/
|
||||
public function cookies ($cookies = null)
|
||||
// {{{
|
||||
{
|
||||
if ($cookies === null)
|
||||
return $this->cookies;
|
||||
@@ -171,13 +164,11 @@ class Httpclient
|
||||
$this->cookies = $cookies;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set / Get the method
|
||||
* @param string|null $method Set / Get the method
|
||||
*/
|
||||
public function method ($method = null)
|
||||
// {{{
|
||||
{
|
||||
if ($method === null)
|
||||
return $this->method;
|
||||
@@ -189,78 +180,63 @@ class Httpclient
|
||||
$this->method = $method;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the headersReceived after the page was get
|
||||
*/
|
||||
public function headersReceived ()
|
||||
// {{{
|
||||
{
|
||||
return $this->headersReceived;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the headers sent to the server after the page was get
|
||||
*/
|
||||
public function headersSent ()
|
||||
// {{{
|
||||
{
|
||||
return $this->headersSent;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the headers to initial value
|
||||
*/
|
||||
public function headersReset ()
|
||||
// {{{
|
||||
{
|
||||
$this->headersSent = array ();
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new header to be sent to the server
|
||||
* @param string $header The header to add/update
|
||||
* @param string $value The value to save
|
||||
*/
|
||||
public function headerAdd ($header, $value)
|
||||
// {{{
|
||||
{
|
||||
$this->headersSent[$header] = $value;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the port used for connection
|
||||
*/
|
||||
public function port ()
|
||||
// {{{
|
||||
{
|
||||
return $this->port;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set / Get the maximum maxsize allowed
|
||||
* @param integer|null $maxsize The maxsize in bytes
|
||||
*/
|
||||
public function maxsize ($maxsize = null)
|
||||
// {{{
|
||||
{
|
||||
if ($maxsize === null)
|
||||
return $this->maxsize;
|
||||
$this->maxsize = intval ($maxsize);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the HTTP Return code from connection
|
||||
*/
|
||||
public function httpCode ()
|
||||
// {{{
|
||||
{
|
||||
return $this->httpCode;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set / Get the debug mode
|
||||
* 0: Nothing is displayed, 1: Only URL are displayed,
|
||||
@@ -269,14 +245,12 @@ class Httpclient
|
||||
* @param boolean|null $debug The debug value to set or get
|
||||
*/
|
||||
public function debug ($debug = null)
|
||||
// {{{
|
||||
{
|
||||
if ($debug === null)
|
||||
return $this->debug;
|
||||
$this->debug = intval ($debug);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set / Get the form Data
|
||||
* Will be of type array ("field" => "value")
|
||||
@@ -284,7 +258,6 @@ class Httpclient
|
||||
* @param array|null $formData The data to send to the server
|
||||
*/
|
||||
public function formData ($formData = null)
|
||||
// {{{
|
||||
{
|
||||
if ($formData === null)
|
||||
return $this->formData;
|
||||
@@ -294,7 +267,6 @@ class Httpclient
|
||||
$this->rawData = "";
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set / Get the content Data
|
||||
* The data is in raw format and will not be modified.
|
||||
@@ -302,7 +274,6 @@ class Httpclient
|
||||
* @param string|null $rawData The data to use
|
||||
*/
|
||||
public function rawData ($rawData = null)
|
||||
// {{{
|
||||
{
|
||||
if ($rawData === null)
|
||||
return $this->rawData;
|
||||
@@ -312,141 +283,120 @@ class Httpclient
|
||||
$this->formData = array ();
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the Store of session cookies when analyzing the answer of the
|
||||
* server
|
||||
* @param boolean|null $cookiesSession Allow to store the session cookies
|
||||
*/
|
||||
public function cookiesSession ($cookiesSession = null)
|
||||
// {{{
|
||||
{
|
||||
if ($cookiesSession === null)
|
||||
return $this->cookiesSession;
|
||||
$this->cookiesSession = !! $cookiesSession;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the maximum number of redirect to follow before aborting
|
||||
* @param integer|null $redirectMaxCount The maximum number of redirect
|
||||
* before exception
|
||||
*/
|
||||
public function redirectMaxCount ($redirectMaxCount = null)
|
||||
// {{{
|
||||
{
|
||||
if ($redirectMaxCount === null)
|
||||
return $this->redirectMaxCount;
|
||||
$this->redirectMaxCount = intval ($redirectMaxCount);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the actual number of redirect
|
||||
* @param integer|null $redirectCount The actual number of redirect
|
||||
*/
|
||||
public function redirectCount ($redirectCount = null)
|
||||
// {{{
|
||||
{
|
||||
if ($redirectCount === null)
|
||||
return $this->redirectCount;
|
||||
$this->redirectCount = intval ($redirectCount);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the timeout in second before expiring the connection
|
||||
* 30s by default
|
||||
* @param integer|null $timeout The timeout value
|
||||
*/
|
||||
public function timeout ($timeout = null)
|
||||
// {{{
|
||||
{
|
||||
if ($timeout === null)
|
||||
return $this->timeout;
|
||||
$this->timeout = intval ($timeout);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get / Set the useragent sent to the server. If it is empty, it will not be
|
||||
* sent
|
||||
* @param string|null $useragent The user agent to use
|
||||
*/
|
||||
public function useragent ($useragent = null)
|
||||
// {{{
|
||||
{
|
||||
if ($useragent === null)
|
||||
return $this->useragent;
|
||||
$this->useragent = $useragent;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set the referer page
|
||||
* @param string|null $referer The new referer that will be used on next
|
||||
* request
|
||||
*/
|
||||
public function referer ($referer = null)
|
||||
// {{{
|
||||
{
|
||||
if ($referer === null)
|
||||
return $this->referer;
|
||||
$this->referer = $referer;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set the accept type of page wanted by the client
|
||||
* @param string|null $accept The accept types with weight
|
||||
*/
|
||||
public function accept ($accept = null)
|
||||
// {{{
|
||||
{
|
||||
if ($accept === null)
|
||||
return $this->accept;
|
||||
$this->accept = $accept;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set the accept Language wanted by the client
|
||||
* @param string|null $acceptLanguage The languages with weight
|
||||
*/
|
||||
public function acceptLanguage ($acceptLanguage = null)
|
||||
// {{{
|
||||
{
|
||||
if ($acceptLanguage === null)
|
||||
return $this->acceptLanguage;
|
||||
$this->acceptLanguage = $acceptLanguage;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set the accept Encoding wanted by the client
|
||||
* @param string|null $acceptEncoding The encoding requested
|
||||
*/
|
||||
public function acceptEncoding ($acceptEncoding = null)
|
||||
// {{{
|
||||
{
|
||||
if ($acceptEncoding === null)
|
||||
return $this->acceptEncoding;
|
||||
$this->acceptEncoding = $acceptEncoding;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the authentication in Basic type
|
||||
* @param string $login The login to use
|
||||
* @param string $password The password to use
|
||||
*/
|
||||
public function authBasic ($login, $password)
|
||||
// {{{
|
||||
{
|
||||
$this->authentication = "Basic ". base64_encode ("$login:$password");
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set authentication
|
||||
* To remove authentication, pass "" to $auth arg
|
||||
@@ -454,37 +404,31 @@ class Httpclient
|
||||
* @return value or $this
|
||||
*/
|
||||
public function authentication ($auth = null)
|
||||
// {{{
|
||||
{
|
||||
if ($auth === null)
|
||||
return $this->authentication;
|
||||
$this->authentication = $auth;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set the ssl options
|
||||
* @param array|null $ssloptions The SSL Options to use
|
||||
* @return $this
|
||||
*/
|
||||
public function ssloptions ($ssloptions = null)
|
||||
// {{{
|
||||
{
|
||||
if ($ssloptions === null)
|
||||
return $this->ssloptions;
|
||||
$this->ssloptions = $ssloptions;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get meta data, like the timeout state, the crypto protocol and ciphers...
|
||||
*/
|
||||
public function getMeta ()
|
||||
// {{{
|
||||
{
|
||||
return $this->tcpclient->getMeta ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the TCP infos of the connection
|
||||
*/
|
||||
@@ -509,14 +453,12 @@ class Httpclient
|
||||
* @return the page body
|
||||
*/
|
||||
public function getPage ($url, $ssloptions = null)
|
||||
// {{{
|
||||
{
|
||||
$this->method ("GET");
|
||||
$this->url ($url);
|
||||
$this->connect ($ssloptions);
|
||||
return $this->getContent ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Init the connection to URL
|
||||
* Will fill the headersReceived, cookies and port properties.
|
||||
@@ -524,7 +466,6 @@ class Httpclient
|
||||
* @return $this
|
||||
*/
|
||||
public function connect ($ssloptions = null)
|
||||
// {{{
|
||||
{
|
||||
$this->log (2, "## URL Start $this->method $this->url");
|
||||
if ($ssloptions !== null)
|
||||
@@ -535,7 +476,6 @@ class Httpclient
|
||||
if ($this->url === "")
|
||||
throw new \Exception ("No URL set to connect", 406);
|
||||
// Manage the URL (and the parameters in GET method)
|
||||
// {{{
|
||||
$parseURL = parse_url ($this->url);
|
||||
if (! key_exists ("scheme", $parseURL))
|
||||
throw new \Exception ("Scheme must be set to http or https", 406);
|
||||
@@ -587,10 +527,8 @@ class Httpclient
|
||||
$path .= "#".$parseURL["fragment"];
|
||||
if (! key_exists ("host", $parseURL))
|
||||
throw new \Exception ("No host provided to URL", 406);
|
||||
// }}}
|
||||
|
||||
// Prepare the headers to be sent
|
||||
// {{{
|
||||
unset ($this->headersSent[0]);
|
||||
array_unshift ($this->headersSent,
|
||||
"$this->method $path HTTP/1.1");
|
||||
@@ -647,10 +585,8 @@ class Httpclient
|
||||
|
||||
$this->log (2, "Headers Send :");
|
||||
$this->log (2, $this->headersSent);
|
||||
// }}}
|
||||
|
||||
// Send the request to the server
|
||||
// {{{
|
||||
if ($this->tcpclient === null)
|
||||
{
|
||||
$this->tcpclient = new Tcpclient ($parseURL["host"], $this->port);
|
||||
@@ -668,10 +604,8 @@ class Httpclient
|
||||
$this->tcpclient->send ("$header: $value\r\n");
|
||||
}
|
||||
$this->tcpclient->send ("\r\n");
|
||||
// }}}
|
||||
|
||||
// Send the POST data form if exists
|
||||
// {{{
|
||||
if ($this->method !== "GET" && ! empty ($this->formData))
|
||||
{
|
||||
$i = 0;
|
||||
@@ -709,10 +643,8 @@ class Httpclient
|
||||
$this->tcpclient->send ($this->rawData);
|
||||
$this->log (3, $this->rawData."\n");
|
||||
}
|
||||
// }}}
|
||||
|
||||
// Get the result header from the server
|
||||
// {{{
|
||||
$headers = array ();
|
||||
while (($header = $this->tcpclient->read (4095)) !== "")
|
||||
{
|
||||
@@ -785,15 +717,12 @@ class Httpclient
|
||||
$this->bodySize);
|
||||
else
|
||||
$this->log (1, "URL $this->method $this->url $this->httpCode 0");
|
||||
// }}}
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the content from the server and put it in memory
|
||||
*/
|
||||
public function getContent ()
|
||||
// {{{
|
||||
{
|
||||
$url = $this->url;
|
||||
$content = "";
|
||||
@@ -843,7 +772,6 @@ class Httpclient
|
||||
$this->redirectCount = 0;
|
||||
return $content;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Read max MAXSIZE bytes
|
||||
* Return "" if all the file is received
|
||||
@@ -852,7 +780,6 @@ class Httpclient
|
||||
* @param integer $maxsize The maxsize to get in this read
|
||||
*/
|
||||
public function read ($maxsize = 4096)
|
||||
// {{{
|
||||
{
|
||||
if ($this->tcpclient === null)
|
||||
throw new \Exception ("HTTPClient : can not read non connected URL", 406);
|
||||
@@ -888,16 +815,13 @@ class Httpclient
|
||||
$this->log (3, $content);
|
||||
return $content;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Disconnect the connection
|
||||
*/
|
||||
public function disconnect ()
|
||||
// {{{
|
||||
{
|
||||
$this->tcpclient = null;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Display the log message
|
||||
* @param integer $priority The minimal priority to display the message
|
||||
@@ -925,7 +849,6 @@ class Httpclient
|
||||
* @return the URL
|
||||
*/
|
||||
public function baseURL ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->url === "")
|
||||
throw new \Exception ("Can not get baseURL of empty url", 500);
|
||||
@@ -938,7 +861,6 @@ class Httpclient
|
||||
$pass = ($user || $pass) ? "$pass@" : '';
|
||||
return "$scheme$user$pass$host$port";
|
||||
}
|
||||
// }}}
|
||||
|
||||
//////////////////////////////////
|
||||
//// COOKIES MANAGEMENT ////
|
||||
@@ -975,7 +897,6 @@ class Httpclient
|
||||
* @param string $cookie The cookie content to store
|
||||
*/
|
||||
public function cookieAdd ($domain, $cookie)
|
||||
// {{{
|
||||
{
|
||||
// echo "COOKIE = $cookie\n";
|
||||
$content = explode (";", $cookie);
|
||||
@@ -1069,7 +990,6 @@ class Httpclient
|
||||
$this->cookies[] = $cookieLine;
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check if some stored cookies must be send to the server, because they are
|
||||
* in the same domain.
|
||||
@@ -1077,7 +997,6 @@ class Httpclient
|
||||
* @return array the cookies to add to the headers send to the server
|
||||
*/
|
||||
public function cookieToSend ($url)
|
||||
// {{{
|
||||
{
|
||||
$parseURL = parse_url ($this->url);
|
||||
if ($parseURL === false)
|
||||
@@ -1106,5 +1025,4 @@ class Httpclient
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ class Ipaddresses
|
||||
* @param string $ip The IP Address to validate
|
||||
*/
|
||||
public function validIPAddress ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"),
|
||||
@@ -25,13 +24,11 @@ class Ipaddresses
|
||||
$rc = $this->validIPv6Address ($ip);
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided IP address is valid and is IPv4
|
||||
* @param string $ip The IP Address to validate
|
||||
*/
|
||||
public function validIPv4Address ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IPv4 address"),
|
||||
@@ -41,13 +38,11 @@ class Ipaddresses
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided IP address is valid and is IPv6
|
||||
* @param string $ip The IP Address to validate
|
||||
*/
|
||||
public function validIPv6Address ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IPv6 address"),
|
||||
@@ -57,14 +52,12 @@ class Ipaddresses
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided IP address is valid (IPv4 or IPv6) and the
|
||||
* provided CIDR is valid too
|
||||
* @param string $ip The IP Address to validate with a CIDR
|
||||
*/
|
||||
public function validIPAddressWithCIDR ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"),
|
||||
@@ -75,14 +68,12 @@ class Ipaddresses
|
||||
$rc = $this->validIPv6AddressWithCIDR ($ip);
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided IP address is valid and is IPv4 and the
|
||||
* provided CIDR is valid too
|
||||
* @param string $ip The IP Address to validate with a CIDR
|
||||
*/
|
||||
public function validIPv4AddressWithCIDR ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IPv4 address"),
|
||||
@@ -97,14 +88,12 @@ class Ipaddresses
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided IP address is valid and is IPv6 and the
|
||||
* provided CIDR is valid too
|
||||
* @param string $ip The IP Address to validate with a CIDR
|
||||
*/
|
||||
public function validIPv6AddressWithCIDR ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IPv6 address"),
|
||||
@@ -119,7 +108,6 @@ class Ipaddresses
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided CIDR is valid. The CIDR can be valid in IPv4
|
||||
* or IPv6
|
||||
@@ -127,7 +115,6 @@ class Ipaddresses
|
||||
* @return boolean The CIDR is valid
|
||||
*/
|
||||
public function validCIDR ($cidr)
|
||||
// {{{
|
||||
{
|
||||
if (! is_integer ($cidr) && ! is_integer ($cidr))
|
||||
throw new \Exception (dgettext ("domframework", "Invalid CIDR provided"),
|
||||
@@ -138,14 +125,12 @@ class Ipaddresses
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided CIDR is valid. The CIDR can be valid in IPv4.
|
||||
* @param integer $cidr The CIDR to test
|
||||
* @return boolean The CIDR is valid
|
||||
*/
|
||||
public function validIPv4CIDR ($cidr)
|
||||
// {{{
|
||||
{
|
||||
if (! is_integer ($cidr) && ! is_string ($cidr))
|
||||
throw new \Exception (dgettext ("domframework", "Invalid CIDR provided"),
|
||||
@@ -156,14 +141,12 @@ class Ipaddresses
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided CIDR is valid. The CIDR can be valid in IPv6.
|
||||
* @param integer $cidr The CIDR to test
|
||||
* @return boolean The CIDR is valid
|
||||
*/
|
||||
public function validIPv6CIDR ($cidr)
|
||||
// {{{
|
||||
{
|
||||
if (! is_integer ($cidr) && ! is_string ($cidr))
|
||||
throw new \Exception (dgettext ("domframework", "Invalid CIDR provided"),
|
||||
@@ -174,7 +157,6 @@ class Ipaddresses
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the IPv6 to compressed (or compact) form.
|
||||
* Remove the 0 when they are placed on the begin of the nibble.
|
||||
@@ -184,7 +166,6 @@ class Ipaddresses
|
||||
* @param string $ip The IP to compress
|
||||
*/
|
||||
public function compressIP ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (strpos ($ip, ":") === false)
|
||||
return $ip;
|
||||
@@ -239,7 +220,6 @@ class Ipaddresses
|
||||
$ipHex = implode (":", $ipArr);
|
||||
return $ipHex;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the IPv6 uncompressed (all the fields exists). They are not filled
|
||||
* by zeros
|
||||
@@ -252,7 +232,6 @@ class Ipaddresses
|
||||
* return "0:0:0:0:0:0:ffff:7f00:1"
|
||||
*/
|
||||
public function uncompressIPv6 ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($ip) || $ip === "" ||
|
||||
$this->validIPAddress ($ip) === false)
|
||||
@@ -299,7 +278,6 @@ class Ipaddresses
|
||||
}
|
||||
return $ip;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get an IPv6 address with the format
|
||||
* x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
@@ -309,7 +287,6 @@ class Ipaddresses
|
||||
* @param string $ipv6 The IPv6 to group
|
||||
*/
|
||||
public function groupIPv6 ($ipv6)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($ipv6) || $ipv6 === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IPv6 address"),
|
||||
@@ -329,7 +306,6 @@ class Ipaddresses
|
||||
}
|
||||
return $new;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the IP adddress with filling the fields with the missing zeros.
|
||||
* Valid only on IPv6 (but don't change anything if the provided address is
|
||||
@@ -341,7 +317,6 @@ class Ipaddresses
|
||||
* return "0000:0000:0000:0000:0000:0000:ffff:7f00:0001"
|
||||
*/
|
||||
public function completeAddressWithZero ($ip)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($ip) || $ip === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"),
|
||||
@@ -370,7 +345,6 @@ class Ipaddresses
|
||||
}
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"), 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the provided CIDR in binary. Length must be in bytes.
|
||||
* Return FALSE if the parameters are invalid
|
||||
@@ -378,7 +352,6 @@ class Ipaddresses
|
||||
* @param integer $length The length to use
|
||||
*/
|
||||
public function cidrToBin ($cidr, $length)
|
||||
// {{{
|
||||
{
|
||||
if (! is_numeric ($cidr) || $cidr < 0 || $cidr > 128)
|
||||
throw new \Exception (dgettext ("domframework", "Invalid CIDR"), 500);
|
||||
@@ -392,7 +365,6 @@ class Ipaddresses
|
||||
}
|
||||
return pack ('H*', $this->str_base_convert ($val, 2, 16));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Base conversion with 128 bits support for IPv6
|
||||
* Based on http://fr2.php.net/manual/en/function.base-convert.php#109660
|
||||
@@ -403,7 +375,6 @@ class Ipaddresses
|
||||
* default)
|
||||
*/
|
||||
public function str_base_convert($str, $frombase=10, $tobase=36)
|
||||
// {{{
|
||||
{
|
||||
$str = trim ($str);
|
||||
if (intval ($frombase) != 10)
|
||||
@@ -438,7 +409,6 @@ class Ipaddresses
|
||||
|
||||
return $s;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Reverse the provided IP address
|
||||
* The IPv6 are returned in format :
|
||||
@@ -446,7 +416,6 @@ class Ipaddresses
|
||||
* @param string $ipReverse The IPv6 to reverse
|
||||
*/
|
||||
function reverseIPAddress ($ipReverse)
|
||||
// {{{
|
||||
{
|
||||
if (!is_string ($ipReverse) || $ipReverse === "")
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"),
|
||||
@@ -477,7 +446,6 @@ class Ipaddresses
|
||||
}
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"), 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function return the CIDR associated to the provided netmask
|
||||
* Ex. Return 24 for a mask 255.255.255.0 in direct
|
||||
@@ -490,7 +458,6 @@ class Ipaddresses
|
||||
* check a wildcard mask
|
||||
*/
|
||||
public function netmask2cidr ($netmask, $maskdirect = true)
|
||||
// {{{
|
||||
{
|
||||
$maskdirect = "". ($maskdirect + 0);
|
||||
$maskrevert = ($maskdirect === "0") ? "1" : "0";
|
||||
@@ -523,7 +490,6 @@ class Ipaddresses
|
||||
return 32;
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function return the netmask associated to a CIDR.
|
||||
* Work only on IPv4 addresses (CIDR between 0 and 32)
|
||||
@@ -534,7 +500,6 @@ class Ipaddresses
|
||||
* @return false if the CIDR is not between 0 and 32
|
||||
*/
|
||||
public function cidr2netmask ($cidr, $maskdirect = true)
|
||||
// {{{
|
||||
{
|
||||
if ($cidr < 0 || $cidr > 32)
|
||||
return false;
|
||||
@@ -558,7 +523,6 @@ class Ipaddresses
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function return true if the provided address is in the provided
|
||||
* network with the associated cidr
|
||||
@@ -568,7 +532,6 @@ class Ipaddresses
|
||||
* @return boolean True if $ip is in $network/$cidr
|
||||
*/
|
||||
public function ipInNetwork ($ip, $network, $cidr)
|
||||
// {{{
|
||||
{
|
||||
if ($this->validIPAddress ($ip) === false)
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"),
|
||||
@@ -596,7 +559,6 @@ class Ipaddresses
|
||||
return ($this->networkFirstIP ($ip, $cidr) ===
|
||||
$this->networkFirstIP ($network, $cidr));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the first IP of a network.
|
||||
* IPv4 and IPv6 compatible
|
||||
@@ -606,11 +568,9 @@ class Ipaddresses
|
||||
* Example : $ip="192.168.1.2", $cidr=24 => return "192.168.1.0"
|
||||
*/
|
||||
public function networkFirstIP ($ip, $cidr)
|
||||
// {{{
|
||||
{
|
||||
return $this->networkFirstLastIP ($ip, $cidr, "0");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the last IP of a network.
|
||||
* IPv4 and IPv6 compatible
|
||||
@@ -620,11 +580,9 @@ class Ipaddresses
|
||||
* Example : $ip="192.168.1.2", $cidr=24 => return "192.168.1.255"
|
||||
*/
|
||||
public function networkLastIP ($ip, $cidr)
|
||||
// {{{
|
||||
{
|
||||
return $this->networkFirstLastIP ($ip, $cidr, "1");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the network first IP.
|
||||
* IPv4 and IPv6 compatible
|
||||
@@ -636,7 +594,6 @@ class Ipaddresses
|
||||
* Example : $ip="192.168.1.2", $cidr=24 => return "192.168.1.0"
|
||||
*/
|
||||
private function networkFirstLastIP ($ip, $cidr, $map)
|
||||
// {{{
|
||||
{
|
||||
if ($this->validIPAddress ($ip) === false)
|
||||
throw new \Exception (dgettext ("domframework", "Invalid IP address"),
|
||||
@@ -714,5 +671,4 @@ class Ipaddresses
|
||||
}
|
||||
return $ipBase;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
-20
@@ -16,7 +16,6 @@ namespace Domframework;
|
||||
class Jwt
|
||||
{
|
||||
// PROPERTIES
|
||||
// {{{
|
||||
/** List the allowed algorithms to sign the token
|
||||
*/
|
||||
private $supportedAlgs = array (
|
||||
@@ -24,7 +23,6 @@ class Jwt
|
||||
'HS512' => array('hash_hmac', 'SHA512'),
|
||||
'HS384' => array('hash_hmac', 'SHA384'),
|
||||
);
|
||||
// }}}
|
||||
|
||||
/** Create the token based on payload, sign it with key, and optionally
|
||||
* encrypt it with ckey
|
||||
@@ -42,7 +40,6 @@ class Jwt
|
||||
*/
|
||||
public function encode ($payload, $key, $alg = "HS256", $ckey = null,
|
||||
$cipherMethod = "des-ede3-cbc")
|
||||
// {{{
|
||||
{
|
||||
if (! key_exists ($alg, $this->supportedAlgs))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -62,7 +59,6 @@ class Jwt
|
||||
$segments[] = $this->urlsafeB64Encode ($signature);
|
||||
return implode ('.', $segments);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Decode the provide JWT and return an array of the payload
|
||||
* @param string $jwt The token to examine
|
||||
@@ -78,7 +74,6 @@ class Jwt
|
||||
*/
|
||||
public function decode ($jwt, $key, $allowedAlg = null, $ckey = null,
|
||||
$cipherMethod = "des-ede3-cbc")
|
||||
// {{{
|
||||
{
|
||||
if ($allowedAlg === null)
|
||||
$allowedAlg = array_keys ($this->supportedAlgs);
|
||||
@@ -126,7 +121,6 @@ class Jwt
|
||||
"JWT Signature verification failed"), 403);
|
||||
return $payload;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Verify the provided token with the key and generate an return true if it
|
||||
* can be verify
|
||||
@@ -137,7 +131,6 @@ class Jwt
|
||||
* @return boolean Return true if the input signed is valid
|
||||
*/
|
||||
private function verify ($input, $sign, $key, $alg)
|
||||
// {{{
|
||||
{
|
||||
$signature = $this->sign ($input, $key, $alg);
|
||||
if (function_exists ("hash_equals") &&
|
||||
@@ -151,17 +144,14 @@ class Jwt
|
||||
$status |= ord ($signature[$i]) ^ ord ($sign[$i]);
|
||||
return $status === 0;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a signing key
|
||||
* @return string the signing key proposed
|
||||
*/
|
||||
public function createKey ()
|
||||
// {{{
|
||||
{
|
||||
return sha1 (microtime (true));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Sign the requested string with the provided key and based on the algorithm
|
||||
* @param string $input The string to sign
|
||||
@@ -170,7 +160,6 @@ class Jwt
|
||||
* @return string The signed string in binary
|
||||
*/
|
||||
private function sign ($input, $key, $alg)
|
||||
// {{{
|
||||
{
|
||||
if (! key_exists ($alg, $this->supportedAlgs))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -185,7 +174,6 @@ class Jwt
|
||||
"Invalid method to sign the JWT"), 500);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the provided string in base64 without equal at the end
|
||||
* To be URL compliant, the slash and plus are converted to underscore and
|
||||
@@ -194,18 +182,15 @@ class Jwt
|
||||
* @return string The string converted in base64
|
||||
*/
|
||||
private function urlsafeB64Encode ($str)
|
||||
// {{{
|
||||
{
|
||||
return rtrim (strtr (base64_encode ($str), '+/', '-_'), "=");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the provided base64 to string
|
||||
* @param string $str The string the convert from base64
|
||||
* @return string The string converted from base64
|
||||
*/
|
||||
private function urlsafeB64Decode ($str)
|
||||
// {{{
|
||||
{
|
||||
$str = strtr ($str, '-_', '+/');
|
||||
$remainder = strlen ($str) % 4;
|
||||
@@ -219,14 +204,12 @@ class Jwt
|
||||
}
|
||||
return base64_decode ($str);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the provided array to JSON string
|
||||
* @param object $input The object to convert in JSON
|
||||
* @return string The JSON string
|
||||
*/
|
||||
private function jsonEncode ($input)
|
||||
// {{{
|
||||
{
|
||||
$json = json_encode ($input);
|
||||
if ($json === "null" && $input !== null)
|
||||
@@ -234,7 +217,6 @@ class Jwt
|
||||
"JSON Encode : Null result with non-null input"), 500);
|
||||
return $json;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Decode the provided JSON string and return the result
|
||||
* If null, there is a decode problem
|
||||
@@ -242,9 +224,7 @@ class Jwt
|
||||
* @return mixed The decoded string in object
|
||||
*/
|
||||
private function jsonDecode ($input)
|
||||
// {{{
|
||||
{
|
||||
return json_decode ($input, false, 512, JSON_BIGINT_AS_STRING);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ class Macaddresses
|
||||
* @return bool
|
||||
*/
|
||||
public static function isMACAddress ($mac)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($mac))
|
||||
return false;
|
||||
@@ -38,7 +37,6 @@ class Macaddresses
|
||||
preg_match ("/^([a-fA-F0-9]{4}[.]){2}[a-fA-F0-9]{4}$/", $mac) === 1 ||
|
||||
preg_match ("/^[a-fA-F0-9]{12}$/", $mac) === 1);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Reform the mac address with the separator.
|
||||
* The provided mac MUST be without separator (can be removed by
|
||||
@@ -49,14 +47,12 @@ class Macaddresses
|
||||
* @return string The updated mac address with separators
|
||||
*/
|
||||
public static function addSeparator ($mac, $separator = ':', $nbdigit = 2)
|
||||
// {{{
|
||||
{
|
||||
if (strspn ($mac, "0132465789ABCDEFabcdef") !== strlen ($mac))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"Invalid mac address provided to addSeparator : bad chars"), 406);
|
||||
return join ($separator, str_split ($mac, $nbdigit));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Remove all the separators from the provided MAC address
|
||||
* @param string $mac the mac address to update
|
||||
@@ -65,9 +61,7 @@ class Macaddresses
|
||||
*/
|
||||
public static function removeSeparator ($mac,
|
||||
$separators = array (":", "-", "."))
|
||||
// {{{
|
||||
{
|
||||
return str_replace ($separators, '', $mac);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
-108
@@ -38,7 +38,6 @@ class Mail
|
||||
* returns
|
||||
*/
|
||||
private function printSections ()
|
||||
// {{{
|
||||
{
|
||||
foreach ($this->sections as $sectionID=>$vals)
|
||||
{
|
||||
@@ -72,26 +71,22 @@ class Mail
|
||||
echo ")\n\n";
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new section
|
||||
* @param array $param The parameters to store
|
||||
* @return the sectionID
|
||||
*/
|
||||
private function sectionAdd ($param)
|
||||
// {{{
|
||||
{
|
||||
$sectionID = md5 (microtime(true).rand());
|
||||
$this->sections[$sectionID] = $param;
|
||||
return $sectionID;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new section with the default parameters
|
||||
* @return array The sectionID stored with the default parameters
|
||||
*/
|
||||
private function sectionAddDefault ()
|
||||
// {{{
|
||||
{
|
||||
return $this->sectionAdd (
|
||||
array ("_headerBodySeparator"=>$this->headerBodySeparator,
|
||||
@@ -101,7 +96,6 @@ class Mail
|
||||
"_contentEML"=>"",
|
||||
"_contentUTF"=>""));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Del an existing section
|
||||
* If there is one child, and the section was multiple, remove it and
|
||||
@@ -118,7 +112,6 @@ class Mail
|
||||
* @param string $sectionIDchild The sectionID of the child to add
|
||||
*/
|
||||
private function sectionAddChild ($sectionIDParent, $sectionIDchild)
|
||||
// {{{
|
||||
{
|
||||
if (! array_key_exists ($sectionIDParent, $this->sections))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -126,14 +119,12 @@ class Mail
|
||||
$this->sections[$sectionIDParent]["_partsIDchild"][] = $sectionIDchild;
|
||||
$this->sections[$sectionIDchild]["_parentID"] = $sectionIDParent;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a newChild to an existing section at the beginning of the list
|
||||
* @param string $sectionIDParent The parent modified by adding a child
|
||||
* @param string $sectionIDchild The sectionID of the child to add
|
||||
*/
|
||||
private function sectionAddChildFirst ($sectionIDParent, $sectionIDchild)
|
||||
// {{{
|
||||
{
|
||||
if (! array_key_exists ($sectionIDParent, $this->sections))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -142,28 +133,24 @@ class Mail
|
||||
$sectionIDchild);
|
||||
$this->sections[$sectionIDchild]["_parentID"] = $sectionIDParent;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Remove all the defined Childs in the section. Do not remove really the
|
||||
* childs !
|
||||
* @param string $sectionID the section to clean
|
||||
*/
|
||||
private function sectionDelChilds ($sectionID)
|
||||
// {{{
|
||||
{
|
||||
if (! array_key_exists ($sectionID, $this->sections))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"Section not found"), 404);
|
||||
unset ($this->sections[$sectionID]["_partsIDchild"]);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Update the content of an existing section
|
||||
* @param string $sectionID The section to modify
|
||||
* @param array $param The parameters to update
|
||||
*/
|
||||
private function sectionUpdate ($sectionID, $param)
|
||||
// {{{
|
||||
{
|
||||
if (! array_key_exists ($sectionID, $this->sections))
|
||||
throw new \Exception (dgettext ("domframework", "Section not found"),
|
||||
@@ -176,23 +163,19 @@ class Mail
|
||||
$this->sections[$sectionID][$key] = $val;
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the list of sections ID
|
||||
* @return array the defined sectionsID
|
||||
*/
|
||||
private function sectionList ()
|
||||
// {{{
|
||||
{
|
||||
return array_keys ($this->sections);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the section ID List with parents ID
|
||||
* @return array the defined sectionsID with the parent ID as value
|
||||
*/
|
||||
private function sectionListParent ()
|
||||
// {{{
|
||||
{
|
||||
$res = array ();
|
||||
foreach ($this->sections as $sectionID=>$content)
|
||||
@@ -204,27 +187,23 @@ class Mail
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the content array of the section
|
||||
* @param string $sectionID The section ID to get
|
||||
* @return array The content of the section
|
||||
*/
|
||||
private function sectionGet ($sectionID)
|
||||
// {{{
|
||||
{
|
||||
if (! array_key_exists ($sectionID, $this->sections))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"Section not found"), 404);
|
||||
return $this->sections[$sectionID];
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the section ID of the main part
|
||||
* @return bool|string the section ID of the main part or FALSE if not found
|
||||
*/
|
||||
public function sectionMainID ()
|
||||
// {{{
|
||||
{
|
||||
foreach ($this->sectionListParent () as $sectionID=>$parentID)
|
||||
{
|
||||
@@ -233,13 +212,11 @@ class Mail
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Refresh the _headersEML from the _headersArray
|
||||
* @param string $sectionID the section to refresh
|
||||
*/
|
||||
private function sectionRefreshHeadersEML ($sectionID)
|
||||
// {{{
|
||||
{
|
||||
$section = $this->sectionGet ($sectionID);
|
||||
$headersEML = "";
|
||||
@@ -251,14 +228,12 @@ class Mail
|
||||
}
|
||||
$this->sections[$sectionID]["_headersEML"] = $headersEML;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Read the complete mail to analyze
|
||||
* Destroy all the previous definitions of mail
|
||||
* @param string $content The complete mail to read
|
||||
*/
|
||||
public function readMail ($content)
|
||||
// {{{
|
||||
{
|
||||
$this->sections = array ();
|
||||
$this->completeEmailEML = $content;
|
||||
@@ -266,7 +241,6 @@ class Mail
|
||||
if ($partinfo !== null)
|
||||
$this->readMailContentRecurse ($partinfo);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Read the content of the mail and allow the content to be also multipart.
|
||||
* Then the method is recursively called to generate the sections
|
||||
@@ -274,7 +248,6 @@ class Mail
|
||||
* @param string|null $sectionIDParent The parent sectionID to link with
|
||||
*/
|
||||
private function readMailContentRecurse ($partinfo, $sectionIDParent=false)
|
||||
// {{{
|
||||
{
|
||||
if (key_exists ("_contentType", $partinfo) &&
|
||||
substr ($partinfo["_contentType"], 0, 10) === "multipart/")
|
||||
@@ -332,14 +305,12 @@ class Mail
|
||||
$sectionIDParent = $this->sectionAdd ($partinfo);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the data for a part of the mail
|
||||
* @param string $content The content of the mail to parse
|
||||
* @return array The data content in the mail
|
||||
*/
|
||||
private function parseMessagePart ($content)
|
||||
// {{{
|
||||
{
|
||||
// Get the HeaderBodySeparator
|
||||
$pos = strpos ($content, "\r\n\r\n");
|
||||
@@ -462,12 +433,10 @@ class Mail
|
||||
$res["Content-ID"] = $contentID;
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The constuctor verify if the external libraries are available
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
if (! function_exists ("finfo_buffer"))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -482,7 +451,6 @@ class Mail
|
||||
$this->addHeader ("From", $user["name"]."@".php_uname('n'));
|
||||
$this->addHeader ("MIME-Version", "1.0");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Define a HTML body. If the HTML body already exists, overwrite it
|
||||
* If there is an text body, manage the boundary in alternative mode
|
||||
@@ -492,7 +460,6 @@ class Mail
|
||||
*/
|
||||
public function setBodyHTML ($htmlContent, $charset="utf-8",
|
||||
$encoding="quoted-printable")
|
||||
// {{{
|
||||
{
|
||||
// Look if there is an existing section with text (main or
|
||||
// multipart/alternative)
|
||||
@@ -588,7 +555,6 @@ class Mail
|
||||
$this->sectionUpdate ($sectionIDtoChange, $part);
|
||||
$this->createMailEML ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a Text body. If the text body already exists, overwrite it
|
||||
* If there is an HTML body, manage the boundary in alternative mode
|
||||
@@ -598,7 +564,6 @@ class Mail
|
||||
*/
|
||||
public function setBodyText ($textContent, $charset="utf-8",
|
||||
$encoding="quoted-printable")
|
||||
// {{{
|
||||
{
|
||||
// Look if there is an existing section with text (main or
|
||||
// multipart/alternative)
|
||||
@@ -676,7 +641,6 @@ class Mail
|
||||
$this->sectionUpdate ($sectionIDtoChange, $part);
|
||||
$this->createMailEML ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the HTML body if exists in UTF-8. If the body is not in UTF-8, it
|
||||
* is converted
|
||||
@@ -685,7 +649,6 @@ class Mail
|
||||
* no HTML part in the mail
|
||||
*/
|
||||
public function getBodyHTML ()
|
||||
// {{{
|
||||
{
|
||||
$sectionList = $this->sectionList ();
|
||||
$sectionIDtoChange = "";
|
||||
@@ -704,7 +667,6 @@ class Mail
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the text body if exists in UTF-8. If the body is not in UTF-8, it is
|
||||
* converted
|
||||
@@ -713,7 +675,6 @@ class Mail
|
||||
* no Text part in the mail
|
||||
*/
|
||||
public function getBodyText ()
|
||||
// {{{
|
||||
{
|
||||
$sectionList = $this->sectionList ();
|
||||
$sectionIDtoChange = "";
|
||||
@@ -732,7 +693,6 @@ class Mail
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Move the sections where the parent is defined to $oldParentID to the
|
||||
* $newParentID.
|
||||
@@ -742,7 +702,6 @@ class Mail
|
||||
* @param string|null $oldParentID The oldParent to look for
|
||||
*/
|
||||
private function moveChilds ($newParentID, $oldParentID=false)
|
||||
// {{{
|
||||
{
|
||||
if ($newParentID === $oldParentID)
|
||||
throw new \Exception ("moveChilds : old and new ParentID are the same",
|
||||
@@ -802,7 +761,6 @@ class Mail
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add an attachment to the mail.
|
||||
* The allowed encodings are "quoted-printable" or "base64"
|
||||
@@ -816,7 +774,6 @@ class Mail
|
||||
*/
|
||||
public function addAttachment ($name, $fileContent, $encoding="base64",
|
||||
$inline=false)
|
||||
// {{{
|
||||
{
|
||||
if ($this->getBodyHTML() === false && $inline !== false)
|
||||
$this->setBodyHTML ("No HTML provided by inline file added");
|
||||
@@ -899,7 +856,6 @@ class Mail
|
||||
if ($inline === true)
|
||||
return substr ($contentID, 1, -1);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add an inline attachment to the mail.
|
||||
* The allowed encodings are "quoted-printable" or "base64"
|
||||
@@ -912,11 +868,9 @@ class Mail
|
||||
* @return string The content ID created
|
||||
*/
|
||||
public function addAttachmentInline ($name, $fileContent, $encoding="base64")
|
||||
// {{{
|
||||
{
|
||||
return $this->addAttachment ($name, $fileContent, $encoding, true);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get an attachment of the mail
|
||||
* @param integer $number the number of attach to get starting to 0
|
||||
@@ -924,7 +878,6 @@ class Mail
|
||||
* @return string the content of the attachment. Can be binary
|
||||
*/
|
||||
public function getAttachment ($number, $inline = false)
|
||||
// {{{
|
||||
{
|
||||
$attachmentIDs = $this->getAttachmentID ($inline);
|
||||
if (! array_key_exists ($number, $attachmentIDs))
|
||||
@@ -935,7 +888,6 @@ class Mail
|
||||
$part["_headersArray"]);
|
||||
return $this->encodingDecode ($part["_contentEML"], $encoding);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the attachment details
|
||||
* @param integer $number the number of attach to get starting to 0
|
||||
@@ -943,7 +895,6 @@ class Mail
|
||||
* @return array containing the information of the attachment
|
||||
*/
|
||||
public function getAttachmentDetails ($number, $inline = false)
|
||||
// {{{
|
||||
{
|
||||
$attachmentIDs = $this->getAttachmentID ($inline);
|
||||
if (! array_key_exists ($number, $attachmentIDs))
|
||||
@@ -965,7 +916,6 @@ class Mail
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the list of the sectionID containing a attachment. Contains the
|
||||
* inline attachments too.
|
||||
@@ -973,7 +923,6 @@ class Mail
|
||||
* @return array The sectionIDs
|
||||
*/
|
||||
private function getAttachmentID ($inline = false)
|
||||
// {{{
|
||||
{
|
||||
$res = array ();
|
||||
foreach ($this->sections as $sectionID=>$section)
|
||||
@@ -1002,14 +951,12 @@ class Mail
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a To: header. If it already exists, add a new recipient
|
||||
* @param string $toMail The mail to add
|
||||
* @param string|null $toName The name of the recipient
|
||||
*/
|
||||
public function addTo ($toMail, $toName = "")
|
||||
// {{{
|
||||
{
|
||||
if (strspn ($toName, "abcdefghijklmnopqrstuvwxyz".
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
|
||||
@@ -1025,24 +972,20 @@ class Mail
|
||||
else
|
||||
$this->setHeader ("To", $toField);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the To Header as it is written in the mail
|
||||
* @return string The To Header defined in the mail
|
||||
*/
|
||||
public function getTo ()
|
||||
// {{{
|
||||
{
|
||||
return $this->getHeader ("To");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a From: header. If it already exists, overwrite the existing one
|
||||
* @param string $fromMail The from Mail to define
|
||||
* @param string|null $fromName The from Name to define
|
||||
*/
|
||||
public function setFrom ($fromMail, $fromName= "")
|
||||
// {{{
|
||||
{
|
||||
if (strspn ($fromName, "abcdefghijklmnopqrstuvwxyz".
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
|
||||
@@ -1053,23 +996,19 @@ class Mail
|
||||
$fromName .= " ";
|
||||
$this->setHeader ("From", "$fromName<$fromMail>");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the From header as it is written in the mail
|
||||
* @return string The From Header defined in the mail
|
||||
*/
|
||||
public function getFrom ()
|
||||
// {{{
|
||||
{
|
||||
return $this->getHeader ("From");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the From header converted to array with mail and name keys
|
||||
* @return array The From details
|
||||
*/
|
||||
public function getFromArray ()
|
||||
// {{{
|
||||
{
|
||||
$from = $this->getHeader ("From");
|
||||
$res = array ();
|
||||
@@ -1077,59 +1016,49 @@ class Mail
|
||||
$from = $this->convertPeopleToArray ($from);
|
||||
return reset ($from);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the subject
|
||||
* @param string $subject In UTF8
|
||||
*/
|
||||
public function setSubject ($subject)
|
||||
// {{{
|
||||
{
|
||||
$this->setHeader ("Subject",
|
||||
$this->encodeHeaders ("Subject", $subject,
|
||||
"quoted-printable"));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the Date
|
||||
* @param string $date In RFC 2822 format
|
||||
*/
|
||||
public function setDate ($date)
|
||||
// {{{
|
||||
{
|
||||
// TODO : Check if the date format is valid
|
||||
$this->setHeader ("Date", $date);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the Date
|
||||
* @param string $timestamp In Timestamp format
|
||||
*/
|
||||
public function setDateTimestamp ($timestamp)
|
||||
// {{{
|
||||
{
|
||||
// TODO : Check if the timestamp is valid
|
||||
$this->setHeader ("Date", date ("r", $timestamp));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the Date header if defined.
|
||||
* Return false if not defined
|
||||
* @return string|bool The date Header if defined or false if not defined
|
||||
*/
|
||||
public function getDate ()
|
||||
// {{{
|
||||
{
|
||||
return $this->getHeader ("Date");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the Date header (if defined) in timestamp
|
||||
* Return false if not defined
|
||||
* @return integer|bool The date Header if defined or false if not defined
|
||||
*/
|
||||
public function getDateTimestamp ()
|
||||
// {{{
|
||||
{
|
||||
$datetimestamp = false;
|
||||
$date = rtrim ($this->getDate ());
|
||||
@@ -1145,7 +1074,6 @@ class Mail
|
||||
}
|
||||
return $dateTimestamp;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set a generic header
|
||||
* @param string $header The name of the Header (without colon)
|
||||
@@ -1153,7 +1081,6 @@ class Mail
|
||||
* @param string|null $sectionID The section to modify. If null, use the main
|
||||
*/
|
||||
public function setHeader ($header, $value, $sectionID=null)
|
||||
// {{{
|
||||
{
|
||||
if (substr ($value, -1) !== "\n" &&
|
||||
substr ($value, -1) !== "\r" &&
|
||||
@@ -1196,7 +1123,6 @@ class Mail
|
||||
$this->sections[$sectionMainID]["_headersEML"] = $_headerEML;
|
||||
$this->createMailEML ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a generic header
|
||||
* @param string $header The name of the Header (without colon)
|
||||
@@ -1204,7 +1130,6 @@ class Mail
|
||||
* @param string|null $sectionID The section to modify. If null, use the main
|
||||
*/
|
||||
public function addHeader ($header, $value, $sectionID=null)
|
||||
// {{{
|
||||
{
|
||||
if (substr ($value, -1) !== "\n" &&
|
||||
substr ($value, -1) !== "\r" &&
|
||||
@@ -1250,14 +1175,12 @@ class Mail
|
||||
}
|
||||
$this->createMailEML ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Delete a specific header
|
||||
* @param string $header The header to remove
|
||||
* @param string|null $sectionID The section to modify. If null, use the main
|
||||
*/
|
||||
public function delHeader ($header, $sectionID=null)
|
||||
// {{{
|
||||
{
|
||||
if ($sectionID === null)
|
||||
{
|
||||
@@ -1295,7 +1218,6 @@ class Mail
|
||||
$this->sections[$sectionMainID]["_headersEML"] = $_headerEML;
|
||||
$this->createMailEML ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get all the headers, in the order in EML. The format is
|
||||
* [] => array ("header" => "value")
|
||||
@@ -1320,7 +1242,6 @@ class Mail
|
||||
* @return string|bool the literal value or false if it doesn't exist
|
||||
*/
|
||||
public function getHeader ($header, $headers=null)
|
||||
// {{{
|
||||
{
|
||||
$headers = $this->getHeaders ($headers);
|
||||
foreach ($headers as $key=>$val)
|
||||
@@ -1332,7 +1253,6 @@ class Mail
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get a generic header with removing the carriage return
|
||||
* If there is multiple headers with the same name, return the first
|
||||
@@ -1341,7 +1261,6 @@ class Mail
|
||||
* @return string|bool the literal value or false if it doesn't exist
|
||||
*/
|
||||
public function getHeaderValue ($header, $headers=null)
|
||||
// {{{
|
||||
{
|
||||
$headers = $this->getHeaders ($headers);
|
||||
foreach ($headers as $key=>$val)
|
||||
@@ -1358,12 +1277,10 @@ class Mail
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create the complete mail structure
|
||||
*/
|
||||
public function createMailEML ()
|
||||
// {{{
|
||||
{
|
||||
$complete = "";
|
||||
$this->recurse = 0;
|
||||
@@ -1380,13 +1297,11 @@ class Mail
|
||||
}
|
||||
$this->completeEmailEML = $complete;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Recursive email EML creation for childs
|
||||
* @param array $parent The parent array
|
||||
*/
|
||||
private function createMailEMLSub ($parent)
|
||||
// {{{
|
||||
{
|
||||
$this->recurse++;
|
||||
if ($this->recurse > 120)
|
||||
@@ -1412,20 +1327,17 @@ class Mail
|
||||
$complete .= "--".$parent["_boundary"]."--".$parent["_boundaryCR"];
|
||||
return $complete;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the complete mail
|
||||
* @return string The complete mail
|
||||
*/
|
||||
public function getMail ()
|
||||
// {{{
|
||||
{
|
||||
if (trim ($this->getBodyHTML()) === "No HTML provided by inline file added")
|
||||
throw new \Exception ("No HTML provided by inline file added", 500);
|
||||
|
||||
return $this->completeEmailEML;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return an array with the details of the mail :
|
||||
* the number of attachments, the from, to, subject in UTF-8, if there is
|
||||
@@ -1433,7 +1345,6 @@ class Mail
|
||||
* @return array The details of the mail
|
||||
*/
|
||||
public function getDetails ()
|
||||
// {{{
|
||||
{
|
||||
$bodyTextExists = false;
|
||||
$bodyHTMLExists = false;
|
||||
@@ -1475,13 +1386,11 @@ class Mail
|
||||
$subject = $this->decodeHeaders ("Subject", $this->getHeader ("Subject"));
|
||||
return get_defined_vars();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a boundary
|
||||
* @return string the textual boundary
|
||||
*/
|
||||
private function getBoundary ()
|
||||
// {{{
|
||||
{
|
||||
$data = openssl_random_pseudo_bytes (16);
|
||||
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0010
|
||||
@@ -1489,13 +1398,11 @@ class Mail
|
||||
return "-----".vsprintf ('%s%s%s%s%s%s%s%s',
|
||||
str_split (bin2hex ($data), 4));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a messageID
|
||||
* @return string the textual MessageID
|
||||
*/
|
||||
public function provideMessageID ()
|
||||
// {{{
|
||||
{
|
||||
$data = openssl_random_pseudo_bytes (16);
|
||||
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0010
|
||||
@@ -1504,7 +1411,6 @@ class Mail
|
||||
str_split (bin2hex ($data), 4))."@".
|
||||
php_uname('n').">";
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert the content to correct encoding.
|
||||
* The allowed encodings are "quoted-printable" or "base64" or "flowed"
|
||||
@@ -1514,7 +1420,6 @@ class Mail
|
||||
* @return string the content encoded by $encoding
|
||||
*/
|
||||
private function encodingEncode ($content, $encoding)
|
||||
// {{{
|
||||
{
|
||||
if ($encoding === "quoted-printable")
|
||||
{
|
||||
@@ -1534,7 +1439,6 @@ class Mail
|
||||
dgettext ("domframework",
|
||||
"Invalid encoding provided to encodingEncode : %s"), $encoding), 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Decode the content with correct encoding.
|
||||
* The allowed encodings are "quoted-printable" or "base64" or "8bit"
|
||||
@@ -1543,7 +1447,6 @@ class Mail
|
||||
* @return the content decoded by $encoding
|
||||
*/
|
||||
private function encodingDecode ($content, $encoding)
|
||||
// {{{
|
||||
{
|
||||
if ($encoding === "quoted-printable")
|
||||
return quoted_printable_decode ($content);
|
||||
@@ -1555,7 +1458,6 @@ class Mail
|
||||
dgettext ("domframework",
|
||||
"Invalid encoding provided to encodingDecode : '%s'"), $encoding), 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Encode a string to be compliant with MIME (used in headers)
|
||||
* @param string $header The header to be used. Will not be returned, but the
|
||||
@@ -1566,7 +1468,6 @@ class Mail
|
||||
* @return string the content encoded by $encoding
|
||||
*/
|
||||
private function encodeHeaders ($header, $content, $encoding)
|
||||
// {{{
|
||||
{
|
||||
$prefs = array ("input-charset" => "utf-8",
|
||||
"output-charset" => "utf-8");
|
||||
@@ -1580,7 +1481,6 @@ class Mail
|
||||
return substr (iconv_mime_encode ($header, $content, $prefs),
|
||||
strlen ($header)+2);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert the header to text
|
||||
* @param string $header The header to decode
|
||||
@@ -1588,12 +1488,10 @@ class Mail
|
||||
* @return string the header converted
|
||||
*/
|
||||
private function decodeHeaders ($header, $content)
|
||||
// {{{
|
||||
{
|
||||
return substr (iconv_mime_decode ("$header: $content", 0, "utf-8"),
|
||||
strlen ($header)+2);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Encode a header string not starting on first column. The number of chars
|
||||
* need to be skipped is passed as argument. The function will correctely
|
||||
@@ -1605,7 +1503,6 @@ class Mail
|
||||
* @return string the content encoded by $encoding
|
||||
*/
|
||||
private function encodeHeaderStringWithPosition ($content, $encoding, $blanks)
|
||||
// {{{
|
||||
{
|
||||
$prefs = array ("input-charset" => "utf-8",
|
||||
"output-charset" => "utf-8");
|
||||
@@ -1620,7 +1517,6 @@ class Mail
|
||||
$prefs),
|
||||
$blanks+2);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Convert a From/To string to array. Manage multiple recipients
|
||||
* Ex. : toto toto <toto@toto.com>, titi <titi@titi.com>
|
||||
@@ -1630,7 +1526,6 @@ class Mail
|
||||
* @return array The array with the converted data
|
||||
*/
|
||||
public function convertPeopleToArray ($data)
|
||||
// {{{
|
||||
{
|
||||
$elements = explode (",", $data);
|
||||
$res = array ();
|
||||
@@ -1652,14 +1547,12 @@ class Mail
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Analyze the Content-Type line and return an array with the values
|
||||
* @param string $contentType The content Type to analyze
|
||||
* @return array The analyzed Content-Type
|
||||
*/
|
||||
public function contentTypeAnalyze ($contentType)
|
||||
// {{{
|
||||
{
|
||||
$contentType = preg_replace ("#[\r\n]+[ \t]+#", " ", $contentType);
|
||||
$elements = explode (";", $contentType);
|
||||
@@ -1678,5 +1571,4 @@ class Mail
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -34,14 +34,12 @@ class Outputdl
|
||||
* @return $this|boolean
|
||||
*/
|
||||
public function resumeAllow ($resumeAllow = null)
|
||||
// {{{
|
||||
{
|
||||
if ($resumeAllow === null)
|
||||
return $this->resumeAllow;
|
||||
$this->resumeAllow = !! $resumeAllow;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get/Set Base of filesystem
|
||||
* The base directory is use to secure the download. A user can not request
|
||||
@@ -52,39 +50,33 @@ class Outputdl
|
||||
* @return $this|string
|
||||
*/
|
||||
public function base ($base = null)
|
||||
// {{{
|
||||
{
|
||||
if ($base === null)
|
||||
return $this->base;
|
||||
$this->base = $base;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get headers from headers list
|
||||
* The headers can be tested too
|
||||
* @return array
|
||||
*/
|
||||
public function headers ()
|
||||
// {{{
|
||||
{
|
||||
return $this->headers;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new header and send it if possible
|
||||
* @param string $header The header to send
|
||||
* @return $this
|
||||
*/
|
||||
private function header ($header)
|
||||
// {{{
|
||||
{
|
||||
if (! headers_sent())
|
||||
header ($header);
|
||||
$this->headers[] = $header;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Download a file with management of Partial Download (like resume)
|
||||
* Manage the HTTP headers to allow to resume the download if it is allowed
|
||||
@@ -93,7 +85,6 @@ class Outputdl
|
||||
* @param string|null $filename The filename to send to the browser
|
||||
*/
|
||||
public function downloadFile ($path, $filename = null)
|
||||
// {{{
|
||||
{
|
||||
if (!file_exists ($path))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -195,7 +186,6 @@ class Outputdl
|
||||
exit;
|
||||
return;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Download the file. Do not go through the renderer
|
||||
* @param string $path The path to download
|
||||
@@ -203,7 +193,6 @@ class Outputdl
|
||||
* @param integer $stop The stop range
|
||||
*/
|
||||
private function downloadFileRange ($path, $start, $stop)
|
||||
// {{{
|
||||
{
|
||||
$file = realpath ($path);
|
||||
$chunksize = 10*1024*1024; // how many bytes per chunk
|
||||
@@ -230,5 +219,4 @@ class Outputdl
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ class Password
|
||||
/** List all the allowed hashing methods, sort from weak to strong encryption
|
||||
*/
|
||||
private $methods = array (
|
||||
// {{{
|
||||
"MYSQL" => array (
|
||||
"hash" => "", "size" => "", "pre" => "", "post" => ""),
|
||||
"CRYPT_STD_DES" => array (
|
||||
@@ -42,7 +41,6 @@ class Password
|
||||
"PASSWORD_ARGON2ID" => array (
|
||||
"hash" => PASSWORD_ARGON2ID, "size" => "", "pre" => "", "post" => ""),
|
||||
);
|
||||
// }}}
|
||||
|
||||
/////////////////
|
||||
// METHODS //
|
||||
@@ -52,7 +50,6 @@ class Password
|
||||
* @return array ("PASSWORD_ARGON2ID" => PASSWORD_ARGON2ID);
|
||||
*/
|
||||
public function listMethods ()
|
||||
// {{{
|
||||
{
|
||||
$res = array ();
|
||||
foreach ($this->methods as $key => $params)
|
||||
@@ -66,13 +63,11 @@ class Password
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a salt, based on openssl_random_pseudo_bytes function
|
||||
* @return string a string salt
|
||||
*/
|
||||
public function salt ()
|
||||
// {{{
|
||||
{
|
||||
if (function_exists ("openssl_random_pseudo_bytes"))
|
||||
$salt = substr (base64_encode (openssl_random_pseudo_bytes (17)), 0, 22);
|
||||
@@ -84,7 +79,6 @@ class Password
|
||||
$salt = str_replace ("+",".",$salt);
|
||||
return $salt;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Crypt the provided password with the wanted crypt method
|
||||
* @param string $password The password to crypt
|
||||
@@ -93,7 +87,6 @@ class Password
|
||||
* @return string The hashed password
|
||||
*/
|
||||
public function cryptPassword ($password, $method = null)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($password) && ! is_integer ($password))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -123,19 +116,16 @@ class Password
|
||||
throw new \Exception (sprintf (dgettext ("domframework",
|
||||
"Password : Unknown method to crypt requested : %s"), $method), 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Crypt the password with the best algorithm available
|
||||
* @param string $password The password to crypt
|
||||
* @return string The hashed password
|
||||
*/
|
||||
static public function cryptPasswd ($password)
|
||||
// {{{
|
||||
{
|
||||
$passwd = new Password ();
|
||||
return $passwd->cryptPassword ($password);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Check if the clear password is valid against the hashed one
|
||||
* @param string $clear The clear password
|
||||
@@ -143,7 +133,6 @@ class Password
|
||||
* @return boolean true if the password correspond to the hash
|
||||
*/
|
||||
static public function checkPassword ($clear, $hashed)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($clear))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -159,7 +148,6 @@ class Password
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a random password with $nbChars chars, ASCII chars (with special
|
||||
* chars).
|
||||
@@ -168,7 +156,6 @@ class Password
|
||||
* @return string The random password
|
||||
*/
|
||||
static public function generateASCII ($nbChars = 12)
|
||||
// {{{
|
||||
{
|
||||
if (! is_int ($nbChars) || $nbChars < 1)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -189,7 +176,6 @@ class Password
|
||||
shuffle ($password);
|
||||
return implode ($password);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a random password with $nbChars chars, Alphanumericals chars
|
||||
* (without special chars)
|
||||
@@ -197,7 +183,6 @@ class Password
|
||||
* @return string The random password
|
||||
*/
|
||||
static public function generateAlphanum ($nbChars = 12)
|
||||
// {{{
|
||||
{
|
||||
if (! is_int ($nbChars) || $nbChars < 1)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -214,7 +199,6 @@ class Password
|
||||
shuffle ($password);
|
||||
return implode ($password);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Create a random password with $nbChars chars, Alphabeticals chars
|
||||
* (without special chars, neither numbers)
|
||||
@@ -222,7 +206,6 @@ class Password
|
||||
* @return string The random password
|
||||
*/
|
||||
static public function generateAlphabetical ($nbChars = 12)
|
||||
// {{{
|
||||
{
|
||||
if (! is_int ($nbChars) || $nbChars < 1)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -239,5 +222,4 @@ class Password
|
||||
shuffle ($password);
|
||||
return implode ($password);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ class Queuefile extends Queue
|
||||
* @return $this;
|
||||
*/
|
||||
public function connect ($dsn)
|
||||
// {{{
|
||||
{
|
||||
// The DSN format must be file:///tmp/queuefile.txt
|
||||
if (substr ($dsn, 0, 7) !== "file://")
|
||||
@@ -43,14 +42,12 @@ class Queuefile extends Queue
|
||||
$file->touch ($this->queue);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Add a new entry to the end of the queue
|
||||
* @param mixed $entry The entry to add
|
||||
* @return $this;
|
||||
*/
|
||||
public function add ($entry)
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
$file->lockEX ($this->queue);
|
||||
@@ -59,14 +56,12 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get all the entries of the queue
|
||||
* @param boolean|null $delete If true, delete the read entry
|
||||
* @return array
|
||||
*/
|
||||
public function getAll ($delete =false)
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
if ($delete)
|
||||
@@ -86,12 +81,10 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $entries;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the number of entries in the queue
|
||||
*/
|
||||
public function count ()
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
$file->lockSH ($this->queue);
|
||||
@@ -100,13 +93,11 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $count;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Clear all the entries of the queue
|
||||
* @return $this;
|
||||
*/
|
||||
public function clear ()
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
$file->lockEX ($this->queue);
|
||||
@@ -114,7 +105,6 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the first entry in the queue with optional removing of the entry
|
||||
* @param boolean|null $delete If true, delete the read entry
|
||||
@@ -122,7 +112,6 @@ class Queuefile extends Queue
|
||||
* queue (FIFO)
|
||||
*/
|
||||
public function getFirst ($delete = false)
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
if ($delete)
|
||||
@@ -146,7 +135,6 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the last entry in the queue with optional removing of the entry
|
||||
* @param boolean|null $delete If true, delete the read entry
|
||||
@@ -154,7 +142,6 @@ class Queuefile extends Queue
|
||||
* queue (LIFO)
|
||||
*/
|
||||
public function getLast ($delete = false)
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
if ($delete)
|
||||
@@ -178,7 +165,6 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get X entries starting at position Y
|
||||
* @param integer $start the starting position (the entries start at position
|
||||
@@ -188,7 +174,6 @@ class Queuefile extends Queue
|
||||
* @return array An array of mixed entries
|
||||
*/
|
||||
public function getRange ($start, $number, $delete = false)
|
||||
// {{{
|
||||
{
|
||||
$file = new File ();
|
||||
if ($delete)
|
||||
@@ -224,5 +209,4 @@ class Queuefile extends Queue
|
||||
$file->lockUN ($this->queue);
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ class Rest
|
||||
* @return string like "json", "xml", "txt", "csv"
|
||||
*/
|
||||
public function chooseType ()
|
||||
// {{{
|
||||
{
|
||||
$type = reset ($this->allowedtypes);
|
||||
if (isset ($_SERVER["HTTP_ACCEPT"]))
|
||||
@@ -45,7 +44,6 @@ class Rest
|
||||
}
|
||||
return $type;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Display the message (which can be a string, an array, an integer...)
|
||||
* into the type asked by the client if it is allowed.
|
||||
@@ -54,7 +52,6 @@ class Rest
|
||||
* @param integer|null $code HTTP code to use
|
||||
*/
|
||||
function display ($message, $code = 200)
|
||||
// {{{
|
||||
{
|
||||
$http = new Http;
|
||||
$text = $http->codetext ($code);
|
||||
@@ -65,5 +62,4 @@ class Rest
|
||||
$obj = new $constr ();
|
||||
$obj->$method ($message);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ namespace Domframework;
|
||||
class Robotstxt
|
||||
{
|
||||
// PROPERTIES
|
||||
// {{{
|
||||
/** The allowed urls
|
||||
*/
|
||||
private $allow = array ();
|
||||
@@ -47,7 +46,6 @@ class Robotstxt
|
||||
* default is set
|
||||
*/
|
||||
private $errors = array ();
|
||||
// }}}
|
||||
|
||||
// METHODS
|
||||
/** Get the robots.txt file content and do the analyze
|
||||
@@ -56,7 +54,6 @@ class Robotstxt
|
||||
* @return $this
|
||||
*/
|
||||
public function __construct ($content, $crawlerName)
|
||||
// {{{
|
||||
{
|
||||
if (trim ($content) === "")
|
||||
{
|
||||
@@ -155,7 +152,6 @@ class Robotstxt
|
||||
$this->allow[] = "/";
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return true if the provided URL can be used against the robots.txt
|
||||
* definition or FALSE if it is not the case
|
||||
@@ -163,7 +159,6 @@ class Robotstxt
|
||||
* @return boolean The result of the test
|
||||
*/
|
||||
public function URLAllow ($url)
|
||||
// {{{
|
||||
{
|
||||
$parse = parse_url ($url);
|
||||
$path = (isset ($parse["path"])) ? $parse["path"] : "/";
|
||||
@@ -224,7 +219,6 @@ class Robotstxt
|
||||
$this->matchRule = $disallowRule;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// GETTERS
|
||||
/** Return the lines where an error occured
|
||||
@@ -232,71 +226,57 @@ class Robotstxt
|
||||
* @return array The errors
|
||||
*/
|
||||
public function errors ()
|
||||
// {{{
|
||||
{
|
||||
return $this->errors;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the allowed urls
|
||||
* @return array $allow The array of allow rules
|
||||
*/
|
||||
public function allow ()
|
||||
// {{{
|
||||
{
|
||||
return $this->allow;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the disallowed urls
|
||||
* @return array $disallow The array of disallow rules
|
||||
*/
|
||||
public function disallow ()
|
||||
// {{{
|
||||
{
|
||||
return $this->disallow;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the sitemaps url
|
||||
* @return array $sitemap The array of sitemaps URL
|
||||
*/
|
||||
public function sitemaps ()
|
||||
// {{{
|
||||
{
|
||||
return $this->sitemaps;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the crawldelay
|
||||
* @return integer $crawldelay The crawlDelay defined in robots.txt
|
||||
*/
|
||||
public function crawldelay ()
|
||||
// {{{
|
||||
{
|
||||
return $this->crawldelay;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the host
|
||||
* @return string $host The Host string defined in robots.txt
|
||||
*/
|
||||
public function host ()
|
||||
// {{{
|
||||
{
|
||||
return $this->host;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the matchRule
|
||||
* @return string $matchRule The matchRule matching the URLAllow test
|
||||
*/
|
||||
public function matchRule ()
|
||||
// {{{
|
||||
{
|
||||
return $this->matchRule;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// PRIVATE METHODS
|
||||
/** Get a line from robots.txt file and return the associated value.
|
||||
@@ -305,11 +285,9 @@ class Robotstxt
|
||||
* @return string the value recorded on line
|
||||
*/
|
||||
private function getValueFromLine ($line)
|
||||
// {{{
|
||||
{
|
||||
preg_match_all ("#^(?P<field>\S+):\s*(?P<value>\S*)\s*".
|
||||
"(\#\s*(?P<comment>.+)\s*)?\$#", $line, $matches);
|
||||
return $matches["value"][0];
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ class Sitemap
|
||||
* @return array The content of the file if it is valid
|
||||
*/
|
||||
public function analyze ($content, $url)
|
||||
// {{{
|
||||
{
|
||||
$finfo = new \finfo (FILEINFO_MIME_TYPE);
|
||||
$type = $finfo->buffer ($content);
|
||||
@@ -48,7 +47,6 @@ class Sitemap
|
||||
else
|
||||
throw new \Exception ("Type of sitemap '$type' unknown for '$url'", 406);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return an array containing the URL in sitemap associated with an empty
|
||||
* array, as the Text format provide only URL, so return empty array.
|
||||
@@ -64,7 +62,6 @@ class Sitemap
|
||||
* @return array The content of the file if it is valid
|
||||
*/
|
||||
public function analyzeText ($content, $url)
|
||||
// {{{
|
||||
{
|
||||
if (strlen ($content) > 10000000)
|
||||
{
|
||||
@@ -77,7 +74,6 @@ class Sitemap
|
||||
$urls = array_fill_keys ($urls, array ());
|
||||
return array ("urls" => $urls, "sitemaps" => array ());
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return an array containing the URL in sitemap associated with the
|
||||
* information of priority and changefreq (in seconds)
|
||||
@@ -95,7 +91,6 @@ class Sitemap
|
||||
* @return array The content of the file if it is valid
|
||||
*/
|
||||
public function analyzeXML ($content, $url)
|
||||
// {{{
|
||||
{
|
||||
if (strlen ($content) > 10000000)
|
||||
throw new \Exception ("Sitemap '$url' size is too big -> skip", 406);
|
||||
@@ -186,5 +181,4 @@ class Sitemap
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,6 @@ class Spfcheck
|
||||
* @return array (The netmasks to match, the last all)
|
||||
*/
|
||||
public function getRecords ($domain)
|
||||
// {{{
|
||||
{
|
||||
$this->errors = array ();
|
||||
$this->dnsCounter = 0;
|
||||
@@ -70,7 +69,6 @@ class Spfcheck
|
||||
"No catch all defined for the domain");
|
||||
return $this->ipRecords;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Try to match the provided IP address against the $domain SPF record to
|
||||
* be get
|
||||
@@ -79,7 +77,6 @@ class Spfcheck
|
||||
* @return string PASS/FAIL/SOFTFAIL
|
||||
*/
|
||||
public function ipCheckToSPF ($domain, $ip)
|
||||
// {{{
|
||||
{
|
||||
$ips = $this->getRecords ($domain);
|
||||
if (filter_var ($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false)
|
||||
@@ -144,7 +141,6 @@ class Spfcheck
|
||||
"SFPCheck : Can not determine the SPF result with params '%s' and '%s'"),
|
||||
$domain, $ip), 403 );
|
||||
}
|
||||
// }}}
|
||||
|
||||
/////////////////
|
||||
// GETTERS //
|
||||
@@ -152,56 +148,44 @@ class Spfcheck
|
||||
/** Get the errors detected when reading the SPF record
|
||||
*/
|
||||
public function getErrors ()
|
||||
// {{{
|
||||
{
|
||||
return $this->errors;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the DNS requests done to get the SPF records
|
||||
*/
|
||||
public function getDNSRequests ()
|
||||
// {{{
|
||||
{
|
||||
return $this->dnsRequests;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the number of DNS queries
|
||||
*/
|
||||
public function getDNSRequestNumber ()
|
||||
// {{{
|
||||
{
|
||||
return $this->dnsCounter;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get default case (if set)
|
||||
*/
|
||||
public function getDefaultCase ()
|
||||
// {{{
|
||||
{
|
||||
return $this->catchAll;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the matching rule when testing an IP against a SPF domain record
|
||||
*/
|
||||
public function getMatchRule ()
|
||||
// {{{
|
||||
{
|
||||
return $this->matchRule;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the IPs from the SPF records
|
||||
*/
|
||||
public function getIpRecords ()
|
||||
// {{{
|
||||
{
|
||||
return $this->ipRecords;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the DNS values set for the provided $domain/$part(/$entity)
|
||||
* @param string $search The search entity
|
||||
@@ -227,7 +211,6 @@ class Spfcheck
|
||||
* @return array (The netmasks to match, the last all)
|
||||
*/
|
||||
private function getRecordsRecurse ($domain)
|
||||
// {{{
|
||||
{
|
||||
$records = array ();
|
||||
$localAll = "";
|
||||
@@ -265,7 +248,6 @@ class Spfcheck
|
||||
$part = substr ($part, 1);
|
||||
}
|
||||
if (stripos ($part, "redirect=") === 0)
|
||||
// {{{
|
||||
{
|
||||
if ($sign !== "")
|
||||
{
|
||||
@@ -285,10 +267,8 @@ class Spfcheck
|
||||
}
|
||||
$ips = $ips + $this->getRecordsRecurse ($ext);
|
||||
}
|
||||
// }}}
|
||||
// "include:" part
|
||||
elseif (stripos ($part, "include:") === 0)
|
||||
// {{{
|
||||
{
|
||||
if ($sign !== "")
|
||||
{
|
||||
@@ -308,10 +288,8 @@ class Spfcheck
|
||||
}
|
||||
$ips = $ips + $this->getRecordsRecurse ($ext);
|
||||
}
|
||||
// }}}
|
||||
// "mx:" / "mx" part
|
||||
elseif (stripos ($part, "mx:") === 0 || strtolower ($part) === "mx")
|
||||
// {{{
|
||||
{
|
||||
$partWithDomain = $part;
|
||||
if ($partWithDomain === "mx")
|
||||
@@ -343,10 +321,8 @@ class Spfcheck
|
||||
}
|
||||
sort ($ips[$domain][$sign.$part]);
|
||||
}
|
||||
// }}}
|
||||
// "ip4:" part
|
||||
elseif (stripos ($part, "ip4:") === 0)
|
||||
// {{{
|
||||
{
|
||||
$ext = substr ($part, 4);
|
||||
if (! is_string ($ext) || trim ($ext) === "")
|
||||
@@ -378,10 +354,8 @@ class Spfcheck
|
||||
}
|
||||
$ips[$domain][$sign.$part][] = $ip.$mask;
|
||||
}
|
||||
// }}}
|
||||
// "ip6:" part
|
||||
elseif (stripos ($part, "ip6:") === 0)
|
||||
// {{{
|
||||
{
|
||||
$ext = substr ($part, 4);
|
||||
if (! is_string ($ext) || trim ($ext) === "")
|
||||
@@ -413,10 +387,8 @@ class Spfcheck
|
||||
}
|
||||
$ips[$domain][$sign.$part][] = $ip.$mask;
|
||||
}
|
||||
// }}}
|
||||
// "ptr:" MUST NOT BE USED
|
||||
elseif (stripos ($part, "ptr:") === 0 || strtolower ($part) === "ptr")
|
||||
// {{{
|
||||
{
|
||||
$this->errors[$domain][$sign.$part] =
|
||||
sprintf (dgettext ("domframework",
|
||||
@@ -424,10 +396,8 @@ class Spfcheck
|
||||
"(see RFC7208) : Skip it"), $domain, $part);
|
||||
continue;
|
||||
}
|
||||
// }}}
|
||||
// "a:" part
|
||||
elseif (stripos ($part, "a:") === 0 || strtolower ($part) === "a")
|
||||
// {{{
|
||||
{
|
||||
$partWithDomain = $part;
|
||||
if ($partWithDomain === "a")
|
||||
@@ -454,10 +424,8 @@ class Spfcheck
|
||||
}
|
||||
sort ($ips[$domain][$sign.$part]);
|
||||
}
|
||||
// }}}
|
||||
// "-all" / "~all" / "+all" part
|
||||
elseif (strtolower ($part) === "all")
|
||||
// {{{
|
||||
{
|
||||
$ips[$domain][$sign.$part] = array ();
|
||||
if ($localAll !== "")
|
||||
@@ -478,7 +446,6 @@ class Spfcheck
|
||||
$this->catchAll = $sign.$part;
|
||||
$this->catchAllDomain = $domain;
|
||||
}
|
||||
// }}}
|
||||
else
|
||||
{
|
||||
$this->errors [$domain][$sign.$part] =
|
||||
@@ -489,7 +456,6 @@ class Spfcheck
|
||||
}
|
||||
return $ips;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the requested hostname and get the type
|
||||
* @param string $hostname The hostname to get
|
||||
@@ -498,7 +464,6 @@ class Spfcheck
|
||||
* @return array (array (ip (for A), target (for TXT));
|
||||
*/
|
||||
private function dns_get_record ($hostname, $type, $domain)
|
||||
// {{{
|
||||
{
|
||||
$typeStr = "";
|
||||
switch ($type)
|
||||
@@ -566,6 +531,5 @@ class Spfcheck
|
||||
$this->dnsRequests[$domain] = $res;
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
|
||||
-18
@@ -22,7 +22,6 @@ class Sse
|
||||
//////////////////////////
|
||||
//// PROPERTIES ////
|
||||
//////////////////////////
|
||||
// {{{
|
||||
/** The backend File to use
|
||||
*/
|
||||
private $files;
|
||||
@@ -41,7 +40,6 @@ class Sse
|
||||
/** The handlers parameters
|
||||
*/
|
||||
private $handlersParams = array ();
|
||||
// }}}
|
||||
|
||||
//////////////////////////////
|
||||
//// SETTER METHODS ////
|
||||
@@ -54,7 +52,6 @@ class Sse
|
||||
* @return $this
|
||||
*/
|
||||
final public function setBackendFiles ($files)
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($files))
|
||||
$files = array ("data" => $files);
|
||||
@@ -76,14 +73,12 @@ class Sse
|
||||
$this->files = $files;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The pingTime to use. Must be positive. If null, the ping is disabled
|
||||
* @param integer|float $pingTime The time in seconds between two keepalive
|
||||
* pings
|
||||
*/
|
||||
final public function setPingTime ($pingTime)
|
||||
// {{{
|
||||
{
|
||||
if (! is_float ($pingTime) && ! is_integer ($pingTime))
|
||||
throw new \Exception (sprintf (dgettext ("domframework",
|
||||
@@ -96,7 +91,6 @@ class Sse
|
||||
$this->pingTime = $pingTime;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The optional handler to use in DataOnly. Must be callable method
|
||||
* @param callable|null $handler The handler
|
||||
@@ -104,7 +98,6 @@ class Sse
|
||||
* @param mixed... $params The optional needed parameters
|
||||
*/
|
||||
final public function setHandlerDataonly ($handler, $params = null)
|
||||
// {{{
|
||||
{
|
||||
if (! is_callable ($handler) && $handler !== null)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -115,7 +108,6 @@ class Sse
|
||||
$this->handlersParams["data"] = $args;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The optional handler to use in Events. Must be array of callable methods
|
||||
* @param array $handlers The handlers method, array[event=>callable]
|
||||
@@ -127,7 +119,6 @@ class Sse
|
||||
* if event=>null is set, remove the parameters for the event
|
||||
*/
|
||||
final public function setHandlersEvent ($handlers, $params = null)
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($handlers))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -163,7 +154,6 @@ class Sse
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
//////////////////////////////
|
||||
//// PUBLIC METHODS ////
|
||||
@@ -174,7 +164,6 @@ class Sse
|
||||
* Never return !
|
||||
*/
|
||||
final public function loop ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->files === null)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -242,7 +231,6 @@ class Sse
|
||||
usleep(100000);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
///////////////////////////////
|
||||
//// PRIVATE METHODS ////
|
||||
@@ -250,7 +238,6 @@ class Sse
|
||||
/** Initialize the backend : open all the files and go at the end
|
||||
*/
|
||||
private function backendInit ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->files === null)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
@@ -265,7 +252,6 @@ class Sse
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the pending lines from requested backend
|
||||
* @param string $event The event to get data
|
||||
@@ -273,7 +259,6 @@ class Sse
|
||||
* @return string the data lines stored in the lines
|
||||
*/
|
||||
private function backendGet ($event)
|
||||
// {{{
|
||||
{
|
||||
// If the file was previously opened but doesn't exists anymore. Close it
|
||||
// and reopen it just after
|
||||
@@ -304,7 +289,6 @@ class Sse
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Initialize the backend for one specific file.
|
||||
* @param string $event The event to start
|
||||
@@ -312,7 +296,6 @@ class Sse
|
||||
* @return boolean false if the file doesn't exists
|
||||
*/
|
||||
private function backendInitEvent ($event, $filePath)
|
||||
// {{{
|
||||
{
|
||||
clearstatcache (true, $filePath);
|
||||
if (! file_exists (dirname ($filePath)))
|
||||
@@ -337,5 +320,4 @@ class Sse
|
||||
$this->fps[$event] = $fp;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ namespace Domframework;
|
||||
class Tcpclient
|
||||
{
|
||||
// PROPERTIES //
|
||||
// {{{
|
||||
/** The IPv6 allowed for the server
|
||||
*/
|
||||
private $ipv6 = array ();
|
||||
@@ -54,14 +53,12 @@ class Tcpclient
|
||||
* 30s by default
|
||||
*/
|
||||
private $timeout = 30;
|
||||
// }}}
|
||||
|
||||
/** Initialize the object, by setting the name or the IP of the server
|
||||
* @param string $ipOrName The IP or the name of the server
|
||||
* @param integer $port The port of the server to connect
|
||||
*/
|
||||
public function __construct ($ipOrName, $port)
|
||||
// {{{
|
||||
{
|
||||
$providedIpOrName = $ipOrName;
|
||||
if (filter_var ($ipOrName, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
|
||||
@@ -110,14 +107,12 @@ class Tcpclient
|
||||
shuffle ($this->ipv6);
|
||||
shuffle ($this->ipv4);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set/get the preferIPv4 property
|
||||
* @param boolean|null $preferIPv4 The preferIPv4 property to set (or to get
|
||||
* if null)
|
||||
*/
|
||||
public function preferIPv4 ($preferIPv4 = null)
|
||||
// {{{
|
||||
{
|
||||
if ($preferIPv4 === null)
|
||||
return $this->preferIPv4;
|
||||
@@ -127,13 +122,11 @@ class Tcpclient
|
||||
$this->preferIPv4 = !!$preferIPv4;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set/get the read mode : text or binary
|
||||
* @param string|null $readMode The mode to set (or get if null)
|
||||
*/
|
||||
public function readMode ($readMode = null)
|
||||
// {{{
|
||||
{
|
||||
if ($readMode === null)
|
||||
return $this->readMode;
|
||||
@@ -143,26 +136,22 @@ class Tcpclient
|
||||
$this->readMode = $readMode;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set/get the timeout
|
||||
* @param integer|null $timeout The timeout in seconds
|
||||
*/
|
||||
public function timeout ($timeout = null)
|
||||
// {{{
|
||||
{
|
||||
if ($timeout === null)
|
||||
return $this->timeout;
|
||||
$this->timeout = intval ($timeout);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Initialize the connection to the server
|
||||
* Return the socket
|
||||
*/
|
||||
public function connect ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->preferIPv4)
|
||||
$ips = array_merge ($this->ipv4, $this->ipv6);
|
||||
@@ -191,7 +180,6 @@ class Tcpclient
|
||||
throw new \Exception ("Can not connect to server $this->ipOrName : ".
|
||||
$errstr, 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Activate the SSL connection.
|
||||
* Put the socket in blocking mode, as it is mandatory to have SSL connection
|
||||
@@ -202,7 +190,6 @@ class Tcpclient
|
||||
* with the server
|
||||
*/
|
||||
public function cryptoEnable ($val, $cryptoMethod = null, $options = array ())
|
||||
// {{{
|
||||
{
|
||||
if ($this->socket === null)
|
||||
throw new \Exception ("Can not send to server $this->ipOrName : ".
|
||||
@@ -231,14 +218,12 @@ class Tcpclient
|
||||
substr (strrchr ($php_errormsg, ":"), 1), 500);
|
||||
return $rc;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Send a data to the server.
|
||||
* The connection must be established
|
||||
* @param mixed $data The data to send
|
||||
*/
|
||||
public function send ($data)
|
||||
// {{{
|
||||
{
|
||||
if ($this->socket === null)
|
||||
throw new \Exception ("Can not send to server $this->ipOrName : ".
|
||||
@@ -250,7 +235,6 @@ class Tcpclient
|
||||
throw new \Exception ("Can not send to server $this->ipOrName", 500);
|
||||
return $sentLen;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Read the data from the server.
|
||||
* The connection must be established
|
||||
@@ -261,7 +245,6 @@ class Tcpclient
|
||||
* @return string The content
|
||||
*/
|
||||
public function read ($maxLength = 1024)
|
||||
// {{{
|
||||
{
|
||||
if ($this->socket === null)
|
||||
throw new \Exception ("Can not read from server $this->ipOrName : ".
|
||||
@@ -281,12 +264,10 @@ class Tcpclient
|
||||
}
|
||||
return $read;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Disconnect the socket
|
||||
*/
|
||||
public function disconnect ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->socket === null)
|
||||
throw new \Exception ("Can not disconnect server $this->ipOrName : ".
|
||||
@@ -294,22 +275,18 @@ class Tcpclient
|
||||
@stream_socket_shutdown ($this->socket, STREAM_SHUT_RDWR);
|
||||
$this->socket = null;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get meta data, like the timeout state, the crypto protocol and ciphers...
|
||||
*/
|
||||
public function getMeta ()
|
||||
// {{{
|
||||
{
|
||||
return stream_get_meta_data ($this->socket);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the connection peer address, peer port and localaddress and localport
|
||||
* @return array
|
||||
*/
|
||||
public function getInfo ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->socket === null)
|
||||
throw new \Exception ("Can not getInfo for server $this->ipOrName : ".
|
||||
@@ -324,15 +301,12 @@ class Tcpclient
|
||||
$address = substr ($name, 0, $pos);
|
||||
return array ($address, $port, $localAddress, $localPort);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get the socket to direct access
|
||||
* @return resource The socket with the client
|
||||
*/
|
||||
public function getSock ()
|
||||
// {{{
|
||||
{
|
||||
return $this->socket;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@ class Tcpserver
|
||||
////////////////////
|
||||
// PROPERTIES //
|
||||
////////////////////
|
||||
// {{{
|
||||
/** Allow to debug with messages on screen
|
||||
*/
|
||||
private $debug = false;
|
||||
@@ -66,7 +65,6 @@ class Tcpserver
|
||||
private $processName = "tcpserver";
|
||||
|
||||
private $ipOrName;
|
||||
// }}}
|
||||
|
||||
////////////////////////
|
||||
// PUBLIC METHODS //
|
||||
@@ -75,27 +73,22 @@ class Tcpserver
|
||||
* stream_select () when the process is killed
|
||||
*/
|
||||
public function __construct ()
|
||||
// {{{
|
||||
{
|
||||
$this->logDebug ("NEW OBJECT CONSTRUCTED");
|
||||
set_error_handler([$this, 'errorHandler']);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The destructor is a log for debug
|
||||
*/
|
||||
public function __destruct ()
|
||||
// {{{
|
||||
{
|
||||
$this->logDebug ("Object destructed");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set/get the max children, the maximum of concurrent connections
|
||||
* @param integer|null $val The number of child to get/set
|
||||
*/
|
||||
final public function maxChild ($val = null)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($val === null)
|
||||
@@ -103,13 +96,11 @@ class Tcpserver
|
||||
$this->maxChild = intval ($val);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set/get the read mode : text or binary
|
||||
* @param string|null $val The mode to set (or get if null)
|
||||
*/
|
||||
final public function readMode ($val = null)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($val === null)
|
||||
@@ -120,13 +111,11 @@ class Tcpserver
|
||||
$this->readMode = $val;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the process name displayed in system
|
||||
* @param string|null $val The name of the process to set (or get if null)
|
||||
*/
|
||||
final public function processName ($val = null)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($val === null)
|
||||
@@ -134,13 +123,11 @@ class Tcpserver
|
||||
$this->processName = $val;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the timeout for open communication without any data transmited.
|
||||
* @param string|null $val The number of seconds to set (or get if null)
|
||||
*/
|
||||
final public function timeout ($val = null)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($val === null)
|
||||
@@ -154,7 +141,6 @@ class Tcpserver
|
||||
$this->timeout = intval ($val);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set the address, port and handler that will be enabled by loop
|
||||
* @param string $address The server address (can be 0.0.0.0 for all IPv4
|
||||
@@ -164,7 +150,6 @@ class Tcpserver
|
||||
* connected to the address:port
|
||||
*/
|
||||
final public function init ($address, $port, $handler)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
$this->nbChild = 0;
|
||||
@@ -173,12 +158,10 @@ class Tcpserver
|
||||
$this->ports[] = $port;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Start the main loop after the init and keep in it until loopStop
|
||||
*/
|
||||
final public function loop ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if (empty ($this->addresses))
|
||||
@@ -335,25 +318,21 @@ class Tcpserver
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Request the loop to stop. Will not allow new connections, but wait the
|
||||
* end of the existing processus
|
||||
* Block until all is closed
|
||||
*/
|
||||
final public function loopStop ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
$this->loopStop = true;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Start the main loop in background and do not wait its end
|
||||
* @return integer the PID of the child
|
||||
*/
|
||||
final public function loopInBackgroundStart ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
$this->logDebug ("Start loopInBackground");
|
||||
@@ -384,12 +363,10 @@ class Tcpserver
|
||||
$this->loop ();
|
||||
exit;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Stop the main loop in background and wait until its end
|
||||
*/
|
||||
final public function loopInBackgroundStop ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
$this->logDebug ("Request loopInBackgroundStop");
|
||||
@@ -397,13 +374,11 @@ class Tcpserver
|
||||
pcntl_waitpid ($this->pidLoopInBackground, $status);
|
||||
$this->logDebug ("Request loopInBackgroundStop : END");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** In child, get the socket to direct access
|
||||
* @return resource The socket with the client
|
||||
*/
|
||||
final public function getSock ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->parent === true)
|
||||
@@ -412,7 +387,6 @@ class Tcpserver
|
||||
throw new \Exception ("Can not send to client : not connected", 500);
|
||||
return $this->socket;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Get an array with the peer address, peer port, local address and local
|
||||
* port
|
||||
@@ -420,7 +394,6 @@ class Tcpserver
|
||||
* port)
|
||||
*/
|
||||
final public function getInfo ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->parent === true)
|
||||
@@ -441,7 +414,6 @@ class Tcpserver
|
||||
$localAddress = substr ($localAddress, 8, -1);
|
||||
return array ($address, $port, $localAddress, $localPort);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Activate the SSL connection
|
||||
* Put the socket in blocking mode, as it is mandatory to have SSL connection
|
||||
@@ -450,7 +422,6 @@ class Tcpserver
|
||||
*/
|
||||
final public function cryptoEnable ($val,
|
||||
$cryptoMethod = STREAM_CRYPTO_METHOD_TLS_SERVER)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->socket === null)
|
||||
@@ -465,13 +436,11 @@ class Tcpserver
|
||||
stream_context_set_option ($this->socket, $options);
|
||||
return @stream_socket_enable_crypto ($this->socket, !!$val, $cryptoMethod);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Set context SSL option.
|
||||
* @param array $options The ssl array to set
|
||||
*/
|
||||
final public function setSSLOptions ($options)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->socket === null)
|
||||
@@ -479,14 +448,12 @@ class Tcpserver
|
||||
"The server is not connected", 500);
|
||||
return stream_context_set_option ($this->socket, array ("ssl" => $options));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Send data to the client
|
||||
* @param mixed $data The data to send
|
||||
* @return the length of data sent
|
||||
*/
|
||||
final public function send ($data)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->parent === true)
|
||||
@@ -500,7 +467,6 @@ class Tcpserver
|
||||
$this->logSend ($data);
|
||||
return $sentLen;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Read the data from the client.
|
||||
* The connection must be established
|
||||
@@ -510,7 +476,6 @@ class Tcpserver
|
||||
* @return string The content
|
||||
*/
|
||||
final public function read ($maxLength = 1024)
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->parent === true)
|
||||
@@ -534,12 +499,10 @@ class Tcpserver
|
||||
$this->logReceive ($read);
|
||||
return $read;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Disconnect the socket
|
||||
*/
|
||||
final public function disconnect ()
|
||||
// {{{
|
||||
{
|
||||
$this->logMethods (__METHOD__, func_get_args ());
|
||||
if ($this->parent === true)
|
||||
@@ -549,14 +512,12 @@ class Tcpserver
|
||||
@stream_socket_shutdown ($this->socket, STREAM_SHUT_RDWR);
|
||||
$this->socket = null;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Log the data send to the client. By default, do nothing, but can be
|
||||
* overrided by the user
|
||||
* @param string $data The data to store in log
|
||||
*/
|
||||
public function logSend ($data)
|
||||
// {{{
|
||||
{
|
||||
if (! $this->debug)
|
||||
return;
|
||||
@@ -564,14 +525,12 @@ class Tcpserver
|
||||
file_put_contents ("/tmp/debug", date ("H:i:s")." [".posix_getpid ().
|
||||
"] S> $data", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Log the data received from the client. By default, do nothing, but can be
|
||||
* overrided by the user
|
||||
* @param string $data The data to store in log
|
||||
*/
|
||||
public function logReceive ($data)
|
||||
// {{{
|
||||
{
|
||||
if (! $this->debug)
|
||||
return;
|
||||
@@ -579,7 +538,6 @@ class Tcpserver
|
||||
file_put_contents ("/tmp/debug", date ("H:i:s")." [".posix_getpid ().
|
||||
"] C> $data", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Log the methods called. By default, do nothing, but can be overrided by
|
||||
* the user
|
||||
@@ -587,7 +545,6 @@ class Tcpserver
|
||||
* @param mixed|null $args The data to store in log
|
||||
*/
|
||||
public function logMethods ($method, $args)
|
||||
// {{{
|
||||
{
|
||||
if (! $this->debug)
|
||||
return;
|
||||
@@ -617,33 +574,28 @@ class Tcpserver
|
||||
file_put_contents ("/tmp/debug", date ("H:i:s")." [".posix_getpid ().
|
||||
"] METHOD $data", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Log the debug, By defaul do nothing, but can be overrided by the user
|
||||
* @param mixed|null $params The data to store in log
|
||||
*/
|
||||
public function logDebug ($params)
|
||||
// {{{
|
||||
{
|
||||
if (! $this->debug)
|
||||
return;
|
||||
file_put_contents ("/tmp/debug", date ("H:i:s")." [".posix_getpid ().
|
||||
"] DEBUG $params\n", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Log the errors, By defaul do nothing, but can be overrided by the user
|
||||
* @param mixed|null $params The data to store in log
|
||||
*/
|
||||
public function logError ($params)
|
||||
// {{{
|
||||
{
|
||||
if (! $this->debug)
|
||||
return;
|
||||
file_put_contents ("/tmp/debug", date ("H:i:s")." [".posix_getpid ().
|
||||
"] ERROR $params\n", FILE_APPEND);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Error catcher.
|
||||
* By default, do nothing, but can be overrided by the user
|
||||
@@ -653,38 +605,32 @@ class Tcpserver
|
||||
* @param integer $line The line where the error raised
|
||||
*/
|
||||
public function errorHandler ($errNo, $errMsg, $file, $line)
|
||||
// {{{
|
||||
{
|
||||
// @-operator : error suppressed
|
||||
if (0 === error_reporting())
|
||||
return false;
|
||||
$this->logError ("line $line : $errMsg");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Exception catcher
|
||||
* By default do nothing, but can be overrided by the user
|
||||
* @param object $exception The exception to catch
|
||||
*/
|
||||
public function exceptionHandler ($exception)
|
||||
// {{{
|
||||
{
|
||||
$this->logError ("Exception ".$exception->getMessage () . " (".
|
||||
$exception->getFile ().":".$exception->getLine().")");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Manage the timeout handler
|
||||
* By default, disconnect and generate an exception
|
||||
*/
|
||||
public function timeoutHandler ()
|
||||
// {{{
|
||||
{
|
||||
$this->disconnect ();
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"Disconnected for inactivity"), 500);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/////////////////////////
|
||||
// PRIVATE METHODS //
|
||||
@@ -692,7 +638,6 @@ class Tcpserver
|
||||
/** Manage the child stop signal
|
||||
*/
|
||||
private function sigCHLD ()
|
||||
// {{{
|
||||
{
|
||||
$this->nbChild --;
|
||||
$this->logDebug ("One child finished : $this->nbChild childs remain ".
|
||||
@@ -701,17 +646,14 @@ class Tcpserver
|
||||
$rc = pcntl_wait ($status);
|
||||
$this->logDebug ( "One child finished : $rc");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Manage the term / int signals
|
||||
* Will catch the stop signal, but the real end will be done when the last
|
||||
* child will be closed
|
||||
*/
|
||||
private function sigTERMINT ()
|
||||
// {{{
|
||||
{
|
||||
$this->logDebug ("Request TERM/INT : Wait for last childs");
|
||||
$this->loopStop ();
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ class Uuid
|
||||
* @return string UUID created
|
||||
*/
|
||||
public static function uuid4 ()
|
||||
// {{{
|
||||
{
|
||||
return sprintf ('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||
|
||||
@@ -39,5 +38,4 @@ class Uuid
|
||||
mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0xffff)
|
||||
);
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,6 @@ class Xdiff
|
||||
* @param string $output The output mode [Normal|Unified|SideBySide]
|
||||
*/
|
||||
public function __construct ($output = "normal")
|
||||
// {{{
|
||||
{
|
||||
if (! method_exists ($this, "display".ucfirst ($output)))
|
||||
throw new \Exception ("Invalid output requested to xdiff", 406);
|
||||
@@ -52,13 +51,11 @@ class Xdiff
|
||||
$this->file1Time = date ("Y-m-d H:i:s.u000 O");
|
||||
$this->file2Time = date ("Y-m-d H:i:s.u001 O");
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Allow to set the side by side width to the maximum allowed by screenWidth
|
||||
* @param integer $screenWidth The maximum width of the screen
|
||||
*/
|
||||
public function setScreenWidth ($screenWidth)
|
||||
// {{{
|
||||
{
|
||||
for ($x = 20 ; $x > 0 ; $x--)
|
||||
{
|
||||
@@ -70,14 +67,12 @@ class Xdiff
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Compute the differences between two strings $string1 and $string2
|
||||
* @param string $string1 The first string to compare
|
||||
* @param string $string2 The second string to compare
|
||||
*/
|
||||
public function diff ($string1, $string2)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($string1))
|
||||
throw new \Exception (
|
||||
@@ -91,14 +86,12 @@ class Xdiff
|
||||
preg_split ("#(.*\\R)#", $string2, -1,
|
||||
PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Compute the differences between two files $file1 and $file2
|
||||
* @param string $file1 The first file to use to compare
|
||||
* @param string $file2 The second file to use to compare
|
||||
*/
|
||||
public function diffFile ($file1, $file2)
|
||||
// {{{
|
||||
{
|
||||
if (! is_string ($file1))
|
||||
throw new \Exception (
|
||||
@@ -127,20 +120,17 @@ class Xdiff
|
||||
return $this->diff (file_get_contents ($file1),
|
||||
file_get_contents ($file2));
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Compute the differences between two arrays $array1 and $array2
|
||||
* @param array $array1 The first array to compare
|
||||
* @param array $array2 The second array to compare
|
||||
*/
|
||||
public function diffArray ($array1, $array2)
|
||||
// {{{
|
||||
{
|
||||
$diff = $this->computeArray ($array1, $array2);
|
||||
$method = $this->output;
|
||||
return $this->$method ($diff);
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Compute the differences between two arrays $array1 and $array2
|
||||
* @param array $array1 The first array to compare
|
||||
@@ -148,7 +138,6 @@ class Xdiff
|
||||
* @return array The data in internal format
|
||||
*/
|
||||
final public function computeArray ($array1, $array2)
|
||||
// {{{
|
||||
{
|
||||
if (! is_array ($array1))
|
||||
throw new \Exception (
|
||||
@@ -267,14 +256,12 @@ class Xdiff
|
||||
}
|
||||
return $diff;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return a string like "diff -u"
|
||||
* @param array $diffArray The diff array analyzed by diffArray method
|
||||
* @return string
|
||||
*/
|
||||
private function displayUnified ($diffArray)
|
||||
// {{{
|
||||
{
|
||||
$d = "";
|
||||
$i = 0 ;
|
||||
@@ -336,14 +323,12 @@ class Xdiff
|
||||
$e .= "+++ $this->filename2 $this->file2Time\n";
|
||||
return $e.$d;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return a string like "diff" without parameter
|
||||
* @param array $diffArray The diff array analyzed by diffArray method
|
||||
* @return string
|
||||
*/
|
||||
private function displayNormal ($diffArray)
|
||||
// {{{
|
||||
{
|
||||
$d = "";
|
||||
$i = 0 ;
|
||||
@@ -383,14 +368,12 @@ class Xdiff
|
||||
}
|
||||
return $d;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return a string like "diff -y" (Side by Side)
|
||||
* @param array $diffArray The diff array analyzed by diffArray method
|
||||
* @return string
|
||||
*/
|
||||
private function displaySideBySide ($diffArray)
|
||||
// {{{
|
||||
{
|
||||
$d = "";
|
||||
$i = 0 ;
|
||||
@@ -434,7 +417,6 @@ class Xdiff
|
||||
}
|
||||
return $d;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return a string sideBySide. Used by displaySideBySide for each line
|
||||
* @param string $side1 The string to be displayed on side1
|
||||
@@ -442,7 +424,6 @@ class Xdiff
|
||||
* @param string|null $symbol The symbol used to present the diff (<>|)
|
||||
*/
|
||||
private function side ($side1, $side2, $symbol = null)
|
||||
// {{{
|
||||
{
|
||||
$d = "";
|
||||
if (! is_string ($side1))
|
||||
@@ -478,7 +459,6 @@ class Xdiff
|
||||
$d .= "\n";
|
||||
return $d;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** This function return the next common part between both arrays starting at
|
||||
* position $i for $array1 and $j for array2
|
||||
@@ -490,7 +470,6 @@ class Xdiff
|
||||
* @return string
|
||||
*/
|
||||
private function lcs ($array1, $array2, $i, $j)
|
||||
// {{{
|
||||
{
|
||||
$found1 = false;
|
||||
$found2 = false;
|
||||
@@ -530,5 +509,4 @@ class Xdiff
|
||||
}
|
||||
return $array1[$i];
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -13,14 +13,11 @@ namespace Domframework;
|
||||
class Xmppclient
|
||||
{
|
||||
// CLASS CONSTANT //
|
||||
// {{{
|
||||
/** One send command each $RATE µs maximum
|
||||
*/
|
||||
const RATE = 30000;
|
||||
// }}}
|
||||
|
||||
// PROPERTIES //
|
||||
// {{{
|
||||
/** The connection socket when connected
|
||||
*/
|
||||
private $sock;
|
||||
@@ -45,7 +42,6 @@ class Xmppclient
|
||||
* microseconds.
|
||||
*/
|
||||
private $sendLastTime = 0;
|
||||
// }}}
|
||||
|
||||
// PUBLIC METHODS //
|
||||
/** Connect to XMPP server $server, on port $port (5222 by default)
|
||||
@@ -58,7 +54,6 @@ class Xmppclient
|
||||
*/
|
||||
public function connect ($server, $port, $login, $password,
|
||||
$debug = false)
|
||||
// {{{
|
||||
{
|
||||
// To have a really one microsecond precision in microtime function
|
||||
ini_set ("precision", 16);
|
||||
@@ -131,12 +126,10 @@ class Xmppclient
|
||||
$this->sock->timeout (5);
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Disconnect from the XMPP server
|
||||
*/
|
||||
public function disconnect ()
|
||||
// {{{
|
||||
{
|
||||
if ($this->sock && $this->sock->getSock ())
|
||||
{
|
||||
@@ -144,13 +137,11 @@ class Xmppclient
|
||||
$this->sock->disconnect ();
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Call the Discovery Service to find the available services on the server
|
||||
* @return array The services available
|
||||
*/
|
||||
public function discoveryService ()
|
||||
// {{{
|
||||
{
|
||||
$this->send ("<iq id='disco-$this->id' type='get'>".
|
||||
"<query xmlns='http://jabber.org/protocol/disco#info'/></iq>");
|
||||
@@ -163,7 +154,6 @@ class Xmppclient
|
||||
$this->id++;
|
||||
return $features[1];
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Send a direct message to a recipient. The message subject can be omitted,
|
||||
* as it is not displayed on the clients
|
||||
@@ -173,7 +163,6 @@ class Xmppclient
|
||||
* @return $this
|
||||
*/
|
||||
public function sendMessagePrivate ($recipient, $message, $subject = null)
|
||||
// {{{
|
||||
{
|
||||
$this->send ("<message from='$this->jid' to='$recipient' ".
|
||||
"id='message-$this->id' type='chat'>".
|
||||
@@ -183,47 +172,39 @@ class Xmppclient
|
||||
$this->id++;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** In case of destruction, try to disconnect the server properly
|
||||
*/
|
||||
public function __destruct ()
|
||||
// {{{
|
||||
{
|
||||
$this->disconnect ();
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Each debug message is sent to stderr if $debug is set
|
||||
* @param string $msg The message to display
|
||||
*/
|
||||
public function debug ($msg)
|
||||
// {{{
|
||||
{
|
||||
if ($this->debug === false)
|
||||
return;
|
||||
file_put_contents ("php://stderr", $msg."\n");
|
||||
}
|
||||
// }}}
|
||||
|
||||
// PRIVATE METHODS //
|
||||
/** Read fron socket
|
||||
* @return string the read value
|
||||
*/
|
||||
private function read ()
|
||||
// {{{
|
||||
{
|
||||
$xml = $this->sock->read (4096);
|
||||
$this->debug ("Read: $xml");
|
||||
return $xml;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Send the data on socket, add the carriage return
|
||||
* @param string $msg The message to send
|
||||
*/
|
||||
private function send ($msg)
|
||||
// {{{
|
||||
{
|
||||
$start = microtime (true);
|
||||
$wait = intval (($start - $this->sendLastTime) * 100000);
|
||||
@@ -238,5 +219,4 @@ class Xmppclient
|
||||
$this->sendLastTime = microtime (true);
|
||||
return $this->sock->send ($msg."\n");
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user