From 23c0a8bc24486b99488eefe0c96a89269ff9180a Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Sun, 25 May 2014 15:03:20 +0530 Subject: [PATCH 02/51] CRUD layer for AMS --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/dblayer.php | 112 +++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php index 58ea7b80e..b095b4dc7 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php @@ -81,5 +81,113 @@ class DBLayer{ $this->PDO->commit(); return $lastId; } - -} \ No newline at end of file + /** + * + * Select function using prepared statement + * @param string $tb_name Table Name to Select + * @param array $data Associative array + * @param string $where where to select + * @return array Array containing fetched data + */ + public function select($query, $data) + { + try{ + $sth = $this->PDO->prepare($query); + $this->PDO->beginTransaction(); + $sth->execute(array($data)); + $this->PDO->commit(); + }catch(Exception $e) + { + $this->PDO->rollBack(); + throw new Exception("error selection"); + return false; + } + return $sth; + } + + /** + * + * Update function with prepared statement + * @param string $tb_name name of the table + * @param array $data associative array with values + * @param string $where where part + * @throws Exception error in updating + */ + public function update($tb_name, $data, $where) + { + $field_option_values=null; + foreach ($data as $key => $value) + { + $field_option_values.=",$key".'=:'.$value; + } + $field_option_values = ltrim($field_option_values,','); + try { + $sth = $this->PDO->prepare("UPDATE $tb_name SET $field_option_values WHERE $where "); + + foreach ($data as $key => $value) + { + $sth->bindValue(":$key", $value); + } + $this->PDO->beginTransaction(); + $sth->execute(); + $this->PDO->commit(); + }catch (Exception $e) + { + $this->PDO->rollBack(); + throw new Exception('error in updating'); + } + } + /** + * + * insert function using prepared statements + * @param string $tb_name Name of the table to insert in + * @param array $data Associative array of data to insert + */ + + public function insert($tb_name, $data) + { + $field_values =':'. implode(',:', array_keys($data)); + $field_options = implode(',', array_keys($data)); + try{ + $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)"); + foreach ($data as $key => $value ) + { + + $sth->bindValue(":$key", $value); + } + $this->PDO->beginTransaction(); + //execution + $sth->execute(); + $this->PDO->commit(); + + }catch (Exception $e) + { + //for rolling back the changes during transaction + $this->PDO->rollBack(); + throw new Exception("error in inseting"); + } + } + + /** + * + * Delete database entery using prepared statement + * @param string $tb_name + * @param string $where + * @throws error in deleting + */ + public function delete($tb_name, $where) + { + try { + $sth = $this->prepare("DELETE FROM $tb_name WHERE $where"); + $this->PDO->beginTransaction(); + $sth->execute(); + $this->PDO->commit(); + } + catch (Exception $e) + { + $this->rollBack(); + throw new Exception("error in deleting"); + } + + } +} From a92f32c1c434ee17e2516f5b156eafee840c6c0b Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Tue, 27 May 2014 14:19:37 +0530 Subject: [PATCH 03/51] few more changes to the CRUD layer in ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/dblayer.php | 69 +++++++++++++++---- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php index b095b4dc7..b82e7ea8f 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php @@ -67,34 +67,74 @@ class DBLayer{ return $statement; } - /** + /** * execute a query (an insertion query) that has parameters and return the id of it's insertion * @param $query the mysql query * @param $params the parameters that are being used by the query * @return returns the id of the last inserted element. */ - public function executeReturnId($query,$params){ - $statement = $this->PDO->prepare($query); - $this->PDO->beginTransaction(); - $statement->execute($params); - $lastId =$this->PDO->lastInsertId(); - $this->PDO->commit(); - return $lastId; + public function executeReturnId($tb_name,$data){ + $field_values =':'. implode(',:', array_keys($data)); + $field_options = implode(',', array_keys($data)); + try{ + $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)"); + foreach ($data as $key => $value ) + { + $sth->bindValue(":$key", $value); + } + $this->PDO->beginTransaction(); + //execution + $sth->execute(); + $lastId =$this->PDO->lastInsertId(); + $this->PDO->commit(); + }catch (Exception $e) + { + //for rolling back the changes during transaction + $this->PDO->rollBack(); + throw new Exception("error in inseting"); + } + return $lastId; } - /** + + + /** * * Select function using prepared statement * @param string $tb_name Table Name to Select * @param array $data Associative array * @param string $where where to select - * @return array Array containing fetched data + * @return statement object */ - public function select($query, $data) - { + public function selectWithParameter($param, $tb_name, $data, $where) + { + try{ + $sth = $this->PDO->prepare("SELECT $param FROM $tb_name WHERE $where"); + $this->PDO->beginTransaction(); + $sth->execute($data); + $this->PDO->commit(); + }catch(Exception $e) + { + $this->PDO->rollBack(); + throw new Exception("error selection"); + return false; + } + return $sth; + } + + /** + * + * Select function using prepared statement + * @param string $tb_name Table Name to Select + * @param array $data Associative array + * @param string $where where to select + * @return statement object + */ + public function select($tb_name, $data ,$where) + { try{ - $sth = $this->PDO->prepare($query); + $sth = $this->PDO->prepare("SELECT * FROM $tb_name WHERE $where"); $this->PDO->beginTransaction(); - $sth->execute(array($data)); + $sth->execute($data); $this->PDO->commit(); }catch(Exception $e) { @@ -152,7 +192,6 @@ class DBLayer{ $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)"); foreach ($data as $key => $value ) { - $sth->bindValue(":$key", $value); } $this->PDO->beginTransaction(); From 8a28b3583a6d49d19b95a11c70b28a5cc47f6152 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Wed, 28 May 2014 03:48:44 +0530 Subject: [PATCH 04/51] restructuring of AMS database functions to work with CRUD --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/assigned.php | 16 +++---- .../ryzom_ams/ams_lib/autoload/forwarded.php | 14 +++--- .../ryzom_ams/ams_lib/autoload/helpers.php | 2 +- .../ams_lib/autoload/in_support_group.php | 12 ++--- .../ams_lib/autoload/mail_handler.php | 9 +--- .../ryzom_ams/ams_lib/autoload/querycache.php | 8 ++-- .../ams_lib/autoload/support_group.php | 24 ++++------ .../ryzom_ams/ams_lib/autoload/sync.php | 25 ++++++----- .../ryzom_ams/ams_lib/autoload/ticket.php | 14 +++--- .../ams_lib/autoload/ticket_category.php | 15 +++---- .../ams_lib/autoload/ticket_content.php | 12 ++--- .../ams_lib/autoload/ticket_info.php | 18 ++++---- .../ryzom_ams/ams_lib/autoload/ticket_log.php | 16 +++---- .../ams_lib/autoload/ticket_reply.php | 12 ++--- .../ams_lib/autoload/ticket_user.php | 17 +++---- .../ryzom_ams/ams_lib/autoload/users.php | 36 +++++++-------- .../ryzom_ams/www/html/autoload/webusers.php | 44 +++++++++---------- .../ryzom_ams/www/html/func/add_user.php | 11 +++-- 18 files changed, 129 insertions(+), 176 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php index 8de17a9e2..d9d730c8e 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php @@ -80,9 +80,9 @@ class Assigned{ $dbl = new DBLayer("lib"); //check if ticket is already assigned - if($user_id == 0 && $dbl->execute(" SELECT * FROM `assigned` WHERE `Ticket` = :ticket_id", array('ticket_id' => $ticket_id) )->rowCount() ){ + if($user_id == 0 && $dbl->select("`assigned`", array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id")->rowCount() ){ return true; - }else if( $dbl->execute(" SELECT * FROM `assigned` WHERE `Ticket` = :ticket_id and `User` = :user_id", array('ticket_id' => $ticket_id, 'user_id' => $user_id) )->rowCount()){ + }else if( $dbl->select("`assigned`", array('ticket_id' => $ticket_id, 'user_id' => $user_id), "`Ticket` = :ticket_id and `User` = :user_id")->rowCount() ){ return true; }else{ return false; @@ -115,9 +115,7 @@ class Assigned{ */ public function create() { $dbl = new DBLayer("lib"); - $query = "INSERT INTO `assigned` (`User`,`Ticket`) VALUES (:user, :ticket)"; - $values = Array('user' => $this->getUser(), 'ticket' => $this->getTicket()); - $dbl->execute($query, $values); + $dbl->insert("`assigned`", Array('User' => $this->getUser(), 'Ticket' => $this->getTicket()); } @@ -127,9 +125,7 @@ class Assigned{ */ public function delete() { $dbl = new DBLayer("lib"); - $query = "DELETE FROM `assigned` WHERE `User` = :user_id and `Ticket` = :ticket_id"; - $values = array('user_id' => $this->getUser() ,'ticket_id' => $this->getTicket()); - $dbl->execute($query, $values); + $dbl->delete("`assigned`", array('user_id' => $this->getUser() ,'ticket_id' => $this->getTicket(), "`User` = :user_id and `Ticket` = :ticket_id"); } /** @@ -139,7 +135,7 @@ class Assigned{ */ public function load($ticket_id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM `assigned` WHERE `Ticket` = :ticket_id", Array('ticket_id' => $ticket_id)); + $statement = $dbl->select("`assigned`", Array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id"); $row = $statement->fetch(); $this->set($row); } @@ -181,4 +177,4 @@ class Assigned{ } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php index 54fece58c..ccba764e6 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php @@ -55,7 +55,7 @@ class Forwarded{ */ public static function isForwarded( $ticket_id) { $dbl = new DBLayer("lib"); - if( $dbl->execute(" SELECT * FROM `forwarded` WHERE `Ticket` = :ticket_id", array('ticket_id' => $ticket_id))->rowCount()){ + if( $dbl->select("`forwarded`", array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id")->rowCount() ){ return true; }else{ return false; @@ -90,9 +90,7 @@ class Forwarded{ */ public function create() { $dbl = new DBLayer("lib"); - $query = "INSERT INTO `forwarded` (`Group`,`Ticket`) VALUES (:group, :ticket)"; - $values = Array('group' => $this->getGroup(), 'ticket' => $this->getTicket()); - $dbl->execute($query, $values); + $dbl->insert("`forwarded`", Array('Group' => $this->getGroup(), 'Ticket' => $this->getTicket())); } @@ -102,9 +100,7 @@ class Forwarded{ */ public function delete() { $dbl = new DBLayer("lib"); - $query = "DELETE FROM `forwarded` WHERE `Group` = :group_id and `Ticket` = :ticket_id"; - $values = array('group_id' => $this->getGroup() ,'ticket_id' => $this->getTicket()); - $dbl->execute($query, $values); + $dbl->delete("`forwarded`", array('group_id' => $this->getGroup() ,'ticket_id' => $this->getTicket(), "`Group` = :group_id and `Ticket` = :ticket_id"); } @@ -115,7 +111,7 @@ class Forwarded{ */ public function load( $ticket_id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM `forwarded` WHERE `Ticket` = :ticket_id", Array('ticket_id' => $ticket_id)); + $statement = $dbl->select("`forwarded`", Array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id"); $row = $statement->fetch(); $this->set($row); } @@ -156,4 +152,4 @@ class Forwarded{ } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php index 40a96f6c1..2d26f3c21 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php @@ -206,7 +206,7 @@ class Helpers{ $dbr = new DBLayer("ring"); if (isset($_GET['UserId']) && isset($_COOKIE['ryzomId'])){ $id = $_GET['UserId']; - $statement = $dbr->execute("SELECT * FROM ring_users WHERE user_id=:id AND cookie =:cookie", array('id' => $id, 'cookie' => $_COOKIE['ryzomId'])); + $statement = $dbr->select("ring_users", array('id' => $id, 'cookie' => $_COOKIE['ryzomId']), "user_id=:id AND cookie =:cookie"); if ($statement->rowCount() ){ $entry = $statement->fetch(); //print_r($entry); diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php index bf10d3d9a..86c678cd3 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php @@ -21,7 +21,7 @@ class In_Support_Group{ public static function userExistsInSGroup( $user_id, $group_id) { $dbl = new DBLayer("lib"); //check if name is already used - if( $dbl->execute(" SELECT * FROM `in_support_group` WHERE `User` = :user_id and `Group` = :group_id ", array('user_id' => $user_id, 'group_id' => $group_id) )->rowCount() ){ + if( $dbl->select("in_support_group", array('user_id' => $user_id, 'group_id' => $group_id), "`User` = :user_id and `Group` = :group_id")->rowCount() ){ return true; }else{ return false; @@ -54,9 +54,7 @@ class In_Support_Group{ */ public function create() { $dbl = new DBLayer("lib"); - $query = "INSERT INTO `in_support_group` (`User`,`Group`) VALUES (:user, :group)"; - $values = Array('user' => $this->user, 'group' => $this->group); - $dbl->execute($query, $values); + $dbl->insert("`in_support_group`", Array('User' => $this->user, 'Group' => $this->group); } @@ -66,9 +64,7 @@ class In_Support_Group{ */ public function delete() { $dbl = new DBLayer("lib"); - $query = "DELETE FROM `in_support_group` WHERE `User` = :user_id and `Group` = :group_id"; - $values = array('user_id' => $this->getUser() ,'group_id' => $this->getGroup()); - $dbl->execute($query, $values); + $dbl->delete("`in_support_group`", array('user_id' => $this->getUser() ,'group_id' => $this->getGroup(), "`User` = :user_id and `Group` = :group_id"); } /* @@ -118,4 +114,4 @@ class In_Support_Group{ } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php index dde8d4e02..66cb0f95d 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php @@ -118,12 +118,7 @@ class Mail_Handler{ $id_user = $recipient; $recipient = NULL; } - - $query = "INSERT INTO email (Recipient,Subject,Body,Status,Attempts,Sender,UserId,MessageId,TicketId) VALUES (:recipient, :subject, :body, :status, :attempts, :sender, :id_user, :messageId, :ticketId)"; - $values = array('recipient' => $recipient, 'subject' => $subject, 'body' => $body, 'status' => 'NEW', 'attempts'=> 0, 'sender' => $from,'id_user' => $id_user, 'messageId' => 0, 'ticketId'=> $ticket_id); - $db = new DBLayer("lib"); - $db->execute($query, $values); - + $db->insert("email", array('Recipient' => $recipient, 'Subject' => $subject, 'Body' => $body, 'Status' => 'NEW', 'Attempts'=> 0, 'Sender' => $from,'UserId' => $id_user, 'MessageId' => 0, 'TicketId'=> $ticket_id)); } @@ -173,7 +168,7 @@ class Mail_Handler{ //select all new & failed emails & try to send them //$emails = db_query("select * from email where status = 'NEW' or status = 'FAILED'"); - $statement = $this->db->executeWithoutParams("select * from email where Status = 'NEW' or Status = 'FAILED'"); + $statement = $this->db->select("email",array(null), "Status = 'NEW' or Status = 'FAILED'"); $emails = $statement->fetchAll(); foreach($emails as $email) { diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php index 3da0887c9..6f0c0dca6 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php @@ -47,7 +47,7 @@ class Querycache{ */ public function load_With_SID( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ams_querycache WHERE SID=:id", array('id' => $id)); + $statement = $dbl->select("ams_querycache", array('id' => $id), "SID=:id"); $row = $statement->fetch(); $this->set($row); } @@ -58,9 +58,7 @@ class Querycache{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ams_querycache SET type= :t, query = :q, db = :d WHERE SID=:id"; - $values = Array('id' => $this->getSID(), 't' => $this->getType(), 'q' => $this->getQuery(), 'd' => $this->getDb()); - $statement = $dbl->execute($query, $values); + $dbl->update("ams_querycache", Array('type' => $this->getType(), 'query' => $this->getQuery(), 'db' => $this->getDb(), "SID=$this->getSID()" ); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -127,4 +125,4 @@ class Querycache{ $this->db= $d; } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php index c42d12efb..7b8a864d4 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php @@ -24,7 +24,7 @@ class Support_Group{ */ public static function getGroup($id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM support_group WHERE SGroupId = :id", array('id' => $id)); + $statement = $dbl->select("support_group", array('id' => $id), "SGroupId = :id"); $row = $statement->fetch(); $instanceGroup = new self(); $instanceGroup->set($row); @@ -102,10 +102,10 @@ class Support_Group{ public static function supportGroup_EntryNotExists( $name, $tag) { $dbl = new DBLayer("lib"); //check if name is already used - if( $dbl->execute("SELECT * FROM support_group WHERE Name = :name",array('name' => $name))->rowCount() ){ + if( $dbl->select("support_group", array('name' => $name), "Name = :name")->rowCount() ){ return "NAME_TAKEN"; } - else if( $dbl->execute("SELECT * FROM support_group WHERE Tag = :tag",array('tag' => $tag))->rowCount() ){ + else if( $dbl->select("support_group", array('tag' => $tag), "Tag = :tag")->rowCount() ){ return "TAG_TAKEN"; }else{ return "SUCCESS"; @@ -121,7 +121,7 @@ class Support_Group{ public static function supportGroup_Exists( $id) { $dbl = new DBLayer("lib"); //check if supportgroup id exist - if( $dbl->execute("SELECT * FROM support_group WHERE SGroupId = :id",array('id' => $id ))->rowCount() ){ + if( $dbl->select("support_group", array('id' => $id ), "SGroupId = :id")->rowCount() ){ return true; }else{ return false; @@ -305,9 +305,7 @@ class Support_Group{ */ public function create() { $dbl = new DBLayer("lib"); - $query = "INSERT INTO support_group (Name, Tag, GroupEmail, IMAP_MailServer, IMAP_Username, IMAP_Password) VALUES (:name, :tag, :groupemail, :imap_mailserver, :imap_username, :imap_password)"; - $values = Array('name' => $this->getName(), 'tag' => $this->getTag(), 'groupemail' => $this->getGroupEmail(), 'imap_mailserver' => $this->getIMAP_MailServer(), 'imap_username' => $this->getIMAP_Username(), 'imap_password' => $this->getIMAP_Password()); - $dbl->execute($query, $values); + $dbl->insert("support_group", Array('Name' => $this->getName(), 'Tag' => $this->getTag(), 'GroupEmail' => $this->getGroupEmail(), 'IMAP_MailServer' => $this->getIMAP_MailServer(), 'IMAP_Username' => $this->getIMAP_Username(), 'IMAP_Password' => $this->getIMAP_Password()); } @@ -318,7 +316,7 @@ class Support_Group{ */ public function load_With_SGroupId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM `support_group` WHERE `SGroupId` = :id", array('id' => $id)); + $statement = $dbl->select("`support_group`", array('id' => $id), "`SGroupId` = :id"); $row = $statement->fetch(); $this->set($row); } @@ -329,9 +327,7 @@ class Support_Group{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE `support_group` SET `Name` = :name, `Tag` = :tag, `GroupEmail` = :groupemail, `IMAP_MailServer` = :mailserver, `IMAP_Username` = :username, `IMAP_Password` = :password WHERE `SGroupId` = :id"; - $values = Array('id' => $this->getSGroupId(), 'name' => $this->getName(), 'tag' => $this->getTag(), 'groupemail' => $this->getGroupEmail(), 'mailserver' => $this->getIMAP_MailServer(), 'username' => $this->getIMAP_Username(), 'password' => $this->getIMAP_Password() ); - $statement = $dbl->execute($query, $values); + $dbl->update("`support_group`", Array('Name' => $this->getName(), 'Tag' => $this->getTag(), 'GroupEmail' => $this->getGroupEmail(), 'IMAP_MailServer' => $this->getIMAP_MailServer(), 'IMAP_Username' => $this->getIMAP_Username(), 'IMAP_password' => $this->getIMAP_Password(), "`SGroupId` = $this->getSGroupId()"); } @@ -341,9 +337,7 @@ class Support_Group{ */ public function delete(){ $dbl = new DBLayer("lib"); - $query = "DELETE FROM `support_group` WHERE `SGroupId` = :id"; - $values = Array('id' => $this->getSGroupId()); - $statement = $dbl->execute($query, $values); + $dbl->delete("`support_group`", Array('id' => $this->getSGroupId(), "`SGroupId` = :id"); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -453,4 +447,4 @@ class Support_Group{ public function setIMAP_Password($p){ $this->iMap_Password = $p; } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php index e9d4c8748..a79ef8b83 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php @@ -42,34 +42,37 @@ class Sync{ $decode = json_decode($record['query']); $values = array('username' => $decode[0]); //make connection with and put into shard db & delete from the lib - $sth = $db->execute("SELECT UId FROM user WHERE Login= :username;", $values); + $sth=$db->selectWithParameter("UId", "user", $values, "Login= :username" ); $result = $sth->fetchAll(); foreach ($result as $UId) { - $ins_values = array('id' => $UId['UId']); - $db->execute("INSERT INTO permission (UId, ClientApplication, AccessPrivilege) VALUES (:id, 'r2', 'OPEN');", $ins_values); - $db->execute("INSERT INTO permission (UId, ClientApplication, AccessPrivilege) VALUES (:id , 'ryzom_open', 'OPEN');", $ins_values); + $ins_values = array('UId' => $UId['UId']); + $ins_values['ClientApplication'] = "r2"; + $ins_values['AccessPrivilege'] = "OPEN"; + $db->insert("permission", $ins_values); + $ins_values['ClientApplication'] = 'ryzom_open'; + $db->insert("permission",$ins_values); } break; case 'change_pass': $decode = json_decode($record['query']); - $values = array('user' => $decode[0], 'pass' => $decode[1]); + $values = array('Password' => $decode[1]); //make connection with and put into shard db & delete from the lib - $db->execute("UPDATE user SET Password = :pass WHERE Login = :user",$values); + $db->update("user", $values, "Login = $decode[0]"); break; case 'change_mail': $decode = json_decode($record['query']); - $values = array('user' => $decode[0], 'mail' => $decode[1]); + $values = array('Email' => $decode[1]); //make connection with and put into shard db & delete from the lib - $db->execute("UPDATE user SET Email = :mail WHERE Login = :user",$values); + $db->update("user", $values, "Login = $decode[0]"); break; case 'createUser': $decode = json_decode($record['query']); - $values = array('login' => $decode[0], 'pass' => $decode[1], 'mail' => $decode[2] ); + $values = array('Login' => $decode[0], 'Password' => $decode[1], 'Email' => $decode[2] ); //make connection with and put into shard db & delete from the lib - $db->execute("INSERT INTO user (Login, Password, Email) VALUES (:login, :pass, :mail)",$values); + $db->insert("user", $values); break; } - $dbl->execute("DELETE FROM ams_querycache WHERE SID=:SID",array('SID' => $record['SID'])); + $dbl->delete("ams_querycache", array('SID' => $record['SID']), "SID=:SID"); } if ($display == true) { print('Syncing completed'); diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php index 21e2614d5..51f987e5a 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php @@ -27,7 +27,7 @@ class Ticket{ public static function ticketExists($id) { $dbl = new DBLayer("lib"); //check if ticket exists - if( $dbl->execute(" SELECT * FROM `ticket` WHERE `TId` = :ticket_id", array('ticket_id' => $id) )->rowCount() ){ + if( $dbl->select("`ticket`", array('ticket_id' => $id), "`TId` = :ticket_id")->rowCount() ){ return true; }else{ return false; @@ -343,9 +343,7 @@ class Ticket{ */ public function create(){ $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket (Timestamp, Title, Status, Queue, Ticket_Category, Author, Priority) VALUES (now(), :title, :status, :queue, :tcat, :author, :priority)"; - $values = Array('title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author, 'priority' => $this->priority); - $this->tId = $dbl->executeReturnId($query, $values); ; + $this->tId = $dbl->executeReturnId("ticket", Array('Timestamp'=>now(), 'Title' => $this->title, 'Status' => $this->status, 'Queue' => $this->queue, 'Ticket_Category' => $this->ticket_category, 'Author' => $this->author, 'Priority' => $this->priority)); } @@ -356,7 +354,7 @@ class Ticket{ */ public function load_With_TId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket WHERE TId=:id", array('id' => $id)); + $statement = $dbl->select("ticket", array('id' => $id), "TId=:id"); $row = $statement->fetch(); $this->tId = $row['TId']; $this->timestamp = $row['Timestamp']; @@ -374,9 +372,7 @@ class Ticket{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket SET Timestamp = :timestamp, Title = :title, Status = :status, Queue = :queue, Ticket_Category = :tcat, Author = :author, Priority = :priority WHERE TId=:id"; - $values = Array('id' => $this->tId, 'timestamp' => $this->timestamp, 'title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author, 'priority' => $this->priority); - $statement = $dbl->execute($query, $values); + $dbl->update("ticket", Array('Timestamp' => $this->timestamp, 'Title' => $this->title, 'Status' => $this->status, 'Queue' => $this->queue, 'Ticket_Category' => $this->ticket_category, 'Author' => $this->author, 'Priority' => $this->priority), "TId=$this->tId"); } @@ -575,4 +571,4 @@ class Ticket{ $this->priority = $p; } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php index 92e603d12..f6941febe 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php @@ -16,10 +16,7 @@ class Ticket_Category{ */ public static function createTicketCategory( $name) { $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_category (Name) VALUES (:name)"; - $values = Array('name' => $name); - $dbl->execute($query, $values); - + $dbl->insert("ticket_category", Array('Name' => $name)); } @@ -40,7 +37,7 @@ class Ticket_Category{ */ public static function getAllCategories() { $dbl = new DBLayer("lib"); - $statement = $dbl->executeWithoutParams("SELECT * FROM ticket_category"); + $statement = $dbl->select("ticket_category", array(null), "1"); $row = $statement->fetchAll(); $result = Array(); foreach($row as $category){ @@ -70,7 +67,7 @@ class Ticket_Category{ */ public function load_With_TCategoryId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_category WHERE TCategoryId=:id", array('id' => $id)); + $statement = $dbl->select("ticket_category", array('id' => $id), "TCategoryId=:id"); $row = $statement->fetch(); $this->tCategoryId = $row['TCategoryId']; $this->name = $row['Name']; @@ -82,9 +79,7 @@ class Ticket_Category{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket_category SET Name = :name WHERE TCategoryId=:id"; - $values = Array('id' => $this->tCategoryId, 'name' => $this->name); - $statement = $dbl->execute($query, $values); + $dbl->update("ticket_category", Array('Name' => $this->name), "TCategoryId = $this->tCategoryId"); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -126,4 +121,4 @@ class Ticket_Category{ } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php index 445cad867..8b7787f8e 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php @@ -43,9 +43,7 @@ class Ticket_Content{ */ public function create() { $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_content (Content) VALUES (:content)"; - $values = Array('content' => $this->content); - $this->tContentId = $dbl->executeReturnId($query, $values); ; + $this->tContentId = $dbl->executeReturnId("ticket_content", Array('Content' => $this->content)); } @@ -56,7 +54,7 @@ class Ticket_Content{ */ public function load_With_TContentId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_content WHERE TContentId=:id", array('id' => $id)); + $statement = $dbl->select("ticket_content", array('id' => $id), "TContentId=:id"); $row = $statement->fetch(); $this->tContentId = $row['TContentId']; $this->content = $row['Content']; @@ -67,9 +65,7 @@ class Ticket_Content{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket_content SET Content = :content WHERE TContentId=:id"; - $values = Array('id' => $this->tContentId, 'content' => $this->content); - $statement = $dbl->execute($query, $values); + $dbl->update("ticket_content", Array('Content' => $this->content), "TContentId = $this->tContentId"); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -110,4 +106,4 @@ class Ticket_Content{ $this->tContentId = $c; } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php index fc852d093..eb7c8ebc5 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php @@ -52,7 +52,7 @@ class Ticket_Info{ public static function TicketHasInfo($ticket_id) { $dbl = new DBLayer("lib"); //check if ticket is already assigned - if( $dbl->execute(" SELECT * FROM `ticket_info` WHERE `Ticket` = :ticket_id", array('ticket_id' => $ticket_id) )->rowCount() ){ + if( $dbl->select("`ticket_info`", array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id")->rowCount() ){ return true; }else{ return false; @@ -102,7 +102,7 @@ class Ticket_Info{ */ public function load_With_TInfoId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_info WHERE TInfoId=:id", array('id' => $id)); + $statement = $dbl->select("ticket_info", array('id' => $id), "TInfoId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -115,7 +115,7 @@ class Ticket_Info{ */ public function load_With_Ticket( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_info WHERE Ticket=:id", array('id' => $id)); + $statement = $dbl->select("ticket_info", array('id' => $id), "Ticket=:id"); $row = $statement->fetch(); $this->set($row); } @@ -127,12 +127,10 @@ class Ticket_Info{ */ public function create() { $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_info ( Ticket, ShardId, UserPosition,ViewPosition, ClientVersion, PatchVersion,ServerTick, ConnectState, LocalAddress, Memory, OS, -Processor, CPUID, CpuMask, HT, NeL3D, UserId) VALUES ( :ticket, :shardid, :userposition, :viewposition, :clientversion, :patchversion, :servertick, :connectstate, :localaddress, :memory, :os, :processor, :cpuid, :cpu_mask, :ht, :nel3d, :user_id )"; - $values = Array('ticket' => $this->getTicket(), 'shardid' => $this->getShardId(), 'userposition' => $this->getUser_Position(), 'viewposition' => $this->getView_Position(), 'clientversion' => $this->getClient_Version(), -'patchversion' => $this->getPatch_Version(), 'servertick' => $this->getServer_Tick(), 'connectstate' => $this->getConnect_State(), 'localaddress' => $this->getLocal_Address(), 'memory' => $this->getMemory(), 'os'=> $this->getOS(), 'processor' => $this->getProcessor(), 'cpuid' => $this->getCPUId(), -'cpu_mask' => $this->getCpu_Mask(), 'ht' => $this->getHT(), 'nel3d' => $this->getNel3D(), 'user_id' => $this->getUser_Id()); - $dbl->execute($query, $values); + $values = Array('Ticket' => $this->getTicket(), 'ShardId' => $this->getShardId(), 'UserPosition' => $this->getUser_Position(), 'ViewPosition' => $this->getView_Position(), 'ClientVersion' => $this->getClient_Version(), +'PatchVersion' => $this->getPatch_Version(), 'ServerTick' => $this->getServer_Tick(), 'ConnectState' => $this->getConnect_State(), 'LocalAddress' => $this->getLocal_Address(), 'Memory' => $this->getMemory(), 'OS'=> $this->getOS(), 'Processor' => $this->getProcessor(), 'CPUID' => $this->getCPUId(), +'CpuMask' => $this->getCpu_Mask(), 'HT' => $this->getHT(), 'NeL3D' => $this->getNel3D(), 'UserId' => $this->getUser_Id()); + $dbl->insert("ticket_info",$values); } @@ -411,4 +409,4 @@ Processor, CPUID, CpuMask, HT, NeL3D, UserId) VALUES ( :ticket, :shardid, :user } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php index 8c7439bc0..6693fe3ce 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php @@ -82,9 +82,8 @@ class Ticket_Log{ global $TICKET_LOGGING; if($TICKET_LOGGING){ $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_log (Timestamp, Query, Ticket, Author) VALUES (now(), :query, :ticket, :author )"; - $values = Array('ticket' => $ticket_id, 'author' => $author_id, 'query' => json_encode(array($action,$arg))); - $dbl->execute($query, $values); + $values = Array('Timestamp'=>now(), 'Query' => json_encode(array($action,$arg)), 'Ticket' => $ticket_id, 'Author' => $author_id); + $dbl->insert("ticket_log", $values); } } @@ -148,7 +147,7 @@ class Ticket_Log{ */ public function load_With_TLogId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_log WHERE TLogId=:id", array('id' => $id)); + $dbl->select("ticket_log", array('id' => $id), "TLogId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -159,9 +158,10 @@ class Ticket_Log{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket_log SET Timestamp = :timestamp, Query = :query, Author = :author, Ticket = :ticket WHERE TLogId=:id"; - $values = Array('id' => $this->getTLogId(), 'timestamp' => $this->getTimestamp(), 'query' => $this->getQuery(), 'author' => $this->getAuthor(), 'ticket' => $this->getTicket() ); - $statement = $dbl->execute($query, $values); + + $values = Array('timestamp' => $this->getTimestamp(), 'query' => $this->getQuery(), 'author' => $this->getAuthor(), 'ticket' => $this->getTicket() ); + $dbl->update("ticket_log", $values, "TLogId = $this->getTLogId()"); + } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -273,4 +273,4 @@ class Ticket_Log{ } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php index 8e784543d..2675fcfbe 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php @@ -123,9 +123,7 @@ class Ticket_Reply{ */ public function create(){ $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_reply (Ticket, Content, Author, Timestamp, Hidden) VALUES (:ticket, :content, :author, now(), :hidden)"; - $values = Array('ticket' => $this->ticket, 'content' => $this->content, 'author' => $this->author, 'hidden' => $this->hidden); - $this->tReplyId = $dbl->executeReturnId($query, $values); + $this->tReplyId = $dbl->executeReturnId("ticket_reply", Array('Ticket' => $this->ticket, 'Content' => $this->content, 'Author' => $this->author,'Timestamp'=>now(), 'Hidden' => $this->hidden)); } /** @@ -135,7 +133,7 @@ class Ticket_Reply{ */ public function load_With_TReplyId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_reply WHERE TReplyId=:id", array('id' => $id)); + $statement = $dbl->select("ticket_reply", array('id' => $id), "TReplyId=:id"); $row = $statement->fetch(); $this->tReplyId = $row['TReplyId']; $this->ticket = $row['Ticket']; @@ -150,9 +148,7 @@ class Ticket_Reply{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket SET Ticket = :ticket, Content = :content, Author = :author, Timestamp = :timestamp, Hidden = :hidden WHERE TReplyId=:id"; - $values = Array('id' => $this->tReplyId, 'timestamp' => $this->timestamp, 'ticket' => $this->ticket, 'content' => $this->content, 'author' => $this->author, 'hidden' => $this->hidden); - $statement = $dbl->execute($query, $values); + $dbl->update("ticket", Array('Ticket' => $this->ticket, 'Content' => $this->content, 'Author' => $this->author, 'Timestamp' => $this->timestamp, 'Hidden' => $this->hidden), "TReplyId=$this->tReplyId, "); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -249,4 +245,4 @@ class Ticket_Reply{ public function setHidden($h){ $this->hidden = $h; } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php index 46125e284..0937b48b0 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php @@ -21,10 +21,7 @@ class Ticket_User{ */ public static function createTicketUser( $extern_id, $permission) { $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_user (Permission, ExternId) VALUES (:perm, :ext_id)"; - $values = Array('perm' => $permission, 'ext_id' => $extern_id); - $dbl->execute($query, $values); - + $dbl->insert("ticket_user",array('Permission' => $permission, 'ExternId' => $extern_id)); } @@ -73,7 +70,7 @@ class Ticket_User{ */ public static function getModsAndAdmins() { $dbl = new DBLayer("lib"); - $statement = $dbl->executeWithoutParams("SELECT * FROM `ticket_user` WHERE `Permission` > 1"); + $statement = $dbl->select("ticket_user", array(null), "`Permission` > 1" ); $rows = $statement->fetchAll(); $result = Array(); foreach($rows as $user){ @@ -93,7 +90,7 @@ class Ticket_User{ public static function constr_ExternId( $id) { $instance = new self(); $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_user WHERE ExternId=:id", array('id' => $id)); + $statement = $dbl->select("ticket_user" ,array('id'=>$id) ,"ExternId=:id"); $row = $statement->fetch(); $instance->tUserId = $row['TUserId']; $instance->permission = $row['Permission']; @@ -196,7 +193,7 @@ class Ticket_User{ */ public function load_With_TUserId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_user WHERE TUserId=:id", array('id' => $id)); + $statement = $dbl->select("ticket_user" ,array('id'=>$id), "TUserId=:id" ); $row = $statement->fetch(); $this->tUserId = $row['TUserId']; $this->permission = $row['Permission']; @@ -209,9 +206,7 @@ class Ticket_User{ */ public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket_user SET Permission = :perm, ExternId = :ext_id WHERE TUserId=:id"; - $values = Array('id' => $this->tUserId, 'perm' => $this->permission, 'ext_id' => $this->externId); - $statement = $dbl->execute($query, $values); + $dbl->update("ticket_user" ,array('Permission' => $this->permission, 'ExternId' => $this->externId) ,"TUserId=$this->tUserId"); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// @@ -266,4 +261,4 @@ class Ticket_User{ } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php index f83f46576..e9463b0b0 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php @@ -291,9 +291,10 @@ class Users{ //make connection with and put into shard db $values['user_id']= $user_id; $dbs = new DBLayer("shard"); - $dbs->execute("INSERT INTO user (Login, Password, Email) VALUES (:name, :pass, :mail)",$values); + $dbs->insert("user", $values); $dbr = new DBLayer("ring"); - $dbr->execute("INSERT INTO ring_users (user_id, user_name, user_type) VALUES (:user_id, :name, 'ut_pioneer')",$values); + $values['user_type'] = 'ut_pioneer'; + $dbr->insert("ring_users", $values); ticket_user::createTicketUser( $user_id, 1); return "ok"; } @@ -301,7 +302,7 @@ class Users{ //oh noooz, the shard is offline! Put in query queue at ams_lib db! try { $dbl = new DBLayer("lib"); - $dbl->execute("INSERT INTO ams_querycache (type, query, db) VALUES (:type, :query, :db)",array("type" => "createUser", + $dbl->insert("ams_querycache", array("type" => "createUser", "query" => json_encode(array($values["name"],$values["pass"],$values["mail"])), "db" => "shard")); ticket_user::createTicketUser( $user_id , 1 ); return "shardoffline"; @@ -323,21 +324,20 @@ class Users{ try { $values = array('username' => $pvalues[0]); $dbs = new DBLayer("shard"); - $sth = $dbs->execute("SELECT UId FROM user WHERE Login= :username;", $values); + $sth = $dbs->selectWithParameter("UId", "user", $values, "Login= :username"); $result = $sth->fetchAll(); foreach ($result as $UId) { - $ins_values = array('id' => $UId['UId']); - $dbs->execute("INSERT INTO permission (UId, ClientApplication, AccessPrivilege) VALUES (:id, 'r2', 'OPEN');", $ins_values); - $dbs->execute("INSERT INTO permission (UId, ClientApplication, AccessPrivilege) VALUES (:id , 'ryzom_open', 'OPEN');", $ins_values); + $ins_values = array('UId' => $UId['UId'], 'clientApplication' => 'r2', 'AccessPrivilege' => 'OPEN'); + $dbs->insert("permission", $ins_values); + $ins_values['clientApplication'] = 'ryzom_open'; + $dbs->insert("permission", $ins_values); } } catch (PDOException $e) { //oh noooz, the shard is offline! Put it in query queue at ams_lib db! $dbl = new DBLayer("lib"); - $dbl->execute("INSERT INTO ams_querycache (type, query, db) VALUES (:type, :query, :db)",array("type" => "createPermissions", - "query" => json_encode(array($pvalues[0])), "db" => "shard")); - - + $dbl->insert("ams_querycache", array("type" => "createPermissions", + "query" => json_encode(array($pvalues[0])), "db" => "shard")); } return true; } @@ -421,19 +421,19 @@ class Users{ */ protected static function setAmsPassword($user, $pass){ - $values = Array('user' => $user, 'pass' => $pass); + $values = Array('Password' => $pass); try { //make connection with and put into shard db $dbs = new DBLayer("shard"); - $dbs->execute("UPDATE user SET Password = :pass WHERE Login = :user ",$values); + $dbs->update("user", $values, "Login = $user"); return "ok"; } catch (PDOException $e) { //oh noooz, the shard is offline! Put in query queue at ams_lib db! try { $dbl = new DBLayer("lib"); - $dbl->execute("INSERT INTO ams_querycache (type, query, db) VALUES (:type, :query, :db)",array("type" => "change_pass", + $dbl->insert("ams_querycache", array("type" => "change_pass", "query" => json_encode(array($values["user"],$values["pass"])), "db" => "shard")); return "shardoffline"; }catch (PDOException $e) { @@ -451,19 +451,19 @@ class Users{ */ protected static function setAmsEmail($user, $mail){ - $values = Array('user' => $user, 'mail' => $mail); + $values = Array('Email' => $mail); try { //make connection with and put into shard db $dbs = new DBLayer("shard"); - $dbs->execute("UPDATE user SET Email = :mail WHERE Login = :user ",$values); + $dbs->update("user", $values, "Login = $user"); return "ok"; } catch (PDOException $e) { //oh noooz, the shard is offline! Put in query queue at ams_lib db! try { $dbl = new DBLayer("lib"); - $dbl->execute("INSERT INTO ams_querycache (type, query, db) VALUES (:type, :query, :db)",array("type" => "change_mail", + $dbl->insert("ams_querycache", array("type" => "change_mail", "query" => json_encode(array($values["user"],$values["mail"])), "db" => "shard")); return "shardoffline"; }catch (PDOException $e) { @@ -474,4 +474,4 @@ class Users{ } - \ No newline at end of file + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php b/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php index d8e59d1f9..78916e606 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php @@ -53,7 +53,7 @@ class WebUsers extends Users{ */ protected function checkUserNameExists($username){ $dbw = new DBLayer("web"); - return $dbw->execute("SELECT * FROM ams_user WHERE Login = :name",array('name' => $username))->rowCount(); + return $dbw->select("ams_user", array('name' => $username), "Login = :name")->rowCount(); } @@ -65,7 +65,7 @@ class WebUsers extends Users{ */ protected function checkEmailExists($email){ $dbw = new DBLayer("web"); - return $dbw->execute("SELECT * FROM ams_user WHERE Email = :email",array('email' => $email))->rowCount(); + return $dbw->select("ams_user" ,array('email' => $email),"Email = :email")->rowCount(); } @@ -78,7 +78,7 @@ class WebUsers extends Users{ public static function checkLoginMatch($username,$password){ $dbw = new DBLayer("web"); - $statement = $dbw->execute("SELECT * FROM ams_user WHERE Login=:user", array('user' => $username)); + $statement = $dbw->select("ams_user", array('value' => $value),"Login=:value OR Email=:value"); $row = $statement->fetch(); $salt = substr($row['Password'],0,2); $hashed_input_pass = crypt($password, $salt); @@ -97,7 +97,7 @@ class WebUsers extends Users{ */ public static function getId($username){ $dbw = new DBLayer("web"); - $statement = $dbw->execute("SELECT * FROM ams_user WHERE Login=:username", array('username' => $username)); + $statement = $dbw->select("ams_user", array('username' => $username), "Login=:username"); $row = $statement->fetch(); return $row['UId']; } @@ -110,7 +110,7 @@ class WebUsers extends Users{ */ public static function getIdFromEmail($email){ $dbw = new DBLayer("web"); - $statement = $dbw->execute("SELECT * FROM ams_user WHERE Email=:email", array('email' => $email)); + $statement = $dbw->select("ams_user", array('email' => $email), "Email=:email"); $row = $statement->fetch(); if(!empty($row)){ return $row['UId']; @@ -134,7 +134,7 @@ class WebUsers extends Users{ public function getUsername(){ $dbw = new DBLayer("web"); if(! isset($this->login) || $this->login == ""){ - $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $this->uId)); + $statement = $dbw->select("ams_user", array('id' => $this->uId), "UId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -148,7 +148,7 @@ class WebUsers extends Users{ public function getEmail(){ $dbw = new DBLayer("web"); if(! isset($this->email) || $this->email == ""){ - $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $this->uId)); + $statement = $dbw->select("ams_user", array('id' => $this->uId), "UId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -160,7 +160,7 @@ class WebUsers extends Users{ */ public function getHashedPass(){ $dbw = new DBLayer("web"); - $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $this->uId)); + $statement = $dbw->select("ams_user", array('id' => $this->uId), "UId=:id"); $row = $statement->fetch(); return $row['Password']; } @@ -174,7 +174,7 @@ class WebUsers extends Users{ $dbw = new DBLayer("web"); if(! (isset($this->firstname) && isset($this->lastname) && isset($this->gender) && isset($this->country) && isset($this->receiveMail) ) || $this->firstname == "" || $this->lastname == "" || $this->gender == "" || $this->country == "" || $this->receiveMail == ""){ - $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $this->uId)); + $statement = $dbw->select("ams_user", array('id' => $this->uId), "UId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -189,7 +189,7 @@ class WebUsers extends Users{ public function getReceiveMail(){ $dbw = new DBLayer("web"); if(! isset($this->receiveMail) || $this->receiveMail == ""){ - $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $this->uId)); + $statement = $dbw->select("ams_user", array('id' => $this->uId), "UId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -203,7 +203,7 @@ class WebUsers extends Users{ public function getLanguage(){ $dbw = new DBLayer("web"); if(! isset($this->language) || $this->language == ""){ - $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $this->uId)); + $statement = $dbw->select("ams_user", array('id' => $this->uId), "UId=:id"); $row = $statement->fetch(); $this->set($row); } @@ -234,11 +234,11 @@ class WebUsers extends Users{ $hashpass = crypt($pass, WebUsers::generateSALT()); $reply = WebUsers::setAmsPassword($user, $hashpass); - $values = Array('user' => $user, 'pass' => $hashpass); + $values = Array('pass' => $hashpass); try { //make connection with and put into shard db $dbw = new DBLayer("web"); - $dbw->execute("UPDATE ams_user SET Password = :pass WHERE Login = :user ",$values); + $dbw->update("ams_user", $values,"Login = $user"); } catch (PDOException $e) { //ERROR: the web DB is offline @@ -256,11 +256,11 @@ class WebUsers extends Users{ */ public static function setEmail($user, $mail){ $reply = WebUsers::setAmsEmail($user, $mail); - $values = Array('user' => $user, 'mail' => $mail); + $values = Array('Email' => $mail); try { //make connection with and put into shard db $dbw = new DBLayer("web"); - $dbw->execute("UPDATE ams_user SET Email = :mail WHERE Login = :user ",$values); + $dbw->update("ams_user", $values, "Login = $user"); } catch (PDOException $e) { //ERROR: the web DB is offline @@ -276,11 +276,11 @@ class WebUsers extends Users{ * @param $receivemail the receivemail setting . */ public static function setReceiveMail($user, $receivemail){ - $values = Array('user' => $user, 'receivemail' => $receivemail); + $values = Array('Receivemail' => $receivemail); try { //make connection with and put into shard db $dbw = new DBLayer("web"); - $dbw->execute("UPDATE ams_user SET ReceiveMail = :receivemail WHERE UId = :user ",$values); + $dbw->update("ams_user", $values, "UId = $user" ); } catch (PDOException $e) { //ERROR: the web DB is offline @@ -295,11 +295,11 @@ class WebUsers extends Users{ * @param $language the new language value. */ public static function setLanguage($user, $language){ - $values = Array('user' => $user, 'language' => $language); + $values = Array('Language' => $language); try { //make connection with and put into shard db $dbw = new DBLayer("web"); - $dbw->execute("UPDATE ams_user SET Language = :language WHERE UId = :user ",$values); + $dbw->update("ams_user", $values, "UId = $user"); } catch (PDOException $e) { //ERROR: the web DB is offline @@ -344,15 +344,15 @@ class WebUsers extends Users{ $lang = $DEFAULT_LANGUAGE; } - $values = Array('name' => $name, 'pass' => $pass, 'mail' => $mail, 'lang' => $lang); + $values = Array('Login' => $name, 'Password' => $pass, 'Email' => $mail, 'Language' => $lang); try { $dbw = new DBLayer("web"); - return $dbw->executeReturnId("INSERT INTO ams_user (Login, Password, Email, Language) VALUES (:name, :pass, :mail, :lang)",$values); + return $dbw->executeReturnId("ams_user", $values); } catch (PDOException $e) { //ERROR: the web DB is offline } } -} \ No newline at end of file +} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php index fa08ef1a5..a40e22450 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php @@ -66,15 +66,14 @@ function write_user($newUser){ $hashpass = crypt($newUser["pass"], WebUsers::generateSALT()); $params = array( - 'name' => $newUser["name"], - 'pass' => $hashpass, - 'mail' => $newUser["mail"] + 'Login' => $newUser["name"], + 'Password' => $hashpass, + 'Email' => $newUser["mail"] ); - try{ //make new webuser - $user_id = WebUsers::createWebuser($params['name'], $params['pass'], $params['mail']); - + $user_id = WebUsers::createWebuser($params['Login'], $params['Password'], $params['Email']); + //Create the user on the shard + in case shard is offline put copy of query in query db //returns: ok, shardoffline or liboffline $result = WebUsers::createUser($params, $user_id); From c4ff97cefd48b36fe3d655346e0ee4353885e0cc Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Mon, 2 Jun 2014 01:05:37 +0530 Subject: [PATCH 05/51] template for plugins in AMS --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 262 ++++++++++++++++++ .../ryzom_ams/ams_lib/translations/en.ini | 10 + .../server/ryzom_ams/www/html/inc/plugins.php | 45 +++ .../ryzom_ams/www/html/installer/libsetup.php | 15 + .../ryzom_ams/www/html/templates/plugins.tpl | 89 ++++++ 5 files changed, 421 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php new file mode 100644 index 000000000..df3af960c --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -0,0 +1,262 @@ + +setId($values['PluginId']); + + $this->setPluginName($values['PluginName']); + + $this->setPluginVersion($values['PluginVersion']); + + $this->setPluginPermission($values['PluginPermission']); + + $this->setIsActive($values['IsActive']); + + } + + + + + + /** + + * loads the object's attributes. + + */ + + public function load_With_SID( ) { + + $dbl = new DBLayer("lib"); + + $statement = $dbl->executeWithoutParams("SELECT * FROM plugins"); + + $row = $statement->fetch(); + + $this->set($row); + + } + + + + + + /** + + * updates the entry. + + */ + + public function update(){ + + $dbl = new DBLayer("lib"); + + $query = "UPDATE plugins SET PluginPermission= :t, PluginVersion = :q, IsActive = :d WHERE PluginName=:p_n"; + + $values = Array('p_n' => $this->getPluginName(), 't' => $this->getPluginPermission(), 'q' => $this->getPluginVersion(), 'd' => $this->getIsActive()); + + $statement = $dbl->execute($query, $values); + + } + + + + + + public function getId(){ + + return $this->Id; + + } + + + + /** + + * get plugin permission attribute of the object. + + */ + + public function getPluginPermission(){ + + return $this->plugin_permission; + + } + + + + /** + + * get plugin version attribute of the object. + + */ + + public function getPluginVersion(){ + + return $this->plugin_version; + + } + + + + /** + + * get plugin is active attribute of the object. + + */ + + public function getIsActive(){ + + return $this->plugin_isactive; + + } + + + + /** + + * get plugin name attribute of the object. + + */ + + public function getPluginName(){ + + return $this->plugin_name; + + } + + + + + + + + /** + + * set plugin id attribute of the object. + + * @param $s integer id + + */ + + public function setId($s){ + + $this->Id = $s; + + } + + + + /** + + * set plugin permission attribute of the object. + + * @param $t type of the query, set permission + + */ + + public function setPluginPermission($t){ + + + + $this->plugin_permission = $t; + + } + + + + /** + + * set plugin version attribute of the object. + + * @param $q string to set plugin version + + */ + + public function setPluginVersion($q){ + + $this->plugin_version= $q; + + } + + + + /** + + * set plugin is active attribute of the object. + + * @param $d tinyint to set plugin is active or not . + + */ + + public function setIsActive($d){ + + $this->plugin_isactive= $d; + + } + + + + /** + + * set plugin name attribute of the object. + + * @param $p_n string to set plugin name. + + */ + + public function setPluginName($p_n){ + + $this->plugin_name= $p_n; + + } + + + +} + + diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini index 586d49241..0d1b9cfb6 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini @@ -53,6 +53,16 @@ name = "Name" email = "Email" action = "Action" +[plugins] +plugin_title = "Plugin List" +plugin_info = "Here you can see the entire list of plugins . You can easily remove plugins ,activate them and add permissions" +plugins= "Plugins" +plugin_id = "ID" +plugin_name = "Name" +plugin_version= "Version" +plugin_permission= "Owner/Access Permission" +plugin_is_active= "On/Off" + [show_ticket] t_title = "Ticket" title = "Title" diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php new file mode 100644 index 000000000..61bdb0278 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php @@ -0,0 +1,45 @@ +init(); + print_r(plugin::$plugins);**/ + + $pagination = new Pagination("SELECT * FROM plugins","lib",5,"Plugincache"); + $pageResult['plug']= Gui_Elements::make_table($pagination->getElements() , Array ("getId","getPluginName","getPluginVersion","getPluginPermission","getIsActive"), Array("id","plugin_name","plugin_version","plugin_permission","plugin_isactive")); + $pageResult['links'] = $pagination->getLinks(5); + $pageResult['lastPage'] = $pagination->getLast(); + $pageResult['currentPage'] = $pagination->getCurrent(); + + global $INGAME_WEBPATH; + $pageResult['ingame_webpath'] = $INGAME_WEBPATH; + + //check if shard is online + try{ + $dbs = new DBLayer("shard"); + $pageResult['shard'] = "online"; + }catch(PDOException $e){ + $pageResult['shard'] = "offline"; + } + return( $pageResult); + }else{ + //ERROR: No access! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); + exit; + } + +} + + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index 932d6d2db..5aea5c200 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -154,6 +154,21 @@ ENGINE = InnoDB; + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`plugins` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ( + `PluginId` INT(10) NOT NULL AUTO_INCREMENT, + `PluginName` VARCHAR(11) NOT NULL, + `PluginPermission` VARCHAR(5) NOT NULL, + `PluginVersion` INT(11) NOT NULL, + `IsActive` TINYINT(1) NOT NULL, + PRIMARY KEY (`PluginId`) ) + ENGINE = InnoDB; + + -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket` -- ----------------------------------------------------- diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl new file mode 100644 index 000000000..4d4703875 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl @@ -0,0 +1,89 @@ + +{block name=content} +
+
+
+

{$plugin_title}

+
+ + + +
+
+
+

{$plugin_info}

+ + + + + + + + + + + + + {foreach from=$plug item=element} + + + + + + + + {/foreach} + + +
{$plugin_id}{$plugin_permission}{$plugin_name}{$plugin_version}{$plugin_is_active}
{$element.id}{$element.plugin_permission}{$element.plugin_name}{$element.plugin_version}{$element.plugin_isactive}
+
+
    +
  • «
  • + {foreach from=$links item=link} +
  • {$link}
  • + {/foreach} +
  • »
  • +
+
+
+ +
+
+
+

Actions

+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+{/block} \ No newline at end of file From bf47b07fe000a3e1ce1a58b432f3db3e7a7f69ff Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Sun, 1 Jun 2014 19:52:54 +0000 Subject: [PATCH 06/51] changes indentation and extra spaces --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 157 +----------------- 1 file changed, 9 insertions(+), 148 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index df3af960c..2d9e5de06 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -1,262 +1,123 @@ - -setId($values['PluginId']); - $this->setPluginName($values['PluginName']); - $this->setPluginVersion($values['PluginVersion']); - $this->setPluginPermission($values['PluginPermission']); - - $this->setIsActive($values['IsActive']); - + $this->setIsActive($values['IsActive']); } - - - - /** - * loads the object's attributes. - */ - public function load_With_SID( ) { - $dbl = new DBLayer("lib"); - $statement = $dbl->executeWithoutParams("SELECT * FROM plugins"); - $row = $statement->fetch(); - $this->set($row); - } - - - - /** - * updates the entry. - */ - public function update(){ - $dbl = new DBLayer("lib"); - - $query = "UPDATE plugins SET PluginPermission= :t, PluginVersion = :q, IsActive = :d WHERE PluginName=:p_n"; - - $values = Array('p_n' => $this->getPluginName(), 't' => $this->getPluginPermission(), 'q' => $this->getPluginVersion(), 'd' => $this->getIsActive()); - - $statement = $dbl->execute($query, $values); - + $values = Array('t' => $this->getPluginPermission(), 'q' => $this->getPluginVersion(), 'd' => $this->getIsActive()); + $dbl->update("plugins", $values, "PluginName= $this->getPluginName()"); } - - - - public function getId(){ - return $this->Id; - } - - /** - * get plugin permission attribute of the object. - */ - public function getPluginPermission(){ - - return $this->plugin_permission; - + return $this->plugin_permission; } - - /** - * get plugin version attribute of the object. - */ - public function getPluginVersion(){ - return $this->plugin_version; - } - - /** - * get plugin is active attribute of the object. - */ - public function getIsActive(){ - return $this->plugin_isactive; - } - - /** - * get plugin name attribute of the object. - */ - public function getPluginName(){ - return $this->plugin_name; - } - - - - - - /** - * set plugin id attribute of the object. - * @param $s integer id - */ public function setId($s){ - $this->Id = $s; - } - - /** - * set plugin permission attribute of the object. - * @param $t type of the query, set permission - */ - public function setPluginPermission($t){ - - - $this->plugin_permission = $t; - } - - /** - * set plugin version attribute of the object. - * @param $q string to set plugin version - */ - public function setPluginVersion($q){ - $this->plugin_version= $q; - } - - /** - * set plugin is active attribute of the object. - * @param $d tinyint to set plugin is active or not . - */ - public function setIsActive($d){ - $this->plugin_isactive= $d; - } - - - + /** - * set plugin name attribute of the object. - * @param $p_n string to set plugin name. - */ - public function setPluginName($p_n){ - $this->plugin_name= $p_n; - } - - - -} - - +} \ No newline at end of file From 2f023e0bdc24d6f9082d9ae061a988037130293c Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Tue, 10 Jun 2014 12:11:34 +0530 Subject: [PATCH 07/51] Database CREATE TABLE IF NOT EXISTS . ( --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/www/html/installer/libsetup.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index 5aea5c200..43b262b74 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -160,12 +160,16 @@ DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ; CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ( - `PluginId` INT(10) NOT NULL AUTO_INCREMENT, - `PluginName` VARCHAR(11) NOT NULL, - `PluginPermission` VARCHAR(5) NOT NULL, - `PluginVersion` INT(11) NOT NULL, - `IsActive` TINYINT(1) NOT NULL, - PRIMARY KEY (`PluginId`) ) + `Id` INT(10) NOT NULL AUTO_INCREMENT, + `FileName VARCHAR(255) NOT NULL, + `Name` VARCHAR(11) NOT NULL, + `Type` VARCHAR(12) NOT NULL, + `Owner` VARCHAR(25) NOT NULL, + `Permission` VARCHAR(5) NOT NULL, + `Status` INT(11) NOT NULL DEFAULT 0, + `Weight` INT(11) NOT NULL DEFAULT 0, + `Info` BLOB NULL DEFAULT NULL, + PRIMARY KEY (`Id`) ) ENGINE = InnoDB; From c558b92bf57500733c8a46e4a95878b50a9e78d5 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Wed, 11 Jun 2014 11:52:57 +0530 Subject: [PATCH 08/51] plugin interaction files --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 356 ++++++------------ .../server/ryzom_ams/www/html/inc/plugins.php | 62 ++- 2 files changed, 150 insertions(+), 268 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index df3af960c..1b0dc873d 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -1,262 +1,150 @@ - setId($values['PluginId']); - - $this->setPluginName($values['PluginName']); - - $this->setPluginVersion($values['PluginVersion']); - - $this->setPluginPermission($values['PluginPermission']); - - $this->setIsActive($values['IsActive']); - - } - - - + * A constructor. + * Empty constructor + */ + + public function __construct() { + } + + public function set( $values ) { + $this -> setId( $values['Id'] ); + $this -> setPluginName( $values['Name'] ); + $this -> setPluginType( $values['Type'] ); + $this -> setPluginPermission( $values['Permission'] ); + $this -> setPluginStatus( $values['Status'] ); + $this -> setPluginInfo( $values['Info'] ); + } - /** - - * loads the object's attributes. - - */ - - public function load_With_SID( ) { - - $dbl = new DBLayer("lib"); - - $statement = $dbl->executeWithoutParams("SELECT * FROM plugins"); - - $row = $statement->fetch(); - - $this->set($row); - - } - + * loads the object's attributes. + */ + public function load_With_SID() { + $dbl = new DBLayer( "lib" ); + $statement = $dbl -> executeWithoutParams( "SELECT * FROM plugins" ); + $row = $statement -> fetch(); + $this -> set( $row ); + } - + /** + * get plugin id attribute of the object. + * + * @return integer id + */ + public function getId() { + return $this -> Id; + } - /** - - * updates the entry. - - */ - - public function update(){ - - $dbl = new DBLayer("lib"); - - $query = "UPDATE plugins SET PluginPermission= :t, PluginVersion = :q, IsActive = :d WHERE PluginName=:p_n"; - - $values = Array('p_n' => $this->getPluginName(), 't' => $this->getPluginPermission(), 'q' => $this->getPluginVersion(), 'd' => $this->getIsActive()); - - $statement = $dbl->execute($query, $values); - - } - + * get plugin permission attribute of the object. + */ + public function getPluginPermission() { + return $this -> plugin_permission; + } - + /** + * get plugin Type attribute of the object. + */ + public function getPluginType() { + return $this -> plugin_version; + } - - public function getId(){ - - return $this->Id; - - } - - - /** - - * get plugin permission attribute of the object. - - */ - - public function getPluginPermission(){ - - return $this->plugin_permission; - - } - + * get plugin status attribute of the object. + */ + public function getPluginStatus() { + return $this -> plugin_status; + } - /** - - * get plugin version attribute of the object. - - */ - - public function getPluginVersion(){ - - return $this->plugin_version; - - } - + * get plugin name attribute of the object. + */ + public function getPluginName() { + return $this -> plugin_name; + } - /** - - * get plugin is active attribute of the object. - - */ - - public function getIsActive(){ - - return $this->plugin_isactive; - - } - - - + * get plugin info array attribute of the object. + */ + public function getPluginInfo() { + return $this -> plugin_info; + } + /** - - * get plugin name attribute of the object. - - */ - - public function getPluginName(){ - - return $this->plugin_name; - - } - - - + * set plugin id attribute of the object. + * + * @param $s integer id + */ + public function setId( $s ) { + $this -> Id = $s; + } - + /** + * set plugin permission attribute of the object. + * + * @param $t type of the query, set permission + */ + public function setPluginPermission( $t ) { + $this -> plugin_permission = $t; + } - /** - - * set plugin id attribute of the object. - - * @param $s integer id - - */ - - public function setId($s){ - - $this->Id = $s; - - } - - - + * set plugin version attribute of the object. + * + * @param $q string to set plugin version + */ + public function setPluginType( $q ) { + $this -> plugin_version = $q; + } + /** - - * set plugin permission attribute of the object. - - * @param $t type of the query, set permission - - */ - - public function setPluginPermission($t){ - - - - $this->plugin_permission = $t; - - } - + * set plugin status attribute of the object. + * + * @param $d status code type int + */ + public function setPluginStatus( $d ) { + $this -> plugin_status = $d; + } - /** - - * set plugin version attribute of the object. - - * @param $q string to set plugin version - - */ - - public function setPluginVersion($q){ - - $this->plugin_version= $q; - - } - + * get plugin name attribute of the object. + */ + public function getPluginName() { + return $this -> plugin_name; + } - /** - - * set plugin is active attribute of the object. - - * @param $d tinyint to set plugin is active or not . - - */ - - public function setIsActive($d){ - - $this->plugin_isactive= $d; - - } - - - + * set plugin name attribute of the object. + * + * @param $p_n string to set plugin name. + */ + public function setPluginName( $p_n ) { + $this -> plugin_name = $p_n; + } + /** - - * set plugin name attribute of the object. - - * @param $p_n string to set plugin name. - - */ - - public function setPluginName($p_n){ - - $this->plugin_name= $p_n; - - } - + * set plugin info attribute array of the object. + * + * @param $p_n array + */ + public function setPluginInfo( $p_n ) { + $this -> plugin_info = $p_n; + } - -} - - + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php index 61bdb0278..1118b556f 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php @@ -1,45 +1,39 @@ init(); - print_r(plugin::$plugins);**/ - - $pagination = new Pagination("SELECT * FROM plugins","lib",5,"Plugincache"); - $pageResult['plug']= Gui_Elements::make_table($pagination->getElements() , Array ("getId","getPluginName","getPluginVersion","getPluginPermission","getIsActive"), Array("id","plugin_name","plugin_version","plugin_permission","plugin_isactive")); - $pageResult['links'] = $pagination->getLinks(5); - $pageResult['lastPage'] = $pagination->getLast(); - $pageResult['currentPage'] = $pagination->getCurrent(); + { + if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) { + + $pagination = new Pagination( "SELECT * FROM plugins", "lib", 5, "Plugincache" ); + $pageResult['plug'] = Gui_Elements :: make_table( $pagination -> getElements(), Array( "getId", "getPluginName", "getPluginType", "getPluginPermission", "getPluginStatus", "getPluginInfo" ), Array( "id", "plugin_name", "plugin_type", "plugin_permission", "plugin_status", "plugin_info" ) ); + $pageResult['links'] = $pagination -> getLinks( 5 ); + $pageResult['lastPage'] = $pagination -> getLast(); + $pageResult['currentPage'] = $pagination -> getCurrent(); - global $INGAME_WEBPATH; - $pageResult['ingame_webpath'] = $INGAME_WEBPATH; + global $INGAME_WEBPATH; + $pageResult['ingame_webpath'] = $INGAME_WEBPATH; - //check if shard is online - try{ - $dbs = new DBLayer("shard"); - $pageResult['shard'] = "online"; - }catch(PDOException $e){ + // check if shard is online + try { + $dbs = new DBLayer( "shard" ); + $pageResult['shard'] = "online"; + } + catch( PDOException $e ) { $pageResult['shard'] = "offline"; - } - return( $pageResult); - }else{ - //ERROR: No access! + } + return( $pageResult ); + } else { + // ERROR: No access! $_SESSION['error_code'] = "403"; - header("Location: index.php?page=error"); - exit; + header( "Location: index.php?page=error" ); + exit; + } + } - -} - - From a15462c863fb2c761cbf521e46d1c21ac6020f53 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Wed, 11 Jun 2014 15:57:07 +0530 Subject: [PATCH 09/51] plugin installer functionality --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 13 +- .../ryzom_ams/ams_lib/translations/en.ini | 21 +- .../www/html/func/install_plugin.php | 94 ++++++++ .../tools/server/ryzom_ams/www/html/index.php | 208 +++++++++--------- .../ryzom_ams/www/html/installer/libsetup.php | 6 +- .../www/html/templates/install_plugin.tpl | 34 +++ .../ryzom_ams/www/html/templates/plugins.tpl | 67 ++---- 7 files changed, 274 insertions(+), 169 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index 1b0dc873d..bba6e3fb1 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -2,7 +2,7 @@ /** * API for loading and interacting with plugins - * contains getters and setters + * contains getters and setters * * @author shubham meena mentored by Matthew Lagoe */ @@ -29,7 +29,7 @@ class Plugincache { $this -> setPluginType( $values['Type'] ); $this -> setPluginPermission( $values['Permission'] ); $this -> setPluginStatus( $values['Status'] ); - $this -> setPluginInfo( $values['Info'] ); + $this -> setPluginInfo( json_decode( $values['Info'] ) ); } /** @@ -122,13 +122,6 @@ class Plugincache { $this -> plugin_status = $d; } - /** - * get plugin name attribute of the object. - */ - public function getPluginName() { - return $this -> plugin_name; - } - /** * set plugin name attribute of the object. * @@ -147,4 +140,4 @@ class Plugincache { $this -> plugin_info = $p_n; } - } + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini index 0d1b9cfb6..0164abbee 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini @@ -56,12 +56,21 @@ action = "Action" [plugins] plugin_title = "Plugin List" plugin_info = "Here you can see the entire list of plugins . You can easily remove plugins ,activate them and add permissions" -plugins= "Plugins" -plugin_id = "ID" +plugins = "Plugins" plugin_name = "Name" -plugin_version= "Version" -plugin_permission= "Owner/Access Permission" -plugin_is_active= "On/Off" +plugin_version = "Version" +plugin_description = "Description" +plugin_type = "Type" +plugin_permission = "Access Permission" +plugin_status = "Status" +ip_success = "Plugin added succesfully." + +[install_plugin] +ip_title = "Install a new Plugin" +ip_message = "For example: name.zip from your local computer" +ip_support = "Upload the plugin archieve to install.
The following file extension is supported: zip." +ip_error = "Please select the format with zip extension" +ip_info_nfound = "Info file not found in the Plugin.Please recheck" [show_ticket] t_title = "Ticket" @@ -252,4 +261,4 @@ email_body_forgot_password_header = "A request to reset your account's password email_body_forgot_password_footer = " ---------- If you didn't make this request, please ignore this message." -;=========================================================================== \ No newline at end of file +;=========================================================================== diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php new file mode 100644 index 000000000..64cb66a30 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php @@ -0,0 +1,94 @@ + 0 ) && ( $_FILES["file"]["type"] == 'application/zip' ) ) + { + $fileName = $_FILES["file"]["name"]; //the files name takes from the HTML form + $fileTmpLoc = $_FILES["file"]["tmp_name"]; //file in the PHP tmp folder + $dir = trim( $_FILES["file"]["name"], ".zip" ); + $target_path = "../../ams_lib/plugins/$dir"; //path in which the zip extraction is to be done + $destination = "../../ams_lib/plugins/"; + + if ( move_uploaded_file( $fileTmpLoc, $destination . $fileName ) ) { + // zip object to handle zip archieves + $zip = new ZipArchive(); + $x = $zip -> open( $destination . $fileName ); + if ( $x === true ) { + $zip -> extractTo( $destination ); // change this to the correct site path + $zip -> close(); + + // removing the uploaded zip file + unlink( $destination . $fileName ); + + // check for the info file + if ( file_exists( $target_path . "/.info" ) ) + { + // read the details of the plugin through the info file + $file_handle = fopen( $target_path . "/.info", "r" ); + $result = array(); + while ( !feof( $file_handle ) ) { + + $line_of_text = fgets( $file_handle ); + $parts = array_map( 'trim', explode( '=', $line_of_text, 2 ) ); + @$result[$parts[0]] = $parts[1]; + + } + + fclose( $file_handle ); + + // sending all info to the database + $install_result = array(); + $install_result['FileName'] = $target_path; + $install_result['Name'] = $result['PluginName']; + $install_result['Type'] = $result['type']; + + if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) + { + $install_result['Permission'] = 'admin'; + } + else + { + $install_result['Permission'] = 'user'; + } + + $install_result['Info'] = json_encode( $result ); + + // connection with the database + $dbr = new DBLayer( "lib" ); + $dbr -> insert( "plugins", $install_result ); + + header( "Location: index.php?page=plugins&result=1" ); + exit; + + } + else + { + rmdir( $target_path ); + header( "Location: index.php?page=install_plugin&result=2" ); + exit; + + } + + } + } + + header( "Location: index.php?page=plugins" ); + exit; + } + else + { + header( "Location: index.php?page=install_plugin&result=1" ); + exit; + } + } + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/index.php b/code/ryzom/tools/server/ryzom_ams/www/html/index.php index faf3488c6..f01eab3e4 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/index.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/index.php @@ -1,126 +1,130 @@ getPermission(); -}else{ - //default permission - $return['permission'] = 0; -} -//hide sidebar + topbar in case of login/register -if($page == 'login' || $page == 'register' || $page == 'logout' || $page == 'forgot_password' || $page == 'reset_password'){ - $return['no_visible_elements'] = 'TRUE'; -}else{ - $return['no_visible_elements'] = 'FALSE'; -} +// Set permission +if ( isset( $_SESSION['ticket_user'] ) ) { + $return['permission'] = unserialize( $_SESSION['ticket_user'] ) -> getPermission(); + } else { + // default permission + $return['permission'] = 0; + } + + +// hide sidebar + topbar in case of login/register +if ( $page == 'login' || $page == 'register' || $page == 'logout' || $page == 'forgot_password' || $page == 'reset_password' ) { + $return['no_visible_elements'] = 'TRUE'; + } else { + $return['no_visible_elements'] = 'FALSE'; + } -//handle error page -if($page == 'error'){ - $return['permission'] = 0; +// handle error page +if ( $page == 'error' ) { + $return['permission'] = 0; $return['no_visible_elements'] = 'FALSE'; -} + } -//load the template with the variables in the $return array +// load the template with the variables in the $return array helpers :: loadTemplate( $page , $return ); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index 43b262b74..a590e6d7d 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -160,15 +160,15 @@ DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ; CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ( - `Id` INT(10) NOT NULL AUTO_INCREMENT, - `FileName VARCHAR(255) NOT NULL, + `Id` INT(10) NOT NULL AUTO_INCREMENT, + `FileName VARCHAR(255) NOT NULL, `Name` VARCHAR(11) NOT NULL, `Type` VARCHAR(12) NOT NULL, `Owner` VARCHAR(25) NOT NULL, `Permission` VARCHAR(5) NOT NULL, `Status` INT(11) NOT NULL DEFAULT 0, `Weight` INT(11) NOT NULL DEFAULT 0, - `Info` BLOB NULL DEFAULT NULL, + `Info` TEXT NULL DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE = InnoDB; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl new file mode 100644 index 000000000..52fdb3820 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl @@ -0,0 +1,34 @@ +{block name=content} + +
+
+
+

{$ip_title}

+
+ + + + +
+
+
+
+

{$ip_support}

+
+
+    +
+ {if isset($smarty.get.result) and $smarty.get.result eq "1"}

{$ip_error}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "2"}

{$ip_info_nfound}

{/if} +
+
+ {$ip_message} +
+
+
+
+
+ + + +{/block} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl index 4d4703875..99f382c5c 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl @@ -1,4 +1,3 @@ - {block name=content}
@@ -10,27 +9,35 @@
+ {if isset($smarty.get.result) and $smarty.get.result eq "1"}

{$ip_success}

{/if}

{$plugin_info}

- +
+ + + + +
- - - + + - + + + {foreach from=$plug item=element} - - + - - + + + + {/foreach} @@ -48,42 +55,6 @@ -
-
-

Actions

-
- - -
-
-
-
-
- - -
-
-
-
- -{/block} \ No newline at end of file +{/block} + From ad2ed4dfa4c42d15e614c5fe2c84c7b5edf56ee3 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Fri, 13 Jun 2014 16:40:27 +0530 Subject: [PATCH 10/51] Plugin installation first upload t{block name=content} --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/translations/en.ini | 13 +- .../www/html/func/install_plugin.php | 150 +++++++++++++----- .../www/html/templates/install_plugin.tpl | 9 +- .../ryzom_ams/www/html/templates/layout.tpl | 44 +++++ .../ryzom_ams/www/html/templates/plugins.tpl | 26 +-- 5 files changed, 189 insertions(+), 53 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini index 0164abbee..4c8b545ec 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini @@ -61,16 +61,23 @@ plugin_name = "Name" plugin_version = "Version" plugin_description = "Description" plugin_type = "Type" -plugin_permission = "Access Permission" +plugin_permission = "Access
Permission" plugin_status = "Status" -ip_success = "Plugin added succesfully." +ip_success = "Plugin added succesfuly." +plugin_actions = "Actions" +dp_success = "Plugin deleted successfuly" +dp_error = "Error in deleting plugin.Please try again later" +ac_success = "Plugin Activated successfuly" +ac_error = "Plugin facing some error in activating. Please try again later" +dc_success = "Plugin de-Activated successfuly" +dc_error = "Plugin facing some error in de-activating. Please try again later" [install_plugin] ip_title = "Install a new Plugin" ip_message = "For example: name.zip from your local computer" ip_support = "Upload the plugin archieve to install.
The following file extension is supported: zip." -ip_error = "Please select the format with zip extension" ip_info_nfound = "Info file not found in the Plugin.Please recheck" +ip_file_nfnd="Please upload a plugin before clicking on install button" [show_ticket] t_title = "Ticket" diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php index 64cb66a30..5376dfd02 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php @@ -11,7 +11,18 @@ function install_plugin() { // if logged in if ( WebUsers :: isLoggedIn() ) { - if ( ( isset( $_FILES["file"] ) ) && ( $_FILES["file"]["size"] > 0 ) && ( $_FILES["file"]["type"] == 'application/zip' ) ) + // path of temporary folder for storing files + $temp_path = "../../ams_lib/temp"; + + // create a temp directory if not exist + // temp folder where we first store all uploaded plugins before install + if ( !file_exists( "$temp_path" ) ) + { + mkdir( $temp_path ); + } + + // checking the server if file is uploaded or not + if ( ( isset( $_FILES["file"] ) ) && ( $_FILES["file"]["size"] > 0 ) ) { $fileName = $_FILES["file"]["name"]; //the files name takes from the HTML form $fileTmpLoc = $_FILES["file"]["tmp_name"]; //file in the PHP tmp folder @@ -19,40 +30,44 @@ function install_plugin() { $target_path = "../../ams_lib/plugins/$dir"; //path in which the zip extraction is to be done $destination = "../../ams_lib/plugins/"; - if ( move_uploaded_file( $fileTmpLoc, $destination . $fileName ) ) { - // zip object to handle zip archieves - $zip = new ZipArchive(); - $x = $zip -> open( $destination . $fileName ); - if ( $x === true ) { - $zip -> extractTo( $destination ); // change this to the correct site path - $zip -> close(); - - // removing the uploaded zip file - unlink( $destination . $fileName ); - - // check for the info file + // checking for the command to install plugin is given or not + if ( !isset( $_POST['install_plugin'] ) ) + { + if ( ( $_FILES["file"]["type"] == 'application/zip' ) ) + { + if ( move_uploaded_file( $fileTmpLoc, $temp_path . "/" . $fileName ) ) { + echo "$fileName upload is complete."; + exit(); + } + else + { + echo "Error in uploading file."; + exit(); + } + } + else + { + echo "Please select a file with .zip extension to upload."; + exit(); + } + } + else + { + + // calling function to unzip archives + if ( zipExtraction( $temp_path . "/" . $fileName , $destination ) ) + { if ( file_exists( $target_path . "/.info" ) ) { - // read the details of the plugin through the info file - $file_handle = fopen( $target_path . "/.info", "r" ); - $result = array(); - while ( !feof( $file_handle ) ) { - - $line_of_text = fgets( $file_handle ); - $parts = array_map( 'trim', explode( '=', $line_of_text, 2 ) ); - @$result[$parts[0]] = $parts[1]; - - } - - fclose( $file_handle ); + $result = array(); + $result = readPluginFile( ".info", $target_path ); // sending all info to the database $install_result = array(); $install_result['FileName'] = $target_path; $install_result['Name'] = $result['PluginName']; - $install_result['Type'] = $result['type']; - - if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) + // $install_result['Type'] = $result['type']; + if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) { $install_result['Permission'] = 'admin'; } @@ -67,28 +82,87 @@ function install_plugin() { $dbr = new DBLayer( "lib" ); $dbr -> insert( "plugins", $install_result ); - header( "Location: index.php?page=plugins&result=1" ); + // if everything is successfull redirecting to the plugin template + header( "Location: index.php?page=plugins&result=1" ); exit; - } else { + // file .info not exists rmdir( $target_path ); header( "Location: index.php?page=install_plugin&result=2" ); exit; - } - } + } else + { + // extraction failed + header( "Location: index.php?page=install_plugin&result=0" ); + exit; + } } - - header( "Location: index.php?page=plugins" ); - exit; + } + else + { + echo "Please Browse for a file before clicking the upload button"; + exit(); + } + } + } + +/** + * function to unzip the zipped files + * + * @param $target_path path to the target zipped file + * @param $destination path to the destination + * @return boolean + */ +function zipExtraction( $target_path, $destination ) + { + $zip = new ZipArchive(); + $x = $zip -> open( $target_path ); + if ( $x === true ) { + if ( $zip -> extractTo( $destination ) ) + { + $zip -> close(); + return true; } else { - header( "Location: index.php?page=install_plugin&result=1" ); - exit; + $zip -> close(); + return false; } } - } + } + +/** + * function to read text files and extract + * the information into an array + * + * ----------------------------------------------------------- + * format: + * ----------------------------------------------------------- + * PluginName = Name of the plugin + * Version = version of the plugin + * Type = type of the plugin + * Description = Description of the plugin ,it's functionality + * ----------------------------------------------------------- + * + * reads only files with name .info + * + * @param $fileName file to read + * @param $targetPath path to the folder containing .info file + * @return array containing above information in array(value => key) + */ +function readPluginFile( $fileName, $target_path ) + { + $file_handle = fopen( $target_path . "/" . $fileName, "r" ); + $result = array(); + while ( !feof( $file_handle ) ) { + $line_of_text = fgets( $file_handle ); + $parts = array_map( 'trim', explode( '=', $line_of_text, 2 ) ); + @$result[$parts[0]] = $parts[1]; + } + fclose( $file_handle ); + return $result; + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl index 52fdb3820..27a4cec49 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl @@ -15,12 +15,15 @@

{$ip_support}

- +   
- {if isset($smarty.get.result) and $smarty.get.result eq "1"}

{$ip_error}

{/if} +
+
+

+ {if isset($smarty.get.result) and $smarty.get.result eq "0"}

{$ip_file_nfnd}

{/if} {if isset($smarty.get.result) and $smarty.get.result eq "2"}

{$ip_info_nfound}

{/if} -
+
{$ip_message}
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl index fa97211d7..e66d952b8 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl @@ -192,6 +192,50 @@ } + + + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl index 99f382c5c..cac67147a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl @@ -10,23 +10,28 @@ {if isset($smarty.get.result) and $smarty.get.result eq "1"}

{$ip_success}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "0"}

{$dp_error}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "2"}

{$dp_success}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "3"}

{$ac_success}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "4"}

{$ac_error}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "5"}

{$dc_success}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "6"}

{$dc_error}

{/if}
{$plugin_id}{$plugin_permission}{$plugin_name}{$plugin_status}{$plugin_name} {$plugin_version}{$plugin_is_active}{$plugin_description}{$plugin_type}{$plugin_permission}
{$element.id}{$element.plugin_permission} {$element.plugin_name}{$element.plugin_version}{$element.plugin_isactive}{$element.plugin_info->Version}{$element.plugin_info->Description}{$element.plugin_type}{$element.plugin_permission}
- + - - + + + @@ -38,6 +43,9 @@ + {/foreach} From 59a6c6b8c3d868443ba2ad8b4acb849244a29ad0 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Fri, 13 Jun 2014 17:21:49 +0530 Subject: [PATCH 11/51] deleting plugin from ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/www/html/func/delete_plugin.php | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php new file mode 100644 index 000000000..53af36157 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php @@ -0,0 +1,68 @@ + selectWithParameter( "FileName", "plugins", array( 'id' => $id ), "Id=:id" ); + $name = $sth -> fetch(); + + if ( is_dir( "$name[FileName]" ) ) + { + // removing plugin directory from the code base + if ( rrmdir( "$name[FileName]" ) ) + { + $db -> delete( 'plugins', array( 'id' => $id ), "Id=:id" ); + + header( "Location: index.php?page=plugins&result=2" ); + exit; + + } + else + { + header( "Location: index.php?page=plugins&result=0" ); + exit; + } + } + } + else + { + header( "Location: index.php?page=plugins&result=0" ); + exit; + } + } + } + +/** + * function to remove a non empty directory + * + * @param $dir directory address + * @return boolean + */ +function rrmdir( $dir ) { + if ( is_dir( $dir ) ) { + $objects = scandir( $dir ); + foreach ( $objects as $object ) { + if ( $object != "." && $object != ".." ) { + if ( filetype( $dir . "/" . $object ) == "dir" ) rmdir( $dir . "/" . $object ); + else unlink( $dir . "/" . $object ); + } + } + reset( $objects ); + return rmdir( $dir ); + } + } + From 2f81e3c1b94d0068aa65cab075bd3244f5be280b Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Sun, 15 Jun 2014 09:42:09 +0530 Subject: [PATCH 12/51] activating a plugin in ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../www/html/func/activate_plugin.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php new file mode 100644 index 000000000..930ed15f1 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php @@ -0,0 +1,35 @@ + update( "plugins", array( 'Status' => '1' ), "Id = $id" ); + if ( $result ) + { + header( "Location: index.php?page=plugins&result=3" ); + exit; + } + else + { + header( "Location: index.php?page=plugins&result=4" ); + exit; + } + } + else + { + header( "Location: index.php?page=plugins&result=4" ); + exit; + } + } + } From cebfde66f7f73245cb1cdd16d2e1d283478d873a Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Sun, 15 Jun 2014 09:45:00 +0530 Subject: [PATCH 13/51] deactivating a plugin in ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../www/html/func/deactivate_plugin.php | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php new file mode 100644 index 000000000..a4b6120b1 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php @@ -0,0 +1,37 @@ + update( "plugins", array( 'Status' => '0' ), "Id = $id" ); + if ( $result ) + { + header( "Location: index.php?page=plugins&result=5" ); + exit; + } + else + { + header( "Location: index.php?page=plugins&result=6" ); + exit; + + } + } + else + { + header( "Location: index.php?page=plugins&result=6" ); + exit; + } + } + } From 678cc254ee29b2a7a80e5843f900d495be06b5de Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Wed, 18 Jun 2014 15:10:31 +0530 Subject: [PATCH 14/51] updating functionality with some error fixes --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/dblayer.php | 383 +++++++++--------- .../ams_lib/autoload/plugincache.php | 34 +- .../ryzom_ams/ams_lib/translations/en.ini | 27 +- .../www/html/func/install_plugin.php | 118 +++++- .../www/html/templates/install_plugin.tpl | 3 +- .../ryzom_ams/www/html/templates/plugins.tpl | 2 +- 6 files changed, 360 insertions(+), 207 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php index b82e7ea8f..63b6bfc81 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php @@ -1,232 +1,245 @@ PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC - ); - $this->PDO = new PDO($dsn,$cfg['db'][$db]['user'],$cfg['db'][$db]['pass'], $opt); - } else { + $dsn = "mysql:"; + $dsn .= "host=" . $cfg['db'][$db]['host'] . ";"; + $dsn .= "dbname=" . $cfg['db'][$db]['name'] . ";"; + $dsn .= "port=" . $cfg['db'][$db]['port'] . ";"; + + $opt = array( + PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION, + PDO :: ATTR_DEFAULT_FETCH_MODE => PDO :: FETCH_ASSOC + ); + $this -> PDO = new PDO( $dsn, $cfg['db'][$db]['user'], $cfg['db'][$db]['pass'], $opt ); + } else { global $cfg; - $dsn = "mysql:"; - $dsn .= "host=". $cfg['db'][$dbn]['host'].";"; - $dsn .= "port=". $cfg['db'][$dbn]['port'].";"; + $dsn = "mysql:"; + $dsn .= "host=" . $cfg['db'][$dbn]['host'] . ";"; + $dsn .= "port=" . $cfg['db'][$dbn]['port'] . ";"; + + $opt = array( + PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION, + PDO :: ATTR_DEFAULT_FETCH_MODE => PDO :: FETCH_ASSOC + ); + $this -> PDO = new PDO( $dsn, $_POST['Username'], $_POST['Password'], $opt ); + } - $opt = array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC - ); - $this->PDO = new PDO($dsn,$_POST['Username'],$_POST['Password'], $opt); - } - - } + } /** - * execute a query that doesn't have any parameters - * @param $query the mysql query - * @return returns a PDOStatement object - */ - public function executeWithoutParams($query){ - $statement = $this->PDO->prepare($query); - $statement->execute(); - return $statement; - } + * execute a query that doesn't have any parameters + * + * @param $query the mysql query + * @return returns a PDOStatement object + */ + public function executeWithoutParams( $query ) { + $statement = $this -> PDO -> prepare( $query ); + $statement -> execute(); + return $statement; + } /** - * execute a query that has parameters - * @param $query the mysql query - * @param $params the parameters that are being used by the query - * @return returns a PDOStatement object - */ - public function execute($query,$params){ - $statement = $this->PDO->prepare($query); - $statement->execute($params); - return $statement; - } + * execute a query that has parameters + * + * @param $query the mysql query + * @param $params the parameters that are being used by the query + * @return returns a PDOStatement object + */ + public function execute( $query, $params ) { + $statement = $this -> PDO -> prepare( $query ); + $statement -> execute( $params ); + return $statement; + } - /** - * execute a query (an insertion query) that has parameters and return the id of it's insertion - * @param $query the mysql query - * @param $params the parameters that are being used by the query - * @return returns the id of the last inserted element. - */ - public function executeReturnId($tb_name,$data){ - $field_values =':'. implode(',:', array_keys($data)); - $field_options = implode(',', array_keys($data)); - try{ - $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)"); - foreach ($data as $key => $value ) - { - $sth->bindValue(":$key", $value); - } - $this->PDO->beginTransaction(); - //execution - $sth->execute(); - $lastId =$this->PDO->lastInsertId(); - $this->PDO->commit(); - }catch (Exception $e) - { - //for rolling back the changes during transaction - $this->PDO->rollBack(); - throw new Exception("error in inseting"); - } - return $lastId; - } - - /** + * execute a query (an insertion query) that has parameters and return the id of it's insertion * + * @param $query the mysql query + * @param $params the parameters that are being used by the query + * @return returns the id of the last inserted element. + */ + public function executeReturnId( $tb_name, $data ) { + $field_values = ':' . implode( ',:', array_keys( $data ) ); + $field_options = implode( ',', array_keys( $data ) ); + try { + $sth = $this -> PDO -> prepare( "INSERT INTO $tb_name ($field_options) VALUE ($field_values)" ); + foreach ( $data as $key => $value ) + { + $sth -> bindValue( ":$key", $value ); + } + $this -> PDO -> beginTransaction(); + $sth -> execute(); + $lastId = $this -> PDO -> lastInsertId(); + $this -> PDO -> commit(); + } + catch ( Exception $e ) + { + // for rolling back the changes during transaction + $this -> PDO -> rollBack(); + throw new Exception( "error in inseting" ); + } + return $lastId; + } + + /** * Select function using prepared statement + * * @param string $tb_name Table Name to Select * @param array $data Associative array * @param string $where where to select * @return statement object */ - public function selectWithParameter($param, $tb_name, $data, $where) - { - try{ - $sth = $this->PDO->prepare("SELECT $param FROM $tb_name WHERE $where"); - $this->PDO->beginTransaction(); - $sth->execute($data); - $this->PDO->commit(); - }catch(Exception $e) - { - $this->PDO->rollBack(); - throw new Exception("error selection"); - return false; - } + public function selectWithParameter( $param, $tb_name, $data, $where ) + { + try { + $sth = $this -> PDO -> prepare( "SELECT $param FROM $tb_name WHERE $where" ); + $this -> PDO -> beginTransaction(); + $sth -> execute( $data ); + $this -> PDO -> commit(); + } + catch( Exception $e ) + { + $this -> PDO -> rollBack(); + throw new Exception( "error selection" ); + return false; + } return $sth; - } - + } + /** - * * Select function using prepared statement + * * @param string $tb_name Table Name to Select * @param array $data Associative array * @param string $where where to select * @return statement object */ - public function select($tb_name, $data ,$where) - { - try{ - $sth = $this->PDO->prepare("SELECT * FROM $tb_name WHERE $where"); - $this->PDO->beginTransaction(); - $sth->execute($data); - $this->PDO->commit(); - }catch(Exception $e) - { - $this->PDO->rollBack(); - throw new Exception("error selection"); - return false; - } + public function select( $tb_name, $data , $where ) + { + try { + $sth = $this -> PDO -> prepare( "SELECT * FROM $tb_name WHERE $where" ); + $this -> PDO -> beginTransaction(); + $sth -> execute( $data ); + $this -> PDO -> commit(); + } + catch( Exception $e ) + { + $this -> PDO -> rollBack(); + throw new Exception( "error selection" ); + return false; + } return $sth; - } - + } + /** - * * Update function with prepared statement + * * @param string $tb_name name of the table * @param array $data associative array with values * @param string $where where part * @throws Exception error in updating */ - public function update($tb_name, $data, $where) - { - $field_option_values=null; - foreach ($data as $key => $value) - { - $field_option_values.=",$key".'=:'.$value; - } - $field_option_values = ltrim($field_option_values,','); - try { - $sth = $this->PDO->prepare("UPDATE $tb_name SET $field_option_values WHERE $where "); - - foreach ($data as $key => $value) - { - $sth->bindValue(":$key", $value); - } - $this->PDO->beginTransaction(); - $sth->execute(); - $this->PDO->commit(); - }catch (Exception $e) - { - $this->PDO->rollBack(); - throw new Exception('error in updating'); - } - } + public function update( $tb_name, $data, $where ) + { + $field_option_values = null; + foreach ( $data as $key => $value ) + { + $field_option_values .= ",$key" . '=:' . $key; + } + $field_option_values = ltrim( $field_option_values, ',' ); + try { + $sth = $this -> PDO -> prepare( "UPDATE $tb_name SET $field_option_values WHERE $where " ); + + foreach ( $data as $key => $value ) + { + $sth -> bindValue( ":$key", $value ); + } + $this -> PDO -> beginTransaction(); + $sth -> execute(); + $this -> PDO -> commit(); + } + catch ( Exception $e ) + { + $this -> PDO -> rollBack(); + throw new Exception( 'error in updating' ); + return false; + } + return true; + } + /** - * * insert function using prepared statements + * * @param string $tb_name Name of the table to insert in * @param array $data Associative array of data to insert */ - - public function insert($tb_name, $data) - { - $field_values =':'. implode(',:', array_keys($data)); - $field_options = implode(',', array_keys($data)); - try{ - $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)"); - foreach ($data as $key => $value ) - { - $sth->bindValue(":$key", $value); - } - $this->PDO->beginTransaction(); - //execution - $sth->execute(); - $this->PDO->commit(); - - }catch (Exception $e) - { - //for rolling back the changes during transaction - $this->PDO->rollBack(); - throw new Exception("error in inseting"); - } - } - + public function insert( $tb_name, $data ) + { + $field_values = ':' . implode( ',:', array_keys( $data ) ); + $field_options = implode( ',', array_keys( $data ) ); + try { + $sth = $this -> PDO -> prepare( "INSERT INTO $tb_name ($field_options) VALUE ($field_values)" ); + foreach ( $data as $key => $value ) + { + + $sth -> bindValue( ":$key", $value ); + } + $this -> PDO -> beginTransaction(); + // execution + $sth -> execute(); + $this -> PDO -> commit(); + + } + catch ( Exception $e ) + { + // for rolling back the changes during transaction + $this -> PDO -> rollBack(); + throw new Exception( "error in inseting" ); + } + } + /** - * * Delete database entery using prepared statement - * @param string $tb_name - * @param string $where + * + * @param string $tb_name + * @param string $where * @throws error in deleting */ - public function delete($tb_name, $where) - { + public function delete( $tb_name, $data, $where ) + { try { - $sth = $this->prepare("DELETE FROM $tb_name WHERE $where"); - $this->PDO->beginTransaction(); - $sth->execute(); - $this->PDO->commit(); - } - catch (Exception $e) - { - $this->rollBack(); - throw new Exception("error in deleting"); - } - - } -} + $sth = $this -> PDO -> prepare( "DELETE FROM $tb_name WHERE $where" ); + $this -> PDO -> beginTransaction(); + $sth -> execute( $data ); + $this -> PDO -> commit(); + } + catch ( Exception $e ) + { + $this -> rollBack(); + throw new Exception( "error in deleting" ); + } + + } + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index bba6e3fb1..1f0ef9bf6 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -26,10 +26,10 @@ class Plugincache { public function set( $values ) { $this -> setId( $values['Id'] ); $this -> setPluginName( $values['Name'] ); - $this -> setPluginType( $values['Type'] ); - $this -> setPluginPermission( $values['Permission'] ); - $this -> setPluginStatus( $values['Status'] ); - $this -> setPluginInfo( json_decode( $values['Info'] ) ); + $this -> setPluginType( $values['Type'] ); + $this -> setPluginPermission( $values['Permission'] ); + $this -> setPluginStatus( $values['Status'] ); + $this -> setPluginInfo( json_decode( $values['Info'] ) ); } /** @@ -140,4 +140,30 @@ class Plugincache { $this -> plugin_info = $p_n; } + + /** + * some more plugin function that requires during plugin operations + * + * / + * + * + * /** + * function to remove a non empty directory + * + * @param $dir directory address + * @return boolean + */ + public static function rrmdir( $dir ) { + if ( is_dir( $dir ) ) { + $objects = scandir( $dir ); + foreach ( $objects as $object ) { + if ( $object != "." && $object != ".." ) { + if ( filetype( $dir . "/" . $object ) == "dir" ) rmdir( $dir . "/" . $object ); + else unlink( $dir . "/" . $object ); + } + } + reset( $objects ); + return rmdir( $dir ); + } + } } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini index 4c8b545ec..548b2ea06 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini @@ -5,6 +5,9 @@ login_info = "Please enter your MySQL Username and Password to install the database.
This is being loaded because the is_installed file is missing.
This process will take about 30 seconds." login_here = "here" +[ams_content] +ams_title="Ryzom Account Mangement System" + [dashboard] home_title = "Introduction" home_info = "Welcome to the Ryzom Core - Account Management System" @@ -66,11 +69,12 @@ plugin_status = "Status" ip_success = "Plugin added succesfuly." plugin_actions = "Actions" dp_success = "Plugin deleted successfuly" -dp_error = "Error in deleting plugin.Please try again later" -ac_success = "Plugin Activated successfuly" -ac_error = "Plugin facing some error in activating. Please try again later" -dc_success = "Plugin de-Activated successfuly" -dc_error = "Plugin facing some error in de-activating. Please try again later" +dp_error = "Error in deleting plugin.Please try again later." +ac_success = "Plugin Activated successfuly." +ac_error = "Plugin facing some error in activating. Please try again later." +dc_success = "Plugin de-Activated successfuly." +dc_error = "Plugin facing some error in de-activating. Please try again later." +up_success = "Update added successfully. Go to Updates page for installing updates." [install_plugin] ip_title = "Install a new Plugin" @@ -79,6 +83,15 @@ ip_support = "Upload the plugin archieve to install.
The following file exte ip_info_nfound = "Info file not found in the Plugin.Please recheck" ip_file_nfnd="Please upload a plugin before clicking on install button" +[plugins_update] +up_title = "Updates for Plugins" +up_info = "Here you can see the entire list of available updates for plugins." +up_serial = "Serial No." +plugin_name = "Name" +plugin_version = "Version" +up_updated_version = "New Version" +up_action = "Actions" + [show_ticket] t_title = "Ticket" title = "Title" @@ -152,8 +165,8 @@ go_home = "Go Home" userlist_info = "welcome to the userlist" [login] -login_info = "Please login with your Username and Password." -login_error_message = "The username/password were not correct!" +login_info = "Please login with your Email/Username and Password." +login_error_message = "The Email/username/password were not correct!" login_register_message ="Register If you don't have an account yet, create one" login_here = "here" login_forgot_password_message = "In case you forgot your password, click" diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php index 5376dfd02..1383dea8a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php @@ -8,7 +8,9 @@ */ function install_plugin() { - // if logged in + $result = array(); + + // if logged in if ( WebUsers :: isLoggedIn() ) { // path of temporary folder for storing files @@ -30,13 +32,32 @@ function install_plugin() { $target_path = "../../ams_lib/plugins/$dir"; //path in which the zip extraction is to be done $destination = "../../ams_lib/plugins/"; - // checking for the command to install plugin is given or not + // scanning plugin folder if plugin with same name is already exists or not + $x = checkForUpdate( $dir, $destination, $fileTmpLoc, $temp_path ); + if ( $x == '1' ) + { + echo "update found"; + exit(); + } + else if ( $x == '2' ) + { + echo "Plugin already exists with same name ."; + exit(); + } + else if ( $x == '3' ) + { + echo "Update info is not present in the update"; + exit(); + } + + + // checking for the command to install plugin is given or not if ( !isset( $_POST['install_plugin'] ) ) { if ( ( $_FILES["file"]["type"] == 'application/zip' ) ) { if ( move_uploaded_file( $fileTmpLoc, $temp_path . "/" . $fileName ) ) { - echo "$fileName upload is complete."; + echo "$fileName upload is complete.
" . "
"; exit(); } else @@ -59,15 +80,14 @@ function install_plugin() { { if ( file_exists( $target_path . "/.info" ) ) { - $result = array(); - $result = readPluginFile( ".info", $target_path ); + $result = readPluginFile( ".info", $target_path ); // sending all info to the database $install_result = array(); $install_result['FileName'] = $target_path; $install_result['Name'] = $result['PluginName']; - // $install_result['Type'] = $result['type']; - if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) + $install_result['Type'] = $result['Type']; + if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) { $install_result['Permission'] = 'admin'; } @@ -165,4 +185,86 @@ function readPluginFile( $fileName, $target_path ) } fclose( $file_handle ); return $result; - } + } + +/** + * function to check for updates or + * if the same plugin already exists + * also, if the update founds ,check for the update info in the .info file. + * Update is saved in the temp direcotry with pluginName_version.zip + * + * @param $fileName file which is uploaded in .zip extension + * @param $findPath where we have to look for the installed plugins + * @param $tempFile path for the temporary file + * @param $tempPath path where we have to store the update + * @return 2 if plugin already exists and update not found + * @return 3 if update info tag not found in .info file + */ +function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath ) + { + // check for plugin if exists + $file = scandir( $findPath ); + foreach( $file as $key => $value ) + { + if ( strcmp( $value, $fileName ) == 0 ) + { + if ( !file_exists( $tempPath . "/test" ) ) + { + mkdir( $tempPath . "/test" ); + } + if ( zipExtraction( $tempFile, $tempPath . "/test/" ) ) + { + $result = readPluginFile( ".info", $tempPath . "/test/" . $fileName ); + + // check for the version for the plugin + $db = new DBLayer( "lib" ); + $sth = $db -> select( "plugins", array( ':name' => $result['PluginName'] ), "Name = :name" ); + $info = $sth -> fetch(); + $info['Info'] = json_decode( $info['Info'] ); + + // the two versions from main plugin and the updated part + $new_version = explode( '.', $result['Version'] ); + $pre_version = explode( '.', $info['Info'] -> Version ); + + // For all plugins we have used semantic versioning + // Format: X.Y.Z ,X->Major, Y->Minor, Z->Patch + // change in the X Y & Z values refer the type of change in the plugin. + // for initial development only Minor an Patch MUST be 0. + // if there is bug fix then there MUST be an increment in the Z value. + // if there is change in the functionality or addition of new functionality + // then there MUST be an increment in the Y value. + // When there is increment in the X value , Y and Z MUST be 0. + // comparing if there is some change + if ( !array_intersect( $new_version , $pre_version ) ) + { + // removing the uploaded file + Plugincache :: rrmdir( $tempPath . "/test/" . $fileName ); + return '2'; + } + else + { + // check for update info if exists + if ( !array_key_exists( 'UpdateInfo', $result ) ) + { + return '3'; //update info tag not found + } + else + { + // storing update in the temp directory + // format of update save + if ( move_uploaded_file( $tempFile, $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip" ) ) { + // setting update information in the database + $dbr = new DBLayer( "lib" ); + $update['PluginId'] = $info['Id']; + $update['UpdatePath'] = $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip"; + $update['UpdateInfo'] = json_encode( $result ); + $dbr -> insert( "updates", $update ); + header( "Location: index.php?page=plugins&result=7" ); + exit; + } + } + } + } + } + } + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl index 27a4cec49..968d6cec4 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl @@ -22,8 +22,7 @@

{if isset($smarty.get.result) and $smarty.get.result eq "0"}

{$ip_file_nfnd}

{/if} - {if isset($smarty.get.result) and $smarty.get.result eq "2"}

{$ip_info_nfound}

{/if} -
+ {if isset($smarty.get.result) and $smarty.get.result eq "2"}

{$ip_info_nfound}

{/if} {$ip_message} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl index cac67147a..4aa6e7e3b 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl @@ -16,6 +16,7 @@ {if isset($smarty.get.result) and $smarty.get.result eq "4"}

{$ac_error}

{/if} {if isset($smarty.get.result) and $smarty.get.result eq "5"}

{$dc_success}

{/if} {if isset($smarty.get.result) and $smarty.get.result eq "6"}

{$dc_error}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "7"}

{$up_success}

{/if}

{$plugin_info}

@@ -65,4 +66,3 @@
{/block} - From 4d1d52fc73a0488dac22d95fc9dd76ff52dedcf6 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 19 Jun 2014 14:53:49 +0530 Subject: [PATCH 15/51] check functionality for existing updates --HG-- branch : Gsoc14-ryzomAppImprovements --- .../www/html/func/install_plugin.php | 60 +++++++++++++++---- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php index 1383dea8a..1ea950d38 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php @@ -212,6 +212,8 @@ function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath ) { mkdir( $tempPath . "/test" ); } + + // extracting the update if ( zipExtraction( $tempFile, $tempPath . "/test/" ) ) { $result = readPluginFile( ".info", $tempPath . "/test/" . $fileName ); @@ -246,25 +248,59 @@ function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath ) // check for update info if exists if ( !array_key_exists( 'UpdateInfo', $result ) ) { - return '3'; //update info tag not found + return '3'; //update info tag not found } else { - // storing update in the temp directory - // format of update save - if ( move_uploaded_file( $tempFile, $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip" ) ) { - // setting update information in the database - $dbr = new DBLayer( "lib" ); - $update['PluginId'] = $info['Id']; - $update['UpdatePath'] = $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip"; - $update['UpdateInfo'] = json_encode( $result ); - $dbr -> insert( "updates", $update ); - header( "Location: index.php?page=plugins&result=7" ); - exit; + // check if update already exists + if ( pluginUpdateExists( $info['Id'], $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip" ) ) + { + echo "Update already exists"; + exit; } + else { + // removing the preivous update + $dbr = new DBLayer( "lib" ); + $dbr -> delete( "updates", array( 'id' => $info['Id'] ), "PluginId=:id" ); + // storing update in the temp directory + // format of update save + if ( move_uploaded_file( $tempFile, $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip" ) ) { + // setting update information in the database + $update['PluginId'] = $info['Id']; + $update['UpdatePath'] = $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip"; + $update['UpdateInfo'] = json_encode( $result ); + $dbr -> insert( "updates", $update ); + header( "Location: index.php?page=plugins&result=7" ); + exit; + } + } } } } } } + } + +/** + * Function to check for the update of a plugin already exists + * + * @param $pluginId id of the plugin for which update is available + * @param $updatePath path of the new update + * @return boolean if update for a plugin already exists or + * if update of same version is uploading + */ +function PluginUpdateExists( $pluginId, $updatePath ) + { + $db = new DBLayer( 'lib' ); + $sth = $db -> selectWithParameter( "UpdatePath", "updates", array( 'pluginid' => $pluginId ), "PluginId=:pluginid" ); + $row = $sth -> fetch(); + if ( $updatePath == $row['UpdatePath'] ) + { + return true; + } + else + { + rmdir( $row['UpdatePath'] ); + return false; + } } From f09e4e48a542ce42a09940a422b497c19234ef49 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 19 Jun 2014 17:11:10 +0530 Subject: [PATCH 16/51] template for updates of plugins --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 41 ++++++++++++++----- .../ryzom_ams/ams_lib/translations/en.ini | 4 +- .../ryzom_ams/www/html/inc/plugins_update.php | 36 ++++++++++++++++ 3 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index 1f0ef9bf6..09bd942b3 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -14,7 +14,7 @@ class Plugincache { private $plugin_permission; private $plugin_status; private $plugin_info = array(); - + private $update_info = array(); /** * A constructor. * Empty constructor @@ -26,15 +26,17 @@ class Plugincache { public function set( $values ) { $this -> setId( $values['Id'] ); $this -> setPluginName( $values['Name'] ); - $this -> setPluginType( $values['Type'] ); - $this -> setPluginPermission( $values['Permission'] ); - $this -> setPluginStatus( $values['Status'] ); - $this -> setPluginInfo( json_decode( $values['Info'] ) ); + $this -> setPluginType( $values['Type'] ); + $this -> setPluginPermission( $values['Permission'] ); + $this -> setPluginStatus( $values['Status'] ); + $this -> setPluginInfo( json_decode( $values['Info'] ) ); + @$this -> setUpdateInfo( json_decode( $values['UpdateInfo'] ) ); } /** * loads the object's attributes. */ + public function load_With_SID() { $dbl = new DBLayer( "lib" ); $statement = $dbl -> executeWithoutParams( "SELECT * FROM plugins" ); @@ -140,14 +142,33 @@ class Plugincache { $this -> plugin_info = $p_n; } + /** + * functionalities for plugin updates + */ /** - * some more plugin function that requires during plugin operations - * - * / + * set update info attribute array of the object. * + * @param $p_n array + */ + public function setUpdateInfo( $p_n ) { + $this -> update_info = $p_n; + } + + /** + * get update info array attribute of the object. + */ + public function getUpdateInfo() { + return $this -> update_info; + } + + + /** + * some more plugin function that requires during plugin operations * - * /** + */ + + /** * function to remove a non empty directory * * @param $dir directory address @@ -166,4 +187,4 @@ class Plugincache { return rmdir( $dir ); } } - } + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini index 548b2ea06..d324acb3a 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini @@ -86,11 +86,11 @@ ip_file_nfnd="Please upload a plugin before clicking on install button" [plugins_update] up_title = "Updates for Plugins" up_info = "Here you can see the entire list of available updates for plugins." -up_serial = "Serial No." +up_description = "Updates Info" plugin_name = "Name" plugin_version = "Version" up_updated_version = "New Version" -up_action = "Actions" +up_actions = "Actions" [show_ticket] t_title = "Ticket" diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php new file mode 100644 index 000000000..89d547860 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php @@ -0,0 +1,36 @@ + getElements(), Array( "getId", "getPluginName", "getPluginInfo", "getUpdateInfo" ), Array( "id", "plugin_name", "plugin_info", "update_info" ) ); + $pageResult['links'] = $pagination -> getLinks( 5 ); + $pageResult['lastPage'] = $pagination -> getLast(); + $pageResult['currentPage'] = $pagination -> getCurrent(); + + global $INGAME_WEBPATH; + $pageResult['ingame_webpath'] = $INGAME_WEBPATH; + + // check if shard is online + try { + $dbs = new DBLayer( "shard" ); + $pageResult['shard'] = "online"; + } + catch( PDOException $e ) { + $pageResult['shard'] = "offline"; + } + return( $pageResult ); + } else { + // ERROR: No access! + $_SESSION['error_code'] = "403"; + header( "Location: index.php?page=error" ); + exit; + } + } From ae7503df36ca01e076b80b7ff385dbd21824f643 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 19 Jun 2014 17:16:24 +0530 Subject: [PATCH 17/51] template with list of updates --HG-- branch : Gsoc14-ryzomAppImprovements --- .../www/html/templates/plugins_update.tpl | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins_update.tpl diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins_update.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins_update.tpl new file mode 100644 index 000000000..afa93d80f --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins_update.tpl @@ -0,0 +1,50 @@ +{block name=content} +
+
+
+

{$up_title}

+
+ + + +
+
+
+

{$up_info}

+
{$plugin_status}{$plugin_name}{$plugin_name} {$plugin_version}{$plugin_description}{$plugin_type}{$plugin_description}{$plugin_type} {$plugin_permission}{$plugin_actions}
{$element.plugin_info->Description} {$element.plugin_type} {$element.plugin_permission} + {if ($element.plugin_status) eq "0"}{/if} + {if ($element.plugin_status) eq "1"}{/if}
+ + + + + + + + + + + {foreach from=$plug item=element} + + + + + + + {/foreach} + + +
{$plugin_name}{$plugin_version}{$up_updated_version}{$up_description}{$up_actions}
{$element.plugin_name}{$element.plugin_info->Version}{$element.update_info->Version}{$element.update_info->UpdateInfo} +
+
+
    +
  • «
  • + {foreach from=$links item=link} +
  • {$link}
  • + {/foreach} +
  • »
  • +
+
+
+ + + +{/block} From e7e4b8874710319eb366f56992328ee713baf5b6 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Mon, 23 Jun 2014 14:36:29 +0530 Subject: [PATCH 18/51] function to install update in the plugin --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/translations/en.ini | 1 + .../ryzom_ams/www/html/func/update_plugin.php | 35 +++++++++++++++++++ .../ryzom_ams/www/html/templates/plugins.tpl | 1 + 3 files changed, 37 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini index d324acb3a..f2a21d2ab 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini @@ -75,6 +75,7 @@ ac_error = "Plugin facing some error in activating. Please try again later." dc_success = "Plugin de-Activated successfuly." dc_error = "Plugin facing some error in de-activating. Please try again later." up_success = "Update added successfully. Go to Updates page for installing updates." +up_install_success = "Update installed successfully." [install_plugin] ip_title = "Install a new Plugin" diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php new file mode 100644 index 000000000..ddf4b0abf --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php @@ -0,0 +1,35 @@ + executeWithoutParams( "SELECT * FROM plugins INNER JOIN updates ON plugins.Id=updates.PluginId Where plugins.Id=$id" ); + $row = $sth -> fetch(); + print_r( $row ); + + // replacing update in the database + Plugincache :: rrmdir( $row['FileName'] ); + Plugincache :: zipExtraction( $row['UpdatePath'], rtrim( $row['FileName'], strtolower( $row['Name'] ) ) ); + + $db -> update( "plugins", array( 'Info' => $row['UpdateInfo'] ), "Id=$row[Id]" ); + + // deleting the previous update + $db -> delete( "updates", array( 'id' => $row['s.no'] ), "s.no=:id" ); + + header( "Location: index.php?page=plugins&result=8" ); + exit; + + } + } + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl index 4aa6e7e3b..73f88d1a2 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl @@ -17,6 +17,7 @@ {if isset($smarty.get.result) and $smarty.get.result eq "5"}

{$dc_success}

{/if} {if isset($smarty.get.result) and $smarty.get.result eq "6"}

{$dc_error}

{/if} {if isset($smarty.get.result) and $smarty.get.result eq "7"}

{$up_success}

{/if} + {if isset($smarty.get.result) and $smarty.get.result eq "8"}

{$up_install_success}

{/if}

{$plugin_info}

From 1ef330b076f13ffdfd4a482c2fd2582bec4534ab Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 3 Jul 2014 16:44:37 +0530 Subject: [PATCH 19/51] hook functionality --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/dblayer.php | 2 +- .../ryzom_ams/ams_lib/autoload/helpers.php | 407 +++++++++--------- .../ams_lib/autoload/plugincache.php | 89 +++- .../ryzom_ams/www/html/func/update_plugin.php | 1 - .../tools/server/ryzom_ams/www/html/index.php | 16 +- .../www/html/templates/layout_admin.tpl | 2 + .../www/html/templates/layout_plugin.tpl | 12 + 7 files changed, 322 insertions(+), 207 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php index 63b6bfc81..43282789e 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php @@ -237,7 +237,7 @@ class DBLayer { } catch ( Exception $e ) { - $this -> rollBack(); + $this -> PDO -> rollBack(); throw new Exception( "error in deleting" ); } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php index 2d26f3c21..3410cf602 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php @@ -1,224 +1,241 @@ setCompileDir($SITEBASE.'/templates_c/'); - $smarty->setCacheDir($SITEBASE.'/cache/'); - $smarty -> setConfigDir($SITEBASE . '/configs/' ); + $smarty -> setCompileDir( $SITEBASE . '/templates_c/' ); + $smarty -> setCacheDir( $SITEBASE . '/cache/' ); + $smarty -> setConfigDir( $SITEBASE . '/configs/' ); // turn smarty debugging on/off - $smarty -> debugging = false; + $smarty -> debugging = false; // caching must be disabled for multi-language support - $smarty -> caching = false; + $smarty -> caching = false; $smarty -> cache_lifetime = 5; - - //needed by smarty. - helpers :: create_folders (); - global $FORCE_INGAME; - - //if ingame, then use the ingame templates - if ( helpers::check_if_game_client() or $FORCE_INGAME ){ - $smarty -> template_dir = $AMS_LIB . '/ingame_templates/'; + + // needed by smarty. + helpers :: create_folders (); + global $FORCE_INGAME; + + // if ingame, then use the ingame templates + if ( helpers :: check_if_game_client() or $FORCE_INGAME ) { + $smarty -> template_dir = $AMS_LIB . '/ingame_templates/'; $smarty -> setConfigDir( $AMS_LIB . '/configs' ); $variables = parse_ini_file( $AMS_LIB . '/configs/ingame_layout.ini', true ); - foreach ( $variables[$INGAME_LAYOUT] as $key => $value ){ - $smarty -> assign( $key, $value ); - } - }else{ - $smarty -> template_dir = $SITEBASE . '/templates/'; + foreach ( $variables[$INGAME_LAYOUT] as $key => $value ) { + $smarty -> assign( $key, $value ); + } + } else { + $smarty -> template_dir = $SITEBASE . '/templates/'; $smarty -> setConfigDir( $SITEBASE . '/configs' ); - } - - foreach ( $vars as $key => $value ){ - $smarty -> assign( $key, $value ); - } - - //load page specific variables that are language dependent - $variables = Helpers::handle_language(); - foreach ( $variables[$template] as $key => $value ){ - $smarty -> assign( $key, $value ); - } - - //smarty inheritance for loading the matching wrapper layout (with the matching menu bar) - if( isset($vars['permission']) && $vars['permission'] == 3 ){ - $inherited = "extends:layout_admin.tpl|"; - }else if( isset($vars['permission']) && $vars['permission'] == 2){ - $inherited = "extends:layout_mod.tpl|"; - }else if( isset($vars['permission']) && $vars['permission'] == 1){ - $inherited = "extends:layout_user.tpl|"; - }else{ - $inherited =""; - } - - //if $returnHTML is set to true, return the html by fetching the template else display the template. - if($returnHTML == true){ - return $smarty ->fetch($inherited . $template . '.tpl' ); - }else{ - $smarty -> display( $inherited . $template . '.tpl' ); - } - } - - - /** - * creates the folders that are needed for smarty. - * @todo for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead. - */ - static public function create_folders(){ - global $AMS_LIB; + } + + foreach ( $vars as $key => $value ) { + $smarty -> assign( $key, $value ); + } + + // load page specific variables that are language dependent + $variables = Helpers :: handle_language(); + if ( $template != 'layout_plugin' ) + { + foreach ( $variables[$template] as $key => $value ) { + $smarty -> assign( $key, $value ); + } + } + // load ams content variables that are language dependent + foreach ( $variables['ams_content'] as $key => $value ) { + $smarty -> assign( $key, $value ); + } + + // smarty inheritance for loading the matching wrapper layout (with the matching menu bar) + if ( isset( $vars['permission'] ) && $vars['permission'] == 3 ) { + $inherited = "extends:layout_admin.tpl|"; + } else if ( isset( $vars['permission'] ) && $vars['permission'] == 2 ) { + $inherited = "extends:layout_mod.tpl|"; + } else if ( isset( $vars['permission'] ) && $vars['permission'] == 1 ) { + $inherited = "extends:layout_user.tpl|"; + } else { + $inherited = ""; + } + + // if $returnHTML is set to true, return the html by fetching the template else display the template. + if ( $returnHTML == true ) { + return $smarty -> fetch( $inherited . $template . '.tpl' ); + } else { + $smarty -> display( $inherited . $template . '.tpl' ); + } + } + + + /** + * creates the folders that are needed for smarty. + * + * @todo for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead. + */ + static public function create_folders() { + global $AMS_LIB; global $SITEBASE; $arr = array( $AMS_LIB . '/ingame_templates/', $AMS_LIB . '/configs', - //$AMS_LIB . '/cache', - $SITEBASE . '/cache/', + // $AMS_LIB . '/cache', + $SITEBASE . '/cache/', $SITEBASE . '/templates/', $SITEBASE . '/templates_c/', $SITEBASE . '/configs' ); - foreach ( $arr as & $value ){ - - if ( !file_exists( $value ) ){ - print($value); - mkdir($value); - } - } - - } - - - /** + foreach ( $arr as &$value ) { + + if ( !file_exists( $value ) ) { + print( $value ); + mkdir( $value ); + } + } + + } + + + /** * check if the http request is sent ingame or not. + * * @return returns true in case it's sent ingame, else false is returned. */ - static public function check_if_game_client() - { - // if HTTP_USER_AGENT is not set then its ryzom core - global $FORCE_INGAME; - if ( ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'],"Ryzom") === 0)) || $FORCE_INGAME || ! isset($_SERVER['HTTP_USER_AGENT']) ){ - return true; - }else{ - return false; - } - } - - - /** + static public function check_if_game_client() + { + // if HTTP_USER_AGENT is not set then its ryzom core + global $FORCE_INGAME; + if ( ( isset( $_SERVER['HTTP_USER_AGENT'] ) && ( strpos( $_SERVER['HTTP_USER_AGENT'], "Ryzom" ) === 0 ) ) || $FORCE_INGAME || ! isset( $_SERVER['HTTP_USER_AGENT'] ) ) { + return true; + } else { + return false; + } + } + + + /** * Handles the language specific aspect. * The language can be changed by setting the $_GET['Language'] & $_GET['setLang'] together. This will also change the language entry of the user in the db. * Cookies are also being used in case the user isn't logged in. + * * @return returns the parsed content of the language .ini file related to the users language setting. */ - static public function handle_language(){ - global $DEFAULT_LANGUAGE; - global $AMS_TRANS; - - //if user wants to change the language - if(isset($_GET['Language']) && isset($_GET['setLang'])){ - //The ingame client sometimes sends full words, derive those! - switch($_GET['Language']){ - - case "English": - $lang = "en"; - break; - - case "French": - $lang = "fr"; - break; - - default: - $lang = $_GET['Language']; - } - //if the file exists en the setLang = true - if( file_exists( $AMS_TRANS . '/' . $lang . '.ini' ) && $_GET['setLang'] == "true"){ - //set a cookie & session var and incase logged in write it to the db! - setcookie( 'Language', $lang , time() + 60*60*24*30 ); - $_SESSION['Language'] = $lang; - if(WebUsers::isLoggedIn()){ - WebUsers::setLanguage($_SESSION['id'],$lang); - } - }else{ - $_SESSION['Language'] = $DEFAULT_LANGUAGE; - } - }else{ - //if the session var is not set yet - if(!isset($_SESSION['Language'])){ - //check if a cookie already exists for it - if ( isset( $_COOKIE['Language'] ) ) { - $_SESSION['Language'] = $_COOKIE['Language']; - //else use the default language - }else{ - $_SESSION['Language'] = $DEFAULT_LANGUAGE; - } - } - } - - if ($_SESSION['Language'] == ""){ - $_SESSION['Language'] = $DEFAULT_LANGUAGE; - } - return parse_ini_file( $AMS_TRANS . '/' . $_SESSION['Language'] . '.ini', true ); - - } - + static public function handle_language() { + global $DEFAULT_LANGUAGE; + global $AMS_TRANS; + + // if user wants to change the language + if ( isset( $_GET['Language'] ) && isset( $_GET['setLang'] ) ) { + // The ingame client sometimes sends full words, derive those! + switch ( $_GET['Language'] ) { + + case "English": + $lang = "en"; + break; + + case "French": + $lang = "fr"; + break; + + default: + $lang = $_GET['Language']; + } + // if the file exists en the setLang = true + if ( file_exists( $AMS_TRANS . '/' . $lang . '.ini' ) && $_GET['setLang'] == "true" ) { + // set a cookie & session var and incase logged in write it to the db! + setcookie( 'Language', $lang , time() + 60 * 60 * 24 * 30 ); + $_SESSION['Language'] = $lang; + if ( WebUsers :: isLoggedIn() ) { + WebUsers :: setLanguage( $_SESSION['id'], $lang ); + } + } else { + $_SESSION['Language'] = $DEFAULT_LANGUAGE; + } + } else { + // if the session var is not set yet + if ( !isset( $_SESSION['Language'] ) ) { + // check if a cookie already exists for it + if ( isset( $_COOKIE['Language'] ) ) { + $_SESSION['Language'] = $_COOKIE['Language']; + // else use the default language + } else { + $_SESSION['Language'] = $DEFAULT_LANGUAGE; + } + } + } - /** - * Time output function for handling the time display. - * @return returns the time in the format specified in the $TIME_FORMAT global variable. - */ - static public function outputTime($time, $str = 1){ - global $TIME_FORMAT; - if($str){ - return date($TIME_FORMAT,strtotime($time)); - }else{ - return date($TIME_FORMAT,$time); - } - } - - /** - * Auto login function for ingame use. - * This function will allow users who access the website ingame, to log in without entering the username and password. It uses the COOKIE entry in the open_ring db. - * it checks if the cookie sent by the http request matches the one in the db. This cookie in the db is changed everytime the user relogs. - * @return returns "FALSE" if the cookies didn't match, else it returns an array with the user's id and name. - */ - static public function check_login_ingame(){ - if ( helpers :: check_if_game_client () or $forcelibrender = false ){ - $dbr = new DBLayer("ring"); - if (isset($_GET['UserId']) && isset($_COOKIE['ryzomId'])){ - $id = $_GET['UserId']; - $statement = $dbr->select("ring_users", array('id' => $id, 'cookie' => $_COOKIE['ryzomId']), "user_id=:id AND cookie =:cookie"); - if ($statement->rowCount() ){ - $entry = $statement->fetch(); - //print_r($entry); - return array('id' => $entry['user_id'], 'name' => $entry['user_name']); - }else{ - return "FALSE"; - } - }else{ - return "FALSE"; - } - }else{ - return "FALSE"; - } - } +if ( $_SESSION['Language'] == "" ) { + $_SESSION['Language'] = $DEFAULT_LANGUAGE; + } +return parse_ini_file( $AMS_TRANS . '/' . $_SESSION['Language'] . '.ini', true ); + + } + + +/** + * Time output function for handling the time display. + * + * @return returns the time in the format specified in the $TIME_FORMAT global variable. + */ +static public function outputTime( $time, $str = 1 ) { +global $TIME_FORMAT; + if ( $str ) { + return date( $TIME_FORMAT, strtotime( $time ) ); + } else { + return date( $TIME_FORMAT, $time ); + } +} + +/** + * Auto login function for ingame use. + * This function will allow users who access the website ingame, to log in without entering the username and password. It uses the COOKIE entry in the open_ring db. + * it checks if the cookie sent by the http request matches the one in the db. This cookie in the db is changed everytime the user relogs. + * + * @return returns "FALSE" if the cookies didn't match, else it returns an array with the user's id and name. + */ +static public function check_login_ingame() { +if ( helpers :: check_if_game_client () or $forcelibrender = false ) { + $dbr = new DBLayer( "ring" ); + if ( isset( $_GET['UserId'] ) && isset( $_COOKIE['ryzomId'] ) ) { + $id = $_GET['UserId']; + + $statement = $dbr -> select( "ring_users", array( 'id' => $id, 'cookie' => $_COOKIE['ryzomId'] ), "user_id=:id AND cookie =:cookie" ); + + // $statement = $dbr->execute("SELECT * FROM ring_users WHERE user_id=:id AND cookie =:cookie", array('id' => $id, 'cookie' => $_COOKIE['ryzomId'])); + + if ( $statement -> rowCount() ) { + $entry = $statement -> fetch(); + // print_r($entry); + return array( 'id' => $entry['user_id'], 'name' => $entry['user_name'] ); + } else { + return "FALSE"; + } + } else { + return "FALSE"; + } + } else { + return "FALSE"; + } +} } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index 09bd942b3..42bdda045 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -156,18 +156,17 @@ class Plugincache { } /** - * get update info array attribute of the object. + * get plugin info array attribute of the object. */ public function getUpdateInfo() { return $this -> update_info; } - /** * some more plugin function that requires during plugin operations * */ - + /** * function to remove a non empty directory * @@ -187,4 +186,86 @@ class Plugincache { return rmdir( $dir ); } } - } + + /** + * function to unzip the zipped files + * + * @param $target_path path to the target zipped file + * @param $destination path to the destination + * @return boolean + */ + public static function zipExtraction( $target_path, $destination ) + { + $zip = new ZipArchive(); + $x = $zip -> open( $target_path ); + if ( $x === true ) { + if ( $zip -> extractTo( $destination ) ) + { + $zip -> close(); + return true; + } + else + { + $zip -> close(); + return false; + } + } + } + + /** + * returns plugin information with respect to the id + * + * @param id $ plugin id + * @return field info for the plugin + */ + public static function pluginInfoUsingId( $id, $fieldName ) + { + $db = new DBLayer( 'lib' ); + $sth = $db -> selectWithParameter( $fieldName, 'plugins', array( 'id' => $id ), 'Id=:id' ); + $row = $sth -> fetch(); + return $row[$fieldName]; + } + + /** + * function provides list of active plugins + * + * @return $ac_plugins list of active plugins + */ + public static function activePlugins() + { + $db = new DBLayer( 'lib' ); + $sth = $db -> selectWithParameter( 'Id', 'plugins', array( 'status' => 1 ), 'Status=:status' ); + $row = $sth -> fetchAll(); + return $row; + } + + /** + * function to load hooks for the active plugins + * and return the contents in the hooks in an array + * + * @return $content content available in hooks + */ + public static function loadHooks() + { + $content = array(); + $ac_arr = Plugincache :: activePlugins(); + foreach( $ac_arr as $key => $value ) + { + $plugin_path = Plugincache :: pluginInfoUsingId( $value['Id'], 'FileName' ); + $pluginName = Plugincache :: pluginInfoUsingId( $value['Id'], 'Name' ); + + // calling hooks in the $pluginName.php + include $plugin_path . '/' . strtolower( $pluginName ) . '.php'; + $arr = get_defined_functions(); + + foreach( $arr['user'] as $key => $value ) + { + if ( stristr( $value, strtolower( $pluginName ) ) == true ) + { + $content['hook_info'][$pluginName] = call_user_func( $value ); + } + } + } + return $content; + } + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php index ddf4b0abf..1420572b1 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php @@ -16,7 +16,6 @@ function update_plugin() { $db = new DBLayer( 'lib' ); $sth = $db -> executeWithoutParams( "SELECT * FROM plugins INNER JOIN updates ON plugins.Id=updates.PluginId Where plugins.Id=$id" ); $row = $sth -> fetch(); - print_r( $row ); // replacing update in the database Plugincache :: rrmdir( $row['FileName'] ); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/index.php b/code/ryzom/tools/server/ryzom_ams/www/html/index.php index f01eab3e4..e87c5dcd5 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/index.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/index.php @@ -14,7 +14,6 @@ // load required pages and turn error reporting on/off error_reporting( E_ALL ); ini_set( 'display_errors', 'on' ); -require_once( '../../ams_lib/libinclude.php' ); if ( !file_exists( '../is_installed' ) ) { // if is_installed doesnt exist run setup require( 'installer/libsetup.php' ); @@ -25,9 +24,10 @@ if ( !file_exists( '../is_installed' ) ) { // if config exists then include it require( '../config.php' ); } +require_once( $AMS_LIB . '/libinclude.php' ); session_start(); -// Running Cron? +// Running Cron if ( isset( $_GET["cron"] ) ) { if ( $_GET["cron"] == "true" ) { Sync :: syncdata( false ); @@ -39,6 +39,7 @@ Sync :: syncdata( false ); // Decide what page to load if ( ! isset( $_GET["page"] ) ) { + if ( isset( $_SESSION['user'] ) ) { if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) { $page = 'dashboard'; @@ -101,9 +102,6 @@ if ( isset( $_SESSION['user'] ) ) { $return['username'] = $_SESSION['user']; } - - - // Set permission if ( isset( $_SESSION['ticket_user'] ) ) { $return['permission'] = unserialize( $_SESSION['ticket_user'] ) -> getPermission(); @@ -112,7 +110,6 @@ if ( isset( $_SESSION['ticket_user'] ) ) { $return['permission'] = 0; } - // hide sidebar + topbar in case of login/register if ( $page == 'login' || $page == 'register' || $page == 'logout' || $page == 'forgot_password' || $page == 'reset_password' ) { $return['no_visible_elements'] = 'TRUE'; @@ -126,5 +123,12 @@ if ( $page == 'error' ) { $return['no_visible_elements'] = 'FALSE'; } +// call to load hooks for the active plugins +$hook_content = Plugincache :: loadHooks(); +foreach( $hook_content as $key => $value ) + { + $return[$key] = $value; + } + // load the template with the variables in the $return array helpers :: loadTemplate( $page , $return ); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl index c50c1c20d..a0d1e49ef 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl @@ -9,6 +9,8 @@
  • Queues
  • Support Groups
  • +
  • Plugins
  • + {if isset($hook_info)} {foreach from=$hook_info item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Syncing
  • Logout
  • {/block} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl new file mode 100644 index 000000000..5bc5938c4 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl @@ -0,0 +1,12 @@ +{block name=content} +
    +{if isset($hook_info)} +{foreach from=$hook_info item=element} +{if $element.menu_display eq $smarty.get.name} +{include file=$element.template_path} +{/if} +{/foreach} +{/if} +
    +{/block} + From d59b6cc642b3675ce2a7eadfd639d5d81a5c3f56 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Sat, 5 Jul 2014 13:01:56 +0530 Subject: [PATCH 20/51] updates database --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/www/html/installer/libsetup.php | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index a590e6d7d..e8ca6d57a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -172,6 +172,26 @@ PRIMARY KEY (`Id`) ) ENGINE = InnoDB; + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`updates` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`updates` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`updates` ( + `s.no` int(10) NOT NULL AUTO_INCREMENT, + `PluginId` int(10) DEFAULT NULL, + `UpdatePath` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `UpdateInfo` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`s.no`), + KEY `PluginId` (`PluginId`)) + ENGINE=InnoDB; + + -- ----------------------------------------- + -- Constraints for table `updates` + -- ----------------------------------------- + ALTER TABLE `" . $cfg['db']['lib']['name'] ."`.`updates` + ADD CONSTRAINT `updates_ibfk_1` FOREIGN KEY (`PluginId`) REFERENCES `plugins` (`Id`); + -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket` From 931d18323b62b440dcf804d83659b653cb65a961 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Mon, 7 Jul 2014 01:48:42 +0530 Subject: [PATCH 21/51] removed merged conflicts --HG-- branch : Gsoc14-ryzomAppImprovements --- .../tools/server/ryzom_ams/ams_lib/autoload/plugincache.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index 42bdda045..b056c02bb 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -6,7 +6,6 @@ * * @author shubham meena mentored by Matthew Lagoe */ - class Plugincache { private $id; private $plugin_name; @@ -268,4 +267,4 @@ class Plugincache { } return $content; } - } + } \ No newline at end of file From 4c0d3e53fc0aaddc378b14575dcd855537bc35f8 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Mon, 7 Jul 2014 13:56:58 +0530 Subject: [PATCH 22/51] fixed few bugs --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 20 ++++---- .../ryzom_ams/ams_lib/autoload/users.php | 12 ++--- .../ryzom_ams/www/html/func/delete_plugin.php | 23 +-------- .../ryzom_ams/www/html/installer/libsetup.php | 47 ++++++++++--------- .../www/html/templates/layout_user.tpl | 1 + 5 files changed, 39 insertions(+), 64 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index 7c43e1877..ae8f1129c 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -173,17 +173,13 @@ class Plugincache { * @return boolean */ public static function rrmdir( $dir ) { - if ( is_dir( $dir ) ) { - $objects = scandir( $dir ); - foreach ( $objects as $object ) { - if ( $object != "." && $object != ".." ) { - if ( filetype( $dir . "/" . $object ) == "dir" ) rmdir( $dir . "/" . $object ); - else unlink( $dir . "/" . $object ); - } - } - reset( $objects ); - return rmdir( $dir ); - } + $result=array_diff(scandir($dir),array('.','..')); + foreach($result as $item) + { + if(!@unlink($dir.'/'.$item)) + Plugincache::rrmdir($dir.'/'.$item); + } + return rmdir($dir); } /** @@ -267,4 +263,4 @@ class Plugincache { } return $content; } - } \ No newline at end of file + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php index e9463b0b0..b398270e4 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php @@ -289,12 +289,13 @@ class Users{ public static function createUser($values, $user_id){ try { //make connection with and put into shard db - $values['user_id']= $user_id; $dbs = new DBLayer("shard"); $dbs->insert("user", $values); $dbr = new DBLayer("ring"); - $values['user_type'] = 'ut_pioneer'; - $dbr->insert("ring_users", $values); + $valuesRing['user_id'] =$user_id; + $valuesRing['user_name'] = $values['Login']; + $valuesRing['user_type'] = 'ut_pioneer'; + $dbr->insert("ring_users", $valuesRing); ticket_user::createTicketUser( $user_id, 1); return "ok"; } @@ -303,7 +304,7 @@ class Users{ try { $dbl = new DBLayer("lib"); $dbl->insert("ams_querycache", array("type" => "createUser", - "query" => json_encode(array($values["name"],$values["pass"],$values["mail"])), "db" => "shard")); + "query" => json_encode(array($values["Login"],$values["Password"],$values["Email"])), "db" => "shard")); ticket_user::createTicketUser( $user_id , 1 ); return "shardoffline"; }catch (PDOException $e) { @@ -472,6 +473,3 @@ class Users{ } } } - - - diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php index 53af36157..f3dc0311a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php @@ -23,7 +23,7 @@ function delete_plugin() { if ( is_dir( "$name[FileName]" ) ) { // removing plugin directory from the code base - if ( rrmdir( "$name[FileName]" ) ) + if ( Plugincache::rrmdir( "$name[FileName]" ) ) { $db -> delete( 'plugins', array( 'id' => $id ), "Id=:id" ); @@ -45,24 +45,3 @@ function delete_plugin() { } } } - -/** - * function to remove a non empty directory - * - * @param $dir directory address - * @return boolean - */ -function rrmdir( $dir ) { - if ( is_dir( $dir ) ) { - $objects = scandir( $dir ); - foreach ( $objects as $object ) { - if ( $object != "." && $object != ".." ) { - if ( filetype( $dir . "/" . $object ) == "dir" ) rmdir( $dir . "/" . $object ); - else unlink( $dir . "/" . $object ); - } - } - reset( $objects ); - return rmdir( $dir ); - } - } - diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index 492f67549..d020f1644 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -184,37 +184,38 @@ DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ; CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ( - `Id` INT(10) NOT NULL AUTO_INCREMENT, - `FileName VARCHAR(255) NOT NULL, + `Id` INT(10) NOT NULL AUTO_INCREMENT, + `FileName` VARCHAR(255) NOT NULL, `Name` VARCHAR(11) NOT NULL, `Type` VARCHAR(12) NOT NULL, `Owner` VARCHAR(25) NOT NULL, `Permission` VARCHAR(5) NOT NULL, `Status` INT(11) NOT NULL DEFAULT 0, `Weight` INT(11) NOT NULL DEFAULT 0, - `Info` TEXT NULL DEFAULT NULL, + `Info` TEXT NULL DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE = InnoDB; + -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`updates` -- ----------------------------------------------------- DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`updates` ; CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`updates` ( - `s.no` int(10) NOT NULL AUTO_INCREMENT, - `PluginId` int(10) DEFAULT NULL, - `UpdatePath` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `UpdateInfo` text COLLATE utf8_unicode_ci, - PRIMARY KEY (`s.no`), - KEY `PluginId` (`PluginId`)) - ENGINE=InnoDB; - - -- ----------------------------------------- - -- Constraints for table `updates` - -- ----------------------------------------- - ALTER TABLE `" . $cfg['db']['lib']['name'] ."`.`updates` - ADD CONSTRAINT `updates_ibfk_1` FOREIGN KEY (`PluginId`) REFERENCES `plugins` (`Id`); + `s.no` int(10) NOT NULL AUTO_INCREMENT, + `PluginId` int(10) DEFAULT NULL, + `UpdatePath` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `UpdateInfo` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`s.no`), + KEY `PluginId` (`PluginId`)) + ENGINE=InnoDB; + + -- ----------------------------------------- + -- Constraints for table `updates` + -- ----------------------------------------- + ALTER TABLE `" . $cfg['db']['lib']['name'] ."`.`updates` + ADD CONSTRAINT `updates_ibfk_1` FOREIGN KEY (`PluginId`) REFERENCES `plugins` (`Id`); -- ----------------------------------------------------- @@ -1772,14 +1773,14 @@ //Now create an admin account! $hashpass = crypt("admin", Users::generateSALT()); $params = array( - 'name' => "admin", - 'pass' => $hashpass, - 'mail' => "admin@admin.com", + 'Login' => "admin", + 'Password' => $hashpass, + 'Email' => "admin@admin.com", ); try{ - $user_id = WebUsers::createWebuser($params['name'], $params['pass'],$params['mail']); + $user_id = WebUsers::createWebuser($params['Login'], $params['Password'],$params['Email']); $result = Webusers::createUser($params, $user_id); - Users::createPermissions(array($params['name'])); + Users::createPermissions(array($params['Login'])); $dbl = new DBLayer("lib"); $dbl->execute("UPDATE ticket_user SET Permission = 3 WHERE TUserId = :user_id",array('user_id' => $user_id)); print "The admin account is created, you can login with id: admin, pass: admin!"; @@ -1802,5 +1803,5 @@ print "There was an error while installing"; print_r($e); } - } - + } + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl index 301af12b6..4b452962a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl @@ -5,6 +5,7 @@
  • Settings
  • Create New Ticket
  • + {if isset($hook_info)} {foreach from=$hook_info item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Logout
  • {/block} From 3b3a595903407cc3a1e00b6a4a7e3e817f8d5935 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Sat, 26 Jul 2014 00:27:57 +0530 Subject: [PATCH 23/51] bug fix: added template path option in .info file --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/autoload/plugincache.php | 39 ++++++++++--------- .../www/html/templates/layout_admin.tpl | 2 +- .../www/html/templates/layout_mod.tpl | 1 + .../www/html/templates/layout_plugin.tpl | 4 +- .../www/html/templates/layout_user.tpl | 2 +- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php index ae8f1129c..c90665bc1 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php @@ -1,8 +1,8 @@ - $value ) { $plugin_path = Plugincache :: pluginInfoUsingId( $value['Id'], 'FileName' ); - $pluginName = Plugincache :: pluginInfoUsingId( $value['Id'], 'Name' ); + $template_path = json_decode( Plugincache :: pluginInfoUsingId( $value['Id'], 'Info' ) ) -> TemplatePath; + $plugin_name = explode( '/', $plugin_path )[4]; // calling hooks in the $pluginName.php - include $plugin_path . '/' . strtolower( $pluginName ) . '.php'; + include $plugin_path . '/' . $plugin_name . '.php'; $arr = get_defined_functions(); foreach( $arr['user'] as $key => $value ) { - if ( stristr( $value, strtolower( $pluginName ) ) == true ) + if ( stristr( $value, $plugin_name ) == true ) { - $content['hook_info'][$pluginName] = call_user_func( $value ); + $content['hook_info'][$plugin_name] = call_user_func( $value ); } } - } + // path for the template + $content['hook_info'][$plugin_name]['TemplatePath'] = $template_path; + } + return $content; } - } + } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl index a0d1e49ef..db83dc8be 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl @@ -10,7 +10,7 @@
  • Support Groups
  • Plugins
  • - {if isset($hook_info)} {foreach from=$hook_info item=element}
  • {$element.menu_display}
  • {/foreach}{/if} + {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Syncing
  • Logout
  • {/block} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl index e0a77d99a..cffdfdb5a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl @@ -6,6 +6,7 @@
  • Settings
  • Users
  • + {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Queues
  • Support Groups
  • diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl index 5bc5938c4..9fb68400a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl @@ -1,8 +1,8 @@ {block name=content}
    {if isset($hook_info)} -{foreach from=$hook_info item=element} -{if $element.menu_display eq $smarty.get.name} +{foreach from=$hook_info key=arrkey item=element} +{if $arrkey eq $smarty.get.name} {include file=$element.template_path} {/if} {/foreach} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl index 4b452962a..57aad4c8b 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl @@ -5,7 +5,7 @@
  • Settings
  • Create New Ticket
  • - {if isset($hook_info)} {foreach from=$hook_info item=element}
  • {$element.menu_display}
  • {/foreach}{/if} + {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Logout
  • {/block} From ce53f5f26c083d828abd60fd4a66d568d3209309 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Fri, 1 Aug 2014 16:01:35 +0530 Subject: [PATCH 24/51] API key management calender --HG-- branch : Gsoc14-ryzomAppImprovements --- .../server/ryzom_ams/www/html/templates/layout.tpl | 11 ++++++++++- .../ryzom_ams/www/html/templates/layout_plugin.tpl | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl index 9cd01cda8..69b99dbac 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout.tpl @@ -235,7 +235,16 @@ _("status").innerHTML = "upload Aborted"; } - + + + + + + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl index 9fb68400a..1a84ff3bf 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_plugin.tpl @@ -3,7 +3,7 @@ {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element} {if $arrkey eq $smarty.get.name} -{include file=$element.template_path} +{include file=$element.TemplatePath} {/if} {/foreach} {/if} From 204a5b8a184e0ee651af48dcdbb52a14859d7708 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Mon, 4 Aug 2014 14:05:11 +0530 Subject: [PATCH 25/51] rest api using curl --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/rest_api.php | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php new file mode 100644 index 000000000..8dba944b5 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php @@ -0,0 +1,52 @@ + Date: Mon, 11 Aug 2014 22:57:08 +0530 Subject: [PATCH 26/51] Adding activated plugins to the main options list --HG-- branch : Gsoc14-ryzomAppImprovements --- .../server/ryzom_ams/www/html/templates/layout_admin.tpl | 2 +- .../tools/server/ryzom_ams/www/html/templates/layout_mod.tpl | 2 +- .../tools/server/ryzom_ams/www/html/templates/layout_user.tpl | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl index db83dc8be..54307b5bc 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_admin.tpl @@ -4,13 +4,13 @@
  • Dashboard
  • Profile
  • Settings
  • + {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Users
  • Queues
  • Support Groups
  • Plugins
  • - {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Syncing
  • Logout
  • {/block} diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl index cffdfdb5a..e4fbdcc69 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_mod.tpl @@ -4,9 +4,9 @@
  • Dashboard
  • Profile
  • Settings
  • + {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Users
  • - {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if}
  • Queues
  • Support Groups
  • diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl index 57aad4c8b..e70b7c164 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/layout_user.tpl @@ -3,9 +3,9 @@
  • Profile
  • Settings
  • - -
  • Create New Ticket
  • {if isset($hook_info)} {foreach from=$hook_info key=arrkey item=element}
  • {$element.menu_display}
  • {/foreach}{/if} + +
  • Create New Ticket
  • Logout
  • {/block} From 70e8310fff9fd8ca01e72f9a087f7ffe5f1c4a71 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Tue, 12 Aug 2014 00:23:48 +0530 Subject: [PATCH 27/51] added API key mangement and Achievements plugin during installation of ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../tools/server/ryzom_ams/www/html/installer/libsetup.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index d020f1644..c93310c55 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -196,6 +196,10 @@ PRIMARY KEY (`Id`) ) ENGINE = InnoDB; + INSERT INTO `plugins` (`Id`, `FileName`, `Name`, `Type`, `Owner`, `Permission`, `Status`, `Weight`, `Info`) VALUES +(1, '../../ams_lib/plugins/API_key_management', 'API_key_management', 'automatic', '', 'admin', 1, 0, '{\"PluginName\":\"API Key Management\",\"Description\":\"Provides public access to the API''s by generating access tokens.\",\"Version\":\"1.0.0\",\"Type\":\"automatic\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/API_key_management\\/templates\\/index.tpl\",\"\":null}'), +(2, '../../ams_lib/plugins/Achievements', 'Achievements', 'Manual', '', 'admin', 1, 0, '{\"PluginName\":\"Achievements\",\"Description\":\"Returns the achivements of a user with respect to the character =.\",\"Version\":\"1.0.0\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/Achievements\\/templates\\/index.tpl\",\"Type\":\"Manual\",\"\":null}'); + -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`updates` @@ -1804,4 +1808,3 @@ print_r($e); } } - From 0d8fe2b7aa92c6b4117ded01177e906d8e9386cf Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Tue, 12 Aug 2014 00:33:11 +0530 Subject: [PATCH 28/51] Achievements plugin integrated with ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/plugins/Achievements/.info | 8 + .../plugins/Achievements/Achievements.php | 142 ++++++++++++++++++ .../plugins/Achievements/templates/index.tpl | 73 +++++++++ 3 files changed, 223 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/.info create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/.info b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/.info new file mode 100644 index 000000000..238e98922 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/.info @@ -0,0 +1,8 @@ +PluginName = Achievements +Description = Returns the achivements of a user with respect to the character =. +Version = 1.0.0 +TemplatePath = ../../../ams_lib/plugins/Achievements/templates/index.tpl +Type = Manual + + + diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php new file mode 100644 index 000000000..943981680 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php @@ -0,0 +1,142 @@ + select( 'ams_api_keys', $data , 'User = :User AND UserCharacter = :UserCharacter' ); + $row = $sth -> fetchAll(); + + return $row; + + } + +/** + * Local Hook to set variables which contains + * the content to use during the plugin functionality. + */ +function hook_variable_set() + { + global $var_set; + $var_set['character'] = $_POST['Character']; + + // get db content for variable set + $row = hook_get_db_content( array( 'User' => $_SESSION['user'], 'UserCharacter' => $var_set['character'] ) ); + + // access key automatically taken from the database wrt user and character + @$var_set['app_key'] = $row['AccessToken']; + + // here you can set the host where this plugin is set + $var_set['host'] = 'localhost'; + + // here you can set what you are looking for + // when you are requesting encoded in json + @$var_set['items'] = json_encode( array( 'Task' => 'Achievements', 'Character' => $var_set['character'] ) ); + + // url where we have to make request for achievements + // it sends get parameter search(what to search) and format(in which format data exchange takes place) + $var_set['url'] = 'app.domain.org?search=' . $var_set['items'] . '&&format=json'; + + } + +/** + * Global Hook to interact with the REST api + * Pass the variables in the REST object to + * make request + * + * variables REST object expects + * url --> on which request is to be made + * appkey --> app key for authentication + * host --> host from which request have been sent + * + * @return $return_set global array returns the template data + */ +function achievements_hook_call_rest() + { + // defined the variables + global $var_set; + global $return_set; + + if ( isset( $_POST['get_data'] ) ) + { + hook_variable_set(); + + $rest_api = new Rest_Api(); + $ach_data = $rest_api -> request( $var_set['url'], $var_set['app_key'], $var_set['host'] ); + print_r( $ach_data ); + + $return_set['char_achievements'] = json_decode( $ach_data ); + } + } + +/** + * Global Hook to return global variables which contains + * the content to use in the smarty templates extracted from + * the database + * + * @return $return_set global array returns the template data + */ +function achievements_hook_get_db() + { + global $return_set; + + $db = new DBLayer( 'lib' ); + + // getting content for selecting characters + $sth = $db -> selectWithParameter( 'UserCharacter', 'ams_api_keys', array( 'User' => $_SESSION['user'] ) , 'User = :User' ); + $row = $sth -> fetchAll(); + $retur_set['Character'] = $row; + + } + +/** + * Global Hook to return global variables which contains + * the content to use in the smarty templates + * + * @return $return_set global array returns the template data + */ +function achievements_hook_return_global() + { + global $return_set; + return $return_set; + + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl new file mode 100644 index 000000000..a83acd359 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl @@ -0,0 +1,73 @@ +{block name=content} + +{if isset($smarty.get.plugin_action) and $smarty.get.plugin_action eq 'get_achievements'} +
    +
    +
    +

    Achievements

    +
    + + + +
    +
    + + {if isset($smarty.get.success) and $smarty.get.success eq '1'}

    Key added successfully

    {/if} + {if isset($smarty.get.success) and $smarty.get.success eq '2'}

    Key deleted successfully

    {/if} +
    +
    + {$hook_info.Achievements.char_achievements} +
    +
    +
    +
    +{else} +
    +
    +
    +

    Achievements

    +
    + + + +
    +
    +
    +
    +

    Select your Character

    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    + + {/if} +{/block} From acb4f26f1a29c86c5f430f817bd24c469cebdd47 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Tue, 12 Aug 2014 00:33:58 +0530 Subject: [PATCH 29/51] API key management plugin for ams --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ams_lib/plugins/API_key_management/.info | 8 + .../API_key_management/API_key_management.php | 206 ++++++++++++++++++ .../API_key_management/generate_key.php | 53 +++++ .../API_key_management/templates/gen_key.tpl | 46 ++++ .../API_key_management/templates/index.tpl | 133 +++++++++++ 5 files changed, 446 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/.info create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/generate_key.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/gen_key.tpl create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/.info b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/.info new file mode 100644 index 000000000..b185a31db --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/.info @@ -0,0 +1,8 @@ +PluginName = API Key Management +Description = Provides public access to the API's by generating access tokens. +Version = 1.0.0 +Type = automatic +TemplatePath = ../../../ams_lib/plugins/API_key_management/templates/index.tpl + + + diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php new file mode 100644 index 000000000..1676f243a --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php @@ -0,0 +1,206 @@ + executeWithoutParams( $sql ); + } + +/** + * Hook to store data to database which is sent as post + * method from the forms in this plugin + * It also calls the local hook + */ +function api_key_management_hook_store_db() + { + global $var_set; + global $return_set; + + // if the form been submited move forward + if ( @hook_validate( $_POST['gen_key'] ) ) { + + // local hook to validate the POST variables + hook_variables(); + + // if validation successfull move forward + if ( $return_set['gen_key_validate'] == 'true' && $_GET['plugin_action'] == 'generate_key' ) + { + // this part generated the access token + include 'generate_key.php'; + $var_set['AccessToken'] = generate_key :: randomToken( 56, false, true, false ); + + // database connection + $db = new DBLayer( 'lib' ); + // insert the form data to the database + $db -> insert( 'ams_api_keys', $var_set ); + + // redirect to the the main page with success code + // 1 refers to the successfull addition of key to the database + header( "Location: index.php?page=layout_plugin&&name=API_key_management&&success=1" ); + exit; + } + } + } + +/** + * Global Hook to load the data from db and set it + * into the global array to return it to the template + */ +function api_key_management_hook_load_db() + { + global $var_set; + global $return_set; + + $db = new DBLayer( 'lib' ); + + // returns the regestered keys + $sth = $db -> select( 'ams_api_keys', array( 'user' => $_SESSION['user'] ), 'User = :user' ); + $row = $sth -> fetchAll(); + $return_set['api_keys'] = $row; + + // returns the characters with respect to the user id in the ring_tool->characters + $db = new DBLayer( 'ring' ); + $sth = $db -> selectWithParameter( 'char_name', 'characters' , array(), '1' ); + $row = $sth -> fetchAll(); + $return_set['characters'] = $row; + + } + +/** + * Global Hook to update or delete the data from db + */ +function api_key_management_hook_update_db() + { + global $var_set; + global $return_set; + + $db = new DBLayer( 'lib' ); + if ( isset( $_GET['delete_id'] ) ) + { + // removes the registered key using get variable which contains the id of the registered key + $db -> delete( 'ams_api_keys', array( 'SNo' => $_GET['delete_id'] ), 'SNo = :SNo' ); + + // redirecting to the API_key_management plugins template with success code + // 2 refers to the succssfull delete condition + header( "Location: index.php?page=layout_plugin&&name=API_key_management&&success=2" ); + exit; + } + + } + +/** + * Global Hook to return global variables which contains + * the content to use in the smarty templates + * + * @return $return_set global array returns the template data + */ +function api_key_management_hook_return_global() + { + global $return_set; + return $return_set; + + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/generate_key.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/generate_key.php new file mode 100644 index 000000000..1ddfab7ed --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/generate_key.php @@ -0,0 +1,53 @@ + 2, 2 => 8, 3 => 10, 4 => 16, 5 => 10 ); + if ( !is_array( $chars ) ) { + $chars = array_unique( str_split( $chars ) ); + } + if ( $standardChars ) { + $chars = array_merge( $chars, range( 48, 57 ), range( 65, 90 ), range( 97, 122 ) ); + } + if ( $specialChars ) { + $chars = array_merge( $chars, range( 33, 47 ), range( 58, 64 ), range( 91, 96 ), range( 123, 126 ) ); + } + array_walk( $chars, function( &$val ) { + if ( !is_int( $val ) ) { + $val = ord( $val ); } + } + ); + if ( is_int( $len ) ) { + while ( $len ) { + $tmp = ord( openssl_random_pseudo_bytes( 1 ) ); + if ( in_array( $tmp, $chars ) ) { + if ( !$output || !in_array( $output, range( 1, 5 ) ) || $output == 3 || $output == 5 ) { + $out .= ( $output == 3 ) ? $tmp : chr( $tmp ); + } + else { + $based = base_convert( $tmp, 10, $outputMap[$output] ); + $out .= ( ( ( $output == 1 ) ? '00' : ( ( $output == 4 ) ? '0x' : '' ) ) . ( ( $output == 2 ) ? sprintf( '%03d', $based ) : $based ) ); + } + $len--; + } + } + } + return ( empty( $out ) ) ? false : $out; + } + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/gen_key.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/gen_key.tpl new file mode 100644 index 000000000..1ab283449 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/gen_key.tpl @@ -0,0 +1,46 @@ +
    +
    +
    +

    API KEY management

    +
    + + + +
    +
    +
    +
    +

    Generate Access Key

    +
    + + +
    +
    +
    +
    +
    + Generate Key + +
    + +
    +
    + + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl new file mode 100644 index 000000000..eac902aae --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl @@ -0,0 +1,133 @@ +{block name=content} + +{if isset($smarty.get.plugin_action) and $smarty.get.plugin_action eq 'generate_key'} +
    +
    +
    +

    API KEY management

    +
    + + + +
    +
    +
    +
    +

    Generate Access Key

    +
    + + +
    +
    +
    +
    +
    + Generate Key + +
    + +
    +
    + + +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + + +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +{else} +
    +
    +
    +

    API KEY management

    +
    + + + +
    +
    + + + {if isset($hook_info.API_key_management['gen_key_validate']) and $hook_info.API_key_management['gen_key_validate'] eq 'false' }

    Please enter all the fields

    {/if} + {if isset($smarty.get.success) and $smarty.get.success eq '1'}

    Key added successfully

    {/if} + {if isset($smarty.get.success) and $smarty.get.success eq '2'}

    Key deleted successfully

    {/if} +
    + +
    +
    +
    +

    All the keys you have generated will be shown and you can customize from here.

    + + + + + + + + + + + + + + {foreach from=$hook_info.API_key_management.api_keys item=element} + + + + + + + + {/foreach} + + + +
    NameTypeCharacterAccess KeyExpiresActions
    {$element.FrName}{$element.UserType}{$element.UserCharacter}{$element.AccessToken}{$element.ExpiryDate} +
    +
    +
    +
    +
    + {/if} +{/block} From 0e4b004978aa32504a7a88c15b5ded556b36adb2 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Tue, 12 Aug 2014 12:46:22 +0530 Subject: [PATCH 30/51] Bug Fix: delete plugin option available for inactive plugins --HG-- branch : Gsoc14-ryzomAppImprovements --- .../tools/server/ryzom_ams/www/html/templates/plugins.tpl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl index 73f88d1a2..6d864c818 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/plugins.tpl @@ -45,8 +45,10 @@ {$element.plugin_info->Description} {$element.plugin_type} {$element.plugin_permission} - - {if ($element.plugin_status) eq "0"}{/if} + + {if ($element.plugin_status) eq "0"} + + {/if} {if ($element.plugin_status) eq "1"}{/if} {/foreach} From ac980adcc70cede5f806df693ae502d8b495e052 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Wed, 13 Aug 2014 12:57:30 +0530 Subject: [PATCH 31/51] Added few more options in REST api --HG-- branch : Gsoc14-ryzomAppImprovements --- .../ryzom_ams/ams_lib/autoload/rest_api.php | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php index 8dba944b5..91607292c 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php @@ -43,10 +43,27 @@ class Rest_Api { // Execute cURL on the session handle $response = curl_exec( $session ); - return $response; + if ( curl_errno( $session ) ) { + // if request is not sent + die( 'Couldn\'t send request: ' . curl_error( $session ) ); + } else { + // check the HTTP status code of the request + $resultStatus = curl_getinfo( $session, CURLINFO_HTTP_CODE ); + if ( $resultStatus == 200 ) { + // everything went fine return response + return $response; + + } else { + // the request did not complete as expected. common errors are 4xx + // (not found, bad request, etc.) and 5xx (usually concerning + // errors/exceptions in the remote script execution) + die( 'Request failed: HTTP status code: ' . $resultStatus ); + } + } + curl_close( $session ); } else { return null; } } - } + } From 5fd2615f0e07ee2d205dcb968752d6dffa873ef2 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Wed, 13 Aug 2014 18:32:13 +0530 Subject: [PATCH 32/51] small bug fix: support group missing brackets at end --HG-- branch : Gsoc14-ryzomAppImprovements --- .../server/ryzom_ams/ams_lib/autoload/support_group.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php index 7b8a864d4..d482a842f 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php @@ -305,7 +305,7 @@ class Support_Group{ */ public function create() { $dbl = new DBLayer("lib"); - $dbl->insert("support_group", Array('Name' => $this->getName(), 'Tag' => $this->getTag(), 'GroupEmail' => $this->getGroupEmail(), 'IMAP_MailServer' => $this->getIMAP_MailServer(), 'IMAP_Username' => $this->getIMAP_Username(), 'IMAP_Password' => $this->getIMAP_Password()); + $dbl->insert("support_group", Array('Name' => $this->getName(), 'Tag' => $this->getTag(), 'GroupEmail' => $this->getGroupEmail(), 'IMAP_MailServer' => $this->getIMAP_MailServer(), 'IMAP_Username' => $this->getIMAP_Username(), 'IMAP_Password' => $this->getIMAP_Password())); } @@ -327,7 +327,7 @@ class Support_Group{ */ public function update(){ $dbl = new DBLayer("lib"); - $dbl->update("`support_group`", Array('Name' => $this->getName(), 'Tag' => $this->getTag(), 'GroupEmail' => $this->getGroupEmail(), 'IMAP_MailServer' => $this->getIMAP_MailServer(), 'IMAP_Username' => $this->getIMAP_Username(), 'IMAP_password' => $this->getIMAP_Password(), "`SGroupId` = $this->getSGroupId()"); + $dbl->update("`support_group`", Array('Name' => $this->getName(), 'Tag' => $this->getTag(), 'GroupEmail' => $this->getGroupEmail(), 'IMAP_MailServer' => $this->getIMAP_MailServer(), 'IMAP_Username' => $this->getIMAP_Username(), 'IMAP_password' => $this->getIMAP_Password(), "`SGroupId` = $this->getSGroupId()")); } @@ -337,7 +337,7 @@ class Support_Group{ */ public function delete(){ $dbl = new DBLayer("lib"); - $dbl->delete("`support_group`", Array('id' => $this->getSGroupId(), "`SGroupId` = :id"); + $dbl->delete("`support_group`", Array('id' => $this->getSGroupId(), "`SGroupId` = :id")); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// From f8a92326edc0b3a4c885523c8c2929db367a0511 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 14 Aug 2014 22:20:05 +0530 Subject: [PATCH 33/51] BugFixes: achievements and API key management plugins --HG-- branch : Gsoc14-ryzomAppImprovements --- .../API_key_management/API_key_management.php | 47 +++--- .../API_key_management/templates/index.tpl | 2 +- .../plugins/Achievements/Achievements.php | 146 ++++++++++++------ .../plugins/Achievements/templates/index.tpl | 8 +- .../ryzom_ams/www/html/installer/libsetup.php | 2 +- 5 files changed, 134 insertions(+), 71 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php index 1676f243a..27613e18b 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php @@ -11,11 +11,13 @@ * @author shubham meena mentored by Matthew Lagoe */ - -// Global variables to store the data +// Global variable to store the data which is +// returned to the templates $return_set = array(); -$var_set = array(); +// Local variable to store data during +// functionalities of the hooks +$var_set = array(); /** * Display hook for api key management @@ -28,7 +30,7 @@ function api_key_management_hook_display() } /** - * Hook to validate the posted data + * Local Hook to validate the posted data */ function hook_validate( $var ) { @@ -70,9 +72,9 @@ function hook_variables() /** * Global Hook to create table of the API_key_management - * if not created.Contains the sql code + * if not created. + * Contains the sql code */ - function api_key_management_hook_create_tb() { $dbl = new DBLayer( "lib" ); @@ -157,18 +159,25 @@ function api_key_management_hook_load_db() $db = new DBLayer( 'lib' ); - // returns the regestered keys - $sth = $db -> select( 'ams_api_keys', array( 'user' => $_SESSION['user'] ), 'User = :user' ); - $row = $sth -> fetchAll(); - $return_set['api_keys'] = $row; - - // returns the characters with respect to the user id in the ring_tool->characters - $db = new DBLayer( 'ring' ); - $sth = $db -> selectWithParameter( 'char_name', 'characters' , array(), '1' ); - $row = $sth -> fetchAll(); - $return_set['characters'] = $row; - - } + if ( isset( $_SESSION['user'] ) ) + { + // returns the registered keys + $sth = $db -> select( 'ams_api_keys', array( 'user' => $_SESSION['user'] ), 'User = :user' ); + $row = $sth -> fetchAll(); + $return_set['api_keys'] = $row; + + // fetch the character from the array to compare + $com = array_column( $return_set['api_keys'], 'UserCharacter' ); + + // returns the characters with respect to the user id in the ring_tool->characters + $db = new DBLayer( 'ring' ); + $sth = $db -> selectWithParameter( 'char_name', 'characters' , array(), '1' ); + $row = $sth -> fetch(); + + // loop through the character list and remove the character if already have an api key + $return_set['characters'] = array_diff( $row, $com ); + } + } /** * Global Hook to update or delete the data from db @@ -189,7 +198,6 @@ function api_key_management_hook_update_db() header( "Location: index.php?page=layout_plugin&&name=API_key_management&&success=2" ); exit; } - } /** @@ -202,5 +210,4 @@ function api_key_management_hook_return_global() { global $return_set; return $return_set; - } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl index eac902aae..1f6fea336 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl @@ -48,7 +48,7 @@
    diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php index 943981680..79c117893 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php @@ -15,10 +15,13 @@ */ -// Global variables to store the data +// Global variable to store the data which is +// returned to the templates $return_set = array(); -$var_set = array(); +// Local variable to store data during +// functionalities of the hooks +$var_set = array(); /** * Display hook for Achievements plugin @@ -28,26 +31,64 @@ function achievements_hook_display() global $return_set; // to display plugin name in menu bar $return_set['menu_display'] = 'Achievements'; - } + } /** * Local Hook to get database content * which is called by the global hook * by passing a parameter * + * This hook returns the api keys registerd with + * the logged in user + * * @param $data array with respective information * @return $row extracted db content wrt $data */ function hook_get_db_content( $data ) { - $db = new DBLayer( 'lib' ); - $sth = $db -> select( 'ams_api_keys', $data , 'User = :User AND UserCharacter = :UserCharacter' ); $row = $sth -> fetchAll(); - return $row; - + } + +/** + * Local Hook to get database content + * which is called by the global hook + * by passing a parameter + * + * This hook returns the id of the character + * whose achivements we have to get + * + * @param $data array with respective information + * @return $row extracted db content wrt $data + */ +function hook_get_char_id( $data ) + { + // returns the character id with respect to the character name in the ring_tool->characters + $db = new DBLayer( 'ring' ); + $sth = $db -> selectWithParameter( 'char_id', 'characters' , array( 'char_name' => $data ), 'char_name=:char_name' ); + $row = $sth -> fetch(); + return $row['char_id']; + } + +/** + * Local Hook to get database content + * which is called by the global hook + * by passing a parameter + * + * Hook to get the player stats of the character + * + * @param $data array with respective information + * @return $row extracted db content wrt $data + */ +function hook_get_player_stat( $data ) + { + // returns the character id with respect to the character name in the ring_tool->characters + $db = new DBLayer( 'webig' ); + $sth = $db -> select( 'players' , array( 'name' => $data ), 'name=:name' ); + $row = $sth -> fetch(); + return $row; } /** @@ -56,27 +97,44 @@ function hook_get_db_content( $data ) */ function hook_variable_set() { - global $var_set; - $var_set['character'] = $_POST['Character']; - - // get db content for variable set - $row = hook_get_db_content( array( 'User' => $_SESSION['user'], 'UserCharacter' => $var_set['character'] ) ); - - // access key automatically taken from the database wrt user and character - @$var_set['app_key'] = $row['AccessToken']; - - // here you can set the host where this plugin is set - $var_set['host'] = 'localhost'; - - // here you can set what you are looking for - // when you are requesting encoded in json - @$var_set['items'] = json_encode( array( 'Task' => 'Achievements', 'Character' => $var_set['character'] ) ); - - // url where we have to make request for achievements - // it sends get parameter search(what to search) and format(in which format data exchange takes place) - $var_set['url'] = 'app.domain.org?search=' . $var_set['items'] . '&&format=json'; - - } + global $return_set; + global $var_set; + if ( isset( $_POST['Character'] ) && !empty( $_POST['Character'] ) ) + { + $var_set['character'] = $_POST['Character']; + + // get char id from ring_open table + if ( $var_set['character'] != 'All Characters' ) + { + $var_set['char_id'] = hook_get_char_id( $var_set['character'] ); + + } + + // get db content for variable set + $row = hook_get_db_content( array( 'User' => $_SESSION['user'], 'UserCharacter' => $var_set['character'] ) ); + + // access key automatically taken from the database wrt user and character + @$var_set['app_key'] = $row['AccessToken']; + + // here you can set the host where this plugin is set + $var_set['host'] = 'localhost'; + + // here we get the stats of the character + $ref_set = hook_get_player_stat( $var_set['character'] ); + + // here we have set items that are required to get the achivements + // these are player stats from webig->players table + @$var_set['items'] = json_encode( array( 'dev_shard' => $ref_set['dev_shard'] , 'name' => $ref_set['name'] , 'cid' => $ref_set['cid'] , 'lang' => 'en' , 'translater_mode' => '', 'last_played_date' => $ref_set['last_login'] ) ); + + // url where we have to make request for achievements + // it sends get parameter search(what to search) and format(in which format data exchange takes place) + $var_set['url'] = 'http://localhost6/?search=achievements&&format=json'; + } + else + { + $return_set['no_char'] = "Please Generate key for a character before requesting for achievements"; + } + } /** * Global Hook to interact with the REST api @@ -99,12 +157,11 @@ function achievements_hook_call_rest() if ( isset( $_POST['get_data'] ) ) { hook_variable_set(); - - $rest_api = new Rest_Api(); - $ach_data = $rest_api -> request( $var_set['url'], $var_set['app_key'], $var_set['host'] ); - print_r( $ach_data ); - - $return_set['char_achievements'] = json_decode( $ach_data ); + // here we make the REST connection + $rest_api = new Rest_Api(); + $ach_data = $rest_api -> request( $var_set['url'], $var_set['app_key'], $var_set['host'], $var_set['items'] ); + // here we store the response we get from the server + $return_set['char_achievements'] = $ach_data ; } } @@ -119,14 +176,16 @@ function achievements_hook_get_db() { global $return_set; - $db = new DBLayer( 'lib' ); - - // getting content for selecting characters - $sth = $db -> selectWithParameter( 'UserCharacter', 'ams_api_keys', array( 'User' => $_SESSION['user'] ) , 'User = :User' ); - $row = $sth -> fetchAll(); - $retur_set['Character'] = $row; - - } + if ( isset( $_SESSION['user'] ) ) + { + $db = new DBLayer( 'lib' ); + + // getting content for selecting characters + $sth = $db -> selectWithParameter( 'UserCharacter', 'ams_api_keys', array( 'User' => $_SESSION['user'] ) , 'User = :User' ); + $row = $sth -> fetch(); + $return_set['Character'] = $row; + } + } /** * Global Hook to return global variables which contains @@ -138,5 +197,4 @@ function achievements_hook_return_global() { global $return_set; return $return_set; - - } + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl index a83acd359..e33ac3590 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl @@ -11,10 +11,8 @@
    - - {if isset($smarty.get.success) and $smarty.get.success eq '1'}

    Key added successfully

    {/if} - {if isset($smarty.get.success) and $smarty.get.success eq '2'}

    Key deleted successfully

    {/if}
    + {if isset($hook_info.Achievements.no_char)}

    {$hook_info.Achievements.no_char}

    {/if}
    {$hook_info.Achievements.char_achievements}
    @@ -49,8 +47,8 @@
    diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index c93310c55..6fb5981d3 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -198,7 +198,7 @@ INSERT INTO `plugins` (`Id`, `FileName`, `Name`, `Type`, `Owner`, `Permission`, `Status`, `Weight`, `Info`) VALUES (1, '../../ams_lib/plugins/API_key_management', 'API_key_management', 'automatic', '', 'admin', 1, 0, '{\"PluginName\":\"API Key Management\",\"Description\":\"Provides public access to the API''s by generating access tokens.\",\"Version\":\"1.0.0\",\"Type\":\"automatic\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/API_key_management\\/templates\\/index.tpl\",\"\":null}'), -(2, '../../ams_lib/plugins/Achievements', 'Achievements', 'Manual', '', 'admin', 1, 0, '{\"PluginName\":\"Achievements\",\"Description\":\"Returns the achivements of a user with respect to the character =.\",\"Version\":\"1.0.0\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/Achievements\\/templates\\/index.tpl\",\"Type\":\"Manual\",\"\":null}'); +(2, '../../ams_lib/plugins/Achievements', 'Achievements', 'Manual', '', 'admin', 0, 0, '{\"PluginName\":\"Achievements\",\"Description\":\"Returns the achivements of a user with respect to the character =.\",\"Version\":\"1.0.0\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/Achievements\\/templates\\/index.tpl\",\"Type\":\"Manual\",\"\":null}'); -- ----------------------------------------------------- From 750ded21bd66ed56e6baabe3f8cd88d5936732b9 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 14 Aug 2014 22:25:16 +0530 Subject: [PATCH 34/51] added option for posting data in REST api --HG-- branch : Gsoc14-ryzomAppImprovements --- .../server/ryzom_ams/ams_lib/autoload/rest_api.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php index 91607292c..74281c6f6 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/rest_api.php @@ -20,7 +20,7 @@ class Rest_Api { * @param $host host for the website * @return URL response. */ - public function request( $url , $applicationKey, $host ) + public function request( $url , $applicationKey, $host , $data ) { // Check the referer is the host website $referer = $_SERVER['HTTP_REFERER']; @@ -36,10 +36,13 @@ class Rest_Api { // Set the HTTP request authentication headers $headers = array( 'AppKey: ' . $applicationKey, - 'Timestamp: ' . date( 'Ymd H:i:s', time() ) + 'Timestamp: ' . date( 'Ymd H:i:s', time() ), + 'Accept: application/json', + 'Content-Type: application/json' ); curl_setopt( $session, CURLOPT_HTTPHEADER, $headers ); - + curl_setopt( $session, CURLOPT_CUSTOMREQUEST, "POST" ); + curl_setopt( $session, CURLOPT_POSTFIELDS, $data ); // Execute cURL on the session handle $response = curl_exec( $session ); @@ -66,4 +69,4 @@ class Rest_Api { return null; } } - } + } From a01e331639f7b5bde20ccaa61b2e7d274bd1ee37 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Fri, 15 Aug 2014 00:13:00 +0530 Subject: [PATCH 35/51] bug fix in plugin installation --HG-- branch : Gsoc14-ryzomAppImprovements --- .../tools/server/ryzom_ams/www/html/func/install_plugin.php | 6 +++--- .../tools/server/ryzom_ams/www/html/installer/libsetup.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php index 1ea950d38..052d4f14b 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php @@ -220,7 +220,7 @@ function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath ) // check for the version for the plugin $db = new DBLayer( "lib" ); - $sth = $db -> select( "plugins", array( ':name' => $result['PluginName'] ), "Name = :name" ); + $sth = $db -> select( "plugins", array( 'Name' => $result['PluginName'] ), "Name = :Name" ); $info = $sth -> fetch(); $info['Info'] = json_decode( $info['Info'] ); @@ -237,11 +237,11 @@ function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath ) // then there MUST be an increment in the Y value. // When there is increment in the X value , Y and Z MUST be 0. // comparing if there is some change - if ( !array_intersect( $new_version , $pre_version ) ) + if ( !array_diff( $new_version , $pre_version ) ) { // removing the uploaded file Plugincache :: rrmdir( $tempPath . "/test/" . $fileName ); - return '2'; + return '2'; //plugin already exists } else { diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index 6fb5981d3..77a5269f7 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -186,7 +186,7 @@ CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ( `Id` INT(10) NOT NULL AUTO_INCREMENT, `FileName` VARCHAR(255) NOT NULL, - `Name` VARCHAR(11) NOT NULL, + `Name` VARCHAR(56) NOT NULL, `Type` VARCHAR(12) NOT NULL, `Owner` VARCHAR(25) NOT NULL, `Permission` VARCHAR(5) NOT NULL, From ee6db8ef7f67fb9935f9554953d428e3ba72ee0a Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Fri, 15 Aug 2014 00:24:31 +0530 Subject: [PATCH 36/51] code modified to accept request through Rest and sending achievments in response --HG-- branch : Gsoc14-ryzomAppImprovements --- code/web/app/app_achievements/index.php | 230 ++++++++++++++---------- 1 file changed, 139 insertions(+), 91 deletions(-) diff --git a/code/web/app/app_achievements/index.php b/code/web/app/app_achievements/index.php index 90ce612bb..9db5b991f 100644 --- a/code/web/app/app_achievements/index.php +++ b/code/web/app/app_achievements/index.php @@ -1,110 +1,158 @@ isIG()) { - require_once("include/ach_render_ig.php"); -} -else { - require_once("include/ach_render_web.php"); -} -require_once("include/ach_render_common.php"); - -require_once("class/DLL_class.php"); -#require_once("class/InDev_trait.php"); -require_once("class/Node_abstract.php"); -require_once("class/AVLTree_class.php"); -require_once("class/Parentum_abstract.php"); -require_once("class/AchList_abstract.php"); -require_once("class/Tieable_inter.php"); -require_once("class/NodeIterator_class.php"); - - -require_once("class/AchMenu_class.php"); -require_once("class/AchMenuNode_class.php"); -require_once("class/AchSummary_class.php"); -require_once("class/AchCategory_class.php"); -require_once("class/AchAchievement_class.php"); -require_once("class/AchTask_class.php"); -require_once("class/AchObjective_class.php"); - -#require_once("fb/facebook.php"); // Update user acces on Db -#$DBc = ryDB::getInstance(APP_NAME."_test"); -$DBc = ryDB::getInstance(APP_NAME); +// $DBc = ryDB::getInstance(APP_NAME."_test"); +$DBc = ryDB :: getInstance( APP_NAME ); + + +// if getting request using REST +if ( isset( $_GET['search'] ) && isset( $_GET['format'] ) ) + { + // if the format is json + if ( $_GET['format'] == 'json' ) + { + // getting the headers when the request is sent + $header = getallheaders(); + + // this block is to get the posted data + $fp = fopen( 'php://input', 'r' ); + $rawData = stream_get_contents( $fp ); + $userd = json_decode( $rawData, true ); + + // authenticate the user using data we get from server + appAuthenticateRest( $user, $userd ); + + // create a ryzom user object whose achievements we have to send in response + $_USER = new RyzomUser( $user ); + + require_once( "include/ach_render_web.php" ); + $c .= ach_render(); + $response = $c; + // sending the response + echo( $response ); + exit; + + } + } +else + { + echo 'Invalid response'; + exit; + } + + + + +// Ask to authenticate user (using ingame or session method) and fill $user with all information +ryzom_app_authenticate( $user, true ); + + +// echo var_export($user,true); +// $user['id'] = $user['char_id']; +// $user['name'] = $user['char_name']; +/** + * $user = array(); + * $user['cid'] = 1; + * $user['lang'] = 'en'; + * $user['name'] = 'Talvela'; + * $user['race'] = "r_matis"; + * $user['civilization'] = "c_neutral"; + * $user['cult'] = "c_neutral"; + * $user['ig'] = ($_REQUEST['ig']==1); + * #$user['ig'] = true; + */ + +$_USER = new RyzomUser( $user ); + + +if ( $_USER -> isIG() ) { + require_once( "include/ach_render_ig.php" ); + } +else { + require_once( "include/ach_render_web.php" ); + } + +// require_once("fb/facebook.php"); $c = ""; -if(!$_USER->isIG()) { - /*$facebook = new Facebook(array( - 'appId' => $_CONF['fb_id'], - 'secret' => $_CONF['fb_secret'], - 'cookie' => true - )); - - #code taken from facebook tutorial - - // Get the url to redirect for login to facebook - // and request permission to write on the user's wall. - $login_url = $facebook->getLoginUrl( - array('scope' => 'publish_stream') - ); - - // If not authenticated, redirect to the facebook login dialog. - // The $login_url will take care of redirecting back to us - // after successful login. - if (! $facebook->getUser()) { - $c .= ';'; - } - else { - $DBc->sqlQuery("INSERT INTO ach_fb_token (aft_player,aft_token,aft_date,aft_allow) VALUES ('".$_USER->getID()."','".$DBc->sqlEscape($facebook->getAccessToken())."','".time()."','1') ON DUPLICATE KEY UPDATE aft_token='".$DBc->sqlEscape($facebook->getAccessToken())."', aft_date='".time()."'"); - }*/ - - -} - -if(!$_USER->isIG && $_CONF['enable_webig'] == false) { - $c .= ach_render_forbidden(false); -} -elseif($_USER->isIG && $_CONF['enable_offgame'] == false) { - $c .= ach_render_forbidden(true); -} +if ( !$_USER -> isIG() ) { + /** + * $facebook = new Facebook(array( + * 'appId' => $_CONF['fb_id'], + * 'secret' => $_CONF['fb_secret'], + * 'cookie' => true + * )); + * + * #code taken from facebook tutorial + * + * // Get the url to redirect for login to facebook + * // and request permission to write on the user's wall. + * $login_url = $facebook->getLoginUrl( + * array('scope' => 'publish_stream') + * ); + * + * // If not authenticated, redirect to the facebook login dialog. + * // The $login_url will take care of redirecting back to us + * // after successful login. + * if (! $facebook->getUser()) { + * $c .= ';'; + * } + * else { + * $DBc->sqlQuery("INSERT INTO ach_fb_token (aft_player,aft_token,aft_date,aft_allow) VALUES ('".$_USER->getID()."','".$DBc->sqlEscape($facebook->getAccessToken())."','".time()."','1') ON DUPLICATE KEY UPDATE aft_token='".$DBc->sqlEscape($facebook->getAccessToken())."', aft_date='".time()."'"); + * } + */ + + + } + +if ( !$_USER -> isIG && $_CONF['enable_webig'] == false ) { + $c .= ach_render_forbidden( false ); + + } +elseif ( $_USER -> isIG && $_CONF['enable_offgame'] == false ) { + $c .= ach_render_forbidden( true ); + + } else { - $c .= ach_render(); -} + $c .= ach_render(); + } -echo ryzom_app_render(strtoupper(get_translation('ach_app_name',$_USER->getLang())), $c, $_USER->isIG()); +echo ryzom_app_render( strtoupper( get_translation( 'ach_app_name', $_USER -> getLang() ) ), $c, $_USER -> isIG() ); ?> From 4b871c43f5d42aa8d9af4c4be5610b956c5b9622 Mon Sep 17 00:00:00 2001 From: botanic Date: Fri, 15 Aug 2014 03:49:39 -0700 Subject: [PATCH 37/51] updated doxygen --- code/web/docs/ams/doxygen/Doxyfile | 18 +- code/web/docs/ams/html/add__sgroup_8php.html | 138 -- code/web/docs/ams/html/add__user_8php.html | 156 -- .../ams/html/add__user__to__sgroup_8php.html | 138 -- code/web/docs/ams/html/annotated.html | 136 -- code/web/docs/ams/html/assigned_8php.html | 117 -- code/web/docs/ams/html/bc_s.png | Bin 677 -> 0 bytes code/web/docs/ams/html/change__info_8php.html | 138 -- code/web/docs/ams/html/change__mail_8php.html | 138 -- .../docs/ams/html/change__password_8php.html | 138 -- .../ams/html/change__permission_8php.html | 138 -- .../ams/html/change__receivemail_8php.html | 138 -- code/web/docs/ams/html/classAssigned.html | 529 ------ code/web/docs/ams/html/classDBLayer.html | 284 ---- code/web/docs/ams/html/classForwarded.html | 478 ------ .../web/docs/ams/html/classGui__Elements.html | 250 --- code/web/docs/ams/html/classHelpers.html | 292 ---- .../ams/html/classIn__Support__Group.html | 393 ----- .../web/docs/ams/html/classMail__Handler.html | 524 ------ code/web/docs/ams/html/classMyCrypt.html | 327 ---- code/web/docs/ams/html/classPagination.html | 368 ---- code/web/docs/ams/html/classQuerycache.html | 485 ------ .../docs/ams/html/classSupport__Group.html | 1082 ------------ code/web/docs/ams/html/classSync.html | 149 -- code/web/docs/ams/html/classTicket.html | 1429 ---------------- .../docs/ams/html/classTicket__Category.html | 402 ----- .../docs/ams/html/classTicket__Content.html | 382 ----- code/web/docs/ams/html/classTicket__Info.html | 1463 ---------------- code/web/docs/ams/html/classTicket__Log.html | 763 --------- .../web/docs/ams/html/classTicket__Queue.html | 401 ----- .../ams/html/classTicket__Queue__Handler.html | 395 ----- .../web/docs/ams/html/classTicket__Reply.html | 764 --------- code/web/docs/ams/html/classTicket__User.html | 745 -------- code/web/docs/ams/html/classUsers.html | 641 ------- code/web/docs/ams/html/classUsers.png | Bin 423 -> 0 bytes code/web/docs/ams/html/classWebUsers.html | 1509 ----------------- code/web/docs/ams/html/classWebUsers.png | Bin 428 -> 0 bytes code/web/docs/ams/html/classes.html | 141 -- code/web/docs/ams/html/closed.png | Bin 126 -> 0 bytes .../docs/ams/html/create__ticket_8php.html | 138 -- code/web/docs/ams/html/createticket_8php.html | 138 -- code/web/docs/ams/html/dashboard_8php.html | 138 -- code/web/docs/ams/html/db.png | Bin 205565 -> 0 bytes code/web/docs/ams/html/dblayer_8php.html | 117 -- code/web/docs/ams/html/deprecated.html | 107 -- code/web/docs/ams/html/design.html | 216 --- code/web/docs/ams/html/doxygen.css | 949 ----------- code/web/docs/ams/html/doxygen.png | Bin 3942 -> 0 bytes ...2ryzommanage_2autoload_2webusers_8php.html | 117 -- ...pal__module_2ryzommanage_2config_8php.html | 820 --------- ...module_2ryzommanage_2inc_2logout_8php.html | 133 -- ...dule_2ryzommanage_2inc_2settings_8php.html | 150 -- ...le_2ryzommanage_2inc_2show__user_8php.html | 133 -- code/web/docs/ams/html/error_8php.html | 138 -- code/web/docs/ams/html/files.html | 175 -- code/web/docs/ams/html/forwarded_8php.html | 117 -- code/web/docs/ams/html/func_2login_8php.html | 138 -- code/web/docs/ams/html/functions.html | 351 ---- code/web/docs/ams/html/functions_0x5f.html | 159 -- code/web/docs/ams/html/functions_0x61.html | 147 -- code/web/docs/ams/html/functions_0x63.html | 254 --- code/web/docs/ams/html/functions_0x64.html | 158 -- code/web/docs/ams/html/functions_0x65.html | 152 -- code/web/docs/ams/html/functions_0x66.html | 144 -- code/web/docs/ams/html/functions_0x67.html | 461 ----- code/web/docs/ams/html/functions_0x68.html | 149 -- code/web/docs/ams/html/functions_0x69.html | 158 -- code/web/docs/ams/html/functions_0x6c.html | 195 --- code/web/docs/ams/html/functions_0x6d.html | 149 -- code/web/docs/ams/html/functions_0x6e.html | 143 -- code/web/docs/ams/html/functions_0x6f.html | 143 -- code/web/docs/ams/html/functions_0x73.html | 344 ---- code/web/docs/ams/html/functions_0x74.html | 149 -- code/web/docs/ams/html/functions_0x75.html | 163 -- code/web/docs/ams/html/functions_0x76.html | 143 -- code/web/docs/ams/html/functions_func.html | 158 -- .../docs/ams/html/functions_func_0x61.html | 146 -- .../docs/ams/html/functions_func_0x63.html | 253 --- .../docs/ams/html/functions_func_0x64.html | 157 -- .../docs/ams/html/functions_func_0x65.html | 151 -- .../docs/ams/html/functions_func_0x66.html | 143 -- .../docs/ams/html/functions_func_0x67.html | 460 ----- .../docs/ams/html/functions_func_0x68.html | 148 -- .../docs/ams/html/functions_func_0x69.html | 157 -- .../docs/ams/html/functions_func_0x6c.html | 194 --- .../docs/ams/html/functions_func_0x6d.html | 148 -- .../docs/ams/html/functions_func_0x6e.html | 142 -- .../docs/ams/html/functions_func_0x6f.html | 142 -- .../docs/ams/html/functions_func_0x73.html | 343 ---- .../docs/ams/html/functions_func_0x74.html | 148 -- .../docs/ams/html/functions_func_0x75.html | 162 -- .../docs/ams/html/functions_func_0x76.html | 142 -- code/web/docs/ams/html/functions_vars.html | 334 ---- code/web/docs/ams/html/globals.html | 345 ---- code/web/docs/ams/html/globals_func.html | 269 --- code/web/docs/ams/html/globals_vars.html | 192 --- .../web/docs/ams/html/gui__elements_8php.html | 117 -- code/web/docs/ams/html/helpers_8php.html | 117 -- code/web/docs/ams/html/hierarchy.html | 139 -- .../ams/html/in__support__group_8php.html | 117 -- code/web/docs/ams/html/inc_2login_8php.html | 138 -- code/web/docs/ams/html/index.html | 110 -- code/web/docs/ams/html/index_8php.html | 109 -- code/web/docs/ams/html/info.jpg | Bin 464423 -> 0 bytes code/web/docs/ams/html/info_8php.html | 109 -- code/web/docs/ams/html/install_8php.html | 130 -- code/web/docs/ams/html/installdox | 112 -- code/web/docs/ams/html/jquery.js | 64 - code/web/docs/ams/html/libinclude_8php.html | 138 -- code/web/docs/ams/html/logo.png | Bin 19642 -> 0 bytes code/web/docs/ams/html/mail__cron_8php.html | 134 -- .../web/docs/ams/html/mail__handler_8php.html | 117 -- .../html/modify__email__of__sgroup_8php.html | 138 -- code/web/docs/ams/html/mycrypt_8php.html | 117 -- code/web/docs/ams/html/nav_f.png | Bin 159 -> 0 bytes code/web/docs/ams/html/nav_h.png | Bin 97 -> 0 bytes code/web/docs/ams/html/open.png | Bin 118 -> 0 bytes code/web/docs/ams/html/pages.html | 111 -- code/web/docs/ams/html/pagination_8php.html | 117 -- code/web/docs/ams/html/querycache_8php.html | 117 -- code/web/docs/ams/html/register_8php.html | 137 -- .../docs/ams/html/reply__on__ticket_8php.html | 138 -- code/web/docs/ams/html/search/all_24.html | 25 - code/web/docs/ams/html/search/all_24.js | 91 - code/web/docs/ams/html/search/all_5f.html | 25 - code/web/docs/ams/html/search/all_5f.js | 5 - code/web/docs/ams/html/search/all_61.html | 25 - code/web/docs/ams/html/search/all_61.js | 13 - code/web/docs/ams/html/search/all_63.html | 25 - code/web/docs/ams/html/search/all_63.js | 51 - code/web/docs/ams/html/search/all_64.html | 25 - code/web/docs/ams/html/search/all_64.js | 12 - code/web/docs/ams/html/search/all_65.html | 25 - code/web/docs/ams/html/search/all_65.js | 9 - code/web/docs/ams/html/search/all_66.html | 25 - code/web/docs/ams/html/search/all_66.js | 6 - code/web/docs/ams/html/search/all_67.html | 25 - code/web/docs/ams/html/search/all_67.js | 108 -- code/web/docs/ams/html/search/all_68.html | 25 - code/web/docs/ams/html/search/all_68.js | 8 - code/web/docs/ams/html/search/all_69.html | 25 - code/web/docs/ams/html/search/all_69.js | 14 - code/web/docs/ams/html/search/all_6c.html | 25 - code/web/docs/ams/html/search/all_6c.js | 28 - code/web/docs/ams/html/search/all_6d.html | 25 - code/web/docs/ams/html/search/all_6d.js | 13 - code/web/docs/ams/html/search/all_6e.html | 25 - code/web/docs/ams/html/search/all_6e.js | 4 - code/web/docs/ams/html/search/all_6f.html | 25 - code/web/docs/ams/html/search/all_6f.js | 4 - code/web/docs/ams/html/search/all_70.html | 25 - code/web/docs/ams/html/search/all_70.js | 5 - code/web/docs/ams/html/search/all_71.html | 25 - code/web/docs/ams/html/search/all_71.js | 5 - code/web/docs/ams/html/search/all_72.html | 25 - code/web/docs/ams/html/search/all_72.js | 7 - code/web/docs/ams/html/search/all_73.html | 25 - code/web/docs/ams/html/search/all_73.js | 90 - code/web/docs/ams/html/search/all_74.html | 25 - code/web/docs/ams/html/search/all_74.js | 24 - code/web/docs/ams/html/search/all_75.html | 25 - code/web/docs/ams/html/search/all_75.js | 12 - code/web/docs/ams/html/search/all_76.html | 25 - code/web/docs/ams/html/search/all_76.js | 4 - code/web/docs/ams/html/search/all_77.html | 25 - code/web/docs/ams/html/search/all_77.js | 7 - code/web/docs/ams/html/search/classes_61.html | 25 - code/web/docs/ams/html/search/classes_61.js | 4 - code/web/docs/ams/html/search/classes_64.html | 25 - code/web/docs/ams/html/search/classes_64.js | 4 - code/web/docs/ams/html/search/classes_66.html | 25 - code/web/docs/ams/html/search/classes_66.js | 4 - code/web/docs/ams/html/search/classes_67.html | 25 - code/web/docs/ams/html/search/classes_67.js | 4 - code/web/docs/ams/html/search/classes_68.html | 25 - code/web/docs/ams/html/search/classes_68.js | 4 - code/web/docs/ams/html/search/classes_69.html | 25 - code/web/docs/ams/html/search/classes_69.js | 4 - code/web/docs/ams/html/search/classes_6d.html | 25 - code/web/docs/ams/html/search/classes_6d.js | 5 - code/web/docs/ams/html/search/classes_70.html | 25 - code/web/docs/ams/html/search/classes_70.js | 4 - code/web/docs/ams/html/search/classes_71.html | 25 - code/web/docs/ams/html/search/classes_71.js | 4 - code/web/docs/ams/html/search/classes_73.html | 25 - code/web/docs/ams/html/search/classes_73.js | 5 - code/web/docs/ams/html/search/classes_74.html | 25 - code/web/docs/ams/html/search/classes_74.js | 12 - code/web/docs/ams/html/search/classes_75.html | 25 - code/web/docs/ams/html/search/classes_75.js | 4 - code/web/docs/ams/html/search/classes_77.html | 25 - code/web/docs/ams/html/search/classes_77.js | 4 - code/web/docs/ams/html/search/close.png | Bin 273 -> 0 bytes code/web/docs/ams/html/search/files_61.html | 25 - code/web/docs/ams/html/search/files_61.js | 7 - code/web/docs/ams/html/search/files_63.html | 25 - code/web/docs/ams/html/search/files_63.js | 12 - code/web/docs/ams/html/search/files_64.html | 25 - code/web/docs/ams/html/search/files_64.js | 5 - code/web/docs/ams/html/search/files_65.html | 25 - code/web/docs/ams/html/search/files_65.js | 4 - code/web/docs/ams/html/search/files_66.html | 25 - code/web/docs/ams/html/search/files_66.js | 4 - code/web/docs/ams/html/search/files_67.html | 25 - code/web/docs/ams/html/search/files_67.js | 4 - code/web/docs/ams/html/search/files_68.html | 25 - code/web/docs/ams/html/search/files_68.js | 4 - code/web/docs/ams/html/search/files_69.html | 25 - code/web/docs/ams/html/search/files_69.js | 7 - code/web/docs/ams/html/search/files_6c.html | 25 - code/web/docs/ams/html/search/files_6c.js | 8 - code/web/docs/ams/html/search/files_6d.html | 25 - code/web/docs/ams/html/search/files_6d.js | 7 - code/web/docs/ams/html/search/files_70.html | 25 - code/web/docs/ams/html/search/files_70.js | 4 - code/web/docs/ams/html/search/files_71.html | 25 - code/web/docs/ams/html/search/files_71.js | 4 - code/web/docs/ams/html/search/files_72.html | 25 - code/web/docs/ams/html/search/files_72.js | 5 - code/web/docs/ams/html/search/files_73.html | 25 - code/web/docs/ams/html/search/files_73.js | 18 - code/web/docs/ams/html/search/files_74.html | 25 - code/web/docs/ams/html/search/files_74.js | 12 - code/web/docs/ams/html/search/files_75.html | 25 - code/web/docs/ams/html/search/files_75.js | 5 - code/web/docs/ams/html/search/files_77.html | 25 - code/web/docs/ams/html/search/files_77.js | 5 - .../docs/ams/html/search/functions_5f.html | 25 - code/web/docs/ams/html/search/functions_5f.js | 5 - .../docs/ams/html/search/functions_61.html | 25 - code/web/docs/ams/html/search/functions_61.js | 8 - .../docs/ams/html/search/functions_63.html | 25 - code/web/docs/ams/html/search/functions_63.js | 42 - .../docs/ams/html/search/functions_64.html | 25 - code/web/docs/ams/html/search/functions_64.js | 9 - .../docs/ams/html/search/functions_65.html | 25 - code/web/docs/ams/html/search/functions_65.js | 8 - .../docs/ams/html/search/functions_66.html | 25 - code/web/docs/ams/html/search/functions_66.js | 4 - .../docs/ams/html/search/functions_67.html | 25 - code/web/docs/ams/html/search/functions_67.js | 106 -- .../docs/ams/html/search/functions_68.html | 25 - code/web/docs/ams/html/search/functions_68.js | 6 - .../docs/ams/html/search/functions_69.html | 25 - code/web/docs/ams/html/search/functions_69.js | 9 - .../docs/ams/html/search/functions_6c.html | 25 - code/web/docs/ams/html/search/functions_6c.js | 23 - .../docs/ams/html/search/functions_6d.html | 25 - code/web/docs/ams/html/search/functions_6d.js | 7 - .../docs/ams/html/search/functions_6e.html | 25 - code/web/docs/ams/html/search/functions_6e.js | 4 - .../docs/ams/html/search/functions_6f.html | 25 - code/web/docs/ams/html/search/functions_6f.js | 4 - .../docs/ams/html/search/functions_72.html | 25 - code/web/docs/ams/html/search/functions_72.js | 5 - .../docs/ams/html/search/functions_73.html | 25 - code/web/docs/ams/html/search/functions_73.js | 73 - .../docs/ams/html/search/functions_74.html | 25 - code/web/docs/ams/html/search/functions_74.js | 6 - .../docs/ams/html/search/functions_75.html | 25 - code/web/docs/ams/html/search/functions_75.js | 9 - .../docs/ams/html/search/functions_76.html | 25 - code/web/docs/ams/html/search/functions_76.js | 4 - .../docs/ams/html/search/functions_77.html | 25 - code/web/docs/ams/html/search/functions_77.js | 4 - code/web/docs/ams/html/search/mag_sel.png | Bin 563 -> 0 bytes code/web/docs/ams/html/search/nomatches.html | 12 - code/web/docs/ams/html/search/search.css | 238 --- code/web/docs/ams/html/search/search.js | 803 --------- code/web/docs/ams/html/search/search_l.png | Bin 604 -> 0 bytes code/web/docs/ams/html/search/search_m.png | Bin 158 -> 0 bytes code/web/docs/ams/html/search/search_r.png | Bin 612 -> 0 bytes .../docs/ams/html/search/variables_24.html | 25 - code/web/docs/ams/html/search/variables_24.js | 91 - code/web/docs/ams/html/sgroup__list_8php.html | 138 -- code/web/docs/ams/html/show__queue_8php.html | 138 -- code/web/docs/ams/html/show__reply_8php.html | 138 -- code/web/docs/ams/html/show__sgroup_8php.html | 138 -- code/web/docs/ams/html/show__ticket_8php.html | 138 -- .../ams/html/show__ticket__info_8php.html | 138 -- .../docs/ams/html/show__ticket__log_8php.html | 138 -- .../docs/ams/html/support__group_8php.html | 117 -- code/web/docs/ams/html/sync_8php.html | 117 -- code/web/docs/ams/html/sync__cron_8php.html | 109 -- code/web/docs/ams/html/syncing_8php.html | 138 -- code/web/docs/ams/html/tab_a.png | Bin 140 -> 0 bytes code/web/docs/ams/html/tab_b.png | Bin 178 -> 0 bytes code/web/docs/ams/html/tab_h.png | Bin 192 -> 0 bytes code/web/docs/ams/html/tab_s.png | Bin 189 -> 0 bytes code/web/docs/ams/html/tabs.css | 59 - code/web/docs/ams/html/ticket_8php.html | 117 -- .../docs/ams/html/ticket__category_8php.html | 117 -- .../docs/ams/html/ticket__content_8php.html | 117 -- code/web/docs/ams/html/ticket__info_8php.html | 117 -- code/web/docs/ams/html/ticket__log_8php.html | 117 -- .../web/docs/ams/html/ticket__queue_8php.html | 117 -- .../ams/html/ticket__queue__handler_8php.html | 117 -- .../web/docs/ams/html/ticket__reply_8php.html | 117 -- code/web/docs/ams/html/ticket__user_8php.html | 117 -- code/web/docs/ams/html/todo.html | 115 -- code/web/docs/ams/html/userlist_8php.html | 138 -- code/web/docs/ams/html/users_8php.html | 117 -- code/web/docs/ams/html/www_2config_8php.html | 820 --------- .../www_2html_2autoload_2webusers_8php.html | 117 -- .../ams/html/www_2html_2inc_2logout_8php.html | 138 -- .../html/www_2html_2inc_2settings_8php.html | 155 -- .../html/www_2html_2inc_2show__user_8php.html | 138 -- 307 files changed, 7 insertions(+), 38002 deletions(-) delete mode 100644 code/web/docs/ams/html/add__sgroup_8php.html delete mode 100644 code/web/docs/ams/html/add__user_8php.html delete mode 100644 code/web/docs/ams/html/add__user__to__sgroup_8php.html delete mode 100644 code/web/docs/ams/html/annotated.html delete mode 100644 code/web/docs/ams/html/assigned_8php.html delete mode 100644 code/web/docs/ams/html/bc_s.png delete mode 100644 code/web/docs/ams/html/change__info_8php.html delete mode 100644 code/web/docs/ams/html/change__mail_8php.html delete mode 100644 code/web/docs/ams/html/change__password_8php.html delete mode 100644 code/web/docs/ams/html/change__permission_8php.html delete mode 100644 code/web/docs/ams/html/change__receivemail_8php.html delete mode 100644 code/web/docs/ams/html/classAssigned.html delete mode 100644 code/web/docs/ams/html/classDBLayer.html delete mode 100644 code/web/docs/ams/html/classForwarded.html delete mode 100644 code/web/docs/ams/html/classGui__Elements.html delete mode 100644 code/web/docs/ams/html/classHelpers.html delete mode 100644 code/web/docs/ams/html/classIn__Support__Group.html delete mode 100644 code/web/docs/ams/html/classMail__Handler.html delete mode 100644 code/web/docs/ams/html/classMyCrypt.html delete mode 100644 code/web/docs/ams/html/classPagination.html delete mode 100644 code/web/docs/ams/html/classQuerycache.html delete mode 100644 code/web/docs/ams/html/classSupport__Group.html delete mode 100644 code/web/docs/ams/html/classSync.html delete mode 100644 code/web/docs/ams/html/classTicket.html delete mode 100644 code/web/docs/ams/html/classTicket__Category.html delete mode 100644 code/web/docs/ams/html/classTicket__Content.html delete mode 100644 code/web/docs/ams/html/classTicket__Info.html delete mode 100644 code/web/docs/ams/html/classTicket__Log.html delete mode 100644 code/web/docs/ams/html/classTicket__Queue.html delete mode 100644 code/web/docs/ams/html/classTicket__Queue__Handler.html delete mode 100644 code/web/docs/ams/html/classTicket__Reply.html delete mode 100644 code/web/docs/ams/html/classTicket__User.html delete mode 100644 code/web/docs/ams/html/classUsers.html delete mode 100644 code/web/docs/ams/html/classUsers.png delete mode 100644 code/web/docs/ams/html/classWebUsers.html delete mode 100644 code/web/docs/ams/html/classWebUsers.png delete mode 100644 code/web/docs/ams/html/classes.html delete mode 100644 code/web/docs/ams/html/closed.png delete mode 100644 code/web/docs/ams/html/create__ticket_8php.html delete mode 100644 code/web/docs/ams/html/createticket_8php.html delete mode 100644 code/web/docs/ams/html/dashboard_8php.html delete mode 100644 code/web/docs/ams/html/db.png delete mode 100644 code/web/docs/ams/html/dblayer_8php.html delete mode 100644 code/web/docs/ams/html/deprecated.html delete mode 100644 code/web/docs/ams/html/design.html delete mode 100644 code/web/docs/ams/html/doxygen.css delete mode 100644 code/web/docs/ams/html/doxygen.png delete mode 100644 code/web/docs/ams/html/drupal__module_2ryzommanage_2autoload_2webusers_8php.html delete mode 100644 code/web/docs/ams/html/drupal__module_2ryzommanage_2config_8php.html delete mode 100644 code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2logout_8php.html delete mode 100644 code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2settings_8php.html delete mode 100644 code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2show__user_8php.html delete mode 100644 code/web/docs/ams/html/error_8php.html delete mode 100644 code/web/docs/ams/html/files.html delete mode 100644 code/web/docs/ams/html/forwarded_8php.html delete mode 100644 code/web/docs/ams/html/func_2login_8php.html delete mode 100644 code/web/docs/ams/html/functions.html delete mode 100644 code/web/docs/ams/html/functions_0x5f.html delete mode 100644 code/web/docs/ams/html/functions_0x61.html delete mode 100644 code/web/docs/ams/html/functions_0x63.html delete mode 100644 code/web/docs/ams/html/functions_0x64.html delete mode 100644 code/web/docs/ams/html/functions_0x65.html delete mode 100644 code/web/docs/ams/html/functions_0x66.html delete mode 100644 code/web/docs/ams/html/functions_0x67.html delete mode 100644 code/web/docs/ams/html/functions_0x68.html delete mode 100644 code/web/docs/ams/html/functions_0x69.html delete mode 100644 code/web/docs/ams/html/functions_0x6c.html delete mode 100644 code/web/docs/ams/html/functions_0x6d.html delete mode 100644 code/web/docs/ams/html/functions_0x6e.html delete mode 100644 code/web/docs/ams/html/functions_0x6f.html delete mode 100644 code/web/docs/ams/html/functions_0x73.html delete mode 100644 code/web/docs/ams/html/functions_0x74.html delete mode 100644 code/web/docs/ams/html/functions_0x75.html delete mode 100644 code/web/docs/ams/html/functions_0x76.html delete mode 100644 code/web/docs/ams/html/functions_func.html delete mode 100644 code/web/docs/ams/html/functions_func_0x61.html delete mode 100644 code/web/docs/ams/html/functions_func_0x63.html delete mode 100644 code/web/docs/ams/html/functions_func_0x64.html delete mode 100644 code/web/docs/ams/html/functions_func_0x65.html delete mode 100644 code/web/docs/ams/html/functions_func_0x66.html delete mode 100644 code/web/docs/ams/html/functions_func_0x67.html delete mode 100644 code/web/docs/ams/html/functions_func_0x68.html delete mode 100644 code/web/docs/ams/html/functions_func_0x69.html delete mode 100644 code/web/docs/ams/html/functions_func_0x6c.html delete mode 100644 code/web/docs/ams/html/functions_func_0x6d.html delete mode 100644 code/web/docs/ams/html/functions_func_0x6e.html delete mode 100644 code/web/docs/ams/html/functions_func_0x6f.html delete mode 100644 code/web/docs/ams/html/functions_func_0x73.html delete mode 100644 code/web/docs/ams/html/functions_func_0x74.html delete mode 100644 code/web/docs/ams/html/functions_func_0x75.html delete mode 100644 code/web/docs/ams/html/functions_func_0x76.html delete mode 100644 code/web/docs/ams/html/functions_vars.html delete mode 100644 code/web/docs/ams/html/globals.html delete mode 100644 code/web/docs/ams/html/globals_func.html delete mode 100644 code/web/docs/ams/html/globals_vars.html delete mode 100644 code/web/docs/ams/html/gui__elements_8php.html delete mode 100644 code/web/docs/ams/html/helpers_8php.html delete mode 100644 code/web/docs/ams/html/hierarchy.html delete mode 100644 code/web/docs/ams/html/in__support__group_8php.html delete mode 100644 code/web/docs/ams/html/inc_2login_8php.html delete mode 100644 code/web/docs/ams/html/index.html delete mode 100644 code/web/docs/ams/html/index_8php.html delete mode 100644 code/web/docs/ams/html/info.jpg delete mode 100644 code/web/docs/ams/html/info_8php.html delete mode 100644 code/web/docs/ams/html/install_8php.html delete mode 100644 code/web/docs/ams/html/installdox delete mode 100644 code/web/docs/ams/html/jquery.js delete mode 100644 code/web/docs/ams/html/libinclude_8php.html delete mode 100644 code/web/docs/ams/html/logo.png delete mode 100644 code/web/docs/ams/html/mail__cron_8php.html delete mode 100644 code/web/docs/ams/html/mail__handler_8php.html delete mode 100644 code/web/docs/ams/html/modify__email__of__sgroup_8php.html delete mode 100644 code/web/docs/ams/html/mycrypt_8php.html delete mode 100644 code/web/docs/ams/html/nav_f.png delete mode 100644 code/web/docs/ams/html/nav_h.png delete mode 100644 code/web/docs/ams/html/open.png delete mode 100644 code/web/docs/ams/html/pages.html delete mode 100644 code/web/docs/ams/html/pagination_8php.html delete mode 100644 code/web/docs/ams/html/querycache_8php.html delete mode 100644 code/web/docs/ams/html/register_8php.html delete mode 100644 code/web/docs/ams/html/reply__on__ticket_8php.html delete mode 100644 code/web/docs/ams/html/search/all_24.html delete mode 100644 code/web/docs/ams/html/search/all_24.js delete mode 100644 code/web/docs/ams/html/search/all_5f.html delete mode 100644 code/web/docs/ams/html/search/all_5f.js delete mode 100644 code/web/docs/ams/html/search/all_61.html delete mode 100644 code/web/docs/ams/html/search/all_61.js delete mode 100644 code/web/docs/ams/html/search/all_63.html delete mode 100644 code/web/docs/ams/html/search/all_63.js delete mode 100644 code/web/docs/ams/html/search/all_64.html delete mode 100644 code/web/docs/ams/html/search/all_64.js delete mode 100644 code/web/docs/ams/html/search/all_65.html delete mode 100644 code/web/docs/ams/html/search/all_65.js delete mode 100644 code/web/docs/ams/html/search/all_66.html delete mode 100644 code/web/docs/ams/html/search/all_66.js delete mode 100644 code/web/docs/ams/html/search/all_67.html delete mode 100644 code/web/docs/ams/html/search/all_67.js delete mode 100644 code/web/docs/ams/html/search/all_68.html delete mode 100644 code/web/docs/ams/html/search/all_68.js delete mode 100644 code/web/docs/ams/html/search/all_69.html delete mode 100644 code/web/docs/ams/html/search/all_69.js delete mode 100644 code/web/docs/ams/html/search/all_6c.html delete mode 100644 code/web/docs/ams/html/search/all_6c.js delete mode 100644 code/web/docs/ams/html/search/all_6d.html delete mode 100644 code/web/docs/ams/html/search/all_6d.js delete mode 100644 code/web/docs/ams/html/search/all_6e.html delete mode 100644 code/web/docs/ams/html/search/all_6e.js delete mode 100644 code/web/docs/ams/html/search/all_6f.html delete mode 100644 code/web/docs/ams/html/search/all_6f.js delete mode 100644 code/web/docs/ams/html/search/all_70.html delete mode 100644 code/web/docs/ams/html/search/all_70.js delete mode 100644 code/web/docs/ams/html/search/all_71.html delete mode 100644 code/web/docs/ams/html/search/all_71.js delete mode 100644 code/web/docs/ams/html/search/all_72.html delete mode 100644 code/web/docs/ams/html/search/all_72.js delete mode 100644 code/web/docs/ams/html/search/all_73.html delete mode 100644 code/web/docs/ams/html/search/all_73.js delete mode 100644 code/web/docs/ams/html/search/all_74.html delete mode 100644 code/web/docs/ams/html/search/all_74.js delete mode 100644 code/web/docs/ams/html/search/all_75.html delete mode 100644 code/web/docs/ams/html/search/all_75.js delete mode 100644 code/web/docs/ams/html/search/all_76.html delete mode 100644 code/web/docs/ams/html/search/all_76.js delete mode 100644 code/web/docs/ams/html/search/all_77.html delete mode 100644 code/web/docs/ams/html/search/all_77.js delete mode 100644 code/web/docs/ams/html/search/classes_61.html delete mode 100644 code/web/docs/ams/html/search/classes_61.js delete mode 100644 code/web/docs/ams/html/search/classes_64.html delete mode 100644 code/web/docs/ams/html/search/classes_64.js delete mode 100644 code/web/docs/ams/html/search/classes_66.html delete mode 100644 code/web/docs/ams/html/search/classes_66.js delete mode 100644 code/web/docs/ams/html/search/classes_67.html delete mode 100644 code/web/docs/ams/html/search/classes_67.js delete mode 100644 code/web/docs/ams/html/search/classes_68.html delete mode 100644 code/web/docs/ams/html/search/classes_68.js delete mode 100644 code/web/docs/ams/html/search/classes_69.html delete mode 100644 code/web/docs/ams/html/search/classes_69.js delete mode 100644 code/web/docs/ams/html/search/classes_6d.html delete mode 100644 code/web/docs/ams/html/search/classes_6d.js delete mode 100644 code/web/docs/ams/html/search/classes_70.html delete mode 100644 code/web/docs/ams/html/search/classes_70.js delete mode 100644 code/web/docs/ams/html/search/classes_71.html delete mode 100644 code/web/docs/ams/html/search/classes_71.js delete mode 100644 code/web/docs/ams/html/search/classes_73.html delete mode 100644 code/web/docs/ams/html/search/classes_73.js delete mode 100644 code/web/docs/ams/html/search/classes_74.html delete mode 100644 code/web/docs/ams/html/search/classes_74.js delete mode 100644 code/web/docs/ams/html/search/classes_75.html delete mode 100644 code/web/docs/ams/html/search/classes_75.js delete mode 100644 code/web/docs/ams/html/search/classes_77.html delete mode 100644 code/web/docs/ams/html/search/classes_77.js delete mode 100644 code/web/docs/ams/html/search/close.png delete mode 100644 code/web/docs/ams/html/search/files_61.html delete mode 100644 code/web/docs/ams/html/search/files_61.js delete mode 100644 code/web/docs/ams/html/search/files_63.html delete mode 100644 code/web/docs/ams/html/search/files_63.js delete mode 100644 code/web/docs/ams/html/search/files_64.html delete mode 100644 code/web/docs/ams/html/search/files_64.js delete mode 100644 code/web/docs/ams/html/search/files_65.html delete mode 100644 code/web/docs/ams/html/search/files_65.js delete mode 100644 code/web/docs/ams/html/search/files_66.html delete mode 100644 code/web/docs/ams/html/search/files_66.js delete mode 100644 code/web/docs/ams/html/search/files_67.html delete mode 100644 code/web/docs/ams/html/search/files_67.js delete mode 100644 code/web/docs/ams/html/search/files_68.html delete mode 100644 code/web/docs/ams/html/search/files_68.js delete mode 100644 code/web/docs/ams/html/search/files_69.html delete mode 100644 code/web/docs/ams/html/search/files_69.js delete mode 100644 code/web/docs/ams/html/search/files_6c.html delete mode 100644 code/web/docs/ams/html/search/files_6c.js delete mode 100644 code/web/docs/ams/html/search/files_6d.html delete mode 100644 code/web/docs/ams/html/search/files_6d.js delete mode 100644 code/web/docs/ams/html/search/files_70.html delete mode 100644 code/web/docs/ams/html/search/files_70.js delete mode 100644 code/web/docs/ams/html/search/files_71.html delete mode 100644 code/web/docs/ams/html/search/files_71.js delete mode 100644 code/web/docs/ams/html/search/files_72.html delete mode 100644 code/web/docs/ams/html/search/files_72.js delete mode 100644 code/web/docs/ams/html/search/files_73.html delete mode 100644 code/web/docs/ams/html/search/files_73.js delete mode 100644 code/web/docs/ams/html/search/files_74.html delete mode 100644 code/web/docs/ams/html/search/files_74.js delete mode 100644 code/web/docs/ams/html/search/files_75.html delete mode 100644 code/web/docs/ams/html/search/files_75.js delete mode 100644 code/web/docs/ams/html/search/files_77.html delete mode 100644 code/web/docs/ams/html/search/files_77.js delete mode 100644 code/web/docs/ams/html/search/functions_5f.html delete mode 100644 code/web/docs/ams/html/search/functions_5f.js delete mode 100644 code/web/docs/ams/html/search/functions_61.html delete mode 100644 code/web/docs/ams/html/search/functions_61.js delete mode 100644 code/web/docs/ams/html/search/functions_63.html delete mode 100644 code/web/docs/ams/html/search/functions_63.js delete mode 100644 code/web/docs/ams/html/search/functions_64.html delete mode 100644 code/web/docs/ams/html/search/functions_64.js delete mode 100644 code/web/docs/ams/html/search/functions_65.html delete mode 100644 code/web/docs/ams/html/search/functions_65.js delete mode 100644 code/web/docs/ams/html/search/functions_66.html delete mode 100644 code/web/docs/ams/html/search/functions_66.js delete mode 100644 code/web/docs/ams/html/search/functions_67.html delete mode 100644 code/web/docs/ams/html/search/functions_67.js delete mode 100644 code/web/docs/ams/html/search/functions_68.html delete mode 100644 code/web/docs/ams/html/search/functions_68.js delete mode 100644 code/web/docs/ams/html/search/functions_69.html delete mode 100644 code/web/docs/ams/html/search/functions_69.js delete mode 100644 code/web/docs/ams/html/search/functions_6c.html delete mode 100644 code/web/docs/ams/html/search/functions_6c.js delete mode 100644 code/web/docs/ams/html/search/functions_6d.html delete mode 100644 code/web/docs/ams/html/search/functions_6d.js delete mode 100644 code/web/docs/ams/html/search/functions_6e.html delete mode 100644 code/web/docs/ams/html/search/functions_6e.js delete mode 100644 code/web/docs/ams/html/search/functions_6f.html delete mode 100644 code/web/docs/ams/html/search/functions_6f.js delete mode 100644 code/web/docs/ams/html/search/functions_72.html delete mode 100644 code/web/docs/ams/html/search/functions_72.js delete mode 100644 code/web/docs/ams/html/search/functions_73.html delete mode 100644 code/web/docs/ams/html/search/functions_73.js delete mode 100644 code/web/docs/ams/html/search/functions_74.html delete mode 100644 code/web/docs/ams/html/search/functions_74.js delete mode 100644 code/web/docs/ams/html/search/functions_75.html delete mode 100644 code/web/docs/ams/html/search/functions_75.js delete mode 100644 code/web/docs/ams/html/search/functions_76.html delete mode 100644 code/web/docs/ams/html/search/functions_76.js delete mode 100644 code/web/docs/ams/html/search/functions_77.html delete mode 100644 code/web/docs/ams/html/search/functions_77.js delete mode 100644 code/web/docs/ams/html/search/mag_sel.png delete mode 100644 code/web/docs/ams/html/search/nomatches.html delete mode 100644 code/web/docs/ams/html/search/search.css delete mode 100644 code/web/docs/ams/html/search/search.js delete mode 100644 code/web/docs/ams/html/search/search_l.png delete mode 100644 code/web/docs/ams/html/search/search_m.png delete mode 100644 code/web/docs/ams/html/search/search_r.png delete mode 100644 code/web/docs/ams/html/search/variables_24.html delete mode 100644 code/web/docs/ams/html/search/variables_24.js delete mode 100644 code/web/docs/ams/html/sgroup__list_8php.html delete mode 100644 code/web/docs/ams/html/show__queue_8php.html delete mode 100644 code/web/docs/ams/html/show__reply_8php.html delete mode 100644 code/web/docs/ams/html/show__sgroup_8php.html delete mode 100644 code/web/docs/ams/html/show__ticket_8php.html delete mode 100644 code/web/docs/ams/html/show__ticket__info_8php.html delete mode 100644 code/web/docs/ams/html/show__ticket__log_8php.html delete mode 100644 code/web/docs/ams/html/support__group_8php.html delete mode 100644 code/web/docs/ams/html/sync_8php.html delete mode 100644 code/web/docs/ams/html/sync__cron_8php.html delete mode 100644 code/web/docs/ams/html/syncing_8php.html delete mode 100644 code/web/docs/ams/html/tab_a.png delete mode 100644 code/web/docs/ams/html/tab_b.png delete mode 100644 code/web/docs/ams/html/tab_h.png delete mode 100644 code/web/docs/ams/html/tab_s.png delete mode 100644 code/web/docs/ams/html/tabs.css delete mode 100644 code/web/docs/ams/html/ticket_8php.html delete mode 100644 code/web/docs/ams/html/ticket__category_8php.html delete mode 100644 code/web/docs/ams/html/ticket__content_8php.html delete mode 100644 code/web/docs/ams/html/ticket__info_8php.html delete mode 100644 code/web/docs/ams/html/ticket__log_8php.html delete mode 100644 code/web/docs/ams/html/ticket__queue_8php.html delete mode 100644 code/web/docs/ams/html/ticket__queue__handler_8php.html delete mode 100644 code/web/docs/ams/html/ticket__reply_8php.html delete mode 100644 code/web/docs/ams/html/ticket__user_8php.html delete mode 100644 code/web/docs/ams/html/todo.html delete mode 100644 code/web/docs/ams/html/userlist_8php.html delete mode 100644 code/web/docs/ams/html/users_8php.html delete mode 100644 code/web/docs/ams/html/www_2config_8php.html delete mode 100644 code/web/docs/ams/html/www_2html_2autoload_2webusers_8php.html delete mode 100644 code/web/docs/ams/html/www_2html_2inc_2logout_8php.html delete mode 100644 code/web/docs/ams/html/www_2html_2inc_2settings_8php.html delete mode 100644 code/web/docs/ams/html/www_2html_2inc_2show__user_8php.html diff --git a/code/web/docs/ams/doxygen/Doxyfile b/code/web/docs/ams/doxygen/Doxyfile index 8c4cad40f..fc764ef01 100644 --- a/code/web/docs/ams/doxygen/Doxyfile +++ b/code/web/docs/ams/doxygen/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Ryzom Account Management System" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0 +PROJECT_NUMBER = 1.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -721,7 +721,7 @@ WARN_FORMAT = "$file:$line: $text" # messages should be written. If left blank the output is written to standard # error (stderr). -WARN_LOGFILE = +WARN_LOGFILE = warnfile.log #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -733,8 +733,8 @@ WARN_LOGFILE = # spaces. # Note: If this tag is empty the current directory is searched. -INPUT = ../../ryzom_ams \ - info.php +INPUT = ../../../private_php/ams \ + ../../../public_php/ams # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -769,11 +769,8 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = ../../ryzom_ams/ams_lib/smarty \ - ../../ryzom_ams/ams_lib/plugins \ - ../../ryzom_ams/www/html/misc \ - ../../ryzom_ams/www/html/templates_c \ - ../../ryzom_ams/drupal +EXCLUDE = ../../../private_php/ams/smarty \ + ../../../public_php/ams/misc/elfinder-connector # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -894,7 +891,7 @@ USE_MDFILE_AS_MAINPAGE = # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. @@ -2309,4 +2306,3 @@ GENERATE_LEGEND = YES # This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES - diff --git a/code/web/docs/ams/html/add__sgroup_8php.html b/code/web/docs/ams/html/add__sgroup_8php.html deleted file mode 100644 index f525076f5..000000000 --- a/code/web/docs/ams/html/add__sgroup_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_sgroup.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_sgroup.php File Reference
    -
    -
    - - - - -

    -Functions

     add_sgroup ()
     This function is beign used to add a new Support Group to the database.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    add_sgroup ()
    -
    -
    - -

    This function is beign used to add a new Support Group to the database.

    -

    What it will do is check if the user who executed the function is an Admin, if so then it will filter all POST'ed data and use it to create a new Support_Group entry. if not logged in or not an admin, an appropriate redirection to an error page will take place.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/add__user_8php.html b/code/web/docs/ams/html/add__user_8php.html deleted file mode 100644 index 0b89554f9..000000000 --- a/code/web/docs/ams/html/add__user_8php.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php File Reference
    -
    -
    - - - - - -

    -Functions

     add_user ()
     This function is beign used to add a new user to the www database.
     write_user ($newUser)
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    add_user ()
    -
    -
    - -

    This function is beign used to add a new user to the www database.

    -

    it will first check if the sent $_POST variables are valid for registering, if one or more rules are broken (eg the username is too short) the template will be reloaded but this time with the appropriate error messages. If the checking was successful it will call the write_user() function (located in this same file). That function will create a new www user and matching ticket_user. It will also push the newly created user to the shard. In case the shard is offline, the new user will be temporary stored in the ams_querycache, waiting for the sync cron job to update it.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    - -
    -
    - - - - - - - - -
    write_user (newUser)
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/add__user__to__sgroup_8php.html b/code/web/docs/ams/html/add__user__to__sgroup_8php.html deleted file mode 100644 index 878ce18d0..000000000 --- a/code/web/docs/ams/html/add__user__to__sgroup_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user_to_sgroup.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user_to_sgroup.php File Reference
    -
    -
    - - - - -

    -Functions

     add_user_to_sgroup ()
     This function is beign used to add a user to a support group.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    add_user_to_sgroup ()
    -
    -
    - -

    This function is beign used to add a user to a support group.

    -

    It will first check if the user who executed this function is an admin. If the user exists it will try to add it to the supportgroup, in case it's not a mod or admin it will not add it to the group. if the executing user is not an admin or not logged in, the page will be redirected to the error page.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/annotated.html b/code/web/docs/ams/html/annotated.html deleted file mode 100644 index dd7fc058c..000000000 --- a/code/web/docs/ams/html/annotated.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - -Ryzom Account Management System: Data Structures - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    -
    -
    Data Structures
    -
    -
    -
    Here are the data structures with brief descriptions:
    - - - - - - - - - - - - - - - - - - - - - - - -
    AssignedHandles the assigning of a ticket to a user
    DBLayerHandles the database connections
    ForwardedHandles the forwarding of a ticket to a support_group
    Gui_ElementsHelper class for generating gui related elements
    HelpersHelper class for more site specific functions
    In_Support_GroupHandles the linkage of users being in a support group
    Mail_HandlerHandles the mailing functionality
    MyCryptBasic encryption/decryption class
    PaginationHandles returning arrays based on a given pagenumber
    QuerycacheClass for storing changes when shard is offline
    Support_GroupGroups moderators & admins together
    SyncHandler for performing changes when shard is back online after being offline
    TicketClass that handles most ticket related functions
    Ticket_CategoryClass related to the ticket categories
    Ticket_ContentClass that handles the content of a reply
    Ticket_InfoClass that handles additional info sent by ticket creation ingame
    Ticket_LogClass that handles the logging
    Ticket_QueueData class that holds a lot of queries that load specific tickets
    Ticket_Queue_HandlerReturns tickets (queues) that are related in some way
    Ticket_ReplyHandles functions related to replies on tickets
    Ticket_UserUser entry point in the ticket system
    UsersHandles basic user registration & management functions (shard related)
    WebUsersHandles CMS/WWW related functions regarding user management & registration
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/assigned_8php.html b/code/web/docs/ams/html/assigned_8php.html deleted file mode 100644 index 54e26a775..000000000 --- a/code/web/docs/ams/html/assigned_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Assigned
     Handles the assigning of a ticket to a user. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/bc_s.png b/code/web/docs/ams/html/bc_s.png deleted file mode 100644 index e4018628b5b45cb4301037485a29d7d74ac22138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmV;W0$TlvP)X?0Pv5h+5!wElpi=&YL!gfY!djl#UDdPKy97F|A-deTa@qo3BWh1YQIvzmHR^g zFjV4I6pLB7_*vEZk^%p7c7Bh>0`4r^X#gpJE_Vz9fSHKqclcZaV^k3gX%h+1`u||O zZ+BY?7(R=ayr^kXE=E0Dw=$Ud3VJ?9^Cz@hP?388Cw5>9TloOJ>^KczCgj zns2=|0!a|)Yq3{hjL{xyy7|Tk0N}Pe+g9PUTL!4{#;eUhrNd@!_T<>Vu+35c)h>sq ztgb?(6W3oFLz#%?OMEV@{j#4LuDvjVGZ~6hpQT8li5b0yjvK8c4efl+vSz5)P6 zle78)00_Iv5)&E~hnOdcd}L}i+MU>k+Q8#@KjqJJN`gRj(~)RmNrck9ht@LelPtVO zwp(J;k!T=gC#%o(13-^E+g@aqc()pf{+j|0w)AH*Mq$54UjLv#jV$RYpz3Vjg$$=u z>yjfBQOhL=^@+#4#$l|{~}HZ-?1Yy{lI*$N}*YDC`<{+;>_#gMXZdz4NI00000 LNkvXXu0mjfx86dR diff --git a/code/web/docs/ams/html/change__info_8php.html b/code/web/docs/ams/html/change__info_8php.html deleted file mode 100644 index 4b5bb8b4b..000000000 --- a/code/web/docs/ams/html/change__info_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php File Reference
    -
    -
    - - - - -

    -Functions

     change_info ()
     This function is beign used to change the users personal info.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    change_info ()
    -
    -
    - -

    This function is beign used to change the users personal info.

    -

    It will first check if the user who executed this function is the person of whom the information is or if it's a mod/admin. If this is not the case the page will be redirected to an error page. afterwards the current info will be loaded, which will be used to determine what to update. After updating the information, the settings template will be reloaded. Errors made by invalid data will be shown also after reloading the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/change__mail_8php.html b/code/web/docs/ams/html/change__mail_8php.html deleted file mode 100644 index 1a177af49..000000000 --- a/code/web/docs/ams/html/change__mail_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php File Reference
    -
    -
    - - - - -

    -Functions

     change_mail ()
     This function is beign used to change the users emailaddress info.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    change_mail ()
    -
    -
    - -

    This function is beign used to change the users emailaddress info.

    -

    It will first check if the user who executed this function is the person of whom the emailaddress is or if it's a mod/admin. If this is not the case the page will be redirected to an error page. The emailaddress will be validated first. If the checking was successful the email will be updated and the settings template will be reloaded. Errors made by invalid data will be shown also after reloading the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/change__password_8php.html b/code/web/docs/ams/html/change__password_8php.html deleted file mode 100644 index a8cc2bbc1..000000000 --- a/code/web/docs/ams/html/change__password_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php File Reference
    -
    -
    - - - - -

    -Functions

     change_password ()
     This function is beign used to change the users password.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    change_password ()
    -
    -
    - -

    This function is beign used to change the users password.

    -

    It will first check if the user who executed this function is the person of whom the emailaddress is or if it's a mod/admin. If this is not the case the page will be redirected to an error page. If the executing user tries to change someone elses password, he doesn't has to fill in the previous password. The password will be validated first. If the checking was successful the password will be updated and the settings template will be reloaded. Errors made by invalid data will be shown also after reloading the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/change__permission_8php.html b/code/web/docs/ams/html/change__permission_8php.html deleted file mode 100644 index f8eccb214..000000000 --- a/code/web/docs/ams/html/change__permission_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/change_permission.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/change_permission.php File Reference
    -
    -
    - - - - -

    -Functions

     change_permission ()
     This function is beign used to change the permission of a ticket_user.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    change_permission ()
    -
    -
    - -

    This function is beign used to change the permission of a ticket_user.

    -

    It will first check if the user who executed this function is an admin. If this is not the case the page will be redirected to an error page. in case the $_GET['value'] is smaller than 4 and the user whoes permission is being changed is different from the admin(id 1), the change will be executed and the page will redirect to the users profile page.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/change__receivemail_8php.html b/code/web/docs/ams/html/change__receivemail_8php.html deleted file mode 100644 index fbb0d77e5..000000000 --- a/code/web/docs/ams/html/change__receivemail_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_receivemail.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_receivemail.php File Reference
    -
    -
    - - - - -

    -Functions

     change_receivemail ()
     This function is beign used to change the users receiveMail setting.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    change_receivemail ()
    -
    -
    - -

    This function is beign used to change the users receiveMail setting.

    -

    It will first check if the user who executed this function is the person of whom the setting is or if it's a mod/admin. If this is not the case the page will be redirected to an error page. it will check if the new value equals 1 or 0 and it will update the setting and redirect the page again.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classAssigned.html b/code/web/docs/ams/html/classAssigned.html deleted file mode 100644 index e91a4c362..000000000 --- a/code/web/docs/ams/html/classAssigned.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - -Ryzom Account Management System: Assigned Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    Handles the assigning of a ticket to a user. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     create ()
     creates a new 'assigned' entry.
     delete ()
     deletes an existing 'assigned' entry.
     load ($ticket_id)
     loads the object's attributes.
     getUser ()
     get user attribute of the object.
     getTicket ()
     get ticket attribute of the object.
     setUser ($u)
     set user attribute of the object.
     setTicket ($t)
     set ticket attribute of the object.

    -Static Public Member Functions

    static assignTicket ($user_id, $ticket_id)
     Assigns a ticket to a user or returns an error message.
    static unAssignTicket ($user_id, $ticket_id)
     Unassign a ticket being coupled to a user or return an error message.
    static getUserAssignedToTicket ($ticket_id)
     Get the (external) id of the user assigned to a ticket.
    static isAssigned ($ticket_id, $user_id=0)
     Check if a ticket is already assigned (in case the user_id param is used, it will check if it's assigned to that user)

    -Private Attributes

     $user
     The id of the user being assigned.
     $ticket
     The id of the ticket being assigned.
    -

    Detailed Description

    -

    Handles the assigning of a ticket to a user.

    -

    This is being used to make someone responsible for the handling and solving of a ticket. The idea is that someone can easily assign a ticket to himself and by doing that, he makes aware to the other moderators that he will deal with the ticket in the future.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static assignTicket (user_id,
    ticket_id 
    ) [static]
    -
    -
    - -

    Assigns a ticket to a user or returns an error message.

    -

    It will first check if the ticket isn't already assigned, if not, it will create a new 'assigned' entry.

    -
    Parameters:
    - - - -
    $user_idthe id of the user we want to assign to the ticket
    $ticket_idthe id of the ticket.
    -
    -
    -
    Returns:
    A string, if assigning succeedded "SUCCESS_ASSIGNED" will be returned, else "ALREADY_ASSIGNED" will be returned.
    - -
    -
    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'assigned' entry.

    -

    this method will use the object's attributes for creating a new 'assigned' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - -
    delete ()
    -
    -
    - -

    deletes an existing 'assigned' entry.

    -

    this method will use the object's attributes for deleting an existing 'assigned' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - -
    getTicket ()
    -
    -
    - -

    get ticket attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUser ()
    -
    -
    - -

    get user attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getUserAssignedToTicket (ticket_id) [static]
    -
    -
    - -

    Get the (external) id of the user assigned to a ticket.

    -
    Parameters:
    - - -
    $ticket_idthe Id of the ticket that's being queried
    -
    -
    -
    Returns:
    The (external)id of the user being assigned to the ticket
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static isAssigned (ticket_id,
    user_id = 0 
    ) [static]
    -
    -
    - -

    Check if a ticket is already assigned (in case the user_id param is used, it will check if it's assigned to that user)

    -
    Parameters:
    - - - -
    $ticket_idthe Id of the ticket that's being queried
    $user_idthe id of the user, default parameter = 0, by using a user_id, it will check if that user is assigned to the ticket.
    -
    -
    -
    Returns:
    true in case it's assigned, false in case it isn't.
    - -
    -
    - -
    -
    - - - - - - - - -
    load (ticket_id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a ticket_id, it will put the matching user_id and the ticket_id into the attributes.

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('User' => user_id, 'Ticket' => ticket_id).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTicket (t)
    -
    -
    - -

    set ticket attribute of the object.

    -
    Parameters:
    - - -
    $tinteger id of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setUser (u)
    -
    -
    - -

    set user attribute of the object.

    -
    Parameters:
    - - -
    $uinteger id of the user
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static unAssignTicket (user_id,
    ticket_id 
    ) [static]
    -
    -
    - -

    Unassign a ticket being coupled to a user or return an error message.

    -

    It will first check if the ticket is assigned, if this is indeed the case it will delete the 'assigned' entry.

    -
    Parameters:
    - - - -
    $user_idthe id of the user we want to unassign from the ticket
    $ticket_idthe id of the ticket.
    -
    -
    -
    Returns:
    A string, if unassigning succeedded "SUCCESS_UNASSIGNED" will be returned, else "NOT_ASSIGNED" will be returned.
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $ticket [private]
    -
    -
    - -

    The id of the ticket being assigned.

    - -
    -
    - -
    -
    - - - - -
    $user [private]
    -
    -
    - -

    The id of the user being assigned.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classDBLayer.html b/code/web/docs/ams/html/classDBLayer.html deleted file mode 100644 index 8d405ef53..000000000 --- a/code/web/docs/ams/html/classDBLayer.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - -Ryzom Account Management System: DBLayer Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    DBLayer Class Reference
    -
    -
    - -

    Handles the database connections. - More...

    - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ($db)
     The constructor.
     executeWithoutParams ($query)
     execute a query that doesn't have any parameters
     execute ($query, $params)
     execute a query that has parameters
     executeReturnId ($query, $params)
     execute a query (an insertion query) that has parameters and return the id of it's insertion

    -Private Attributes

     $PDO
     The PDO object, instantiated by the constructor.
    -

    Detailed Description

    -

    Handles the database connections.

    -

    It uses PDO to connect to the different databases. It will use the argument of the constructor to setup a connection to the database with the matching entry in the $cfg global variable.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    __construct (db)
    -
    -
    - -

    The constructor.

    -

    Instantiates the PDO object attribute by connecting to the arguments matching database(the db info is stored in the $cfg global var)

    -
    Parameters:
    - - -
    $dbString, the name of the databases entry in the $cfg global var.
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    execute (query,
    params 
    )
    -
    -
    - -

    execute a query that has parameters

    -
    Parameters:
    - - - -
    $querythe mysql query
    $paramsthe parameters that are being used by the query
    -
    -
    -
    Returns:
    returns a PDOStatement object
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    executeReturnId (query,
    params 
    )
    -
    -
    - -

    execute a query (an insertion query) that has parameters and return the id of it's insertion

    -
    Parameters:
    - - - -
    $querythe mysql query
    $paramsthe parameters that are being used by the query
    -
    -
    -
    Returns:
    returns the id of the last inserted element.
    - -
    -
    - -
    -
    - - - - - - - - -
    executeWithoutParams (query)
    -
    -
    - -

    execute a query that doesn't have any parameters

    -
    Parameters:
    - - -
    $querythe mysql query
    -
    -
    -
    Returns:
    returns a PDOStatement object
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $PDO [private]
    -
    -
    - -

    The PDO object, instantiated by the constructor.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classForwarded.html b/code/web/docs/ams/html/classForwarded.html deleted file mode 100644 index be376db96..000000000 --- a/code/web/docs/ams/html/classForwarded.html +++ /dev/null @@ -1,478 +0,0 @@ - - - - - -Ryzom Account Management System: Forwarded Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    Handles the forwarding of a ticket to a support_group. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     create ()
     creates a new 'forwarded' entry.
     delete ()
     deletes an existing 'forwarded' entry.
     load ($ticket_id)
     loads the object's attributes.
     getGroup ()
     get group attribute of the object.
     getTicket ()
     get ticket attribute of the object.
     setGroup ($g)
     set group attribute of the object.
     setTicket ($t)
     set ticket attribute of the object.

    -Static Public Member Functions

    static forwardTicket ($group_id, $ticket_id)
     Forward a ticket to a group, also removes the previous group where it was forwarded to.
    static getSGroupOfTicket ($ticket_id)
     get the id of the group a ticket is forwarded to.
    static isForwarded ($ticket_id)
     check if the ticket is forwarded

    -Private Attributes

     $group
     The id of the group to which the ticket is being forwarded.
     $ticket
     The id of the ticket being forwarded.
    -

    Detailed Description

    -

    Handles the forwarding of a ticket to a support_group.

    -

    This is being used to transfer tickets to different groups (eg Developers, Website-Team, SupportGroup etc..) The idea is that someone can easily forward a ticket to a group and by doing that, the moderators that are in that group will receive the ticket in their todo queue.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'forwarded' entry.

    -

    this method will use the object's attributes for creating a new 'forwarded' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - -
    delete ()
    -
    -
    - -

    deletes an existing 'forwarded' entry.

    -

    this method will use the object's attributes for deleting an existing 'forwarded' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static forwardTicket (group_id,
    ticket_id 
    ) [static]
    -
    -
    - -

    Forward a ticket to a group, also removes the previous group where it was forwarded to.

    -

    It will first check if the ticket is already forwarded, if that's the case, it will delete that entry. Afterwards it creates the new forward entry

    -
    Parameters:
    - - - -
    $group_idthe id of the support group we want to forward the ticket to.
    $ticket_idthe id of the ticket.
    -
    -
    -
    Returns:
    A string, if assigning succeedded "SUCCESS_FORWARDED" will be returned.
    - -
    -
    - -
    -
    - - - - - - - -
    getGroup ()
    -
    -
    - -

    get group attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getSGroupOfTicket (ticket_id) [static]
    -
    -
    - -

    get the id of the group a ticket is forwarded to.

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket.
    -
    -
    -
    Returns:
    the id of the group
    - -
    -
    - -
    -
    - - - - - - - -
    getTicket ()
    -
    -
    - -

    get ticket attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    static isForwarded (ticket_id) [static]
    -
    -
    - -

    check if the ticket is forwarded

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket.
    -
    -
    -
    Returns:
    returns true if the ticket is forwarded, else return false;
    - -
    -
    - -
    -
    - - - - - - - - -
    load (ticket_id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a ticket_id, it will put the matching group_id and the ticket_id into the attributes.

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('Group' => group_id, 'Ticket' => ticket_id).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setGroup (g)
    -
    -
    - -

    set group attribute of the object.

    -
    Parameters:
    - - -
    $ginteger id of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTicket (t)
    -
    -
    - -

    set ticket attribute of the object.

    -
    Parameters:
    - - -
    $tinteger id of the ticket
    -
    -
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $group [private]
    -
    -
    - -

    The id of the group to which the ticket is being forwarded.

    - -
    -
    - -
    -
    - - - - -
    $ticket [private]
    -
    -
    - -

    The id of the ticket being forwarded.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classGui__Elements.html b/code/web/docs/ams/html/classGui__Elements.html deleted file mode 100644 index 98e30a949..000000000 --- a/code/web/docs/ams/html/classGui__Elements.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - -Ryzom Account Management System: Gui_Elements Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Gui_Elements Class Reference
    -
    -
    - -

    Helper class for generating gui related elements. - More...

    - - - - - - - - -

    -Static Public Member Functions

    static make_table ($inputList, $funcArray, $fieldArray)
     creates an array of information out of a list of objects which can be used to form a table.
    static make_table_with_key_is_id ($inputList, $funcArray, $idFunction)
     creates an array of information out of a list of objects which can be used to form a table with a key as id.
    static time_elapsed_string ($ptime)
     returns the elapsed time from a timestamp up till now.
    -

    Detailed Description

    -

    Helper class for generating gui related elements.

    -

    This class contains functions that generate data-arrays for tables, or other visual entities

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static make_table (inputList,
    funcArray,
    fieldArray 
    ) [static]
    -
    -
    - -

    creates an array of information out of a list of objects which can be used to form a table.

    -

    The idea of this is that you can pass an array of objects, an array of functions to perform on each object and a name for the index of the returning array to store the result.

    -
    Parameters:
    - - - - -
    $inputListthe list of objects of which we want to make a table.
    $funcArraya list of methods of that object we want to perform.
    $fieldArraya list of strings, that will be used to store our result into.
    -
    -
    -
    Returns:
    an array with the indexes listed in $fieldArray and which holds the results of the methods in $funcArray on each object in the $inputList
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static make_table_with_key_is_id (inputList,
    funcArray,
    idFunction 
    ) [static]
    -
    -
    - -

    creates an array of information out of a list of objects which can be used to form a table with a key as id.

    -

    The idea is comparable to the make_table() function, though this time the results are stored in the index that is returned by the idFunction()

    -
    Parameters:
    - - - - -
    $inputListthe list of objects of which we want to make a table.
    $funcArraya list of methods of that object we want to perform.
    $idFunctiona function that returns an id that will be used as index to store our result
    -
    -
    -
    Returns:
    an array which holds the results of the methods in $funcArray on each object in the $inputList, though thearrays indexes are formed by using the idFunction.
    - -
    -
    - -
    -
    - - - - - - - - -
    static time_elapsed_string (ptime) [static]
    -
    -
    - -

    returns the elapsed time from a timestamp up till now.

    -
    Parameters:
    - - -
    $ptimea timestamp.
    -
    -
    -
    Returns:
    a string in the form of A years, B months, C days, D hours, E minutes, F seconds ago.
    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/gui_elements.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classHelpers.html b/code/web/docs/ams/html/classHelpers.html deleted file mode 100644 index e0109cd70..000000000 --- a/code/web/docs/ams/html/classHelpers.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - -Ryzom Account Management System: Helpers Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Helpers Class Reference
    -
    -
    - -

    Helper class for more site specific functions. - More...

    - - - - - - - - - - - - - - -

    -Static Public Member Functions

    static loadTemplate ($template, $vars=array(), $returnHTML=false)
     workhorse of the website, it loads the template and shows it or returns th html.
    static create_folders ()
     creates the folders that are needed for smarty.
    static check_if_game_client ()
     check if the http request is sent ingame or not.
    static handle_language ()
     Handles the language specific aspect.
    static outputTime ($time, $str=1)
     Time output function for handling the time display.
    static check_login_ingame ()
     Auto login function for ingame use.
    -

    Detailed Description

    -

    Helper class for more site specific functions.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    static check_if_game_client () [static]
    -
    -
    - -

    check if the http request is sent ingame or not.

    -
    Returns:
    returns true in case it's sent ingame, else false is returned.
    - -
    -
    - -
    -
    - - - - - - - -
    static check_login_ingame () [static]
    -
    -
    - -

    Auto login function for ingame use.

    -

    This function will allow users who access the website ingame, to log in without entering the username and password. It uses the COOKIE entry in the open_ring db. it checks if the cookie sent by the http request matches the one in the db. This cookie in the db is changed everytime the user relogs.

    -
    Returns:
    returns "FALSE" if the cookies didn't match, else it returns an array with the user's id and name.
    - -
    -
    - -
    -
    - - - - - - - -
    static create_folders () [static]
    -
    -
    - -

    creates the folders that are needed for smarty.

    -
    Todo:
    for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead.
    - -
    -
    - -
    -
    - - - - - - - -
    static handle_language () [static]
    -
    -
    - -

    Handles the language specific aspect.

    -

    The language can be changed by setting the $_GET['Language'] & $_GET['setLang'] together. This will also change the language entry of the user in the db. Cookies are also being used in case the user isn't logged in.

    -
    Returns:
    returns the parsed content of the language .ini file related to the users language setting.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static loadTemplate (template,
    vars = array (),
    returnHTML = false 
    ) [static]
    -
    -
    - -

    workhorse of the website, it loads the template and shows it or returns th html.

    -

    it uses smarty to load the $template, but before displaying the template it will pass the $vars to smarty. Also based on your language settings a matching array of words & sentences for that page will be loaded. In case the $returnHTML parameter is set to true, it will return the html instead of displaying the template.

    -
    Parameters:
    - - - - -
    $templatethe name of the template(page) that we want to load.
    $varsan array of variables that should be loaded by smarty before displaying or returning the html.
    $returnHTML(default=false) if set to true, the html that should have been displayed, will be returned.
    -
    -
    -
    Returns:
    in case $returnHTML=true, it returns the html of the template being loaded.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static outputTime (time,
    str = 1 
    ) [static]
    -
    -
    - -

    Time output function for handling the time display.

    -
    Returns:
    returns the time in the format specified in the $TIME_FORMAT global variable.
    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classIn__Support__Group.html b/code/web/docs/ams/html/classIn__Support__Group.html deleted file mode 100644 index 206752abf..000000000 --- a/code/web/docs/ams/html/classIn__Support__Group.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - -Ryzom Account Management System: In_Support_Group Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    In_Support_Group Class Reference
    -
    -
    - -

    Handles the linkage of users being in a support group. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     create ()
     creates a new 'in_support_group' entry.
     delete ()
     deletes an existing 'in_support_group' entry.
     getUser ()
     get user attribute of the object.
     getGroup ()
     get group attribute of the object.
     setUser ($u)
     set user attribute of the object.
     setGroup ($g)
     set group attribute of the object.

    -Static Public Member Functions

    static userExistsInSGroup ($user_id, $group_id)
     Check if user is in in_support_group.

    -Private Attributes

     $user
     The id of the user being in a support group.
     $group
     The id of the support group.
    -

    Detailed Description

    -

    Handles the linkage of users being in a support group.

    -

    Moderators and Admins can be part of a support group, this class offers functionality to check if a link between a user and group is existing.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'in_support_group' entry.

    -

    this method will use the object's attributes for creating a new 'in_support_group' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - -
    delete ()
    -
    -
    - -

    deletes an existing 'in_support_group' entry.

    -

    this method will use the object's attributes for deleting an existing 'in_support_group' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - -
    getGroup ()
    -
    -
    - -

    get group attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUser ()
    -
    -
    - -

    get user attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('User' => user_id, 'Group' => support_groups_id).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setGroup (g)
    -
    -
    - -

    set group attribute of the object.

    -
    Parameters:
    - - -
    $ginteger id of the support group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setUser (u)
    -
    -
    - -

    set user attribute of the object.

    -
    Parameters:
    - - -
    $uinteger id of the user
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static userExistsInSGroup (user_id,
    group_id 
    ) [static]
    -
    -
    - -

    Check if user is in in_support_group.

    -
    Parameters:
    - - - -
    $user_idthe id of the user.
    $group_idthe id of the support group.
    -
    -
    -
    Returns:
    true is returned in case the user is in the support group, else false is returned.
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $group [private]
    -
    -
    - -

    The id of the support group.

    - -
    -
    - -
    -
    - - - - -
    $user [private]
    -
    -
    - -

    The id of the user being in a support group.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classMail__Handler.html b/code/web/docs/ams/html/classMail__Handler.html deleted file mode 100644 index a11be88a0..000000000 --- a/code/web/docs/ams/html/classMail__Handler.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - -Ryzom Account Management System: Mail_Handler Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    Handles the mailing functionality. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     cron ()
     the cron funtion (workhorse of the mailing system).
     new_message_id ($ticketId)
     creates a new message id for a email about to send.
     get_ticket_id_from_subject ($subject)
     try to fetch the ticket_id out of the subject.
     incoming_mail_handler ($mbox, $i, $group)
     Handles an incomming email Read the content of one email by using imap's functionality.
     decode_utf8 ($str)
     decode utf8
     get_mime_type (&$structure)
     returns the mime type of a structure of a email
     get_part ($stream, $msg_number, $mime_type, $structure=false, $part_number=false)

    -Static Public Member Functions

    static send_ticketing_mail ($receiver, $ticketObj, $content, $type, $sender=0)
     Wrapper for sending emails, creates the content of the email Based on the type of the ticketing mail it will create a specific email, it will use the language.ini files to load the correct language of the email for the receiver.
    static send_mail ($recipient, $subject, $body, $ticket_id=0, $from=NULL)
     send mail function that will add the email to the db.

    -Private Member Functions

     mail_fork ()
     Start a new child process and return the process id this is used because imap might take some time, we dont want the cron parent process waiting on that.

    -Private Attributes

     $db
     db object used by various methods.
    -

    Detailed Description

    -

    Handles the mailing functionality.

    -

    This class covers the reading of the mail boxes of the support_groups, handling those emails, updating tickets accoring to the content & title of the emails, but also the sending of emails after creating a new ticket and when someone else replies on your ticket.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    cron ()
    -
    -
    - -

    the cron funtion (workhorse of the mailing system).

    -

    The cron job will create a child process, which will first send the emails that are in the email table in the database, we use some kind of semaphore (a temp file) to make sure that if the cron job is called multiple times, it wont email those mails multiple times. After this, we will read the mail inboxes of the support groups and the default group using IMAP and we will add new tickets or new replies according to the incoming emails.

    - -
    -
    - -
    -
    - - - - - - - - -
    decode_utf8 (str)
    -
    -
    - -

    decode utf8

    -
    Parameters:
    - - -
    $strstr to be decoded
    -
    -
    -
    Returns:
    decoded string
    - -
    -
    - -
    -
    - - - - - - - - -
    get_mime_type (&$ structure)
    -
    -
    - -

    returns the mime type of a structure of a email

    -
    Parameters:
    - - -
    &$structurethe structure of an email message.
    -
    -
    -
    Returns:
    "TEXT", "MULTIPART","MESSAGE", "APPLICATION", "AUDIO","IMAGE", "VIDEO", "OTHER","TEXT/PLAIN"
    -
    Todo:
    take care of the HTML part of incoming emails.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_part (stream,
    msg_number,
    mime_type,
    structure = false,
    part_number = false 
    )
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    get_ticket_id_from_subject (subject)
    -
    -
    - -

    try to fetch the ticket_id out of the subject.

    -

    The subject should have a substring of the form [Ticket #ticket_id], where ticket_id should be the integer ID of the ticket.

    -
    Parameters:
    - - -
    $subjectthe subject of an incomming email.
    -
    -
    -
    Returns:
    if the ticket's id is succesfully parsed, it will return the ticket_id, else it returns 0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    incoming_mail_handler (mbox,
    i,
    group 
    )
    -
    -
    - -

    Handles an incomming email Read the content of one email by using imap's functionality.

    -

    If a ticket id is found inside the message_id or else in the subject line, then a reply will be added (if the email is not being sent from the authors email address it won't be added though and a warning will be sent to both parties). If no ticket id is found, then a new ticket will be created.

    -
    Parameters:
    - - - - -
    $mboxa mailbox object
    $ithe email's id in the mailbox (integer)
    $groupthe group object that owns the inbox.
    -
    -
    -
    Returns:
    a string based on the found ticket i and timestamp (will be used to store a copy of the email locally)
    - -
    -
    - -
    -
    - - - - - - - -
    mail_fork () [private]
    -
    -
    - -

    Start a new child process and return the process id this is used because imap might take some time, we dont want the cron parent process waiting on that.

    -
    Returns:
    return the child process id
    - -
    -
    - -
    -
    - - - - - - - - -
    new_message_id (ticketId)
    -
    -
    - -

    creates a new message id for a email about to send.

    -
    Parameters:
    - - -
    $ticketIdthe ticket id of the ticket that is mentioned in the email.
    -
    -
    -
    Returns:
    returns a string, that consist out of some variable parts, a consistent part and the ticket_id. The ticket_id will be used lateron, if someone replies on the message, to see to which ticket the reply should be added.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static send_mail (recipient,
    subject,
    body,
    ticket_id = 0,
    from = NULL 
    ) [static]
    -
    -
    - -

    send mail function that will add the email to the db.

    -

    this function is being used by the send_ticketing_mail() function. It adds the email as an entry to the `email` table in the database, which will be sent later on when we run the cron job.

    -
    Parameters:
    - - - - - - -
    $recipientif integer, then it refers to the id of the user to whom we want to mail, if it's a string(email-address) then we will use that.
    $subjectthe subject of the email
    $bodythe body of the email
    $ticket_idthe id of the ticket
    $fromthe sending support_group's id (NULL in case the default group is sending))
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static send_ticketing_mail (receiver,
    ticketObj,
    content,
    type,
    sender = 0 
    ) [static]
    -
    -
    - -

    Wrapper for sending emails, creates the content of the email Based on the type of the ticketing mail it will create a specific email, it will use the language.ini files to load the correct language of the email for the receiver.

    -

    Also if the $TICKET_MAILING_SUPPORT is set to false or if the user's personal 'ReceiveMail' entry is set to false then no mail will be sent.

    -
    Parameters:
    - - - - - - -
    $receiverif integer, then it refers to the id of the user to whom we want to mail, if it's a string(email-address) then we will use that.
    $ticketObjthe ticket object itself, this is being used for including ticket related information into the email.
    $contentthe content of a reply or new ticket
    $typeREPLY, NEW, WARNAUTHOR, WARNSENDER, WARNUNKNOWNSENDER
    $sender(default = 0 (if it is not forwarded)) else use the id of the support group to which the ticket is currently forwarded, the support groups email address will be used to send the ticket.
    -
    -
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $db [private]
    -
    -
    - -

    db object used by various methods.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classMyCrypt.html b/code/web/docs/ams/html/classMyCrypt.html deleted file mode 100644 index f08d22b88..000000000 --- a/code/web/docs/ams/html/classMyCrypt.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - -Ryzom Account Management System: MyCrypt Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    Basic encryption/decryption class. - More...

    - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ($cryptinfo)
     constructor.
     encrypt ($data)
     encrypts by using the given enc_method and hash_method.
     decrypt ($edata)
     decrypts by using the given enc_method and hash_method.

    -Static Private Member Functions

    static hashIV ($key, $method, $iv_size)
     hashes the key by using a hash method specified.
    static check_methods ($enc, $hash)
     checks if the encryption and hash methods are supported

    -Private Attributes

     $config
     array that should contain the enc_method & hash_method & key
    -

    Detailed Description

    -

    Basic encryption/decryption class.

    -

    We use this class atm for encrypting & decrypting the imap passwords.

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    __construct (cryptinfo)
    -
    -
    - -

    constructor.

    -

    loads the config array with the given argument.

    -
    Parameters:
    - - -
    $cryptinfoan array containing the info needed to encrypt & decrypt.(enc_method & hash_method & key)
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static check_methods (enc,
    hash 
    ) [static, private]
    -
    -
    - -

    checks if the encryption and hash methods are supported

    -
    Parameters:
    - - - -
    $encthe encryption method.
    $hashthe hash method.
    -
    -
    -
    Exceptions:
    - - -
    Exceptionin case a method is not supported.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    decrypt (edata)
    -
    -
    - -

    decrypts by using the given enc_method and hash_method.

    -
    Parameters:
    - - -
    $edatathe encrypted string that we want to decrypt
    -
    -
    -
    Returns:
    the decrypted string.
    - -
    -
    - -
    -
    - - - - - - - - -
    encrypt (data)
    -
    -
    - -

    encrypts by using the given enc_method and hash_method.

    -

    It will first check if the methods are supported, if not it will throw an error, if so it will encrypt the $data

    -
    Parameters:
    - - -
    $datathe string that we want to encrypt.
    -
    -
    -
    Returns:
    the encrypted string.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static hashIV (key,
    method,
    iv_size 
    ) [static, private]
    -
    -
    - -

    hashes the key by using a hash method specified.

    -
    Parameters:
    - - - - -
    $keythe key to be hashed
    $methodthe metho of hashing to be used
    $iv_sizethe size of the initialization vector.
    -
    -
    -
    Returns:
    return the hashed key up till the size of the iv_size param.
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $config [private]
    -
    -
    - -

    array that should contain the enc_method & hash_method & key

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mycrypt.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classPagination.html b/code/web/docs/ams/html/classPagination.html deleted file mode 100644 index 3623ac807..000000000 --- a/code/web/docs/ams/html/classPagination.html +++ /dev/null @@ -1,368 +0,0 @@ - - - - - -Ryzom Account Management System: Pagination Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Pagination Class Reference
    -
    -
    - -

    Handles returning arrays based on a given pagenumber. - More...

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ($query, $db, $nrDisplayed, $resultClass, $params=array())
     Constructor.
     getLast ()
     return the number of the 'last' object attribute
     getCurrent ()
     return the number of the 'current' object attribute
     getElements ()
     return the elements array of the object
     getAmountOfRows ()
     return total amount of rows for the original query
     getLinks ($nrOfLinks)
     return the page links.

    -Private Attributes

     $element_array
     Array containing the elements that are extracted for that specific page number.
     $last
     The last page number.
     $current
     The current page number (read from $_GET['pagenum'])
     $amountOfRows
     Total amount of rows that a query would return (if no limits would be used)
    -

    Detailed Description

    -

    Handles returning arrays based on a given pagenumber.

    -

    By specifing a $_GET['pagenum'] or if not(page = 1 will be used) a few elements from a specific query will be returned. Not all elements have to be loaded into objects, only the elements needed for that specific page, this is a good thing performance wise. This is done by passign the query to the constructor and specifying how many you want to display.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    __construct (query,
    db,
    nrDisplayed,
    resultClass,
    params = array() 
    )
    -
    -
    - -

    Constructor.

    -

    will fetch the correct elements that match to a specific page (specified by the $_GET['pagenum'] variable). The query has to be passed as a string to the function that way it will only load the specific elements that are related to the pagenumber. The $params, parameter is optional and is used to pass the parameters for the query. The result class will be used to instantiate the found elements with, their set() function will be called. The class its getters can be later used to get the info out of the object.

    -
    Parameters:
    - - - - - - -
    $querythe query to be paginated
    $dbthe db on which the query should be performed
    $nrDisplayedthe amount of elements that should be displayed /page
    $resultClassthe elements that should be returned should be of that specific class.
    $paramsthe parameters used by the query (optional)
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    getAmountOfRows ()
    -
    -
    - -

    return total amount of rows for the original query

    -
    Returns:
    the total amount of rows for the original query
    - -
    -
    - -
    -
    - - - - - - - -
    getCurrent ()
    -
    -
    - -

    return the number of the 'current' object attribute

    -
    Returns:
    the number of the current page
    - -
    -
    - -
    -
    - - - - - - - -
    getElements ()
    -
    -
    - -

    return the elements array of the object

    -
    Returns:
    the elements of a specific page (these are instantiations of the class passed as parameter ($resultClass) to the constructor)
    - -
    -
    - -
    -
    - - - - - - - -
    getLast ()
    -
    -
    - -

    return the number of the 'last' object attribute

    -
    Returns:
    the number of the last page
    - -
    -
    - -
    -
    - - - - - - - - -
    getLinks (nrOfLinks)
    -
    -
    - -

    return the page links.

    -

    (for browsing the pages, placed under a table for example) the $nrOfLinks parameter specifies the amount of links you want to return. it will show the links closest to the current page on both sides (in case one side can't show more, it will show more on the other side)

    -
    Returns:
    an array of integerswhich refer to the clickable pagenumbers for browsing other pages.
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $amountOfRows [private]
    -
    -
    - -

    Total amount of rows that a query would return (if no limits would be used)

    - -
    -
    - -
    -
    - - - - -
    $current [private]
    -
    -
    - -

    The current page number (read from $_GET['pagenum'])

    - -
    -
    - -
    -
    - - - - -
    $element_array [private]
    -
    -
    - -

    Array containing the elements that are extracted for that specific page number.

    - -
    -
    - -
    -
    - - - - -
    $last [private]
    -
    -
    - -

    The last page number.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/pagination.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classQuerycache.html b/code/web/docs/ams/html/classQuerycache.html deleted file mode 100644 index 320125d43..000000000 --- a/code/web/docs/ams/html/classQuerycache.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - -Ryzom Account Management System: Querycache Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Querycache Class Reference
    -
    -
    - -

    class for storing changes when shard is offline. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     load_With_SID ($id)
     loads the object's attributes.
     update ()
     updates the entry.
     getSID ()
     get SID attribute of the object.
     getType ()
     get type attribute of the object.
     getQuery ()
     get query attribute of the object.
     getDb ()
     get db attribute of the object.
     setSID ($s)
     set SID attribute of the object.
     setType ($t)
     set type attribute of the object.
     setQuery ($q)
     set query attribute of the object.
     setDb ($d)
     set db attribute of the object.

    -Private Attributes

     $SID
     The queries ID.
     $type
     The type of query.
     $query
     The query itself (json encoded)
     $db
     the db where the query should be performed
    -

    Detailed Description

    -

    class for storing changes when shard is offline.

    -
    Todo:
    make sure that the querycache class is being used by the sync class and also for inserting the queries themselfs into it. Atm this class isn't used yet if I remember correctly
    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    getDb ()
    -
    -
    - -

    get db attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getQuery ()
    -
    -
    - -

    get query attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getSID ()
    -
    -
    - -

    get SID attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getType ()
    -
    -
    - -

    get type attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_SID (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a SID as parameter

    -
    Parameters:
    - - -
    $idthe id of the querycaches row
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('SID' => sid, 'type' => type, 'query' => query, 'db' => db).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setDb (d)
    -
    -
    - -

    set db attribute of the object.

    -
    Parameters:
    - - -
    $dthe name of the database in the config global var that we want to use.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setQuery (q)
    -
    -
    - -

    set query attribute of the object.

    -
    Parameters:
    - - -
    $qquery string
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setSID (s)
    -
    -
    - -

    set SID attribute of the object.

    -
    Parameters:
    - - -
    $sinteger id
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setType (t)
    -
    -
    - -

    set type attribute of the object.

    -
    Parameters:
    - - -
    $ttype of the query, could be changePassword, changePermissions, changeEmail, createUser
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    updates the entry.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $db [private]
    -
    -
    - -

    the db where the query should be performed

    - -
    -
    - -
    -
    - - - - -
    $query [private]
    -
    -
    - -

    The query itself (json encoded)

    - -
    -
    - -
    -
    - - - - -
    $SID [private]
    -
    -
    - -

    The queries ID.

    - -
    -
    - -
    -
    - - - - -
    $type [private]
    -
    -
    - -

    The type of query.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classSupport__Group.html b/code/web/docs/ams/html/classSupport__Group.html deleted file mode 100644 index badfc9e03..000000000 --- a/code/web/docs/ams/html/classSupport__Group.html +++ /dev/null @@ -1,1082 +0,0 @@ - - - - - -Ryzom Account Management System: Support_Group Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    groups moderators & admins together. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     create ()
     creates a new 'support_group' entry.
     load_With_SGroupId ($id)
     loads the object's attributes.
     update ()
     update the objects attributes to the db.
     delete ()
     deletes an existing 'support_group' entry.
     getSGroupId ()
     get sGroupId attribute of the object.
     getName ()
     get name attribute of the object.
     getTag ()
     get tag attribute of the object.
     getGroupEmail ()
     get groupEmail attribute of the object.
     getIMAP_MailServer ()
     get iMAP_MailServer attribute of the object.
     getIMAP_Username ()
     get iMAP_Username attribute of the object.
     getIMAP_Password ()
     get iMAP_Password attribute of the object.
     setSGroupId ($id)
     set sGroupId attribute of the object.
     setName ($n)
     set name attribute of the object.
     setTag ($t)
     set tag attribute of the object.
     setGroupEmail ($ge)
     set groupEmail attribute of the object.
     setIMAP_MailServer ($ms)
     set iMAP_MailServer attribute of the object.
     setIMAP_Username ($u)
     set iMAP_Username attribute of the object.
     setIMAP_Password ($p)
     set iMAP_Password attribute of the object.

    -Static Public Member Functions

    static getGroup ($id)
     return a specific support_group object.
    static getGroups ()
     return all support_group objects.
    static createSupportGroup ($name, $tag, $groupemail, $imap_mailserver, $imap_username, $imap_password)
     Wrapper for creating a support group.
    static supportGroup_EntryNotExists ($name, $tag)
     check if support group name/tag doesn't exist yet.
    static supportGroup_Exists ($id)
     check if support group entry coupled to a given id exist or not.
    static constr_SGroupId ($id)
     construct an object based on the SGroupId.
    static getAllUsersOfSupportGroup ($group_id)
     get list of all users that are enlisted to a support group.
    static deleteSupportGroup ($group_id)
     wrapper for deleting a support group.
    static deleteUserOfSupportGroup ($user_id, $group_id)
     wrapper for deleting a user that's in a specified support group.
    static addUserToSupportGroup ($user_id, $group_id)
     wrapper for adding a user to a specified support group.
    static getAllSupportGroups ()
     return all support_group objects.

    -Private Attributes

     $sGroupId
     The id of the support group.
     $name
     The name of the support group.
     $tag
     The tag of the support group, a tag is max 4 letters big, and will be used in the future as easy reference to indicate what group it is refered to (eg [DEV])
     $groupEmail
     The email address of the group.
     $iMAP_MailServer
     The imap server connection string.
     $iMAP_Username
     The imap username of the account.
     $iMAP_Password
     The imap matching password.
    -

    Detailed Description

    -

    groups moderators & admins together.

    -

    A Support Group is a group of people with the same skills or knowledge. A typical example will be the (Developers group, webteam group, management, etc..) The idea is that tickets can be forwarded to a group of persons that might be able to answer that specific question. Support Groups are also the key of handling the emails, because the email addresses of the support groups will be used by the Mail_Handler class.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static addUserToSupportGroup (user_id,
    group_id 
    ) [static]
    -
    -
    - -

    wrapper for adding a user to a specified support group.

    -

    We will first check if the group really exists, if not than "GROUP_NOT_EXISING" will be returned. Afterwards we will check if the user exists in the support group, if so "ALREADY_ADDED" will be returned. Else the user will be added to the in_support_group table and "SUCCESS" will be returned.

    -
    Parameters:
    - - - -
    $user_idthe id of the user we want to add to the group.
    $group_idthe id of the group the user wants to be in
    -
    -
    -
    Returns:
    a string (SUCCESS, ALREADY_ADDED or GROUP_NOT_EXISTING)
    - -
    -
    - -
    -
    - - - - - - - - -
    static constr_SGroupId (id) [static]
    -
    -
    - -

    construct an object based on the SGroupId.

    -
    Parameters:
    - - -
    $idthe id of the group we want to construct
    -
    -
    -
    Returns:
    the constructed support group object
    - -
    -
    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'support_group' entry.

    -

    this method will use the object's attributes for creating a new 'support_group' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static createSupportGroup (name,
    tag,
    groupemail,
    imap_mailserver,
    imap_username,
    imap_password 
    ) [static]
    -
    -
    - -

    Wrapper for creating a support group.

    -

    It will check if the support group doesn't exist yet, if the tag or name already exists then NAME_TAKEN or TAG_TAKEN will be returned. If the name is bigger than 20 characters or smaller than 4 and the tag greater than 7 or smaller than 2 a SIZE_ERROR will be returned. Else it will return SUCCESS

    -
    Returns:
    a string that specifies if it was a success or not (SUCCESS, SIZE_ERROR, NAME_TAKEN or TAG_TAKEN )
    - -
    -
    - -
    -
    - - - - - - - -
    delete ()
    -
    -
    - -

    deletes an existing 'support_group' entry.

    -

    this method will use the object's attributes for deleting an existing 'support_group' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - - -
    static deleteSupportGroup (group_id) [static]
    -
    -
    - -

    wrapper for deleting a support group.

    -

    We will first check if the group really exists, if not than "GROUP_NOT_EXISING" will be returned.

    -
    Parameters:
    - - -
    $group_idthe id of the group we want to delete
    -
    -
    -
    Returns:
    an array of ticket_user objects that are in the support group.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static deleteUserOfSupportGroup (user_id,
    group_id 
    ) [static]
    -
    -
    - -

    wrapper for deleting a user that's in a specified support group.

    -

    We will first check if the group really exists, if not than "GROUP_NOT_EXISING" will be returned. Afterwards we will check if the user exists in the support group, if not "USER_NOT_IN_GROUP" will be returned. Else the users entry in the in_support_group table will be deleted and "SUCCESS" will be returned.

    -
    Parameters:
    - - - -
    $user_idthe id of the user we want to remove out of the group.
    $group_idthe id of the group the user should be in
    -
    -
    -
    Returns:
    a string (SUCCESS, USER_NOT_IN_GROUP or GROUP_NOT_EXISTING)
    - -
    -
    - -
    -
    - - - - - - - -
    static getAllSupportGroups () [static]
    -
    -
    - -

    return all support_group objects.

    -
    Returns:
    an array containing all support_group objects.
    -
    Deprecated:
    should be removed in the future, because getGroups does the same.
    - -
    -
    - -
    -
    - - - - - - - - -
    static getAllUsersOfSupportGroup (group_id) [static]
    -
    -
    - -

    get list of all users that are enlisted to a support group.

    -
    Parameters:
    - - -
    $group_idthe id of the group we want to query
    -
    -
    -
    Returns:
    an array of ticket_user objects that are in the support group.
    - -
    -
    - -
    -
    - - - - - - - - -
    static getGroup (id) [static]
    -
    -
    - -

    return a specific support_group object.

    -
    Parameters:
    - - -
    $idthe id of the support group that we want to return
    -
    -
    -
    Returns:
    a support_group object.
    - -
    -
    - -
    -
    - - - - - - - -
    getGroupEmail ()
    -
    -
    - -

    get groupEmail attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    static getGroups () [static]
    -
    -
    - -

    return all support_group objects.

    -
    Returns:
    an array containing all support_group objects.
    - -
    -
    - -
    -
    - - - - - - - -
    getIMAP_MailServer ()
    -
    -
    - -

    get iMAP_MailServer attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getIMAP_Password ()
    -
    -
    - -

    get iMAP_Password attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getIMAP_Username ()
    -
    -
    - -

    get iMAP_Username attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getName ()
    -
    -
    - -

    get name attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getSGroupId ()
    -
    -
    - -

    get sGroupId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTag ()
    -
    -
    - -

    get tag attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_SGroupId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a group id, it will put the matching groups attributes in the object.

    -
    Parameters:
    - - -
    $idthe id of the support group that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('SGroupId' => groupid, 'Name' => name, 'Tag' => tag, 'GroupEmail' => mail, 'IMAP_MailServer' => server, 'IMAP_Username' => username,'IMAP_Password' => pass).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setGroupEmail (ge)
    -
    -
    - -

    set groupEmail attribute of the object.

    -
    Parameters:
    - - -
    $geemail of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setIMAP_MailServer (ms)
    -
    -
    - -

    set iMAP_MailServer attribute of the object.

    -
    Parameters:
    - - -
    $msmailserver of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setIMAP_Password (p)
    -
    -
    - -

    set iMAP_Password attribute of the object.

    -
    Parameters:
    - - -
    $pimap password of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setIMAP_Username (u)
    -
    -
    - -

    set iMAP_Username attribute of the object.

    -
    Parameters:
    - - -
    $uimap username of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setName (n)
    -
    -
    - -

    set name attribute of the object.

    -
    Parameters:
    - - -
    $nname of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setSGroupId (id)
    -
    -
    - -

    set sGroupId attribute of the object.

    -
    Parameters:
    - - -
    $idinteger id of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTag (t)
    -
    -
    - -

    set tag attribute of the object.

    -
    Parameters:
    - - -
    $ttag of the group
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static supportGroup_EntryNotExists (name,
    tag 
    ) [static]
    -
    -
    - -

    check if support group name/tag doesn't exist yet.

    -
    Parameters:
    - - - -
    $namethe name of the group we want to check
    $tagthe tag of the group we want to check
    -
    -
    -
    Returns:
    if name is already taken return NAME_TAKEN, else if tag is already taken return TAG_TAKEN, else return success.
    - -
    -
    - -
    -
    - - - - - - - - -
    static supportGroup_Exists (id) [static]
    -
    -
    - -

    check if support group entry coupled to a given id exist or not.

    -
    Parameters:
    - - -
    $idthe id of the group we want to check
    -
    -
    -
    Returns:
    true or false.
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    update the objects attributes to the db.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $groupEmail [private]
    -
    -
    - -

    The email address of the group.

    - -
    -
    - -
    -
    - - - - -
    $iMAP_MailServer [private]
    -
    -
    - -

    The imap server connection string.

    - -
    -
    - -
    -
    - - - - -
    $iMAP_Password [private]
    -
    -
    - -

    The imap matching password.

    - -
    -
    - -
    -
    - - - - -
    $iMAP_Username [private]
    -
    -
    - -

    The imap username of the account.

    - -
    -
    - -
    -
    - - - - -
    $name [private]
    -
    -
    - -

    The name of the support group.

    - -
    -
    - -
    -
    - - - - -
    $sGroupId [private]
    -
    -
    - -

    The id of the support group.

    - -
    -
    - -
    -
    - - - - -
    $tag [private]
    -
    -
    - -

    The tag of the support group, a tag is max 4 letters big, and will be used in the future as easy reference to indicate what group it is refered to (eg [DEV])

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classSync.html b/code/web/docs/ams/html/classSync.html deleted file mode 100644 index a8dd8f45e..000000000 --- a/code/web/docs/ams/html/classSync.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Ryzom Account Management System: Sync Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Sync Class Reference
    -
    -
    - -

    handler for performing changes when shard is back online after being offline. - More...

    - - - - -

    -Static Public Member Functions

    static syncdata ()
     performs the actions listed in the querycache.
    -

    Detailed Description

    -

    handler for performing changes when shard is back online after being offline.

    -

    the sync class is responsible for the syncdata function, which will synchronise the website with the shard (when the shard is offline, users can still change their password, email or even register)

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    static syncdata () [static]
    -
    -
    - -

    performs the actions listed in the querycache.

    -

    All entries in the querycache will be read and performed depending on their type. This is done because the shard could have been offline and we want changes made on the website (which is still online) to eventually hit the shard. These changes are: createPermissions, createUser, change_pass, change_mail

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket.html b/code/web/docs/ams/html/classTicket.html deleted file mode 100644 index 939c11d57..000000000 --- a/code/web/docs/ams/html/classTicket.html +++ /dev/null @@ -1,1429 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    class that handles most ticket related functions. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     create ()
     creates a new 'ticket' entry.
     load_With_TId ($id)
     loads the object's attributes.
     update ()
     update the objects attributes to the db.
     hasInfo ()
     check if a ticket has a ticket_info page or not.
     getTId ()
     get tId attribute of the object.
     getTimestamp ()
     get timestamp attribute of the object in the format defined in the outputTime function of the Helperclass.
     getTitle ()
     get title attribute of the object.
     getStatus ()
     get status attribute of the object.
     getStatusText ()
     get status attribute of the object in the form of text (string).
     getCategoryName ()
     get category attribute of the object in the form of text (string).
     getQueue ()
     get queue attribute of the object.
     getTicket_Category ()
     get ticket_category attribute of the object (int).
     getAuthor ()
     get author attribute of the object (int).
     getPriority ()
     get priority attribute of the object (int).
     getPriorityText ()
     get priority attribute of the object in the form of text (string).
     getAssigned ()
     get the user assigned to the ticket.
     getForwardedGroupName ()
     get the name of the support group to whom the ticket is forwarded or return 0 in case not forwarded.
     getForwardedGroupId ()
     get the id of the support group to whom the ticket is forwarded or return 0 in case not forwarded.
     setTId ($id)
     set tId attribute of the object.
     setTimestamp ($ts)
     set timestamp attribute of the object.
     setTitle ($t)
     set title attribute of the object.
     setStatus ($s)
     set status attribute of the object.
     setQueue ($q)
     set queue attribute of the object.
     setTicket_Category ($tc)
     set ticket_category attribute of the object.
     setAuthor ($a)
     set author attribute of the object.
     setPriority ($p)
     set priority attribute of the object.

    -Static Public Member Functions

    static ticketExists ($id)
     check if a ticket exists.
    static getStatusArray ()
     return an array of the possible statuses
    static getPriorityArray ()
     return an array of the possible priorities
    static getEntireTicket ($id, $view_as_admin)
     return an entire ticket.
    static getTicketsOf ($author)
     return all tickets of a specific user.
    static create_Ticket ($title, $content, $category, $author, $real_author, $for_support_group=0, $extra_info=0)
     function that creates a new ticket.
    static updateTicketStatus ($ticket_id, $newStatus, $author)
     updates the ticket's status.
    static updateTicketStatusAndPriority ($ticket_id, $newStatus, $newPriority, $author)
     updates the ticket's status & priority.
    static getLatestReply ($ticket_id)
     return the latest reply of a ticket
    static createReply ($content, $author, $ticket_id, $hidden)
     create a new reply for a ticket.
    static assignTicket ($user_id, $ticket_id)
     assign a ticket to a user.
    static unAssignTicket ($user_id, $ticket_id)
     unassign a ticket of a user.
    static forwardTicket ($user_id, $ticket_id, $group_id)
     forward a ticket to a specific support group.

    -Private Attributes

     $tId
     The id of ticket.
     $timestamp
     Timestamp of the ticket.
     $title
     Title of the ticket.
     $status
     Status of the ticket (0 = waiting on user reply, 1 = waiting on support, (2= not used atm), 3 = closed.
     $queue
     (not in use atm)
     $ticket_category
     the id of the category belonging to the ticket
     $author
     The ticket_users id.
     $priority
     The priority of the ticket where 0 = low, 3= supadupahigh.
    -

    Detailed Description

    -

    class that handles most ticket related functions.

    -

    the ticket class is used for most ticketing related functions, it also holds some wrapper functions.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static assignTicket (user_id,
    ticket_id 
    ) [static]
    -
    -
    - -

    assign a ticket to a user.

    -

    Checks if the ticket exists, if so then it will try to assign the user to it, a log entry will be written about this.

    -
    Parameters:
    - - - -
    $user_idthe id of user trying to be assigned to the ticket.
    $ticket_idthe id of the ticket that we try to assign to the user.
    -
    -
    -
    Returns:
    SUCCESS_ASSIGNED, TICKET_NOT_EXISTING or ALREADY_ASSIGNED
    - -
    -
    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'ticket' entry.

    -

    this method will use the object's attributes for creating a new 'ticket' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static create_Ticket (title,
    content,
    category,
    author,
    real_author,
    for_support_group = 0,
    extra_info = 0 
    ) [static]
    -
    -
    - -

    function that creates a new ticket.

    -

    A new ticket will be created, in case the extra_info != 0 and the http request came from ingame, then a ticket_info page will be created. A log entry will be written, depending on the $real_authors value. In case the for_support_group parameter is set, the ticket will be forwarded immediately. Also the mail handler will create a new email that will be sent to the author to notify him that his ticket is freshly created.

    -
    Parameters:
    - - - - - - - - -
    $titlethe title we want to give to the ticket.
    $contentthe content we want to give to the starting post of the ticket.
    $categorythe id of the category that should be related to the ticket.
    $authorthe person who's id will be stored in the database as creator of the ticket.
    $real_authorshould be the same id, or a moderator/admin who creates a ticket for another user (this is used for logging purposes).
    $for_support_groupin case you directly want to forward the ticket after creating it. (default value = 0 = don't forward)
    $extra_infoused for creating an ticket_info page related to the ticket, this only happens when the ticket is made ingame.
    -
    -
    -
    Returns:
    the created tickets id.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static createReply (content,
    author,
    ticket_id,
    hidden 
    ) [static]
    -
    -
    - -

    create a new reply for a ticket.

    -

    A reply will only be added if the content isn't empty and if the ticket isn't closed. The ticket creator will be notified by email that someone else replied on his ticket.

    -
    Parameters:
    - - - - - -
    $contentthe content of the reply
    $authorthe author of the reply
    $ticket_idthe id of the ticket to which we want to add the reply.
    $hiddenboolean that specifies if the reply should only be shown to mods/admins or all users.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static forwardTicket (user_id,
    ticket_id,
    group_id 
    ) [static]
    -
    -
    - -

    forward a ticket to a specific support group.

    -

    Checks if the ticket exists, if so then it will try to forward the ticket to the support group specified, a log entry will be written about this. if no log entry should be written then the user_id should be 0, else te $user_id will be used in the log to specify who forwarded it.

    -
    Parameters:
    - - - - -
    $user_idthe id of user trying to forward the ticket.
    $ticket_idthe id of the ticket that we try to forward to a support group.
    $group_idthe id of the support group.
    -
    -
    -
    Returns:
    SUCCESS_FORWARDED, TICKET_NOT_EXISTING or INVALID_SGROUP
    - -
    -
    - -
    -
    - - - - - - - -
    getAssigned ()
    -
    -
    - -

    get the user assigned to the ticket.

    -

    or return 0 in case not assigned.

    - -
    -
    - -
    -
    - - - - - - - -
    getAuthor ()
    -
    -
    - -

    get author attribute of the object (int).

    - -
    -
    - -
    -
    - - - - - - - -
    getCategoryName ()
    -
    -
    - -

    get category attribute of the object in the form of text (string).

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static getEntireTicket (id,
    view_as_admin 
    ) [static]
    -
    -
    - -

    return an entire ticket.

    -

    returns the ticket object and an array of all replies to that ticket.

    -
    Parameters:
    - - - -
    $idthe id of the ticket.
    $view_as_admintrue if the viewer of the ticket is a mod, else false (depending on this it will also show the hidden comments)
    -
    -
    -
    Returns:
    an array containing the 'ticket_obj' and a 'reply_array', which is an array containing all replies to that ticket.
    - -
    -
    - -
    -
    - - - - - - - -
    getForwardedGroupId ()
    -
    -
    - -

    get the id of the support group to whom the ticket is forwarded or return 0 in case not forwarded.

    - -
    -
    - -
    -
    - - - - - - - -
    getForwardedGroupName ()
    -
    -
    - -

    get the name of the support group to whom the ticket is forwarded or return 0 in case not forwarded.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getLatestReply (ticket_id) [static]
    -
    -
    - -

    return the latest reply of a ticket

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket.
    -
    -
    -
    Returns:
    a ticket_reply object.
    - -
    -
    - -
    -
    - - - - - - - -
    getPriority ()
    -
    -
    - -

    get priority attribute of the object (int).

    - -
    -
    - -
    -
    - - - - - - - -
    static getPriorityArray () [static]
    -
    -
    - -

    return an array of the possible priorities

    -
    Returns:
    an array containing the string values that represent the different priorities.
    - -
    -
    - -
    -
    - - - - - - - -
    getPriorityText ()
    -
    -
    - -

    get priority attribute of the object in the form of text (string).

    - -
    -
    - -
    -
    - - - - - - - -
    getQueue ()
    -
    -
    - -

    get queue attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getStatus ()
    -
    -
    - -

    get status attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    static getStatusArray () [static]
    -
    -
    - -

    return an array of the possible statuses

    -
    Returns:
    an array containing the string values that represent the different statuses.
    - -
    -
    - -
    -
    - - - - - - - -
    getStatusText ()
    -
    -
    - -

    get status attribute of the object in the form of text (string).

    - -
    -
    - -
    -
    - - - - - - - -
    getTicket_Category ()
    -
    -
    - -

    get ticket_category attribute of the object (int).

    - -
    -
    - -
    -
    - - - - - - - - -
    static getTicketsOf (author) [static]
    -
    -
    - -

    return all tickets of a specific user.

    -

    an array of all tickets created by a specific user are returned by this function.

    -
    Parameters:
    - - -
    $authorthe id of the user of whom we want all tickets from.
    -
    -
    -
    Returns:
    an array containing all ticket objects related to a user.
    - -
    -
    - -
    -
    - - - - - - - -
    getTId ()
    -
    -
    - -

    get tId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTimestamp ()
    -
    -
    - -

    get timestamp attribute of the object in the format defined in the outputTime function of the Helperclass.

    - -
    -
    - -
    -
    - - - - - - - -
    getTitle ()
    -
    -
    - -

    get title attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    hasInfo ()
    -
    -
    - -

    check if a ticket has a ticket_info page or not.

    -
    Returns:
    true or false
    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a TId (ticket id).

    -
    Parameters:
    - - -
    $idthe id of the ticket that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('TId' => ticket_id, 'Title' => title, 'Status'=> status, 'Timestamp' => ts, 'Queue' => queue, 'Ticket_Category' => tc, 'Author' => author, 'Priority' => priority).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setAuthor (a)
    -
    -
    - -

    set author attribute of the object.

    -
    Parameters:
    - - -
    $aauthor of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setPriority (p)
    -
    -
    - -

    set priority attribute of the object.

    -
    Parameters:
    - - -
    $ppriority of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setQueue (q)
    -
    -
    - -

    set queue attribute of the object.

    -
    Parameters:
    - - -
    $qqueue of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setStatus (s)
    -
    -
    - -

    set status attribute of the object.

    -
    Parameters:
    - - -
    $sstatus of the ticket(int)
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTicket_Category (tc)
    -
    -
    - -

    set ticket_category attribute of the object.

    -
    Parameters:
    - - -
    $tcticket_category id of the ticket(int)
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTId (id)
    -
    -
    - -

    set tId attribute of the object.

    -
    Parameters:
    - - -
    $idinteger id of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTimestamp (ts)
    -
    -
    - -

    set timestamp attribute of the object.

    -
    Parameters:
    - - -
    $tstimestamp of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTitle (t)
    -
    -
    - -

    set title attribute of the object.

    -
    Parameters:
    - - -
    $ttitle of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    static ticketExists (id) [static]
    -
    -
    - -

    check if a ticket exists.

    -
    Parameters:
    - - -
    $idthe id of the ticket to be checked.
    -
    -
    -
    Returns:
    true if the ticket exists, else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static unAssignTicket (user_id,
    ticket_id 
    ) [static]
    -
    -
    - -

    unassign a ticket of a user.

    -

    Checks if the ticket exists, if so then it will try to unassign the user of it, a log entry will be written about this.

    -
    Parameters:
    - - - -
    $user_idthe id of user trying to be assigned to the ticket.
    $ticket_idthe id of the ticket that we try to assign to the user.
    -
    -
    -
    Returns:
    SUCCESS_UNASSIGNED, TICKET_NOT_EXISTING or NOT_ASSIGNED
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    update the objects attributes to the db.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static updateTicketStatus (ticket_id,
    newStatus,
    author 
    ) [static]
    -
    -
    - -

    updates the ticket's status.

    -

    A log entry about this will be created only if the newStatus is different from the current status.

    -
    Parameters:
    - - - - -
    $ticket_idthe id of the ticket of which we want to change the status.
    $newStatusthe new status value (integer)
    $authorthe user (id) that performed the update status action
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static updateTicketStatusAndPriority (ticket_id,
    newStatus,
    newPriority,
    author 
    ) [static]
    -
    -
    - -

    updates the ticket's status & priority.

    -

    A log entry about this will be created only if the newStatus is different from the current status and also when the newPriority is different from the current priority.

    -
    Todo:
    break this function up into a updateStatus (already exists) and updatePriority function and perhaps write a wrapper function for the combo.
    -
    Parameters:
    - - - - - -
    $ticket_idthe id of the ticket of which we want to change the status & priority
    $newStatusthe new status value (integer)
    $newPrioritythe new priority value (integer)
    $authorthe user (id) that performed the update
    -
    -
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $author [private]
    -
    -
    - -

    The ticket_users id.

    - -
    -
    - -
    -
    - - - - -
    $priority [private]
    -
    -
    - -

    The priority of the ticket where 0 = low, 3= supadupahigh.

    - -
    -
    - -
    -
    - - - - -
    $queue [private]
    -
    -
    - -

    (not in use atm)

    - -
    -
    - -
    -
    - - - - -
    $status [private]
    -
    -
    - -

    Status of the ticket (0 = waiting on user reply, 1 = waiting on support, (2= not used atm), 3 = closed.

    - -
    -
    - -
    -
    - - - - -
    $ticket_category [private]
    -
    -
    - -

    the id of the category belonging to the ticket

    - -
    -
    - -
    -
    - - - - -
    $tId [private]
    -
    -
    - -

    The id of ticket.

    - -
    -
    - -
    -
    - - - - -
    $timestamp [private]
    -
    -
    - -

    Timestamp of the ticket.

    - -
    -
    - -
    -
    - - - - -
    $title [private]
    -
    -
    - -

    Title of the ticket.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Category.html b/code/web/docs/ams/html/classTicket__Category.html deleted file mode 100644 index 4a04b6b8d..000000000 --- a/code/web/docs/ams/html/classTicket__Category.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Category Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Ticket_Category Class Reference
    -
    -
    - -

    Class related to the ticket categories. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     load_With_TCategoryId ($id)
     loads the object's attributes.
     update ()
     update object attributes to the DB.
     getName ()
     get name attribute of the object.
     getTCategoryId ()
     get tCategoryId attribute of the object.
     setName ($n)
     set name attribute of the object.
     setTCategoryId ($id)
     set tCategoryId attribute of the object.

    -Static Public Member Functions

    static createTicketCategory ($name)
     creates a ticket_Catergory in the DB.
    static constr_TCategoryId ($id)
     construct a category object based on the TCategoryId.
    static getAllCategories ()
     return a list of all category objects.

    -Private Attributes

     $tCategoryId
     The id of the category.
     $name
     The name of the category.
    -

    Detailed Description

    -

    Class related to the ticket categories.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - -
    static constr_TCategoryId (id) [static]
    -
    -
    - -

    construct a category object based on the TCategoryId.

    -
    Returns:
    constructed element based on TCategoryId
    - -
    -
    - -
    -
    - - - - - - - - -
    static createTicketCategory (name) [static]
    -
    -
    - -

    creates a ticket_Catergory in the DB.

    -
    Parameters:
    - - -
    $namename we want to give to the new category.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    static getAllCategories () [static]
    -
    -
    - -

    return a list of all category objects.

    -
    Returns:
    an array consisting of all category objects.
    - -
    -
    - -
    -
    - - - - - - - -
    getName ()
    -
    -
    - -

    get name attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTCategoryId ()
    -
    -
    - -

    get tCategoryId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TCategoryId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a categories id.

    -
    Parameters:
    - - -
    $idthe id of the ticket_category that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setName (n)
    -
    -
    - -

    set name attribute of the object.

    -
    Parameters:
    - - -
    $nname of the category
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTCategoryId (id)
    -
    -
    - -

    set tCategoryId attribute of the object.

    -
    Parameters:
    - - -
    $idinteger id of the category
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    update object attributes to the DB.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $name [private]
    -
    -
    - -

    The name of the category.

    - -
    -
    - -
    -
    - - - - -
    $tCategoryId [private]
    -
    -
    - -

    The id of the category.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Content.html b/code/web/docs/ams/html/classTicket__Content.html deleted file mode 100644 index 0f375bbb7..000000000 --- a/code/web/docs/ams/html/classTicket__Content.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Content Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Ticket_Content Class Reference
    -
    -
    - -

    Class that handles the content of a reply. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     create ()
     creates a new 'tickt_content' entry.
     load_With_TContentId ($id)
     loads the object's attributes.
     update ()
     update the object's attributes to the database.
     getContent ()
     get content attribute of the object.
     getTContentId ()
     get tContentId attribute of the object.
     setContent ($c)
     set content attribute of the object.
     setTContentId ($c)
     set tContentId attribute of the object.

    -Static Public Member Functions

    static constr_TContentId ($id)
     return constructed element based on TContentId.

    -Private Attributes

     $tContentId
     The id of ticket_content entry.
     $content
     The content of an entry.
    -

    Detailed Description

    -

    Class that handles the content of a reply.

    -

    The Ticket_Content has a one-to-one relation with a ticket_reply, it contains the content of a reply, this way the content doesn't always have to be loaded when we query the database when we only need information regarding to the replies basic information.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - -
    static constr_TContentId (id) [static]
    -
    -
    - -

    return constructed element based on TContentId.

    -
    Parameters:
    - - -
    $idthe id of ticket_content entry.
    -
    -
    -
    Returns:
    a constructed ticket_content object by specifying the TContentId.
    - -
    -
    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'tickt_content' entry.

    -

    this method will use the object's attributes for creating a new 'ticket_content' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - -
    getContent ()
    -
    -
    - -

    get content attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTContentId ()
    -
    -
    - -

    get tContentId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TContentId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a ticket_content's id,

    -
    Parameters:
    - - -
    $idthe id of the ticket_content entry that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setContent (c)
    -
    -
    - -

    set content attribute of the object.

    -
    Parameters:
    - - -
    $ccontent of a reply
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTContentId (c)
    -
    -
    - -

    set tContentId attribute of the object.

    -
    Parameters:
    - - -
    $cinteger id of ticket_content entry
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    update the object's attributes to the database.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $content [private]
    -
    -
    - -

    The content of an entry.

    - -
    -
    - -
    -
    - - - - -
    $tContentId [private]
    -
    -
    - -

    The id of ticket_content entry.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Info.html b/code/web/docs/ams/html/classTicket__Info.html deleted file mode 100644 index c88c41481..000000000 --- a/code/web/docs/ams/html/classTicket__Info.html +++ /dev/null @@ -1,1463 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Info Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    Class that handles additional info sent by ticket creation ingame. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     load_With_TInfoId ($id)
     loads the object's attributes by using a ticket_info id.
     load_With_Ticket ($id)
     loads the object's attributes by using a ticket's id.
     create ()
     creates a new 'ticket_info' entry.
     getTInfoId ()
     get tInfoId attribute of the object.
     getTicket ()
     get ticket attribute of the object.
     getShardId ()
     get shardid attribute of the object.
     getUser_Position ()
     get user_position attribute of the object.
     getView_Position ()
     get view_position attribute of the object.
     getClient_Version ()
     get client_version attribute of the object.
     getPatch_Version ()
     get patch_version attribute of the object.
     getServer_Tick ()
     get server_tick attribute of the object.
     getConnect_State ()
     get connect_state attribute of the object.
     getLocal_Address ()
     get local_address attribute of the object.
     getMemory ()
     get memory attribute of the object.
     getOS ()
     get os attribute of the object.
     getProcessor ()
     get processor attribute of the object.
     getCPUId ()
     get cpu_id attribute of the object.
     getCPU_Mask ()
     get cpu_mask attribute of the object.
     getHT ()
     get ht attribute of the object.
     getNel3D ()
     get nel3d attribute of the object.
     getUser_Id ()
     get user_id attribute of the object.
     setTInfoId ($id)
     set tInfoId attribute of the object.
     setTicket ($t)
     set ticket attribute of the object.
     setShardId ($s)
     set shardid attribute of the object.
     setUser_Position ($u)
     set user_position attribute of the object.
     setView_Position ($v)
     set view_position attribute of the object.
     setClient_Version ($c)
     set client_version attribute of the object.
     setPatch_Version ($p)
     set patch_version attribute of the object.
     setServer_Tick ($s)
     set server_tick attribute of the object.
     setConnect_State ($c)
     set connect_state attribute of the object.
     setLocal_Address ($l)
     set local_address attribute of the object.
     setMemory ($m)
     set memory attribute of the object.
     setOS ($o)
     set os attribute of the object.
     setProcessor ($p)
     set processor attribute of the object.
     setCPUId ($c)
     set cpu_id attribute of the object.
     setCPU_Mask ($c)
     set cpu_mask attribute of the object.
     setHT ($h)
     set ht attribute of the object.
     setNel3D ($n)
     set nel3d attribute of the object.
     setUser_Id ($u)
     set user_id attribute of the object.

    -Static Public Member Functions

    static create_Ticket_Info ($info_array)
     create a ticket_info entry.
    static TicketHasInfo ($ticket_id)
     check if a specific ticket has extra info or not.

    -Private Attributes

     $tInfoId
     The id of ticket_info entry.
     $ticket
     The ticket linked to this ticket_info entry.
     $shardid
     The shard id.
     $user_position
     The user's character position.
     $view_position
     The view position of the character.
     $client_version
     The client version in use.
     $patch_version
     The patch version in use.
     $server_tick
     The current server tick.
     $connect_state
     The connect state.
     $local_address
     local ip
     $memory
     memory usage information
     $os
     os information
     $processor
     processor information
     $cpu_id
     the cpu id
     $cpu_mask
     the cpu mask
     $ht
     tbh I have no idea :D
     $nel3d
     the nel3d version
     $user_id
     The users id.
    -

    Detailed Description

    -

    Class that handles additional info sent by ticket creation ingame.

    -

    If a user creates a ticket ingame, there are a lot of extra $_GET parameters being sent inside the http request that might have something todo with the ticket. for example the OS the user uses or the processor of it's computer, but also the current client version etc. This information can be stored and retrieved by using the ticket_info class.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'ticket_info' entry.

    -

    this method will use the object's attributes for creating a new 'ticket_info' entry in the database.

    - -
    -
    - -
    -
    - - - - - - - - -
    static create_Ticket_Info (info_array) [static]
    -
    -
    - -

    create a ticket_info entry.

    -
    Parameters:
    - - -
    $info_arraythe info array (this can be the entire $_GET array being sent by the ingame browser)
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    getClient_Version ()
    -
    -
    - -

    get client_version attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getConnect_State ()
    -
    -
    - -

    get connect_state attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getCPU_Mask ()
    -
    -
    - -

    get cpu_mask attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getCPUId ()
    -
    -
    - -

    get cpu_id attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getHT ()
    -
    -
    - -

    get ht attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getLocal_Address ()
    -
    -
    - -

    get local_address attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getMemory ()
    -
    -
    - -

    get memory attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getNel3D ()
    -
    -
    - -

    get nel3d attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getOS ()
    -
    -
    - -

    get os attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getPatch_Version ()
    -
    -
    - -

    get patch_version attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getProcessor ()
    -
    -
    - -

    get processor attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getServer_Tick ()
    -
    -
    - -

    get server_tick attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getShardId ()
    -
    -
    - -

    get shardid attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTicket ()
    -
    -
    - -

    get ticket attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTInfoId ()
    -
    -
    - -

    get tInfoId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUser_Id ()
    -
    -
    - -

    get user_id attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUser_Position ()
    -
    -
    - -

    get user_position attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getView_Position ()
    -
    -
    - -

    get view_position attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_Ticket (id)
    -
    -
    - -

    loads the object's attributes by using a ticket's id.

    -

    loads the object's attributes by giving a ticket's entry id.

    -
    Parameters:
    - - -
    $idthe id of the ticket, the ticket_info entry of that ticket should be loaded.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TInfoId (id)
    -
    -
    - -

    loads the object's attributes by using a ticket_info id.

    -

    loads the object's attributes by giving a ticket_info's entry id.

    -
    Parameters:
    - - -
    $idthe id of the ticket_info entry that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setClient_Version (c)
    -
    -
    - -

    set client_version attribute of the object.

    -
    Parameters:
    - - -
    $cclient version number
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setConnect_State (c)
    -
    -
    - -

    set connect_state attribute of the object.

    -
    Parameters:
    - - -
    $cstring that defines the connect state.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setCPU_Mask (c)
    -
    -
    - -

    set cpu_mask attribute of the object.

    -
    Parameters:
    - - -
    $cmask of the cpu
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setCPUId (c)
    -
    -
    - -

    set cpu_id attribute of the object.

    -
    Parameters:
    - - -
    $ccpu id information
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setHT (h)
    -
    -
    - -

    set ht attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    setLocal_Address (l)
    -
    -
    - -

    set local_address attribute of the object.

    -
    Parameters:
    - - -
    $llocal address
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setMemory (m)
    -
    -
    - -

    set memory attribute of the object.

    -
    Parameters:
    - - -
    $mmemory usage
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setNel3D (n)
    -
    -
    - -

    set nel3d attribute of the object.

    -
    Parameters:
    - - -
    $nversion information about NeL3D
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setOS (o)
    -
    -
    - -

    set os attribute of the object.

    -
    Parameters:
    - - -
    $oset os version information
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setPatch_Version (p)
    -
    -
    - -

    set patch_version attribute of the object.

    -
    Parameters:
    - - -
    $ppatch version number
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setProcessor (p)
    -
    -
    - -

    set processor attribute of the object.

    -
    Parameters:
    - - -
    $pprocessor information
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setServer_Tick (s)
    -
    -
    - -

    set server_tick attribute of the object.

    -
    Parameters:
    - - -
    $sinteger that resembles the server tick
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setShardId (s)
    -
    -
    - -

    set shardid attribute of the object.

    -
    Parameters:
    - - -
    $s(integer) shard id
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTicket (t)
    -
    -
    - -

    set ticket attribute of the object.

    -
    Parameters:
    - - -
    $tinteger id of the ticket linked to the info object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTInfoId (id)
    -
    -
    - -

    set tInfoId attribute of the object.

    -
    Parameters:
    - - -
    $idinteger id of ticket_info object itself
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setUser_Id (u)
    -
    -
    - -

    set user_id attribute of the object.

    -
    Parameters:
    - - -
    $uthe user_id.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setUser_Position (u)
    -
    -
    - -

    set user_position attribute of the object.

    -
    Parameters:
    - - -
    $uthe users position
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setView_Position (v)
    -
    -
    - -

    set view_position attribute of the object.

    -
    Parameters:
    - - -
    $vthe view position
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    static TicketHasInfo (ticket_id) [static]
    -
    -
    - -

    check if a specific ticket has extra info or not.

    -

    Not all tickets have extra info, only tickets made ingame do. This function checks if a specific ticket does have a ticket_info entry linked to it.

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket that we want to query
    -
    -
    -
    Returns:
    true or false
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $client_version [private]
    -
    -
    - -

    The client version in use.

    - -
    -
    - -
    -
    - - - - -
    $connect_state [private]
    -
    -
    - -

    The connect state.

    - -
    -
    - -
    -
    - - - - -
    $cpu_id [private]
    -
    -
    - -

    the cpu id

    - -
    -
    - -
    -
    - - - - -
    $cpu_mask [private]
    -
    -
    - -

    the cpu mask

    - -
    -
    - -
    -
    - - - - -
    $ht [private]
    -
    -
    - -

    tbh I have no idea :D

    - -
    -
    - -
    -
    - - - - -
    $local_address [private]
    -
    -
    - -

    local ip

    - -
    -
    - -
    -
    - - - - -
    $memory [private]
    -
    -
    - -

    memory usage information

    - -
    -
    - -
    -
    - - - - -
    $nel3d [private]
    -
    -
    - -

    the nel3d version

    - -
    -
    - -
    -
    - - - - -
    $os [private]
    -
    -
    - -

    os information

    - -
    -
    - -
    -
    - - - - -
    $patch_version [private]
    -
    -
    - -

    The patch version in use.

    - -
    -
    - -
    -
    - - - - -
    $processor [private]
    -
    -
    - -

    processor information

    - -
    -
    - -
    -
    - - - - -
    $server_tick [private]
    -
    -
    - -

    The current server tick.

    - -
    -
    - -
    -
    - - - - -
    $shardid [private]
    -
    -
    - -

    The shard id.

    - -
    -
    - -
    -
    - - - - -
    $ticket [private]
    -
    -
    - -

    The ticket linked to this ticket_info entry.

    - -
    -
    - -
    -
    - - - - -
    $tInfoId [private]
    -
    -
    - -

    The id of ticket_info entry.

    - -
    -
    - -
    -
    - - - - -
    $user_id [private]
    -
    -
    - -

    The users id.

    - -
    -
    - -
    -
    - - - - -
    $user_position [private]
    -
    -
    - -

    The user's character position.

    - -
    -
    - -
    -
    - - - - -
    $view_position [private]
    -
    -
    - -

    The view position of the character.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Log.html b/code/web/docs/ams/html/classTicket__Log.html deleted file mode 100644 index 59efe7def..000000000 --- a/code/web/docs/ams/html/classTicket__Log.html +++ /dev/null @@ -1,763 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Log Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    Class that handles the logging. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     load_With_TLogId ($id)
     loads the object's attributes.
     update ()
     update attributes of the object to the DB.
     getTLogId ()
     get tLogId attribute of the object.
     getTimestamp ()
     get timestamp attribute of the object.
     getQuery ()
     get query attribute of the object.
     getAuthor ()
     get author attribute of the object.
     getTicket ()
     get ticket attribute of the object.
     getAction ()
     get the action id out of the query by decoding it.
     getArgument ()
     get the argument out of the query by decoding it.
     getActionTextArray ()
     get the action text(string) array.
     setTLogId ($id)
     set tLogId attribute of the object.
     setTimestamp ($t)
     set timestamp attribute of the object.
     setQuery ($q)
     set query attribute of the object.
     setAuthor ($a)
     set author attribute of the object.
     setTicket ($t)
     set ticket attribute of the object.

    -Static Public Member Functions

    static getLogsOfTicket ($ticket_id)
     return all log entries related to a ticket.
    static createLogEntry ($ticket_id, $author_id, $action, $arg=-1)
     create a new log entry.
    static constr_TLogId ($id)
     return constructed element based on TLogId
    static getAllLogs ($ticket_id)
     return all log entries related to a ticket.

    -Private Attributes

     $tLogId
     The id of the log entry.
     $timestamp
     The timestamp of the log entry.
     $query
     The query (json encoded array containing action id & argument)
     $author
     author of the log
     $ticket
     the id of the ticket related to the log entry
    -

    Detailed Description

    -

    Class that handles the logging.

    -

    The logging will be used when a ticket is created, a reply is added, if someone views a ticket, if someone assigns a ticket to him or if someone forwards a ticket. This class provides functions to get retrieve those logs and also make them.

    -

    -the Action IDs being used are:

    -
      -
    1. User X Created ticket
    2. -
    3. Admin X created ticket for arg
    4. -
    5. Read ticket
    6. -
    7. Added Reply ID: arg to ticket
    8. -
    9. Changed status to arg
    10. -
    11. Changed Priority to arg
    12. -
    13. assigned to the ticket
    14. -
    15. forwarded ticket to support group arg
    16. -
    17. unassigned to the ticket
    18. -
    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - -
    static constr_TLogId (id) [static]
    -
    -
    - -

    return constructed element based on TLogId

    -
    Parameters:
    - - -
    $idticket_log id of the entry that we want to load into our object.
    -
    -
    -
    Returns:
    constructed ticket_log object.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static createLogEntry (ticket_id,
    author_id,
    action,
    arg = -1 
    ) [static]
    -
    -
    - -

    create a new log entry.

    -

    It will check if the $TICKET_LOGGING global var is true, this var is used to turn logging on and off. In case it's on, the log message will be stored. the action id and argument (which is -1 by default), will be json encoded and stored in the query field in the db.

    -
    Parameters:
    - - - - - -
    $ticket_idthe id of the ticket related to the new log entry
    $author_idthe id of the user that instantiated the logging.
    $actionthe action id (see the list in the class description)
    $argargument for the action (default = -1)
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    getAction ()
    -
    -
    - -

    get the action id out of the query by decoding it.

    - -
    -
    - -
    -
    - - - - - - - -
    getActionTextArray ()
    -
    -
    - -

    get the action text(string) array.

    -

    this is being read from the language .ini files.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getAllLogs (ticket_id) [static]
    -
    -
    - -

    return all log entries related to a ticket.

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket of which we want all related log entries returned.
    -
    -
    -
    Returns:
    an array of ticket_log objects, here the author is an integer.
    -
    Todo:
    only use one of the 2 comparable functions in the future and make the other depricated.
    - -
    -
    - -
    -
    - - - - - - - -
    getArgument ()
    -
    -
    - -

    get the argument out of the query by decoding it.

    - -
    -
    - -
    -
    - - - - - - - -
    getAuthor ()
    -
    -
    - -

    get author attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getLogsOfTicket (ticket_id) [static]
    -
    -
    - -

    return all log entries related to a ticket.

    -
    Parameters:
    - - -
    $ticket_idthe id of the ticket of which we want all related log entries returned.
    -
    -
    -
    Returns:
    an array of ticket_log objects, be aware that the author in the ticket_log object is a ticket_user object on its own (so not a simple integer).
    - -
    -
    - -
    -
    - - - - - - - -
    getQuery ()
    -
    -
    - -

    get query attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTicket ()
    -
    -
    - -

    get ticket attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTimestamp ()
    -
    -
    - -

    get timestamp attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTLogId ()
    -
    -
    - -

    get tLogId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TLogId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a ticket_log entries ID (TLogId).

    -
    Parameters:
    - - -
    idthe id of the ticket_log entry that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setAuthor (a)
    -
    -
    - -

    set author attribute of the object.

    -
    Parameters:
    - - -
    $ainteger id of the user who created the log entry
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setQuery (q)
    -
    -
    - -

    set query attribute of the object.

    -
    Parameters:
    - - -
    $qthe encoded query
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTicket (t)
    -
    -
    - -

    set ticket attribute of the object.

    -
    Parameters:
    - - -
    $tinteger id of ticket of which the log entry is related to.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTimestamp (t)
    -
    -
    - -

    set timestamp attribute of the object.

    -
    Parameters:
    - - -
    $ttimestamp of the log entry
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTLogId (id)
    -
    -
    - -

    set tLogId attribute of the object.

    -
    Parameters:
    - - -
    $idinteger id of the log entry
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    update attributes of the object to the DB.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $author [private]
    -
    -
    - -

    author of the log

    - -
    -
    - -
    -
    - - - - -
    $query [private]
    -
    -
    - -

    The query (json encoded array containing action id & argument)

    - -
    -
    - -
    -
    - - - - -
    $ticket [private]
    -
    -
    - -

    the id of the ticket related to the log entry

    - -
    -
    - -
    -
    - - - - -
    $timestamp [private]
    -
    -
    - -

    The timestamp of the log entry.

    - -
    -
    - -
    -
    - - - - -
    $tLogId [private]
    -
    -
    - -

    The id of the log entry.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Queue.html b/code/web/docs/ams/html/classTicket__Queue.html deleted file mode 100644 index 63ebf5e09..000000000 --- a/code/web/docs/ams/html/classTicket__Queue.html +++ /dev/null @@ -1,401 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Queue Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Ticket_Queue Class Reference
    -
    -
    - -

    Data class that holds a lot of queries that load specific tickets. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     loadAllNotAssignedTickets ()
     loads the not yet assigned tickets query into the objects attributes.
     loadAllTickets ()
     loads the 'all' tickets query into the objects attributes.
     loadAllOpenTickets ()
     loads the 'all open' tickets query into the objects attributes.
     loadAllClosedTickets ()
     loads the 'closed' tickets query into the objects attributes.
     loadToDoTickets ($user_id)
     loads the 'todo' tickets query & params into the objects attributes.
     loadAssignedandWaiting ($user_id)
     loads the 'tickets asssigned to a user and waiting on support' query & params into the objects attributes.
     createQueue ($userid, $groupid, $what, $how, $who)
     loads the 'created' query & params into the objects attributes.
     getQuery ()
     get query attribute of the object.
     getParams ()
     get params attribute of the object.

    -Private Attributes

     $query
     The query that loads specific tickets.
     $params
     The parameter array that's being needed by the query.
    -

    Detailed Description

    -

    Data class that holds a lot of queries that load specific tickets.

    -

    These queries are being used by the ticket_queue_handler class. An object of this class holds 2 attributes: the query and the params used for the query.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    createQueue (userid,
    groupid,
    what,
    how,
    who 
    )
    -
    -
    - -

    loads the 'created' query & params into the objects attributes.

    -

    This function creates dynamically a query based on the selected features.

    -
    Parameters:
    - - - - - - -
    $whospecifies if we want to user the user_id or group_id to form the query.
    $useridthe user's id to whom the tickets should be assigned/not assigned
    $groupidthe group's id to whom the tickets should be forwarded/not forwarded
    $whatspecifies what kind of tickets we want to return: waiting for support, waiting on user, closed
    $howspecifies if the tickets should be or shouldn't be assigned/forwarded to the group/user selected.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    getParams ()
    -
    -
    - -

    get params attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getQuery ()
    -
    -
    - -

    get query attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    loadAllClosedTickets ()
    -
    -
    - -

    loads the 'closed' tickets query into the objects attributes.

    - -
    -
    - -
    -
    - - - - - - - -
    loadAllNotAssignedTickets ()
    -
    -
    - -

    loads the not yet assigned tickets query into the objects attributes.

    - -
    -
    - -
    -
    - - - - - - - -
    loadAllOpenTickets ()
    -
    -
    - -

    loads the 'all open' tickets query into the objects attributes.

    - -
    -
    - -
    -
    - - - - - - - -
    loadAllTickets ()
    -
    -
    - -

    loads the 'all' tickets query into the objects attributes.

    - -
    -
    - -
    -
    - - - - - - - - -
    loadAssignedandWaiting (user_id)
    -
    -
    - -

    loads the 'tickets asssigned to a user and waiting on support' query & params into the objects attributes.

    -
    Parameters:
    - - -
    $user_idthe user's id to whom the tickets should be assigned
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    loadToDoTickets (user_id)
    -
    -
    - -

    loads the 'todo' tickets query & params into the objects attributes.

    -

    first: find the tickets assigned to the user with status = waiting on support, second find all not assigned tickets that aren't forwarded yet. find all tickets assigned to someone else witht status waiting on support, with timestamp of last reply > 1 day, find all non-assigned tickets forwarded to the support groups to which that user belongs

    -
    Parameters:
    - - -
    $user_idthe user's id to whom the tickets should be assigned
    -
    -
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $params [private]
    -
    -
    - -

    The parameter array that's being needed by the query.

    - -
    -
    - -
    -
    - - - - -
    $query [private]
    -
    -
    - -

    The query that loads specific tickets.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Queue__Handler.html b/code/web/docs/ams/html/classTicket__Queue__Handler.html deleted file mode 100644 index 93d3cb996..000000000 --- a/code/web/docs/ams/html/classTicket__Queue__Handler.html +++ /dev/null @@ -1,395 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Queue_Handler Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    Ticket_Queue_Handler Class Reference
    -
    -
    - -

    returns tickets (queues) that are related in some way. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     getTickets ($input, $user_id)
     returns the tickets that are related in someway defined by $input.
     getPagination ()
     get pagination attribute of the object.
     createQueue ($userid, $groupid, $what, $how, $who)
     creates the queue.

    -Static Public Member Functions

    static getNrOfTicketsToDo ($user_id)
     get the number of tickets in the todo queue for a specific user.
    static getNrOfTicketsAssignedWaiting ($user_id)
     get the number of tickets assigned to a specific user and waiting for support.
    static getNrOfTickets ()
     get the total number of tickets.
    static getNewestTicket ()
     get the ticket object of the latest added ticket.

    -Private Attributes

     $pagination
     Pagination object, this way only a few tickets (related to that pagenumber) will be shown.
     $queue
     The queue object, being used to get the queries and parameters.
    -

    Detailed Description

    -

    returns tickets (queues) that are related in some way.

    -

    This class handles the creation and returning of existing ticket queues. Normally a $_GET['get'] parameter is being used to identify what kind of tickets should be shown. the getTickets() function uses this parameter($input) and uses the ticket_queue class to load the specific query.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Instantiates the queue object.

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    createQueue (userid,
    groupid,
    what,
    how,
    who 
    )
    -
    -
    - -

    creates the queue.

    -

    afterwards the getTickets function should be called, else a lot of extra parameters had to be added to the getTickets function..

    - -
    -
    - -
    -
    - - - - - - - -
    static getNewestTicket () [static]
    -
    -
    - -

    get the ticket object of the latest added ticket.

    - -
    -
    - -
    -
    - - - - - - - -
    static getNrOfTickets () [static]
    -
    -
    - -

    get the total number of tickets.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getNrOfTicketsAssignedWaiting (user_id) [static]
    -
    -
    - -

    get the number of tickets assigned to a specific user and waiting for support.

    -
    Parameters:
    - - -
    $user_idthe user being queried
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    static getNrOfTicketsToDo (user_id) [static]
    -
    -
    - -

    get the number of tickets in the todo queue for a specific user.

    -
    Parameters:
    - - -
    $user_idthe user being queried
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    getPagination ()
    -
    -
    - -

    get pagination attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    getTickets (input,
    user_id 
    )
    -
    -
    - -

    returns the tickets that are related in someway defined by $input.

    -

    The $input parameter should be a string that defines what kind of queue should be loaded. A new pagination object will be instantiated and will load 10 entries, related to the $_GET['pagenum'] variable.

    -
    Parameters:
    - - - -
    $inputidentifier that defines what queue to load.
    $user_idthe id of the user that browses the queues, some queues can be depending on this.
    -
    -
    -
    Returns:
    an array consisting of ticket objects, beware, the author & category of a ticket, are objects on their own (no integers are used this time).
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $pagination [private]
    -
    -
    - -

    Pagination object, this way only a few tickets (related to that pagenumber) will be shown.

    - -
    -
    - -
    -
    - - - - -
    $queue [private]
    -
    -
    - -

    The queue object, being used to get the queries and parameters.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__Reply.html b/code/web/docs/ams/html/classTicket__Reply.html deleted file mode 100644 index eed01a154..000000000 --- a/code/web/docs/ams/html/classTicket__Reply.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_Reply Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    handles functions related to replies on tickets. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     create ()
     creates a new 'ticket_reply' entry.
     load_With_TReplyId ($id)
     loads the object's attributes.
     update ()
     updates a ticket_reply entry based on the objects attributes.
     getTicket ()
     get ticket attribute of the object.
     getContent ()
     get content attribute of the object.
     getAuthor ()
     get author attribute of the object.
     getTimestamp ()
     get timestamp attribute of the object.
     getTReplyId ()
     get tReplyId attribute of the object.
     getHidden ()
     get hidden attribute of the object.
     setTicket ($t)
     set ticket attribute of the object.
     setContent ($c)
     set content attribute of the object.
     setAuthor ($a)
     set author attribute of the object.
     setTimestamp ($t)
     set timestamp attribute of the object.
     setTReplyId ($i)
     set tReplyId attribute of the object.
     setHidden ($h)
     set hidden attribute of the object.

    -Static Public Member Functions

    static constr_TReplyId ($id)
     return constructed element based on TReplyId.
    static getRepliesOfTicket ($ticket_id, $view_as_admin)
     return all replies on a specific ticket.
    static createReply ($content, $author, $ticket_id, $hidden, $ticket_creator)
     creates a new reply on a ticket.

    -Private Attributes

     $tReplyId
     The id of the reply.
     $ticket
     the ticket id related to the reply
     $content
     the content of the reply
     $author
     The id of the user that made the reply.
     $timestamp
     The timestamp of the reply.
     $hidden
     indicates if reply should be hidden for normal users or not
    -

    Detailed Description

    -

    handles functions related to replies on tickets.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - -
    static constr_TReplyId (id) [static]
    -
    -
    - -

    return constructed element based on TReplyId.

    -
    Parameters:
    - - -
    $idthe Id the reply we want to load.
    -
    -
    -
    Returns:
    the loaded object.
    - -
    -
    - -
    -
    - - - - - - - -
    create ()
    -
    -
    - -

    creates a new 'ticket_reply' entry.

    -

    this method will use the object's attributes for creating a new 'ticket_reply' entry in the database (the now() function will create the timestamp).

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    static createReply (content,
    author,
    ticket_id,
    hidden,
    ticket_creator 
    ) [static]
    -
    -
    - -

    creates a new reply on a ticket.

    -

    Creates a ticket_content entry and links it with a new created ticket_reply, a log entry will be written about this. In case the ticket creator replies on a ticket, he will set the status by default to 'waiting on support'.

    -
    Parameters:
    - - - - - - -
    $contentthe content of the reply
    $authorthe id of the reply creator.
    $ticket_idthe id of the ticket of which we want the replies.
    $hiddenshould be 0 or 1
    $ticket_creatorthe ticket's starter his id.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    getAuthor ()
    -
    -
    - -

    get author attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getContent ()
    -
    -
    - -

    get content attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getHidden ()
    -
    -
    - -

    get hidden attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static getRepliesOfTicket (ticket_id,
    view_as_admin 
    ) [static]
    -
    -
    - -

    return all replies on a specific ticket.

    -
    Parameters:
    - - - -
    $ticket_idthe id of the ticket of which we want the replies.
    $view_as_adminif the browsing user is an admin/mod it should be 1, this will also show the hidden replies.
    -
    -
    -
    Returns:
    an array with ticket_reply objects (beware the author and content are objects on their own, not integers!)
    - -
    -
    - -
    -
    - - - - - - - -
    getTicket ()
    -
    -
    - -

    get ticket attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTimestamp ()
    -
    -
    - -

    get timestamp attribute of the object.

    -

    The output format is defined by the Helpers class function, outputTime().

    - -
    -
    - -
    -
    - - - - - - - -
    getTReplyId ()
    -
    -
    - -

    get tReplyId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TReplyId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a ticket_reply's id.

    -
    Parameters:
    - - -
    $idthe id of the ticket_reply that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setAuthor (a)
    -
    -
    - -

    set author attribute of the object.

    -
    Parameters:
    - - -
    $ainteger id of the user
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setContent (c)
    -
    -
    - -

    set content attribute of the object.

    -
    Parameters:
    - - -
    $cinteger id of the ticket_content entry
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setHidden (h)
    -
    -
    - -

    set hidden attribute of the object.

    -
    Parameters:
    - - -
    $hshould be 0 or 1
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTicket (t)
    -
    -
    - -

    set ticket attribute of the object.

    -
    Parameters:
    - - -
    $tinteger id of the ticket
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTimestamp (t)
    -
    -
    - -

    set timestamp attribute of the object.

    -
    Parameters:
    - - -
    $ttimestamp of the reply
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTReplyId (i)
    -
    -
    - -

    set tReplyId attribute of the object.

    -
    Parameters:
    - - -
    $iinteger id of the ticket_reply
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    updates a ticket_reply entry based on the objects attributes.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $author [private]
    -
    -
    - -

    The id of the user that made the reply.

    - -
    -
    - -
    -
    - - - - -
    $content [private]
    -
    -
    - -

    the content of the reply

    - -
    -
    - -
    -
    - - - - -
    $hidden [private]
    -
    -
    - -

    indicates if reply should be hidden for normal users or not

    - -
    -
    - -
    -
    - - - - -
    $ticket [private]
    -
    -
    - -

    the ticket id related to the reply

    - -
    -
    - -
    -
    - - - - -
    $timestamp [private]
    -
    -
    - -

    The timestamp of the reply.

    - -
    -
    - -
    -
    - - - - -
    $tReplyId [private]
    -
    -
    - -

    The id of the reply.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classTicket__User.html b/code/web/docs/ams/html/classTicket__User.html deleted file mode 100644 index 3e74dc034..000000000 --- a/code/web/docs/ams/html/classTicket__User.html +++ /dev/null @@ -1,745 +0,0 @@ - - - - - -Ryzom Account Management System: Ticket_User Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    user entry point in the ticket system. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ()
     A constructor.
     set ($values)
     sets the object's attributes.
     load_With_TUserId ($id)
     loads the object's attributes.
     update ()
     update the object's attributes to the db.
     getPermission ()
     get permission attribute of the object.
     getExternId ()
     get externId attribute of the object.
     getTUserId ()
     get tUserId attribute of the object.
     setPermission ($perm)
     set permission attribute of the object.
     setExternId ($id)
     set externId attribute of the object.
     setTUserId ($id)
     set tUserId attribute of the object.

    -Static Public Member Functions

    static createTicketUser ($extern_id, $permission)
     create a new ticket user.
    static isMod ($user)
     check if a ticket_user object is a mod or not.
    static isAdmin ($user)
     check if a ticket_user object is an admin or not.
    static constr_TUserId ($id)
     return constructed ticket_user object based on TUserId.
    static getModsAndAdmins ()
     return a list of all mods/admins.
    static constr_ExternId ($id)
     return constructed ticket_user object based on ExternId.
    static change_permission ($user_id, $perm)
     change the permission of a ticket_user.
    static get_email_by_user_id ($id)
     return the email address of a ticket_user.
    static get_username_from_id ($id)
     return the username of a ticket_user.
    static get_id_from_username ($username)
     return the TUserId of a ticket_user by giving a username.
    static get_id_from_email ($email)
     return the ticket_user id from an email address.

    -Private Attributes

     $tUserId
     The id of the user inside the ticket system.
     $permission
     The permission of the user.
     $externId
     The id of the user account in the www (could be drupal,...) that is linked to the ticket_user.
    -

    Detailed Description

    -

    user entry point in the ticket system.

    -

    The ticket_user makes a link between the entire ticket system's lib db and the www user, which is stored in another db (this is the external ID). The externalID could be the ID of a drupal user or wordpress user,.. The ticket_user also stores the permission of that user, this way the permission system is inside the lib itself and can be used in any www version that you like. permission 1 = user, 2 = mod, 3 = admin.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    __construct ()
    -
    -
    - -

    A constructor.

    -

    Empty constructor

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static change_permission (user_id,
    perm 
    ) [static]
    -
    -
    - -

    change the permission of a ticket_user.

    -
    Parameters:
    - - - -
    $user_idthe TUserId of the entry.
    $permthe new permission value.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    static constr_ExternId (id) [static]
    -
    -
    - -

    return constructed ticket_user object based on ExternId.

    -
    Parameters:
    - - -
    $idthe ExternId of the entry.
    -
    -
    -
    Returns:
    constructed ticket_user object
    - -
    -
    - -
    -
    - - - - - - - - -
    static constr_TUserId (id) [static]
    -
    -
    - -

    return constructed ticket_user object based on TUserId.

    -
    Parameters:
    - - -
    $idthe TUserId of the entry.
    -
    -
    -
    Returns:
    constructed ticket_user object
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static createTicketUser (extern_id,
    permission 
    ) [static]
    -
    -
    - -

    create a new ticket user.

    -
    Parameters:
    - - - -
    $extern_idthe id of the user account in the www version (drupal,...)
    $permissionthe permission that will be given to the user. 1=user, 2=mod, 3=admin
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    static get_email_by_user_id (id) [static]
    -
    -
    - -

    return the email address of a ticket_user.

    -
    Parameters:
    - - -
    $idthe TUserId of the entry.
    -
    -
    -
    Returns:
    string containing the email address of that user.
    - -
    -
    - -
    -
    - - - - - - - - -
    static get_id_from_email (email) [static]
    -
    -
    - -

    return the ticket_user id from an email address.

    -
    Parameters:
    - - -
    $emailthe emailaddress of a user.
    -
    -
    -
    Returns:
    the ticket_user id related to that email address, in case none, return "FALSE".
    - -
    -
    - -
    -
    - - - - - - - - -
    static get_id_from_username (username) [static]
    -
    -
    - -

    return the TUserId of a ticket_user by giving a username.

    -
    Parameters:
    - - -
    $usernamethe username of a user.
    -
    -
    -
    Returns:
    the TUserId related to that username.
    - -
    -
    - -
    -
    - - - - - - - - -
    static get_username_from_id (id) [static]
    -
    -
    - -

    return the username of a ticket_user.

    -
    Parameters:
    - - -
    $idthe TUserId of the entry.
    -
    -
    -
    Returns:
    string containing username of that user.
    - -
    -
    - -
    -
    - - - - - - - -
    getExternId ()
    -
    -
    - -

    get externId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    static getModsAndAdmins () [static]
    -
    -
    - -

    return a list of all mods/admins.

    -
    Returns:
    an array consisting of ticket_user objects that are mods & admins.
    - -
    -
    - -
    -
    - - - - - - - -
    getPermission ()
    -
    -
    - -

    get permission attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getTUserId ()
    -
    -
    - -

    get tUserId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    static isAdmin (user) [static]
    -
    -
    - -

    check if a ticket_user object is an admin or not.

    -
    Parameters:
    - - -
    $userthe ticket_user object itself
    -
    -
    -
    Returns:
    true or false
    - -
    -
    - -
    -
    - - - - - - - - -
    static isMod (user) [static]
    -
    -
    - -

    check if a ticket_user object is a mod or not.

    -
    Parameters:
    - - -
    $userthe ticket_user object itself
    -
    -
    -
    Returns:
    true or false
    - -
    -
    - -
    -
    - - - - - - - - -
    load_With_TUserId (id)
    -
    -
    - -

    loads the object's attributes.

    -

    loads the object's attributes by giving a TUserId.

    -
    Parameters:
    - - -
    $idthe id of the ticket_user that should be loaded
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array of the form array('TUserId' => id, 'Permission' => perm, 'ExternId' => ext_id).
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setExternId (id)
    -
    -
    - -

    set externId attribute of the object.

    -
    Parameters:
    - - -
    $idthe external id.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setPermission (perm)
    -
    -
    - -

    set permission attribute of the object.

    -
    Parameters:
    - - -
    $perminteger that indicates the permission level. (1= user, 2= mod, 3= admin)
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    setTUserId (id)
    -
    -
    - -

    set tUserId attribute of the object.

    -
    Parameters:
    - - -
    $idthe ticket_user id
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    update ()
    -
    -
    - -

    update the object's attributes to the db.

    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $externId [private]
    -
    -
    - -

    The id of the user account in the www (could be drupal,...) that is linked to the ticket_user.

    - -
    -
    - -
    -
    - - - - -
    $permission [private]
    -
    -
    - -

    The permission of the user.

    - -
    -
    - -
    -
    - - - - -
    $tUserId [private]
    -
    -
    - -

    The id of the user inside the ticket system.

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classUsers.html b/code/web/docs/ams/html/classUsers.html deleted file mode 100644 index 4083fde9c..000000000 --- a/code/web/docs/ams/html/classUsers.html +++ /dev/null @@ -1,641 +0,0 @@ - - - - - -Ryzom Account Management System: Users Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    handles basic user registration & management functions (shard related). - More...

    -
    -Inheritance diagram for Users:
    -
    -
    - - -WebUsers -WebUsers - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     check_Register ($values)
     checks if entered values before registering are valid.
     checkUser ($username)
     checks if entered username is valid.
     checkPassword ($pass)
     checks if the password is valid.
     checkEmail ($email)
     wrapper to check if the email address is valid.
     validEmail ($email)
     check if the emailaddress structure is valid.
     check_change_password ($values)
     check if the changing of a password is valid.

    -Static Public Member Functions

    static generateSALT ($length=2)
     generate a SALT.
    static createUser ($values, $user_id)
     creates a user in the shard.
    static createPermissions ($pvalues)
     creates permissions in the shard db for a user.

    -Protected Member Functions

     checkUserNameExists ($username)
     check if username already exists.
     checkEmailExists ($email)
     check if email already exists.
     checkLoginMatch ($user, $pass)
     check if username and password matches.
     setAmsPassword ($user, $pass)
     sets the shards password.
     setAmsEmail ($user, $mail)
     sets the shards email.

    -Private Member Functions

     confirmPassword ($pass_result, $pass, $confirmpass)
     checks if the confirmPassword matches the original.
    -

    Detailed Description

    -

    handles basic user registration & management functions (shard related).

    -

    The Users class is the basis class of WebUsers, this class provides functions being used by all CMS's and our own www version. The WebUsers class however needs to be reimplemented by using the CMS's it's funcionality. This class handles the writing to the shard db mainly, and in case it's offline: writing to the ams_querycache.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - -
    check_change_password (values)
    -
    -
    - -

    check if the changing of a password is valid.

    -

    a mod/admin doesn't has to fill in the previous password when he wants to change the password, however for changing his own password he has to fill it in.

    -
    Parameters:
    - - -
    $valuesan array containing the CurrentPass, ConfirmNewPass, NewPass and adminChangesOthers
    -
    -
    -
    Returns:
    if it is valid "success will be returned, else an array with errors will be returned.
    - -
    -
    - -
    -
    - - - - - - - - -
    check_Register (values)
    -
    -
    - -

    checks if entered values before registering are valid.

    -
    Parameters:
    - - -
    $valuesarray with Username,Password, ConfirmPass and Email.
    -
    -
    -
    Returns:
    string Info: Returns a string, if input data is valid then "success" is returned, else an array with errors
    - -
    -
    - -
    -
    - - - - - - - - -
    checkEmail (email)
    -
    -
    - -

    wrapper to check if the email address is valid.

    -
    Parameters:
    - - -
    $emailthe email address
    -
    -
    -
    Returns:
    "success", else in case it isn't valid an error will be returned.
    - -
    -
    - -
    -
    - - - - - - - - -
    checkEmailExists (email) [protected]
    -
    -
    - -

    check if email already exists.

    -

    This is the base function, it should be overwritten by the WebUsers class.

    -
    Parameters:
    - - -
    $emailthe email address
    -
    -
    -
    Returns:
    string Info: Returns true or false if the email is in the www db.
    - -

    Reimplemented in WebUsers, and WebUsers.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    checkLoginMatch (user,
    pass 
    ) [protected]
    -
    -
    - -

    check if username and password matches.

    -

    This is the base function, it should be overwritten by the WebUsers class.

    -
    Parameters:
    - - - -
    $userthe inserted username
    $passthe inserted password
    -
    -
    - -

    Reimplemented in WebUsers, and WebUsers.

    - -
    -
    - -
    -
    - - - - - - - - -
    checkPassword (pass)
    -
    -
    - -

    checks if the password is valid.

    -
    Parameters:
    - - -
    $passthe password willing to be used.
    -
    -
    -
    Returns:
    string Info: Returns a string based on if the password is valid, if valid then "success" is returned
    - -
    -
    - -
    -
    - - - - - - - - -
    checkUser (username)
    -
    -
    - -

    checks if entered username is valid.

    -
    Parameters:
    - - -
    $usernamethe username that the user wants to use.
    -
    -
    -
    Returns:
    string Info: Returns a string based on if the username is valid, if valid then "success" is returned
    - -
    -
    - -
    -
    - - - - - - - - -
    checkUserNameExists (username) [protected]
    -
    -
    - -

    check if username already exists.

    -

    This is the base function, it should be overwritten by the WebUsers class.

    -
    Parameters:
    - - -
    $usernamethe username
    -
    -
    -
    Returns:
    string Info: Returns true or false if the user is in the www db.
    - -

    Reimplemented in WebUsers, and WebUsers.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    confirmPassword (pass_result,
    pass,
    confirmpass 
    ) [private]
    -
    -
    - -

    checks if the confirmPassword matches the original.

    -
    Parameters:
    - - - - -
    $pass_resultthe result of the previous password check.
    $passthe original pass.
    $confirmpassthe confirmation password.
    -
    -
    -
    Returns:
    string Info: Verify's $_POST["Password"] is the same as $_POST["ConfirmPass"]
    - -
    -
    - -
    -
    - - - - - - - - -
    static createPermissions (pvalues) [static]
    -
    -
    - -

    creates permissions in the shard db for a user.

    -

    incase the shard is offline it will place it in the ams_querycache.

    -
    Parameters:
    - - -
    $pvalueswith username
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static createUser (values,
    user_id 
    ) [static]
    -
    -
    - -

    creates a user in the shard.

    -

    incase the shard is offline it will place it in the ams_querycache. You have to create a user first in the CMS/WWW and use the id for this function.

    -
    Parameters:
    - - - -
    $valueswith name,pass and mail
    $user_idthe extern id of the user (the id given by the www/CMS)
    -
    -
    -
    Returns:
    ok if it's get correctly added to the shard, else return lib offline and put in libDB, if libDB is also offline return liboffline.
    - -
    -
    - -
    -
    - - - - - - - - -
    static generateSALT (length = 2) [static]
    -
    -
    - -

    generate a SALT.

    -
    Parameters:
    - - -
    $lengththe length of the SALT which is by default 2
    -
    -
    -
    Returns:
    a random salt of 2 chars
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    setAmsEmail (user,
    mail 
    ) [protected]
    -
    -
    - -

    sets the shards email.

    -

    in case the shard is offline, the entry will be stored in the ams_querycache.

    -
    Parameters:
    - - - -
    $userthe usersname of the account of which we want to change the emailaddress.
    $mailthe new email address
    -
    -
    -
    Returns:
    ok if it worked, if the lib or shard is offline it will return liboffline or shardoffline.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    setAmsPassword (user,
    pass 
    ) [protected]
    -
    -
    - -

    sets the shards password.

    -

    in case the shard is offline, the entry will be stored in the ams_querycache.

    -
    Parameters:
    - - - -
    $userthe usersname of the account of which we want to change the password.
    $passthe new password.
    -
    -
    -
    Returns:
    ok if it worked, if the lib or shard is offline it will return liboffline or shardoffline.
    - -
    -
    - -
    -
    - - - - - - - - -
    validEmail (email)
    -
    -
    - -

    check if the emailaddress structure is valid.

    -
    Parameters:
    - - -
    $emailthe email address
    -
    -
    -
    Returns:
    true or false
    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classUsers.png b/code/web/docs/ams/html/classUsers.png deleted file mode 100644 index 85efb81d93fecf204cc81a426b84b4385b167b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^Q-C;tgBeJkn7zgYNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~nt8f7hEy=VoqLh*umXo`x9^|-{`Z;{ zZtQ%im7Q4>*(<&7`r?Ltd6V7b%&c#kgb46DFuuyt_*JUpFqOIEyy7hnn{ubC%Y{Cj zpS_Uf#1?^vldD^tB^56E?%BaFU^hEh_wm#A61bJij7ZS zFRxJxImftC$?2)g1T7VjRr~=BOd<>97^cqEeI&-f1?GV?%$U}zh=d_w|1Od%k{oaGWq@U54xwWO64itTNiL$_5IB)Z{<0?i)yDP z3Yjc&UJ?KFUg)hN&pn5a7fH6{`|@4qS-`-$;zNL3+5($5tog=rb*9rCq=2Ey;OXk; Jvd$@?2>`e`wS)iw diff --git a/code/web/docs/ams/html/classWebUsers.html b/code/web/docs/ams/html/classWebUsers.html deleted file mode 100644 index edb9aed56..000000000 --- a/code/web/docs/ams/html/classWebUsers.html +++ /dev/null @@ -1,1509 +0,0 @@ - - - - - -Ryzom Account Management System: WebUsers Class Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    - -
    - -

    handles CMS/WWW related functions regarding user management & registration. - More...

    -
    -Inheritance diagram for WebUsers:
    -
    -
    - - -Users -Users - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     __construct ($UId=0)
     A constructor.
     set ($values)
     sets the object's attributes.
     checkLoginMatch ($username, $password)
     check if the login username and password match the db.
     getUId ()
     get uId attribute of the object.
     getUsername ()
     get login attribute of the object.
     getEmail ()
     get email attribute of the object.
     getInfo ()
     get basic info of the object.
     getReceiveMail ()
     get receiveMail attribute of the object.
     getLanguage ()
     get language attribute of the object.
     isLoggedIn ()
     check if the user is logged in.
     setPassword ($user, $pass)
     update the password.
     setEmail ($user, $mail)
     update the emailaddress.
     getUsers ()
     return all users.
     __construct ($UId=0)
     A constructor.
     set ($values)
     sets the object's attributes.
     checkLoginMatch ($username, $password)
     check if the login username and password match the db.
     getUId ()
     get uId attribute of the object.
     getUsername ()
     get login attribute of the object.
     getEmail ()
     get email attribute of the object.
     getInfo ()
     get basic info of the object.
     getReceiveMail ()
     get receiveMail attribute of the object.
     getLanguage ()
     get language attribute of the object.
     isLoggedIn ()
     check if the user is logged in.
     setPassword ($user, $pass)
     update the password.
     setEmail ($user, $mail)
     update the emailaddress.
     getUsers ()
     return all users.

    -Static Public Member Functions

    static getId ($username)
     returns te id for a given username
    static getIdFromEmail ($email)
     returns te id for a given emailaddress
    static setReceiveMail ($user, $receivemail)
     update the setReceiveMail value in the db.
    static setLanguage ($user, $language)
     update the language value in the db.
    static getAllUsersQuery ()
     return the query that should get all users.
    static createWebuser ($name, $pass, $mail)
     creates a webuser.
    static getId ($username)
     returns te id for a given username
    static getIdFromEmail ($email)
     returns te id for a given emailaddress
    static setReceiveMail ($user, $receivemail)
     update the setReceiveMail value in the db.
    static setLanguage ($user, $language)
     update the language value in the db.
    static getAllUsersQuery ()
     return the query that should get all users.
    static createWebuser ($name, $pass, $mail)
     creates a webuser.

    -Protected Member Functions

     checkUserNameExists ($username)
     function that checks if a username exists already or not.
     checkEmailExists ($email)
     function that checks if a email exists already or not.
     checkUserNameExists ($username)
     function that checks if a username exists already or not.
     checkEmailExists ($email)
     function that checks if a email exists already or not.

    -Private Attributes

     $uId
     The user id.
     $login
     The username.
     $email
     The email address.
     $firstname
     The users first name.
     $lastname
     The users last name.
     $gender
     The gender.
     $country
     2 letter word matching the country of the user
     $receiveMail
     configuration regarding if the user wants to receive email notifications or not.
     $language
     Language of the user.
    -

    Detailed Description

    -

    handles CMS/WWW related functions regarding user management & registration.

    -

    inherits from the Users class. The methods of this class have to be rewritten according to the CMS's functionality that you wish to use. The drupal_module has a webusers class of its own in the module itself.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    __construct (UId = 0)
    -
    -
    - -

    A constructor.

    -

    loads the object with the UID, if none is given it will use 0.

    -
    Parameters:
    - - -
    $UIdthe UID of the user you want to instantiate.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    __construct (UId = 0)
    -
    -
    - -

    A constructor.

    -

    loads the object with the UID, if none is given it will use 0.

    -
    Parameters:
    - - -
    $UIdthe UID of the user you want to instantiate.
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - - -
    checkEmailExists (email) [protected]
    -
    -
    - -

    function that checks if a email exists already or not.

    -

    This function overrides the function of the base class.

    -
    Parameters:
    - - -
    $emailthe email address in question.
    -
    -
    -
    Returns:
    string Info: Returns 0 if the email address is not in the web db, else a positive number is returned.
    - -

    Reimplemented from Users.

    - -
    -
    - -
    -
    - - - - - - - - -
    checkEmailExists (email) [protected]
    -
    -
    - -

    function that checks if a email exists already or not.

    -

    This function overrides the function of the base class.

    -
    Parameters:
    - - -
    $emailthe email address in question.
    -
    -
    -
    Returns:
    string Info: Returns 0 if the email address is not in the web db, else a positive number is returned.
    - -

    Reimplemented from Users.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    checkLoginMatch (username,
    password 
    )
    -
    -
    - -

    check if the login username and password match the db.

    -
    Parameters:
    - - - -
    $usernamethe inserted username
    $passwordthe inserted password (unhashed)
    -
    -
    -
    Returns:
    the logged in user's db row as array if login was a success, else "fail" will be returned.
    - -

    Reimplemented from Users.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    checkLoginMatch (username,
    password 
    )
    -
    -
    - -

    check if the login username and password match the db.

    -
    Parameters:
    - - - -
    $usernamethe inserted username
    $passwordthe inserted password (unhashed)
    -
    -
    -
    Returns:
    the logged in user's db row as array if login was a success, else "fail" will be returned.
    - -

    Reimplemented from Users.

    - -
    -
    - -
    -
    - - - - - - - - -
    checkUserNameExists (username) [protected]
    -
    -
    - -

    function that checks if a username exists already or not.

    -

    This function overrides the function of the base class.

    -
    Parameters:
    - - -
    $usernamethe username in question
    -
    -
    -
    Returns:
    string Info: Returns 0 if the user is not in the web db, else a positive number is returned.
    - -

    Reimplemented from Users.

    - -
    -
    - -
    -
    - - - - - - - - -
    checkUserNameExists (username) [protected]
    -
    -
    - -

    function that checks if a username exists already or not.

    -

    This function overrides the function of the base class.

    -
    Parameters:
    - - -
    $usernamethe username in question
    -
    -
    -
    Returns:
    string Info: Returns 0 if the user is not in the web db, else a positive number is returned.
    - -

    Reimplemented from Users.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static createWebuser (name,
    pass,
    mail 
    ) [static]
    -
    -
    - -

    creates a webuser.

    -

    it will set the language matching to the language cookie setting and add it to the www/CMS's DB.

    -
    Parameters:
    - - - - -
    $namethe username
    $passthe unhashed password
    $mailthe email address
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static createWebuser (name,
    pass,
    mail 
    ) [static]
    -
    -
    - -

    creates a webuser.

    -

    it will set the language matching to the language cookie setting and add it to the www/CMS's DB.

    -
    Parameters:
    - - - - -
    $namethe username
    $passthe unhashed password
    $mailthe email address
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    static getAllUsersQuery () [static]
    -
    -
    - -

    return the query that should get all users.

    -
    Returns:
    string: the query to receive all users.
    - -
    -
    - -
    -
    - - - - - - - -
    static getAllUsersQuery () [static]
    -
    -
    - -

    return the query that should get all users.

    -
    Returns:
    string: the query to receive all users.
    - -
    -
    - -
    -
    - - - - - - - -
    getEmail ()
    -
    -
    - -

    get email attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getEmail ()
    -
    -
    - -

    get email attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - - -
    static getId (username) [static]
    -
    -
    - -

    returns te id for a given username

    -
    Parameters:
    - - -
    $usernamethe username
    -
    -
    -
    Returns:
    the user's id linked to the username
    - -
    -
    - -
    -
    - - - - - - - - -
    static getId (username) [static]
    -
    -
    - -

    returns te id for a given username

    -
    Parameters:
    - - -
    $usernamethe username
    -
    -
    -
    Returns:
    the user's id linked to the username
    - -
    -
    - -
    -
    - - - - - - - - -
    static getIdFromEmail (email) [static]
    -
    -
    - -

    returns te id for a given emailaddress

    -
    Parameters:
    - - -
    $emailthe emailaddress
    -
    -
    -
    Returns:
    the user's id linked to the emailaddress
    - -
    -
    - -
    -
    - - - - - - - - -
    static getIdFromEmail (email) [static]
    -
    -
    - -

    returns te id for a given emailaddress

    -
    Parameters:
    - - -
    $emailthe emailaddress
    -
    -
    -
    Returns:
    the user's id linked to the emailaddress
    - -
    -
    - -
    -
    - - - - - - - -
    getInfo ()
    -
    -
    - -

    get basic info of the object.

    -
    Returns:
    returns an array in the form of Array('FirstName' => $this->firstname, 'LastName' => $this->lastname, 'Gender' => $this->gender, 'Country' => $this->country, 'ReceiveMail' => $this->receiveMail)
    - -
    -
    - -
    -
    - - - - - - - -
    getInfo ()
    -
    -
    - -

    get basic info of the object.

    -
    Returns:
    returns an array in the form of Array('FirstName' => $this->firstname, 'LastName' => $this->lastname, 'Gender' => $this->gender, 'Country' => $this->country, 'ReceiveMail' => $this->receiveMail)
    - -
    -
    - -
    -
    - - - - - - - -
    getLanguage ()
    -
    -
    - -

    get language attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getLanguage ()
    -
    -
    - -

    get language attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getReceiveMail ()
    -
    -
    - -

    get receiveMail attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getReceiveMail ()
    -
    -
    - -

    get receiveMail attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUId ()
    -
    -
    - -

    get uId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUId ()
    -
    -
    - -

    get uId attribute of the object.

    - -
    -
    - -
    -
    - - - - - - - -
    getUsername ()
    -
    -
    - -

    get login attribute of the object.

    -

    (username)

    - -
    -
    - -
    -
    - - - - - - - -
    getUsername ()
    -
    -
    - -

    get login attribute of the object.

    -

    (username)

    - -
    -
    - -
    -
    - - - - - - - -
    getUsers ()
    -
    -
    - -

    return all users.

    -
    Returns:
    return an array of users
    - -
    -
    - -
    -
    - - - - - - - -
    getUsers ()
    -
    -
    - -

    return all users.

    -
    Returns:
    return an array of users
    - -
    -
    - -
    -
    - - - - - - - -
    isLoggedIn ()
    -
    -
    - -

    check if the user is logged in.

    -
    Returns:
    true or false
    - -
    -
    - -
    -
    - - - - - - - -
    isLoggedIn ()
    -
    -
    - -

    check if the user is logged in.

    -
    Returns:
    true or false
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    set (values)
    -
    -
    - -

    sets the object's attributes.

    -
    Parameters:
    - - -
    $valuesshould be an array.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    setEmail (user,
    mail 
    )
    -
    -
    - -

    update the emailaddress.

    -

    update the emailaddress in the shard + update the emailaddress in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $mailthe new emailaddress.
    -
    -
    -
    Returns:
    ok if it worked, if the lib or shard is offline it will return liboffline or shardoffline.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    setEmail (user,
    mail 
    )
    -
    -
    - -

    update the emailaddress.

    -

    update the emailaddress in the shard + update the emailaddress in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $mailthe new emailaddress.
    -
    -
    -
    Returns:
    ok if it worked, if the lib or shard is offline it will return liboffline or shardoffline.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static setLanguage (user,
    language 
    ) [static]
    -
    -
    - -

    update the language value in the db.

    -

    update the language in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $languagethe new language value.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static setLanguage (user,
    language 
    ) [static]
    -
    -
    - -

    update the language value in the db.

    -

    update the language in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $languagethe new language value.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    setPassword (user,
    pass 
    )
    -
    -
    - -

    update the password.

    -

    update the password in the shard + update the password in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $passthe new password.
    -
    -
    -
    Returns:
    ok if it worked, if the lib or shard is offline it will return liboffline or shardoffline.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    setPassword (user,
    pass 
    )
    -
    -
    - -

    update the password.

    -

    update the password in the shard + update the password in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $passthe new password.
    -
    -
    -
    Returns:
    ok if it worked, if the lib or shard is offline it will return liboffline or shardoffline.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static setReceiveMail (user,
    receivemail 
    ) [static]
    -
    -
    - -

    update the setReceiveMail value in the db.

    -

    update the receiveMail in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $receivemailthe receivemail setting .
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    static setReceiveMail (user,
    receivemail 
    ) [static]
    -
    -
    - -

    update the setReceiveMail value in the db.

    -

    update the receiveMail in the www/CMS version.

    -
    Parameters:
    - - - -
    $userthe username
    $receivemailthe receivemail setting .
    -
    -
    - -
    -
    -

    Field Documentation

    - -
    -
    - - - - -
    $country [private]
    -
    -
    - -

    2 letter word matching the country of the user

    - -
    -
    - -
    -
    - - - - -
    $email [private]
    -
    -
    - -

    The email address.

    - -
    -
    - -
    -
    - - - - -
    $firstname [private]
    -
    -
    - -

    The users first name.

    - -
    -
    - -
    -
    - - - - -
    $gender [private]
    -
    -
    - -

    The gender.

    - -
    -
    - -
    -
    - - - - -
    $language [private]
    -
    -
    - -

    Language of the user.

    - -
    -
    - -
    -
    - - - - -
    $lastname [private]
    -
    -
    - -

    The users last name.

    - -
    -
    - -
    -
    - - - - -
    $login [private]
    -
    -
    - -

    The username.

    - -
    -
    - -
    -
    - - - - -
    $receiveMail [private]
    -
    -
    - -

    configuration regarding if the user wants to receive email notifications or not.

    - -
    -
    - -
    -
    - - - - -
    $uId [private]
    -
    -
    - -

    The user id.

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/autoload/webusers.php
    • -
    • /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/classWebUsers.png b/code/web/docs/ams/html/classWebUsers.png deleted file mode 100644 index 8aca4ddb0b262efdc8094495b843448de949273e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^Q-C;tgBeJkn7zgYNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~T6?-UhEy=VoqJH|kOGg3=iG|-MhR?PTb-MS$#KkkE_!G({GDkW^Y;@o+g&?_V?xT!|V2PcwK%t zYt_xY)^AM?J%4*?<~}~_IO7&2k%imZoiv&c-Kw3E|Klug;+wLTPjX(Z8*dAqs@4!a zmglYU&dy1&E1>0srSHrd%})QEBxSSAJ7$)mT6=g-Sw-*Xc=6}%bjQ~2$1F=vUh#Gfw*2d% z!L@>CM(fKKL+e`AE2+MsJ=_aU-FgTe~DWM4f4c)sa diff --git a/code/web/docs/ams/html/classes.html b/code/web/docs/ams/html/classes.html deleted file mode 100644 index 33b1ba697..000000000 --- a/code/web/docs/ams/html/classes.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - -Ryzom Account Management System: Data Structure Index - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    -
    -
    Data Structure Index
    -
    -
    -
    A | D | F | G | H | I | M | P | Q | S | T | U | W
    - - - - - - - - - - - - - - -
      A  
    -
      H  
    -
      P  
    -
      T  
    -
    Ticket_User   
      U  
    -
    Assigned   Helpers   Pagination   Ticket   
      D  
    -
      I  
    -
      Q  
    -
    Ticket_Category   Users   
    Ticket_Content   
      W  
    -
    DBLayer   In_Support_Group   Querycache   Ticket_Info   
      F  
    -
      M  
    -
      S  
    -
    Ticket_Log   WebUsers   
    Ticket_Queue   
    Forwarded   Mail_Handler   Support_Group   Ticket_Queue_Handler   
      G  
    -
    MyCrypt   Sync   Ticket_Reply   
    Gui_Elements   
    -
    A | D | F | G | H | I | M | P | Q | S | T | U | W
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/closed.png b/code/web/docs/ams/html/closed.png deleted file mode 100644 index b7d4bd9fef2272c74b94762c9e2496177017775e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VuAVNAAr*{o?>h22DDp4|bgj*t z)u^AqcA-V@guRYpb17F<&b?_~8HV>~XqWvB;^$!VVSTy0!eQcJp_yD7TIQA>7dijs YXf6~H5cs^Q6KEiVr>mdKI;Vst0NsWqGynhq diff --git a/code/web/docs/ams/html/create__ticket_8php.html b/code/web/docs/ams/html/create__ticket_8php.html deleted file mode 100644 index ba969a5eb..000000000 --- a/code/web/docs/ams/html/create__ticket_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php File Reference
    -
    -
    - - - - -

    -Functions

     create_ticket ()
     This function is beign used to create a new ticket.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    create_ticket ()
    -
    -
    - -

    This function is beign used to create a new ticket.

    -

    It will first check if the user who executed this function is the person of whom the setting is or if it's a mod/admin. If this is not the case the page will be redirected to an error page. next it will filter the POST data and it will try to create the new ticket. Afterwards a redirecion to the ticket will occur.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/createticket_8php.html b/code/web/docs/ams/html/createticket_8php.html deleted file mode 100644 index 8b9fd9b2f..000000000 --- a/code/web/docs/ams/html/createticket_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php File Reference
    -
    -
    - - - - -

    -Functions

     createticket ()
     This function is beign used to load info that's needed for the createticket page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    createticket ()
    -
    -
    - -

    This function is beign used to load info that's needed for the createticket page.

    -

    the $_GET['user_id'] identifies for which user you try to create a ticket. A normal user can only create a ticket for himself, a mod/admin however can also create tickets for other users. It will also load all categories and return these, they will be used by the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/dashboard_8php.html b/code/web/docs/ams/html/dashboard_8php.html deleted file mode 100644 index 593ae1be9..000000000 --- a/code/web/docs/ams/html/dashboard_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/dashboard.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/dashboard.php File Reference
    -
    -
    - - - - -

    -Functions

     dashboard ()
     This function is beign used to load info that's needed for the dashboard page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    dashboard ()
    -
    -
    - -

    This function is beign used to load info that's needed for the dashboard page.

    -

    check if the person who wants to view this page is a mod/admin, if this is not the case, he will be redirected to an error page. next it will fetch a lot of information regarding to the status of the ticket system (eg return the total amount of tickets) and return this information so it can be used by the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/db.png b/code/web/docs/ams/html/db.png deleted file mode 100644 index 63cb4c92bc242b230225fec89307e0bbb87a538b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205565 zcmb@tWmsHMlr30<;2MHE!JXjl?i$>KySr=9;KAM9-JQbS3GVJbMf$zz>3%&w=KH3g zzPi-C+;lQkDLR8gb8<9yU45XdY~LD4GWJ)qSSY%!zW5 z*dEbSm{QE(n_00+jxWsAzdfr%czc)uHhae#l@v=W&Bj#wKU&C$UBoqv_AY zYKahm$b!&Bfyhroznyph|Lczua5Xs4cONHsMgM<2Ol!dh2o~wb4gX}bSsxt-lEe6u z_>zRS;7^H#>8l4rBtjJX<(bVO`|-;!5Pv-Xh|Aw-sRbWguqZn$G}QHyN~U)v$&Q3d zQv9o{dp?~)S+E!|=t!%grE7Wm8wEvCh1f^C=PW*2ZGJF&$Yh_-DK#N0b9L-aQ-n&F z%Mi=+_0lb!)4Axlnh`K(l+%9Mf#x$n^M<~+h6c_+=xD0EbX|Z}y8LwGK8sH>NDG{5-%UIE z)4xYop$kH*;D{ibOR5=f`(7IJw6g=cs`#0febiIH5a6(}nc+*PyMox4GFXOTGs%oJ zf2ss6H8U^p>t>3Pzc+aG!&u*|^tLX`@3#EtuXuBN#f$rb6A~y+t=Zlx9Kh)^qr41+ z5|V*|(b~oRcpzY25IWmDSKOa$WZg=<%CbW`E|yMdhDIa?(tR~)3AR3%g%!DDG?sd< zEWAGOhlOJ!MeB=H=dWlSE3MiJ;>ziYc(C5^OR`S9D(%OOEtHvnFDd1tg`Mg zltiOKBl5vRPjT~ey4aMY)gEMA#9#FvHkpU>@#GZBXP8ud^%RJp6onE~#1NDVc6-v? z*(w7TrJ|q8l1?336+em{8xpYXsG$IiJ?DIuxIYgMP*5e+VPF71-bjviE}P;#vxSb0 zwNr4er5r~_6erH2q|w-2-baCfy*sO|PFI!&oS1B9UzS%HK_fuKOO{ZH(p#cvIDs1} zF+@1#^~&ku5R2aay#}J%B??bQk@Kn1!P9M%bInvdRdj&GyTd$O-r$9qR95AWrZJb? zMAvkqTXG~q#k3H}u-D1Uf{+F41G3FhHj7vy6nh!VL`AOS&3_cnQ?QgN_7}}j1;xr) zIOJg0@}D;wvBB%C&LSUR(cJ&LR!cOk{J%9VO2N&#QB)+4_{yJmA`4_@c62j zWM(!S4@nOp)TH;n6R}GAx;%Y^~eHtWiNtp*0}VwYa{gW zc^9;JABF&_rG!JI%w?J~wN5C^l%*eb_GNl9t3W`hO+@IJyJ6RbNgL4RGX5~tVRM8| zcE1%?OBoMrG)X*1%6v_R>w9xz%0H-y<#z9t3ztK&`XQ5!Ohp!7{H!Xxx9qrNZ?u^) zv#lAbL$D+f^+%yXAboKaC>70DKpPxHyWwKARN@DDbqwVbDG!Kqv6@>Vsls)0y{%52 z@sRqn?2+@vQ`}xSG?cT0Uj3_ncD=S@AOK`SEb{-{161zRB>W@|=nY?LtS+N~ru+iI zkOF&#F)fhrctHv0yv|!d0)0Aw`+hiEjV~+WB(uz?Pp|ejdGSaAVEGnar0lz&Wa5&{ zQ#3))_!BTJH(k0ILv<{`jezK9wf6YAcztFY@F_kl4YJ^NH2l zS;0DiKcOY~G8%mtKXRbc_I#7*rw>n~&7S=UG@6(ixdj3;0VxIQ=*-yiQ(4(q3Bgm7 z5y8fD%u=ek=-oB(3YQs|U8y4s{ot1&`%@#Zaz> zH(T^vn~iCxzak~0BkLk5Ztl110xnlOMD^QuRa2oh$;1pC!~;%vBZ)1we}oo8;dj6UxnI!A_Bz z(hAEK*U0^0C!Qizja?rm#E45L!PGU4HY>=@rOM^o)C`BQCXZ_MO&E-c_jpg)R)4-` ziWpJkR~s1(JS%Mns}MBz;61_@^Ro)*)?}MiFNsdVtG5z-CP?^)V}oq3&dc?JyIt&A znZMV!2NT#rJ0tbPEjCZoqI^H+5Bw@{32*$3;Z3cmkaXLud;ZKcJNqxYrs0=vvDE?`HcO*^Q|L%HQI0In$_|=ok~{?=)H%=uoIqqM9T0PSX?{^Mm?CBT)N! z3?N`nz$4A=^3!T&+{;pXWc^@bB!jfSosib+lt!4;+B19C?6R1C_nW4il%YWWX30pK zNp)onWpQm`@t=|=fpknKXGL>+GP6B%BeNkQfbZN-9$B}H@=syJb&Lxq8jN-!f5T_4 zp*WN;Dc$*)sUQHht_dpU^AL7xtu8*g|DrTDN}KM7aWK~G3|8{x)&qyDX@CG=4SeZq zik=??pjlddYBO+XzPj3~c`SZ%wKty%4g=Zqmp1V)?IlQ-2_$?C97^hTcw8duRc~co z2kT47SZXKx-<%1nLEiN~&+!|KG8%!w*lle$a;)^O@>0iC5!>x0ZLl8@L4Nlm^vxk6 zT%Rlll~yXnQE!aRF6$7Ywr3K70nGlMuJx#CKRvN^*CTgYkbdr180A<2uSgFU2WF=~ z(;coghm>O7;|+eGfg*u!4tr2ko8b_XrA*p2YX320lt4g@90m&AFZXJQUOOKF9@Nt> zZFC^dhv%6+G`rkUA?EiHmy}hS{+$Hf=fE)VU#R*&4(~r;Nly!5MMa43$N$_^>U{u< z1}>Mg(M-Nh(49(tcKbv8$Bpv7j>mk23ebgK5g&d0KMyawLH#dR*i9o-Lo=F8CTVu! zLI1cu+oen6V?vaZxsu!B_=_-?ga&MBbSX$B+O8r#&OgEN6%z)U`xX2}q~;Sd+@=I74`7_aEk~m30cX-a#cH+}gRFk6G*f?xuMAfAZW;s>0 z1X^v8#83+Pk^M78?%TdJCKAV0%9M4|M#d3-71i0V@ypqZ5V4Or>irmyBJ{~1B#M|n zJ9f|-{a~`2r9y6QZt%UR=L~lzrEP6(5v@|5r-K=CKp@Zq@B2d1yUu{<->wVjSR1Uz zf~`Y`^Z^GEQc_P3T+1E}sZGXHRh6>F?N-X^?w;f1yv_~Q*|`maLw{gXc08oD)-JaK zmoOYk_;CM?d)I$FNOD3h-yV=Shq}W%@jbzg6ZZ2bf5MU__*4(Gr!Iu8=A=yCW@fn> z{l5`F4y?gWT<0zqrJp_Jx7H!(@7~AtPckAxg>M|@vzNYOE}84k^-d>zc41)}r1@4! z*5*!I;g1VfRoEXBEdTvKU;zpwK!8$Z#3YQDwSf-hSKgBa`B3hC1{*G0c^q1_$&&uE zYp#O_vCT=-&->dvW5tR^mxo5HJW`F($VI$E77NLu@2WezKaG8!B@-)hBe*IbzB5>! zAbo*QL-??wBIpkcwcNdF>kFbCHz}#f$uOV&j~crv;ATI86TtxZVGtgVJk|9pM2jZK z0RVP)l(!XX8JcqCSobIHPXJ#OiJ*jz^cdr{g|fRR!;`R9#O?Dqs~Xa{iL_ z1^P2Lex)d!Ib8Y*I}cK8EUR%STAnuV!)SG3p>3<#W)#jUluF>%pnl0e4-YL*=s z70UJ167~Iz1k4G|mYMTJ3k5;_L;Sa{@Njv2oZLIostRTIhTl+=5zAi$e{-4fpaY5)^0)&AH8yiaLsaB1~>8%u4W zP&9QocJY4LT7+M2ax5Hds!MqbEyDlxe-o3#r6LL8POZ{zY~pG1^=XsnH!MudG=wJ=Pl4D$3p$xcUR z(2@d+Emly>Npk4K@ocrwKYp?fCYJ|tKL`_!HGUZpz}+j?wvZB z9l8XIcnzUt8-}7>6N=<1F4jTD?-lGL1>$75L^VjKOw4r^A$~_envK@Qu21GAvxCQ{ z*R$u`lSBRsIjXUJL-F*euO_)dHpSu{DbyWq*T%>5$t-=f1W3BR;kz=49}mowE8j|~M#uA;A)lVOIUgHO zsby_jE3wz-f~gkjshn>oj?e!@EV7dbYb;5Rp&-nk1J~^yBo&(_=7@vyoB=I^G6vKNWj;cYw0N5PQ!u@+{wy`+Qq zg#3&(yksidv$y0Vn2_OSm*btKK1T-YRpPp4Bj;a`LY~qi^tZBw={!E%Kagi<&Tg9v zr`N4s@-2ta1=rjvqcV9CD9q*+P`qf!l#W(Ad<@B78`o;x zW(*{vh)U2kosQf#YS4TPibeI#;fH47#*_^ONbWf45h)Xx&T#ycR1p>y2DyoBNZ$gi zQv^X~aO{Eud?Ew{b8O~*P3F3BLrrhC83=&qegwhkbAh$KJ$(gxs$jFHhw5Uu% zCi{w`+1AM^Y<^D3SVPe)Vrf8IfA47n&JUff5oltEyyrA4_OXiQzGEYd*_xr7LPGni z)Rq+#!BV|_!jyryhday~@qCDf;Ibi5LTPd~jCyB=1n|dz0e;`fVFED!limTExLc(@ z51ZQ?{Udj?F(Uijys|%VS&3V;;C?L)0QA<1bFrdHw0SStR^0c@eioFJ-liHhBYFwa zxTL}Jy|pDRwX5oJH3wXJcwUo1_poNIZP)tL(3HN;x7b-|5rYxU@^6~x2D;(hq82z1 zDvQ8_I24FF%goTgVIvfoPEJNh_L`cC3e}pYrEDxMTfcSvy_@VpEe(C@nE7s6Z1Z%#Ir2YWULf3x2Y=I7eV z7MvJQq6LT+2&oHCct)VJ8UH^}NN%`DlXV)k&&6zS?1?uwPfO=e6_3VlFRA@2Wv!9N zJf{wneR!Ha?BP?5HizIB-&Bl^&cBUux4WOu6RXoGRCI@Z;nWy{1o+m0A6M|WqI&7c z2qR*$TA1|Ex?wJ~Y5PdIIvpPv_Bi-fs^gVaS)FdA5K{W*m0{Przqf<>Yt?-W0`nus z4-@u$Z^Zw6vng|(sL(ZKN1_UXVjQBdmUI)2>8z&`{R{xi zgUt+jq?TlMn%O@3@13V?j(n$F@Go3v1pH>_MoOI)gW+e7#AKaKLXy8S;4zxZ4+55W z!2~MZvj#ia{fMJyWpJ>`dCfs=5d$p=#cK`d08?|RbSR*wup8dH`k5F@@P$C3!%)J= zVmvAv4h~VKT&(L7Ry#R%eF~72R=N)sLbtbySt{ic0vn-RAEqNT3yV;k4#?1gwAbRa z;yBKA24Qwc-C)}B(!+ha=WFwRiH)84q)1nDTgQx!3_yMX%3*{d!fH6bkEPsCM*%AX zxx>8@WF*pgWcpD7sBA?JwAkLc2^Mr^G;fK>uJL99U%&u*t5(-L$yoGP@MURMBDf&4 z9&Fp%1T#ANs}C=Ss~Pxbe(v3DPlw29mI=i6Qn2R*F@=>{j|8fud&iFfYmqZGg(j7m z(c;v9G1-HI9nJHo))3>zZ;)dE084?BbVISY_^7v2TwR?eSvKtHl9=z=l94~Jd#)AHx_4Tt|{2t_i^Ye)4 z8^S~Uahdc`9cr0k7d!=-eCs#Q1Er$e+;iI-X==v1aud3v7Sl_*8q@?ZEW?_uf$;=K z31%F+P0=o#UM|7r6=K_H!4_Yw<(%d_F41%d&T*f@w<}Z^TC~j!uMQDnI;u=bwDu(m zE9nuCYas6Dz1B_cu$Jev<1?fiwC(kzl1jZCZy6Vokg~#b4z_tZ^|m4dBV|MYVICVQ zi-r>yccSf;(6=Har3%w1@0-VW6$Cr-kCdTE@}h|^54R?D&Kw+xMp%04iTd@rUumiU zgh`atoN35QoU9GBjman}9!-Ca7duxk|2s+7_W!aqa4L4ovfq&l0Ra4kruEXIak?#v z;AnOoD5g$+nS|gKbz%^Z4e#wW(nc0U(2+66gwH8? zRPNz7&l}-w+a4WzcgkIFm|47i{oE)2$B4Vk0WSJR zN%xlL=?^+)>U46e>=`Hf&y|KBKhi)mN5(6Pg>+a()#v3|bco9s^o@#?G-QIUuKJgp z_>io)>FJ53rKy@0VkFPAIgKxswVB?2-`JF9N;m+ZwlqM!{`B--VL^8MazC@}ZFx*z zo`7VG>ya)L)I)9K@+CC$gforVECmh&0DFGUp*`fI^d_$H_IP9OldC9G@|87Oqd*He ziD@(nuB6XuEhTz==CNj62LM3*?(sHcvmWJP`JBEhqZzg_m+O74eW@Dq2PI2_i~AhxSVBg2m*-h2UD+P-rt9f}$B zF)mE0a_YArGK!8E-P#ypfA_|P_aPk%5OUR?64~KW5yJLc!*LO5 zxGg!U%m4uYm+R}s(sLs|HQt+2r)yrTGwb7dyE|PEV`n7CYDd%8wIz5+HTBhV-G*yt z#~UjyOHeWbp~}t08yDq3Pv7`-&2TD#Mii~nXnG4Lx*-~~mR#g*EA##K!ljD2*3shr zwtL@PUU{*G>~u0uftpSF?5~y0{+!uUHtN~}yVEwu-BJ0H2ZaOzK;G47LghJ|ma3IP zWWRkBEJpqr=FdKZ>GoN(3@Mtoe*)ifeKdZX!7#(-FRR9@(kbFW?!0j7^t3;kOGgPjfkF@TVSiJ1wsvh4Sj>Qb?$I_@9@^r64TXv4WoaVY_@A8 zfGoM%8b9%_XTItIH#YI8toC4C>wJQCb}?@`nU0X(ug|1YrsKp|ka4t7*!MF`|K>fK zQYZPkHkXILQ%o7)&B?{;*wqy2@FpJmY`3ys5N$llaoD&y?}xngWM)|!h*YPgT)9t}>y+`G^_UZ##`+CiDC;kpRH|hb> z>n*1Z!i3dIjILXB%1x*b;xBl0mA&3}IAYwv7t`CzcAo2?Z%P)=E%*>10v=rG?!)vw zbnmqYshbgjx-wvTs)@}@?`8n6a+O!}W*7dsknaYGy8foILMQD38xbN)xdaQKr}AhH zfQA0=;<*j)FnUm+GSk_%kkr23l3+rZ-XHGRQN1OaU`h&#ELgZ}*pC-gaZuRdqu2bH z-$c^0>oTkL(wIP(>VqrRSHW)@A$82)bIL{Qc*hfi!}9T`04S!OD5 ziWv@_Zzn}ng-YZmXU%);o-LOhY|-+;)_z1pBIGyCi33`vm4j8f=lAItc4xE2K6i3v zoH|UlHV@-q^DXN>aMm_lB-d#Pj+>t>wn~<7fb}Pcr&Q+(>G*apdJVq`n;^a6#$T_R zk#uT4#J!RtcZVH@(7pEJYrSO1gasmonW-j5@;6f7*=3-1y!YPT%rtmze~bHR;UFW|BET58m0(3tkt~Rh$iL$$a+Bf|kcWmby$pf?`gCs>G;eFjJjl}&+bbCA-BnX0gX%vEw9 z8Rm0$R8$ZQOw8paHWSlrZ-}g!StKnjEe%bHy+V-zcSs^{+ge6I=hJF1Ra5=XQ9Ap{ z?OS5D6*}$CqY3(b+_%2t!d8gP6%YY|8wvFCU=$5nds|N>Z)I|r;<8CmD9qr)*2cu9 z7-@C+3(4jhrcf`7aEbfuDS7j-AvoeT^3Cu{z^FAA*X<#AsZyg(eY)rOXFb%V=D_Ow z3Y>$bwBydS7+H?{K~EceKoP#z`GWm*&?xEL>6Z`vQblo0<6s*m=MjmyOfNY&VF3&m zcolh_LaScoqBdd?RU94;)_HKB=rt3?Pe`=@S2`T0exuD(Pv8GVBiX{4HW?H6Bdt5zPBS8=L4))4V;Nb(?Zag?-Q=ri7)TaVQAH?FVtye^u?J(!Mt7k% z4=~Wl^q@Lj8_u z0^LslhD^_$%dS8%Iimrc4n!2#tp1Xr!tGpxneNq@1@#dKK%93-&MJX%%F>f_$1}r| zH?02tv3`NXFL%LZ7HmZU;7#pVyhvras!3>Oo;|KtS|m_goQ_F((xUnLkr;#s@x72h z`P4$O>X~|^hS%#QG=T405?1>AxrU><`{~>X#%1+zkb$NP8_p|RCvmgj&{e}hwc`K{qdK_>tlD+q7rl(waIpm`+u=Wr3k$sk*$mnTmAt0 zH;nleE5!gv?D>&VDVqq4gYou$Sge3+mvJ`l{w#C*cVe_#R}C#h z89nXU&?hPL{{C*#F02_e9iDn_cq)DODI6vqUG)xM%sA>CHb~pK?rmANLF3TX1nN~- zjx;=irkk4?Gd6zo;QqCRNd`G3g999e`m}wdRtmEVWpl{TGW{Yp06^0w6qZQsa&hmY z3j9pTd=FhFX{Uq3{`4b50Kqc`9<&e-dKKXax}_kekcI05Os%z(9~S?m`d1eN0P>8X z#u{vg*H*7TPM(jAM|`6ISqM2CZ>*tv>I%Z6m+N#j9@ooOyftyFti8KONzv5sIr?GX zKaCOUrPkI>9?#YLqbakFA5MwWX=UK(qUZO9N3l2af2DO^th9qt{ujr}OL1KqUOexE zo53)p7;?+*&V&8yz}BNx8T0dGd<;sUyGmRBIwa8an$vN0OC^P$!u{M0&-&d6DSoI} zO01A>jyGz5-uY&yK$yc*k6Ed2UWHoROMK3O6G}=J0yE0lI!BRA0!8+Gn7y zo6-18hSygQ3q*7@Q~bHgUNA-4^Vn%(E~VDP`F8EyhVdGltA2}MU7V`&^ zK1^{B|G1Bs-Qbt-w=dT)id&b5PaY5|n%%X3r{xC`p&Ul|Ehw)euZOzHE8%SP}B)febGebbho(<|>D+y#v~@`cjV_vVf+;y90|}T5&y< zL)E>;mmOdgSW<}kd=F(0RgUWw_*Y|io9cE4yGeSZLXSF73*T_+<>6S$2vZWr45*-g zQwoV?z<0AW+^|;Y;o@fJM~54sL6)tx@N<*Iw2LegoNn#Oc`JOjMY*u=zhikWZZe*=^ul_g@ zH2qxJS{DTXYK~`~(~dhFR4l*+vD%FnVP_Ing3;f-p>v=2L&4n~ z2fH=lMsz29_IXMJp&t+9k5d*syvXW*bXq}a?N@4<#%atiJDW4YEo5e|Dw_xlOvai3Miyi%fNu-mO zl~r{Mdknm~+<0bO72VU}s6xV2;(I$KuD(K#7inC|eYt5yX10_48$7q*um=v%U)GO5 zZcE>6E{Au)jf-GE>j_}1m$&Xa6R%Y748e8)nJ&{a{aZ3(BrRcPEJndm#>Gr{d6A#WQA`e1oM?$U#wf2aM_1A z-u(|?Ed>i`BOh~e_{&2M0V#6tXWs{@W#ktI0U#V(j&@9cUTKEgn%T>p;A~6R>zbA% zEiRk@MN^6xWi>N((G(}$T6fjSMKn5@Ql@ew&?J|;`mp`VffP${&`9@+(4ReDM+3P^ zY%pv;{;uuI5=Vt1=8;KJ-Ha!VZU@uDUPEpu9~P_Sg>8)y;v5Mc*xBO!XiDab91;cN~j1F+B`LYvdYD$ zQNcQx~8sG3-^IA)O1O@ zy)INyG3|dZH&d4~?=&87&&In2T3;YwVoExEq#3>`u^U{?PEMvGZtdV4TDfSMfAcKk z31+rpn{;sxGK} zveL#Yu7Bu2b6f|JIBf?`_3DbWH5*PN&da2^rO-wzJ1;kqI7_HLVP1o_@;tZvrj@{BMX z4Qj@H_;}6+8{Veft6uO$J!jFA1urj_YE@}clYjrUv7%*R$SP6{s(RX8GBO+}Zz*A5 zDVV8^-IlAuWmSkYJKnx0`{v%{wB+^PR7|aYvD)VpS4qq!H%we8kMvr63=cH(<}Z1MMmz~ zJ9?hTbBaG-vZ@JE+dmThBFBRto{GNY{vI{JbiI%hKCxI`M{M)dNfXU5N(O-y* zjqeg6^r<)ywr+gTJ-?ewoMK3NWeNaYUjI5cerR>}Vi9JJj$*ox8>G41%c)k!6B1dvi+V=XT{|98Z6Q69|G)LG+d%ES_5lDfZHjRjgNRx zW5_XORsr4vA|8rJ|KIi8Y6!Lt3myi~$&QEK(^2*;Xk^^QM7CkIppJq(_++av)Ox*E3zPtk^az{+6ol6+XD@87g36|N621rc@dBe*w$g8Vqs2Ae#`ZcbbDmVYvl; zP~5=&oYv>>n051_Oa-Nts4jd|nNPmljTcE5BzoAan4uKZZ|@Z9i`# zSaWzHw}F}SyNzb-8c2>yaf@DWK6RK8lj7AbO0%b;dz(gzf(njC@OXTBNa{s=unv=M zs$V~y+}f~d|FNr;!fPAgdbV3AM>iH{iOIfgpFwthSxk`B=eS<=oJx2u`l!#RJz*s9 zX8W9|mc;LHN^WD-A=b6mDtG?6%z2l|EM%vr8go(~b)7LY7gR_oRy`C90J_$dp>sKxZFJ74?;(~Y}Bha(`rxk5k1K1m;C zDS5cOK>5B-d*<7(w9>ldcK_g>HWmoth6-HY zuqDeiu0$>2{fF|A8927YprCu&Ipi(b5yn;x! zqdGQ?H!SL#OimZIB0LD`rO;>$fPA?pQdelS4=p1vud43GaC+0tt{JtY_b|;B~z#a2lN@i8x`j{7HGSqXJisb$_qBZor}3^@q@V zGZQMncf9QmSV@oVwN3X~zRmUb&4qI1q*qVRj^%`U2-4^cT_dSlkBjMPY}G0L&GE%X zdlqQXOp1M~gd*&w50cmj{DuGO0qd2DYoty3#GI~q0K~j+ zXg(MicHZ6wf`X8}KfgttMYgYVxsA{lOPZQzC&J6DctdE|RJtBW{CDZbr|I^~;u z4Uc6rsKQ1YJEDliYqo*aTbnz_iJv3ab=}x--x}y(kg3$~5CjahHsAhP&4^&X*w56D z5menfF+L^XqzGGnIV{X%eQVpkm{LE<$UGmRqB&FtAagolbJq?19Um9`L}jKcw%t{< zYcAPE1em4t2!V23{`SY6?r1We3Ozkg*4JV!yVG#F95rVZofOc$8Hc^( zb0r8uDS`ya8h?mG1egi(Qg)mULg={a^c*|&R-Aa(V;7JNnt0go2o4Dq9Z$2)n6gaL z2=1L41aFUqqoF!Aj0rufUEX35S30P_?&@zYSz2v4g9j`JvQIq*s`YGNSw5GgKX^3$ zp5(*s4iMk$GZeBcZYA}Y!@5*B{SOx*K!W_4ixZuUM0jA(VsvyCiGVXdpQWL$uBvKM z_BS}-+Pb!7442bP^O~>o;)_wnbHP}dnh4|fBf+B2rv9@#`z2}sk(VGSj)(^F^;3?A z(g~{~e@&@@lW!sIUZvk;Rw5l=_fjjN?}Om1M%MZSQe3b%T$dM=2*RFm?@<6%91A`i z#Od~D(U0rg0C}FL^~&8nI4qv$)I{DhnOQPwvpbdd9^RRT`(?g$DPh!v8zuh;=rs&@ zYSYeoev@r(CDmO2JQ{@FSCf&^q?yVze5IT}O8qo8eB2KG&AVeaMCVfp%&Ern5kl!}mYdoC+Q6wox zJ+8?big9g-gnf}@XOTE}jJ&MH{FdjN=A;Dx-v#@%wUDWMC1@^PBqkZj*{{>HJ$v%; z&%M%2LNOwT6iBRmqHFpqWAsB>QSA~BzCQ-XAo7}qPikR^2?q20>yujZLqD5d9>-mi zw$OqmCE?$sXo$w<&30wg*Vdj4$2Fzl4vtFmQB&jK;4m>UWy=?>g)kh|9iF6^327{s z+uk+&9wg`8$2{V=ghOM-biK2F(X%YAfLdiyj|if~5Wl{1OPaFrC?)(`Q$!Hwyq#)t zAAx<@S_tqR>u7t-8J-NP5IKk9UH}ssoww#qU3alferlpHXS$xT=9F?rBsqE-rZ#`S zMO}+@v0RQ~;-M1D@Yr&nUJ{DpKDEKoXS>uG9Wb`;HDP_uD>TtFB+%(0?k)m9Zf}DH zTH5V?dZoJR5ZEtfaZUcH0ahO9EDtir7QVg+Im>*V*}N|lYf-Zocs<%-D~Ce5ceS+) zH7YlXRK^+rD(3~e;l(db6HnI6k_qZ<;u&PWE_ZJb003pL{^jBLG+%ZF{)fU;a6r}# z4G*xcSjDUlYR{uh3{?aR2iw`snN?1@&e5KcnVFe|1r0WcG?9ShhMVtw_bf|gVml|Z zG(x*AUHF$i*ESp$Lk+$?VfNwcA8tcA0*_yJG7^d{;&j@8B$y_eNQNW3Dqq^Sg8l59 z3{w1Ex3TcCId64^S+WC~!*08gwHp+)DDUS^-Stm^qO8|$bsk3+YX(za_q+a{&c?iI z%@KsPoRz1QVJ1U@{Md$dYji;r{?1kOr~c&JtZA;6w z6ofV8nBI6@*G9tso(7MPWeX}&ik^7v8yugfb)3D!#L9KR1!P4g9lF}}oP=|@&Ul)6 z^6FA0g!OMR{z`tQ)Q=NUt*kgXHQQXZdfcU!N3;B}s_f0`Uce_ihz#bN;5v#ccS{%bthd006T0 z;nUWMU79}}$yFm-r!~zhF88-TbW#{VSa*B35bu|RZX-T>@BJHmkN<<(fLi1$`#c z&H0ya&y&1DLZwZOUD?_`A@BC=MW9fE^6PD;vBkyJCI# z?oaY=gcS-}BVOF*`lo?MP*YXd`N6bLniXzt*1!@WdgVvEg<3J~W%)E5;#LJZ711eG zv3>M4^Xx5^+4?#zepjJce zqWnpKnY$EF*d}EXrwr(Fz-c@ky4=>MZcQ=UHVCsf#58JFPDZ(2t%E!N1fXOby??dt7 zA|$P}Fs83nsY@_~g~T-~c(3DDDjHa$WHjnw?##I#mqK^fMkVp3mf$tG6y9XSP4CaL ziDqEQD)0cJg8}|SZfVfgd~)HNGoEvi2}?Ym8vqI;-q@_yd)0y! zmVTk1iBOpQCoRdhXa62X$vrF1B<~N>1rCqo9V*&vgCrG@Wc(|X5Lz&cK1N(R07Jwm z?a*Z9(bRe=aWSG3RQds3Ndinv;Nx-G(s3U4FTEIn#yJm~qWVvXn1=$Sm+o=s{K!)rKEsI5L3unLLs68 z-k>G`2;DweFHOn2CuaEhW!Okz;lZ7w^0?7(5$BH1W!FFryu6$qdDxS2d9M9N#=z06L{xhB&T)Ni zdQxAUT{m5?Z+Cx?@(@=H z>3F~o9Uc9=h2k^7vyinx4rycD7;Gn|)-#nRN&(E4M&rhO&g_i7-C8EuX|5^=Df$xk zWv+%(< zHP2Y~9zj)t6*7T_h6ZC}W5MhTZ80TT!+FFgJoMQTi&D|_yT=Lq!@Io_B>hQ)seuL) zGArg(J~U$}D5s~qX5DCpR9=}#c2Drl@b>GZG|5tCA21B27`31%Ok)r0az03>>olpron}X8Y3%Ey-jglOUmM?*Gd2CpO&4Zkm z&{1mNV#NDA{o`FdTi$fQ-~d_f&Nr>|iBDuv)_012W(PM)hs?fYc3xkBVEgNJkdOP2 zYLKsKf~t*n@}!pdPq)b@TVMN*`qF#d-)-f<03(0u*F1UZ+E(b>RR4IpZY}a<_*@i* zem_TP_W=PI?9?WgGdk<3b(T66J0fA^d~}T6<_Y)TH_kj3cCDSUvbPM(meo7U+i`wQx$JNQ1uxPJXa?`b)R_(N$Hd@d<}32l9!cZRk1yMyDyI?RJ$W11MTQQ~ zY>YH-&&3P&``2REZLXdh1UYBpmlP$1O^AjQl#3x7Ew)aGADI^~-+JU}0ZnM5YuDiM z@nP=upuoUU``zEHqTAB*K9?~`=e$4v9Ol!ihKCUut!_Y}X^TRk$+#-?ojekEx^azH zpSr-VgLZPZ@DP#H(^v9mdpea(1aRmEw;S+(sV^J+gQJbaCnx8b_VTo(>lY&C=|EY3H;ED#XwB^%bh%h>3|gI9y)^$s4hwXm0%GcVY4t5&Qj#snNIK4KX&y zNl_xEUbiY!BT{;IeUfb^lu-{}NTCQLmkD3|yq(;f#b_L04(M4&nifMWX& zPuZK1ioeWD`ptBK*Zm@lv^S8vVQnOY5jrE;$3jkDpdf;>t=+oRU^KY68?pR4z0uCA{B zFV@~UIPxgy`<-m;?8Z(uwyjMz_QrNHv2EM7Z5tbJY;$AVyt5Bp)N}8DcWSCqnWU!9 z@38yR-|nL$Hh#~BwBc$j){%ao{gGWb`(7F?lvO{+<$LlNc|sMQFZ?|Y6gh=~SfB*$ z7%*Pz|9VVhXc&0qYQWRs>5Jz}>kj}PYLdFq(N`y4eApbDXv8{`L;q>{Se3*u7t$6j(Uu4cAMp+`JYA@bt}YdOPlO-{J3~fJhTL z{OHrW{-`wxu0;hx?8fIk5pX;7$0ykPy{ru)LwjMax83y=K9BR+a<|=eO3uXOljXG@ zw0KPCFqES${bX>-_*!Jf^hh{3Kw9>x-KLxNW}^K{t2jN%VL3AcdJdYX_M2nq)UsJg&Cgg+D z_0&l}+aC_S~e*}7}BhPRfj z+q$vh{a7OPw~{}Tdz!9tX>rOY}Ef&Fg~ zL={tNy?dhitIR+So&dmzT~aI;hTCy371LszV%*}U8M7G{9WLwH=-=XfCTB+t$S&d$ zpsG&RDSUza??-1ls#LzqxpJ`^i3pRB7T43(s#jwdV30#c-~T7cv(Tik31B_#Ho33P zt)tOOuLl5vTv8s6ni9@9b6sAyF`7%lO&EV^fy6*WFbbL(C;))8oh>vZ0HoDxPlCJ1 zt>l01d-c(jTQ?;rK5m+8F%>NB%+QP(IoA{hsp&9kLC9wObERXdma>{2@Ed5-+)v;2 zxQSkZoYqu67bANGs2ZZLkpbbgtQd}ukUt^fsI4F#nT(`;6~IVJ7c zo0h0=))MXVwI8T{vCh>{+2L?7*#*>e+z<5w;I%w1T4q~Eg9Fl9$O<28uD6h2uAEiQ zyR&P~ba|4}#<%!r?~cw|QNaLO!}^!f_{D7;QjX7e^`#Han_^^&U-6)z0LrQ==Tnqn zIqN(Bz^$r&!cw$qh+0!scm2X?dRs;H5dKz0e>Qn-2aR?qlMJ?!Z#-A_!M z?w<1_vko-Ipf%PwB!@-hakeNRV$cSJ_9&nhq5;(JURx!?bU$C5^sd{dzoMVg*PKs; zr0=DEJKcQ112`>^q}hG4zd^PWq-1*|n+K+?96RTdS5TV^@32BrIoh`P6uYMY9J%DF zH*uk-5VJme^XCd&)J-KaSTs+Y?ee3EVEl<-X8%OAi6NoqAIsX}aZJzQZtv~sDE3Rs zxm1;2wKQ7h>4*g|$J$F*}Lk_6;|d-+7W*8$i9p$!-a3TOoWMl z1QX#t#(wzGKlIB%zO^3my_(#7Iy)nQGD)!NBo{_=V$7Qhy|GNln9FF3d`88RxmD{ChHgM+rv{THWr>sX@+3nwhhP*!Cl@LZtp2c*{wK$M0GT&?cK}loFof zaNV?YIuBosZbF^UvQjr`XzScO^?30x_;hXmNzO4eFtE3`Pw%!uE35E4GtsVjy(Det zov~gnD=$wS6f}{24-RR^;*#M~C@miSfN{w3QWTmq8tj>~%H;3Ddz=%;h2P2}5yBgH zf4{Vclt_AKoBvI2aNIV0UsKBI-ktF&ncSN=MB99;$xiBmjww#5pQcO)e{({ntgYjm-&-PbHH$KTwD9;0mRy#>Uh9ioLN zLH69=zU*XI(zT&fi9b({?N!YsrQcFNzYkU~Uh1OGu*!^GFgUYZviuoxHfb!acDg^# zgCh2bkVr2!ll*0WPNSOD{c3+9_P~m$jjt&)%UVU3!%u z-Z&q&d{)y0Kr>^G`ftI2W{aZK-h|Z*rxiIFBy1h*;6$_7iQ{C;G|Q<;$lQ5e52im+ z*1E$6$xbcwC_ew%?=iL^7emXVyD*~dNRRIKf_Pvy5rOJNA;=FBM&86r9}!+ zr3R?@%*jnx>53>_e*3pA$5!vREy}j0#1Ze^-s7U@ONeim6d~SUo9Sl*sH8h?8TE!Q zYCb2WU)>JTGL~=C57{7rDmt>bBOP7Lo;$R|9TeoL3&j@FuS_iGOYhEA2J=|nLtDdW zBrdPVKePo?QNg+yWhvfTH2Z4v+|wV*^DBJL^6u;;HPC!6OrJYw`oc*#Uga#5te^n% zTulom(H7+4l(*KfWsJTLjvs~F;|fy2(a*DkCN@!_t=I$7kq7kLtf8v))xuN5aWP`UF^5%QIhzwPzjPF|Fi?)0<6wda@ryI$~qw{sM zls&RLRwExKaWOLEHa@Rk3z;Y`>F-Sf+_5NJf0ugzy`0EKgxCPM^L^jzqKmQ*oQB(- zda?f<;=T5_dpjR(F5n zOB42&5{eGLP-&oe8p=m?2o!(fTj1{!?#2-exvAB_Xj=?s6A8o>aMI| zl}JJy=FmFEvUIk;4HLV4TjvW5zft9)DhTRt4H$kJo+7@7MB-;&Oo_X0Hys!V$mEw& zakA7bV4fJ?K0XRK97v0a`I#PGUT)106Nv*UQY0M+Nn^4-HB8)xdzXjCoSgI;mAiJmXt3AT`8I(U0awNd#ZS%7ZLJ;ft6xqd|8B|}%)^UDmiGzvBtlb-J z%*xK-B7x8e`aO*Y22hGBVU0{JUFF&5z0b>V{>P$GkJb;3)KnmI46$Uhg-X3ujSq7;JaGpigdx0QmMFUKiyE zn2i&@sa{(Fe4SmYIn4acM;7W~QK4)?Co(@7i(;8?uNqMq0l#;u&adAa6z!=j7=XL0 zNi~1+BTAe~Y?`btn!J)gGJhU!2;q*=(a~rmFhOp%Hl_50#6Ku1%O~)&EX)cO)Eh4$ z$GF%6Sx6&<1iYjtETL{DOB+qZdF>i6dDJzux~UHisWrXu+%ezP>I)n&WG-81v>eot z4IwYb1a`)iimQ-drdE>c3y?K{g}7~Aug&p;s$b>0Je<8M%$x2LBB_=-8Z&`fQ;o8+L&Dzwzcm+Ru| zVfFp)J5yE(L+#V+lr$M2&*B^(ZT)8g3>W|~#O!!;zHgxAQ+t!RHRbNb)q6mOPXSs+ zkN>7s{5PyVI14|(o&q#ML{@sL`-QZ!+p}U3ema_X?B<6_U%VO>!1wN97B<50o6CHX zn`$z83 z^YZeA0|!DEH*jR(q?xue#?cOaL5Qm0+CHzk`{knRj_(bT7xZ?=cD*b2*tXf88T&mU zx3!?UwV9RU`P!2{T8{+VkrBsuPhAm&j}JLJ*qIuq)fih1WsTNt-=^Od52aGEl3Tnj zt@lXJ89)Scqfj)swGT&Ag?MLbhp4VCqN=iNuouw5q2PG`796}ZrDdf-1Xd&4^~$J( z2>1avcfo&V@wt&)gKS*<-suod2Tlrz54;_Cuy}Mqv&QGO6&V-nxy6uOuk0Y>_Mmij z`|u5m@chQkJUjK-8FGJG4Q|-k6hrzKO249I6ZYA3<-S88-$T2D=S#nm@a_s2s!2xl zjS&DK0xn_pQ6vF3&sr)Wuh^)7_{(fI0QYupvkT`@oQ6zUD86j?u;EXqSI6S}SfrYO zSD@1zeCg;sV$X-;lIu|NNG}v!mLluXRZ*rpujVHMD>eE|cDpmES}OxJrqD^QKMQDk ztVvY(PHY!m{WTuF=%n1fPK|aLn>wyk&Dk9dBFUv}0suS9kp@N!C|CL(;`3 z9o)!b5rz8#g|hHM*e^?S`WUJs%I2%$F`8ObilwGN8n7}2i*uC1nYH0bnaeig-I$;1 ztD5uq=Cdpcmw%`=I|yq8Lm2i??i=p6R#j%p;}L4H7s(4Py2pNo}q6|u3RQ~l1vPh{^m^n?dY<^W$fBoDXK-rUY^_yY3ua~QqL4RZrV5+V% z+ty$fBdqlb))n%|WX?I^n~b5uZCew&i*{XI!V~}!-@dLFWhyY+rraHsEpG9)IPZo$(b+)@rwBPeNtvtK8NS3RV)(^ZZ2VzbSbQ3HG== z9qP|psB-tf0REjTv3r~NFheO+r^FQc=c`jA#T?>cWs+k6 z$p&!B(aqrMS9>>B8FKZ_pk@35$3l|b>Ht5|Iy=RVnoGkWTQx|PW&t;mr2{7~POTYS zDLb5qj#*AM^*osB%LG(o`N^m%u4>jCb_2zDsG#y&$8EsWCG5R4-SO-$PrleYW9^MZ$j9c8 z%y7EtahIVCHwPJE_Pgcyv17cUk&w!nK+EUTUKUTl*yLx&XW`iql14s6?)FohKU+r@ zF2oto&cmm_tEb858b~~_tI|B14zCZ5wC|DNqqGw(U05%i-4vHU)!$5aj*>QgK5CSA+MVRd2Q-R1XZU6|3e(MalHfBF(H- zK1gLQ_zVoRY`sx0tOq_9j`u%*t3URJIhDvb82!Lp=lGs)bM@tV zT_$0z?gFvjeKvWai>fWzJMJQilxhNkIQ|QpGLM+JjDI+U(>sg#xlQCWLytWaAg2cC zv#prYBHveWO3(K_v!}K7;Zjp-(shOiDpEB{qyFX%X0h0&Ee(5AiS?b((1^kwuMEk@r- z-A>2t2<~F^qTk7#huWV6U+poR^Y?+(<>97~l{b|MdU_kZ!(J9vo2SU?x+K3Wv9(VW zm|6daqWMykiHbnDF-IvfGP1+Tthtwpzx^Sgl5S@2%Bp#Zl5pQHHDB(G?A+uoJ>RjPJpE-rVvj6wIh!e}uk2-au+2$*Gf7o2N65ToeEGy|=m)MsI)oeYf@};=GSjZ0?u#IQPg9+`x zkE*mY%yrzhZx45S`>Wx_X${bHKIlYyi1uEehNZ=; zcJTNx>L;5NQ{7u zm>>$&(9q^PboqigM#P{=!>s#GUlnt{ zTHV?b6~V)|u6Vw4BII=G4mhxujVuCEJa-Ik!qR1VFt$nq(v)PsF#08qBmoeR@}4gj z&OVu~JY0-^T90Wq2@fwTOsy7i3*ZCpthAgW>2mT=A!gvTTSYVizd{UsyGo34AW)`M z4`x?shhRj+)2@Ozi9fp&YD3Ba0E+7(BDgxZdC0gb(v2@pOeTAM<1r3-Rca&gv+(dI zxXSA@g_!yq?O2-Q3Ie`1Q1g(HHAJ#EI2S{9QgtHJRa!PxV!62bfpp;#OC0%?~pK zx0#}=sHjNLGdgU&m=vF$o?hQt#BZ5PGbuuFdOZUGM<_jc>ObYj=lKY+2(kyUZrT@z z(W7&2LaVi=-!FdxuRCri=dO_H9xB7j-1P0fPe~}Q3KF5%a^gAmVjYvtQ!9x0NtdZm zquB>3kf+d~!xbqICyXRf2Wb?k#Idf7^V#Q);Or$aJH0Q%j#av#Aj8=Za3^GV?atnW z;eNKT|I~QZtcWA*Zqf?}E6jR6HX<8rfxm~Mq)yaW<-%3cTDE;^QA}c8EbI^FEY{!# zraj)l3xXZIzn*Y7+^DSylvOxgTJcMtS9(J0ar*rYG@kmPYY~oh z7HmVArFI%D5E~>D5lN!ftHt_pl!}9*WNf{;d$Y5?P7Mdx#lB_I2(r6JbWKf%!Y2Vk z1&IF=6phO?HXT<^GCF`=K=6~;HGwEA_SH8sw5YD2mF`YaDr_>)cPXf-I6XdIxx$u{ zlhfAThz>t|rW(k9^JrPIjBe5;>YcMY+mK5c9*b&U=EOf4zo#F`SJWho!rC4G0+7_v z4#@Cm$DT)ek>6K!S-)0qcTJ1|K7D@w$?}lNK+Z*g`a*8mt@iOnhaYr=Q#GY4RY%SfMNlCCik`DFL?el>Q4pxhjJ0$LcIPjm@H0t3L0i$Yr!6ni!qV zZEqy11n(3Vjlc9sO{G3w%!;9Z+sTvDuz`r^*NP#i9oW+?Emr-$991%BL!d|6GTU)2 zv9y@xA>QRPVdp9IqxUi^iNR?O@^f#5K|h}vR?h>H-mbod+81L zwDx<0)BJGKKM{c!mp?Sb=F)vErpTBOeA#%%Q2$#C@Ld82U>aWt#)tr&YX%1}HFmQ5 zRU{<3U{$t)W(q){NM}`4DIBE8NYB8=O)KUH2h9_9gM$_w@8+W??aA#s=87 zX%Xg_97a0Bs&mww+Hx&=gJC7W0yrbiS@mpZbD-;MbR7s^L{my#Bvgk97_K$VM*sl5 z)R2jnd^v@C!lnj6C9)ARcm8Nk1VHP9x2SQLh-7UY;dW-*Eq^5b&5n*ZsLRotBnORl z4u;z8xin>FNTV|9xy;$hikaAvNvM9?lFR&B_s8t(kxUOZ~(F33~zNeI~MtxZ#g;?Zg#cF3K=M=cNL)YKl)6bUz{O}5~tnx5Y zGd;%Ru+4ZLeyM82M0fT?jI^8G;gVYHg%g9OAon!ci`+S_ONlPP|=lR znc7xaBNF$>(}FQ$kW`_A1P7Ng#1BffG5Z0SwvYSPTG;yZi>k`T&}KBTj0!;HSfyRr zIywqBIz2wv{N`QVTKtP89C&I{LPGOLc4Ugp@!o-L&jFwlp%pq}^z!nu+3AJ~@bvOZ zlQt0(yYsY_u2KTAS0Cg+q3p+8#p6MeGfzt)HpdFdDx=tVz$6Ne2w*PDZ<}Dsjta<;NhpD> zPU~>cEKV`7^s|!lv)V;kfE<>yY^U(zhU|BIhw2d+iY#k#$TZtFwb@>NLBfSvH@dW1 zEf+ypw6G)Ly9xh~e$dcKPp~;N-kqOA5pVnEo4YTfKKR9DScfzCnmdKB4i|D zu7Xj9;hNU5tU|g6L_cM-Bu}ax)YISnYXd4N8wP)ai>Y`zq@|^$ps2`(%*~yAxQ{YV z!ADNb!#$d3DjGT%z6udM14MyeT9{q*-;us3B2J(cwf84EPig zvez$-^?>kXOrhTA=nwvb+4<$Y(Ti?*HI5%DMeCh;Zfc)^0WKHod3ta1QMquMzt>pi zX-ev^hn3QyG&?tHxrw7_q=frA@PX`+2OZVx&= zti=jdhV+On1xNtt`f zPiJ~~oBDJJeLl0f^(`@|N4|N~ZQ9d-Q6S7l z;KzdGiPKe_cKeuNgir#z>%zR2Yu}zaRCE@#Yc|QooMs^w;wy|%$y0Zn*7(IMU+Mb) zPv~UG4)p^=o41O`%L4ZzNbEmwaD%&@g?WJxtJO3e{1{PaFgd>cIbpHHB`&!TofVnw z8Ty%K3XGst*BAjPDIntMSj`mz!d2}`$5sSTe0v9p;q#fcqGd)BX?(P|Ha4h+n##NX z*r1~;TPyguMDh=nVm=s5k^gJ8V-Kj+v+^m`E@8MqHChCbG@50P&;UT9KbPq}$2)}f z8OqoH0K}v4*$jbjGmYgL=*fby))4<2#w(p83&sXl4w&KNgX&D5KPW88{s=N{JhBcl z{`W9@O)ifY8^&YFPL60W!lI&}BD{`{XyU3j3J%0dp`slZN@`Fb0?s1;$H=V=*-C3; zS?eO9T;*ScaW)^c20*O@PQ${FDXFM9JHmiIo)V`|I^Y*4k_w-r9<%azImX6f*C-NA z^Km~;L~bE>pmi)Kl;9KKbM=&IHPgiC&NW_9tzNu?dt@{H>0Z=TM`{whW;qOhts76n z>+y!;$$Y;}iHZj>ayfYRHu5@Q=!$v$V336~j}wQo)aHjb>|p5p)`GUd9|ZzP)Sdn> zLZv8C7+K}D2skU3fBg+8?@GR5^h~c;5ZF_Z7dC_LKJE=e&__*-ZOa zi>lbk{}(k}ucg=gZVA+O=Y{`~*33=B3)CEq=I><3X9IQAjZm&e1&lv0{Li2LAW&(R zaKU#%^IsHC(!$RdLz(AFEv+o9Od(9uHPFw_ikr0UcGu=64R`=~{1@<>5xdn$Y>%lZ z5`yp7*@2wEmS+=63-;5oT!sMB4zC(0em~|r+SNf{MD5|-?6S1xBJlBHQg1sno?Y@7 z8TZ~~I$7>xZ~Hp!()0W`qSu{jf@70sP-U%!X3gsYs;9sqS*z>uG`G2G*3Z#x^aLKO ziuA6}4o?PIGQD5ptx6E#(Y!}r|aP}TEnaM5wc z9tqLxzBs?{-ON&yjt6Oi^Pb*3HHMll@uFpOoGOJEJPoVDK*A1dlxBB}Pagpd=dNNp zixv{?ta<|m<)#d@3l(&mSP5#%@ROrZ&|*jUcaVXWPjRBSxIVhNx@>YvX~pQEK^z`X zDMHwwPHoOtVGb+6)LtNycK-_f9T^j$!KjWlm^RhQ_1QKY!FSE@KuMRsx8eTr+n*vM z?V)_}&r|WXiUh`kqqy5Pa=v93Sw72dJ1LlgD<=VHyo`J8Of2J{8<`rODal#Hp$7hf zhWl$4;UCk9bES`KC=Px~yg6*EZ`28j|HID!CBhBY!3=G555L%T7JX&Ha=um2n zQzSjvSoh=6TY2qUHANH|6H8^6N+E0JM6PFRz3SBvt@1l6;woi)w_RT(c@A~OM$FkH zuWHVv)HtPIih%aE{JU-7b9Xm_H49vO#9g4DI0Gr})U5{i*DMs9w7o)r%#-Ram4RC&kk zjhe7ST~*TD+oV&U+4e0&%u`rJjM~!;Q~omKtrmH9y08Jgpi!3W`d5s6e|3mcx;s6_xgI~ z)S<;HjJprJY`tA?H5wHn;J?HrqL3Qg$RH?&ttj**mTYGD79Wa}y@me^qUEc+4aWZU zBoH2B{F6}$BgOxe)rC;&l%gtdFf~VI?JUiOQTLs8IMVSeg0@dmD}*>1`G^XoagdNp zkkBvP$ZoFmW2=mu^i7PR*tj3cgCDG911qaTO^@>vb_-~KP?uzN9rbR z=W%zcH?t{y&u0-|@bgEi@@E)z8`BzIzdIr2jAtsfqDrel>i%#`;eE%c9l*B;Z#CX<*|5AyNw%S7DuQgM8OQ1wF(0szFej-G7k@_q)7wk zBsybL6yxLi;}!VcG6>w-;v>4xVReJo&rh=v=a{{4+G~G|7lr`8^-FA@DTL(!t%`Vic6{ z0E%I`Lb)A9%&7N%b?14-OXHqEVizK?okB z18jE`KD~gv^9K4cAfMTwy=G?W>y9p7q2X68A78W}g*XPEwbdDQB9ulAnAX8#tHWUR z`cy`vUdw*{5JjWQ#R)YM%l9sbVO%*I4>>G{I~e(63ONH> z#Vs&`bsw5SG}b>sYDfiJ3WWS|ug945(y^p?Z&TLh0wU)F66!Y}Bzrs_s@MEj9kM+q~HBJ$&HxRg@l9*4DxewataDa zMnnH81;GssFF(K+%-JFa4H{N7bTIzK;(q5}CvamB$YguMO*Wi-H3Ai*#TuSp*lLW5 z`U>IOs|SDupdH;Yv9ayjYS1YTGG70eg70$j3jo0E^H@7w&`{9rT6}B;0dV!|oNq#$ zTQgP2`|b2ZivaN5#dA&5$ueYzl zIYZI}G@0!Ml^yS6_!9YLB_ejF@acRWUtP|yr)?p!_E`_A<`;$?_;vTnr8!+U^k0@T zi_*2k(`#Qj4R^u-x>zNsA8T~_%kq2^KuIUOQBNETl;IAba`rH_k)y|??c;arxf})~%M@@LT@#3VP?~l5m z-Cs{Hx6CZ!@URBjpU9P0sTl1zl2P7)6AvR|;UpJjUe?Cre@OyC^NAn1(Gi0i122Lq zjcetbWPZ#cPo%k(`x;n`3x9@zOsGvwdK+QR;>#Vo^ftaprt6c+!j(Q$c%{RkebQwM z28}+`LCM0arvNvlo%+m)AF((v$eK?mT|Q|ji_iP*X{3Q;%tKhGyKy-KswYU<%-5jX4C z`&B+*4(I_8Wga2){ZA-u>N7F?7k~yr?94FllfxRT{r` zQl2jP>V67 zcigqxIT@RcjH5N+!1g98eX4rXegpc1=g)R9R{B8J-un-uvF;IaxkK*%7ilWiog->; zf2tkhv#Ek@uhXy@P2?4*=8in->l${Nc28@8&pK54sgU+MhBlW$pQ2jEG zUd08P#{uj(d>%c903F_}E;=ZVD*`Mqx(rNE`QU)BT7iYq%g_Zp5;#6=3OlsG0g#pn zh>r7BCsmEl_mBKeLMUY@pH#R90(qzjLldFj*&q=}a5XFQ>lvSQ+T>?upx1g$(i>Z`ceAv)dR$0 zn_9_nUT}J3FvgH&hdHlPzSOxYV9dDBXbyLcK8by$afLt5+BaTV%1>X`Q`y)JpkdL}LZv~IM2$Y^Y-Q--iLrp`oN6Uh#$tOfsZ8jgdv(nzCVQ+q;aIqy- zL+Ur|Q*{~FP+yP3=k6#kk0Kd}Qs@BMNui*i+S}V9{F1?hVkeK<>_N_Bv1WLA_vRB6 zS63)}5(gVc0~i1l<)NbIVx7fWg5A)JeXF8~*zI87|5&=9)oZ7f&Mztv!`08leGu~= zXKk6GkR+tFtLecRx&i4*T#xZtI#>AF1eoy-H)uE+e_+O5_$H?u>_yoAEXn@hJ8vZg zOyA^J8npecQxy;G=^&F+)+Q@4XCbct&O<{}p)|i-Mp?3ogT-z4lv zy7C5VkSi}v)>r*coRfW!lGb8lWKOWpYF<1p*Z!V5whM}72ppfW^%>NGd{I6=zBO)i z-2V^-nsnyYD98|}cjD>y-^Q=zGwr|~D;lyn1(_-VS7V91z zwmn2}1VH-vf9#YY+82uThr=Lf@~>n6y&E@f_d&iosBi!C6YaUNs(%RMzkY?82=j>Ev(_jh(nf_}q5=HzNNdH^Nil3FFtfMUxFIUC* z^go?1h3COK_P-^d3zg96#=74w-^($RJj-qygUd~&{JKYbUU#t+Rpp2O*j#IaF2&e+ z&DgZxK3RS^+PAjed!Bp<$v1iU0+5k>YibnxD?!Hw1p+Va=_wvDc>Y8i%ErdVVj;eu zY4W}8%~^*aq#w4qt}QMJJt>RtcW98V zKRCl%ISdH+JEQUVCAVonSIWau!|-Y#BlzgT3Dh{Wf42p2 zV`oP+hB)%CJNBGl&d$=l@)RZTX=#`a_QCvFNNi+2Pp6n6!B#mRTb)^!Av--tThuLC z?FQUVSHnG*$(k~2ZjSdTByOvDA`U9=2?1*%-LDhKx(Mt^n;X2Z1yQO5Ws&|so3%$L z+rj9Vo}M(?Os0mz<1HvMug{q!=u0%Jr_F@L3*E=&>;9&O#>cm=DW4pMN!ul^o^vJc zb9TFh$;+*Jt6Sz$C&(B6_r4%?)m*u_c~6h};#M42t%w{pLOYzn6>!VZ=7su zkRL8G4dQQhmk!-6yR%ed8w(D5wl1VqV<#T8$~-+SF6#|taczvrFL0l>GO?j=7U&>W zVaCkHv2JR1xu^jWeZ8khbI>>oUNK{e%?xi(2^ybko~pv&ww?#{glYU6i`3gyTybl1 zC9pyvuh{GV?DPQBBEl z{T=Q9X-^6_BJb`Um8Q5BzPO<~DlG)RxZ~pwN(F*b&YuJW)4sRisZtIkB^lJU((xVL zxw;hcWmx?^*WcxEE948Yx;QVZiI-ITYcW0 zccWc|Nuxz|dh(D4MG4)?vfNlDOZmx-rN`V%2%H1}(9Ufh9q^n=cM5Hh=Cs(n{I$>l z6ukstRSYbwKT2WK)AAI<-;EKHI5|063&7p5n2Ab*1c8674W9uW~Cm8e6=khN#}agaA}q3g!a z|2)A+aajg^t0ealJ5WP#hQ@oFQc*M{_-?62_kaN46pJar7SumFVL~@B_6WXELoyud z-4aXK0hzLyi=Pq(U!=!s!{&+?(^&_y!G9w|xkB<&J$ubrq9G{E>I7P<9#o^hw zL0x`*!x&D{&znLvo5@bD9V0^ApQ1TE$hk6RZ z()@hlaLr9!hEq{tad9#21-zyf%FA#;Iyd@t#e17CE`mmbi|4Gr+$TM`nf@IIi`?Vp z!|53VJ;#b?nVg3X0mLyaNNC0@5_cDcYQp-gq<(%+vXbRy{c+0D9#okRE%z40i38Pd;ut57bTJ4-`~+@;ZHz7WhZz?SCML-pf*<3-u1;CHTCUY zk4wuS7(a7vM0a?^s=}5mK+SqeIj|rd292Nk949mAc7rmZ54>Ne1U?}kAtylhZO+_s zh@>Fg~C@l5U3-$?GR$)CGArF^p zppp9kfg6@j8%-q%DNfzwJ^(|$C32=v4JSBjCK6VHu`RpiD z1e1p6Z1Nx(Ja>?z2aoYu_cIF{T_kOV%=oc~W0l?W=><(>EQ`Hu@&4NvpRT~bKwEWb zR0;Y7^Zh0<9X@h0j<1JToM*YYxzW-4ZLy?npqwBZn@gDtcB}PPCVKknU*LGdQFnJx z+?=6-eWiDf5)xrKb#+luQDtRRDPs$(z_o3Y0-sc5DgQ4aT{9)a8N-!ZNK6ga9BmKY zmmfCKIMYC9>j7XFq;JE0t4K&nRro9{Vg8G8U#ZKco5TE)OHz#7n`h@>f^0Cox3~FL z?bp2SuZPgppY10?3Rf?q|yXOvz61C z>{=!0y5_r=s&$_0i}A2w=(lFO)^bhn>HpROFmbyGx1+KaMzIb#=XCU59%YiLUcPgS z_k5@;&j`d>X^}~cy-1myyA_xr=VEAk)8F`B?3`{PFdKtXV$U~qS}2N#Qwa?OHs>Cn zkqOLVuJnKI?(A&aMW+v@FhfZCN2nx&a9EW|9CNiKXalXH9R~*o=i$x=ipB3;_I!3* zZ*YS$u&vgb?@yO%+L9pzQ;$xO9c)`~kK&@5n!3BY!@^)w#s+IkWY^TKBTyZ3-b#6n zrq%@kS0;;~;s)FID{*$px0HKJcNPGENlvz8PHI{v9ox-a9VQCkeQ|3nJ1bEG&V+zp z7D^hxNZ|2(@l@iO5v69BNAPgV7(l7_77^?n_nA34t( zRvnd5!Pax(|Dov7iy)RoiNC-IHD#k11OUvXZ|okGp3JO1gaTMIM^s#DO#0I-(*>m@ zWen3hD003_ae0b-_B-^`s!Loxza?Wd}D@%zu1h2Zjw2W+&|NV`Du_xBo-{pw3t z!)OAq(L(6g$+D38l?gU$@QF$mZ5erKc+gK!QDttHpW_Ge>S@X+dBIjX&nSZ20**WW ztbVwGRh#Yyf@*su{Y3?GZSpboR^q3`HA2dZWjoOI8|@)GBl3qj zb#9%6_+V&Oo{R;UjQodfL#=vSHtFnP^IY;VrLGPE27rNsiUgm*+@=qotsFx{0{}2S!m%&$nq8i*X-r{FvN<3#dVn!CLk8F!e>Hs$cMb+Qdb$)P zG-hV1_4QEPTy}Py-sGCTZEo+V@uas8wb$_Y zW>flOU3~Y*i`6}M^TyQ25G)&q@VQ7bajcWSbNDBEu{o>WG zalb+I?l#$S72f_vgr?W|3yk0oXy=%aZl+mTIjpaDS63S-ELOopd*bIykePmMu#0cO zJi~c^w3H(dRo+_fKA^Xp{@sjxZ-Rg2de}g< z82I#1p7wfeHj%Z=_qy{k8hOr=oH*Xy%D9ZY)wON=StfuK^)Xvfp<^W&D>}`W6ROf` zHZX*k9b!@ykunQ7*CZ=Devv|w37KO;7^X~W|7b`fS0-f@x5I&!4>806Xrsbd~N7#Y5ttZR-;uF)>TJvqbt; zB*7TCd3$qwPI{&0sXFVK<2V>6-!)Bw&hVb(i9PMpegLwc@VV@TZ`E#pJuK<^fXW`^ zx#FldTdIqNOp}i#(^Vj|k&~ND=L+iR=z#iPv0?!+Bk%L8wp2lnYJZP?|8SOWMVy5f zuzcZU=jLV(q-N;x5#ZoZ{T?Tewon*Xdi3`kw}lWR9H(<(VJAOvtwk}MRHK`pONf+wCZP?KA&Z|5MR08>LES?!ion7dDDq{FJ11KwZQ z!CrE9+!OG&wsg!r@fbSSTz=l6WkZ4S`e7rjxtkU2KgesA_<|K+WKE2Ckj^ogNbMO# zc>Ob4zUvSdlCa@~A72TkPGZP){rU4J8Yyq%<^I&=`DPz<(w(pUKa70^P#s;j<;5Wc zf)fZ1f#4q8E+n|SySuwvg1fuB1a}DT?jGFTZ93oo{`Y3yyr~+ff=dBLk*3l8M*Ali7iG1lqEc<-Nh(H-pmrGU(eic%Yz_OG+L z0~d$&j`zP2$7)NL-s2w6>ipGSzd4?8OX)0)H`5dndTfrM1-yQI+o&9P5O+@FbwBl* zs(yH}fIA**X6k}3)%yRAQl!@UhtyT_s4B>$8Fvo2G7 zj0i0-5u+mlhHVh=>@g*6(NGBj9mU5Ed@fWR_@l=3WI2{fM&SXO5Np zNA^nl6G+GKPZsB;k{k~%Xh4Qbhd$?NmXutN=OB>DLBdD+cBvi0VeEnzyxpTqznmG2 zwB$8w<;MCNGoYMRJvPE14bNZ*^lj||hBW9yqGktY{sRF_wzq*Wn7r?u6(j56*)BbrP*p5fXI$v zDoH8+A~JB?g7*IgQ!>xyU;Gl)d8#oEYZ~v6$c+l8ugiGl15vO~C0P**%HM)e5(mWvbJ1JLqY;O)L&D0n>#gDn) z$P=5wDz2Vez6(dPE?Lc&K$?mgpfuvc2sG6nyk?4I@jw0iZX62ddP8@zc6~MYUNn}T zNKH$NBu-(wfLnwk=)ymWsYcL<|ZB7YW) z#L_CI3S0#Os)}v~i^X4t-meeF6v=Tbi+=>P+KA8S;hSsj#>ugt<6siK-;_@`bjQc| z+)sa1x5eh3ZrL;T%JW_iza8=WWfgwnx=;&ST#mKKeQTw`++PlA-83PV;_=#m-P|mA zB6@^$9|)7J;M}*IRegAR%H*&w$j#;NTwm|V736PDN=!mz6;WAIz{Z)kzc8Xm|51*| zJA(pOayVAaK4Kn$3U!F>M@rN8T9UJ*%7p0= zyzqIhK|%ZP%==5r%8vI@qUd(>x518>5y8(GN>2fQ?J@}AKfGHx8y;*e#IrY%s(~>k zS+jMrzo-d(zJKqJ11EjAC)myO^&dUJnd4hk-lh{UT@cBGmn!TpnGy}RF&M5L@fOiI zgx!N>RMjnm{O8YHhuf~sOev3_-T0MjIGG)OA__DkrVSeEf>^#+vC}|;Z1AAOv?LFj z>=;2hhsjlWB$&$mGg1B!pwGo9%JDDmWN>gGhB})9QxFRSuskkFc&zDq{vpY?g;xc< zcab4Mhe9#S{_o_eGtcoPIeRYduN5A9Mz$@AqYI_&cRE>mb=ybWk`yD7Ih(jrY#2a9 z9_`{GmDb(0nU1Qw;#cer)&jqFqa*s`PA+2Su=DaUzJ#Z>;kk13-x`U0`TbozIK_;4 z+;w9WL3Gm4!x+t-l}&==gnz;eT^11bPU1M$M<)PJ3qjy{cm#|p7D{u$NXT#8sjiQS ziC9!OFDfC;pJ));lQVop?*rQV0&>2b8YQC!D;0l%jqNlM%P%-0WJs<&isuIK^1a&_ zDR0}q@o?$)aYuP6>Z+j*oHE*3^xYj zS9N?>XaL~X#QEN^Cqd1`gr=$IVW_oO>UpwM$3&^wRcF>ld1;0-_)fy*-UkATlQU`z zxqInO_V$+}uzkgzKClW6l?(;uMMOti#eS2d46JGecYXajsqfgkyw$w7E}qJ4JeKtU zP8R?mc%bb#P=W36xzb3|GEW}y{dU+yvtzGXZqt^wYLk6J^UO*!MLRr*Uqoc!0TEl0 ztSO%R6Xw|IzKxc%gqYQr!9Cjr0RaJgd~xv<>g*a|pLvWu14do=`}eQ&-NPn7SjeD;?lUBrH(3tJ`h?N8Qq3#2{aP|K!4ruV5IQSQ2%}oGc4^P zlrIQ$YO1H0q$aGPakh%!0x^q!TNKn)%&Ib462`gU&;kqwCtmj1?pYUhV#osdcMT2I z2MRI?E9n23ju4^V0Ha&p%R?rv^+BmsxtR_UBY2fhsRR;|!uMd~Wg8Eov)pJn6`++Fj z1jKQo#kFw`$*C>nsiCf8Q2F_ZnW14rQc|)>E$%}gex1Fe9kLw`v?+@33KcvpXZNgTp%OiWB% zUpoZ3CTw1~v;wd(X;6TK=&BvD2a2RW! z)_09LWev8+DhXYkoZN(7{4&A1ueUlC((>9pIcoZ5rhjI^!_3C^0UrKGWF);d8VZVz zRm2BKfty^bs{vC&p{p3MK=XMQ6JVejH8_zmHJo|~59wq05g7zHdVt{lpf}jDK& zUue7_l9y}H7?>NHl90dtd!!MTz^_UPeG!01CJOi_LJ^C~$NI#=n4GD`xqcVIrbO?Z z52b5d#;eHK&mPDGBM2Yk)59Z@?8_?!u&}nXct(Lxg>qPY^V1VY=#HtgUgi3@F~8X) zbdbt?JUWfFG6Di%Lf01#mmJf)1HLCp3G)4rARq}D5ncLjO>{QOWe%d!;RM$} zeQU#V>UXLBe1-4V)}SBnvdsWRWn7rvR9}nbQ$6kH_aK{+vOHm`WMz{?x)XH{an?W> zs(Ko9y~~)`m>4@2Fom`=;*DUNUdWUmS`X}oU%(4o zE-VANL#MqDygv#cHvA1U{MWuUoo){!5rqDHdcGPT)}~jlm&m6w$9XtyISa#()ej)# zHYl<2+gj3pcdF4`WxEe50bm73p6Ln1+l3R)~%ff*0P z@Y$4&uE5kg*=0v>QL~5At+y!bo;vcgTs7$9Y|W4ak^o9}b~awW;te}oK!$Ys6^;kW zsQ9b`0gZnOt-1M;nU~PO51ZXTus-N`^VA7)aWc(_?BC13RJb1c5A~{q{}ReA+dId_ zS5{Wm5B8Cmupev0L`RRkVgE!ZB(I(F$KMc_HchyqYeRjNENNjY37LSq=&npL!;!ym zPN^4x(OI=as=U1MkFY5RF0lS+AGYV};Kan=CY0(Goa};rudGfBy#FRjnU`4jg^hzT zxaRJrem+mDBRT(%3l{A%Y)jNbQ&>1Y{gac$uOYfGGo|2a_gZUrLQ$>D7mK;R>HcWR zHeEet?0Gp+(LuoT?%K z3jyW_ykf3wK4CaT46H9Rc83Fd7bAEej@#Q?3f&C_sa`9UyH&fWYk!SC?}-%nK}|ve z$>-iDH=i7OHCva`#I9YQ-n7s)I5{@gwc0nh`k<>};Z}@#TZIabj4UM~p+FT6j45eA zN@MdVX|T-Je6H{Z{a~G;GROT_ljBAdCU|2yFG?FfeP9iCK6yk@c7DBwy;?NRjPG~_ zCWxcAP`G?9Zq@t-yP}j>kY-k@v-&3;1q@K6yy0h_n7Ye%Cx2i%DQnIO_eV55=qZ0@ z8~RGMpSs%Oh(^*lhEj@s`#kZx+|k__1e!B2rmOg@t-bDkcWSErkqavT#m#F}@BCv# zwBWvBCuu2F_+h%KLRV|!UbA32hEiJ7NBE4Q-y^+>MH*okNzWs_b$92Rf)QIQD=Q_G z(;ij^{Y~h&KmQrfUW2E=b67NBVFN}x*d1i-UDX-S&mO>BK`CL51MQ-hm<8zR>HQ)wo(3ZZCR6vuG6W0~_(;M;<_3nvC}H7qIIZLd%J)a$hvWbCZ4AIg z)(Qdo?nMxARVbKWj`FbP4J=e=F}?3nzNC%wK=c)XS;PSfqppvZ_j*fvQE`E{$i(XW zYKpRY`@joDfU}xEoEVSs(z6oV+n)7ZR4^nn$#p5Qpr@zD;c(^v#=M&z4>-9Z(avF} z04>fyaCGby+4=|+dUjvf=X)4A=RdX~V)?(_gK?RG!Dsbqa}kQ`0gKtyrbGuy-0SY8 zG?Yi))Oer7O@PH9OX-w;JPXr3m|qDK?}iisp5m<$t4ZRc*0WYkvxhyUHEnf;Ayc8# zt=)6(R_-3UX`~4JtEzYyja3GH`8|%Bc}t@h_$)Ge5|s;)g0TH#;XI6^@_?6oSGB0X zR`J07N#$Z}pSw7US>E~3`|QNip?GTGxZR~Tu5G5i1$~&7X#typ@`hh;Nq%1Ee+$mY z7K#3@Lx7LJ`gel&%UMfUbP|kdtkklsBSg?PTe;hKh4DZ*+-4u(_l@DsSW`pnYJOd9 zV(9t_9WnG%ZNYLP*!_F@CwljKG;NEFT1)RkxXgQaP!@~TQ?*?5w&`O|bBm|2?fjab ze`*Eo(bVYk0cX%59(MIb`B&@lHD-r#by}Bv<&IQWc8A$;fh2fh19*au@NEvRf#2S> z=dXb~P)e1umCBdZ8?3BXIcJ(3_ouN>%GHC_o*HT{5vwmv3~ir=TwPz$a|2enk`wI z+bi1sK=nk;B1&uP<=!x@c8AvO^Gf9qBny#3soy2@Qv<%rybsSV?T235!Rnd`WuDW? zcfW2?vI~%&0#V!!T%fZzMX#|UQg+YXK!hL_HW zJ16Twly-=?`$96aGReXCb`q;*tFTs{9;(k>_`E+N4I??1%*R%vL{>V`Y-`|r%C#PL zyWuZpOq+f8L-($IHI>P{f)KOe#cwZwzV~Vi0>qDcx2*N5{=^y3`N`;oO^fbuwxP^- zR3{ze^wRN0S+;t8V81esZZ9Qyjly!zE8Z{2iI{(Ql91U%_Y5);4FSq8U8Q)=x0w2=*4vriqCfFOHcx zH?1?%g&bVkhkG~J?;hVzeYH_kq!_o|KRjcr!%cm@2*-Jy&HRF5HphSsE-0w3??1}C zP>IlImoZgg?LB|su8yiys4+`np0CO`OOP`Ui5ElqhEqn(yemcw+SZC_nXS-Al+KLM zSE{6Qd>Z{WKOY9_hM12!)_nKgh*;6rKGdOZiL$rMrqWcooCetSQQkIj3#rwh2LcH4>*YW@oF?U zhI#f{dsV;Xoy|$vkU;o|s?YDlYg^ImPqyfxX7BxA(-}FvANxS>60U6_Ze~yHdfn$g zl(5Oz^41EO)|1FX;7aGcA)}sC!Z`{7a*3$CzHw~2Es1=sf)0p69tlKYLQc^Am{6Im z$~sz&C&>t|3z9cCVI3`|RLad(FhdpmbUH4|>&b)-B1mt=;3<<_NY+t6~iDZMbH8i=QKvzqsQzNsS)YdyI(ssuEE~v+(&NF`Top_HO}2l z^Brf&Z)M==;XrtT^(IM`!+b%v;q>KzXzuAZ$sYp_!=~5;~jkkpB2y1c0`~r7?fp2Z#GSP>2P{vy`ZdE$l+u~s-Vv93<>V* zVkoaF*Hh#DvnTPn4gJsS4l~&_%yA#Xq&&uVy zPkMWw(j159$3WIbl)=uifhf{9Z3R83?40WikeKRNc~h&j8q`HA-W+2 zY;YrThks>VVs}m{uFxBR;+?6Jq3$|~+|i&<<&j@lU_kuwh@hyKbplXTwLS9|giWvN zMKZ|dG!%l7Ocdkyfr)$mX z7_b|t_DDbI9c{MsibDc{R_nQ2fnUR?J%H-&EX~C#qF$krk2wdV<1r?ao)Q3ocp4x6 zP+lShaJ%lK?XTy7&M?I2!P<)hGXUQ3kt;w=7e}qzCkO(m+r%WHz*o=5NF~I`G$_Z^9^WrK3^j~j0*?jyXEGB`tU}>o-PG(?!pZ+nYHixJz0Yt zuHN|SZ#{o|#qeT;%FJafuB?4xPR+&#yxi*ZKg1c+2m=CxQ;9c7`0T!)a}2mxaTt=t zvn--t6sg3@=O%FTV}t?GZqOV9o_y~|4iFJMNU=R;H$y6p%E2Q)*5S=N(FyN8KG0bA z!`Vp-CcD#K1Tt`8O!sZNr#4sJ>mMo>*AJdHXr-ORoT? zhDq&>v7WAoti)D4mO{n|p85|N`+Cd7;=)d3TS~28oo9+V#^UPnIA|x@4P66~s?PdI zm>L|;KRBL$z)U{kd&FW@Oi4=;1mf6L?|nI|)E}`FyD&eqED|=&=PNWj;*(Mm1QAM; znq1~H3`&3i0@%=bEQY0mmXbr$<)kyEs;}}R$~t7u9gMn44!1dwHD5eCvor0;h5!7$ z%9(AQ4is>ofH?~!#DRfvh1^e*1by}?0kQ(qpk4UrI2{!t5r}>zTez}L>+^96DD+2&JFTh6xl!&+*0npm?OTWed8 z8FkL)?)C(rIOTgg=j8=FC{DIcCEQKH3JI)#Cc{3A4qZT$?e;G92h9oNt;dxAGz!bGe_{@?&4ValwL+pb$n#5?`8ZP_Tb9$(29B4#LRi%AJ_%4*rc}H z!CVgoZ9Arx@)`49dg2#4bZ*(}Pw3Sv?; zCb9N{Jo~*M7aK^X&+Jv0*+Cm}F*?U6GR&B$sJ;g%VER-ADo2N^Jv-)%B-dXq^D_RV z97}4^o5$Nwx2r_>`Qt~YDbU=r zGB#OAA(af}Q;0D`IUNrTj#Xr){q?t_io3{dfQ;e$WQVr4F`Rm842HU5K>*#ZZEZCv zlOcCR!bI=aq2RBdi|M3pUmkB6orH=+e|!DM<-il`AIucTg0mYvI8v0Kqln;RKruvN z_;Cn&91%M{TkO=y$MIU8wkCLPR!N9|(~s*!2^uE zQ#yo`Rw_~X_6<`U$7kiWfRiLBX_XVZo!Q0L6J;_ooU$h3+a``Kt~ua@v&kX;&T1dZ zw!zqxSTJvwjK@YI?;1touxbJ=J;P0pev?LqyS}N-aB< z@0N-R9&kw3p))A&9vTv}{#l(X2oLfxo(sz1_SxEx$q5d;edncJts*hww5CXYHSWC5 zGsAoN-R{_$=kz5ptE7a;boFRCvxU&hdlQDkND!%5Hayx~p=*X-ilF7pYkZW8?;3qh zBWaWmC?zK>#z+b-4_#VW&N)q`uFNKGb6JqF+@_bK1;ZzU&_@D!rze{o&D%cr0kk#~ zx2QXji8#2LrJ+@(Lk}0b22p~|#jGEkut_0_M)jB4f{+S&% z3>Q42X(lI2p~klb$>oBFcMv{93pZ;%-%3PL^*yNxCBW-gu@3f6Q45RmPDZA1Q9PwRthxuOp|dp+@*jo@xXZiRrrwu@ zJ-<#8Ca#@y+}=t1H#UY)pSqU0dAJV$=2ZE!BJ#K6HPRRJ!_D)o+&P zUr&&n{E6{yJ#EQjxn_t&Oz$%}1Sr61jW69bVN*m8$ zp^AQPt{H)eY7(o(q-b_$FO9wf;G3DmSL~%W_lD%;Mc}aw(K#|=F`mKG7XhFB?tYgT zck^RlFJRJ4&AVAP3X*S^H^Av!;30(t3@M)kKV)Q=T7*#+Te7`(Oa9S=vrTFI-ch*L8Fw>X!I{kd&E`7=KbRZnez3#pmuPna+OKMDg+R_Cw3t7>zt~s1L zq*Pxz;bwoHsfF3wVLfI8Cah#ZGGaB&CsfpGoi50e$g90^?OGF5CnQ#MNfV){39o|u zF1U>_{GY3?9YH{<}r`xwWzh;bE%${7Wb@rQ6xr^^X z@E!$a1fJF&{ijeZ4JQrM+o7U6@{{q3mz(srSH|7g>72KpX6i=G-8F)pt2dR4vZ?a6 zCeHXO8c7g5>@W8ltF)k60^f5i+4mY}qXC_(+bCcR_iEj}ePXlylV{dVFr)dF@6dw9 zAZAD|huTI%7Ix085MMWsx?Zp<2wncXJg~Mt0MQu>Dmh1GCxEXim8qcO<0FBf1#Ix< zo9y>E>~~u)`abm`Begj!bu?Dz77>w<0P)zqPZsa1R`{XdLXn@VE&chtE@pCr)ec83 zk`tP#u*c+OSc`K_U`Cf0GKs%_r;4J~pA&;XOa7|hFyo>iDz^L20q*X4KAWh1`0-cns`df3fy)x-Y04vC(f7(je4*8Z)% zhjo30l=*3}dW#|q0MSP=vPnt)e&syh0QNjXp|onXKZ;ULML0+k{(>?8eBPKDoo0Jk z-af@{22BA!(zpK;Cm&qcB$_$i=Zz9h72kiYe4_SG{=OspIAb>zn5cmEHvom5ouJQ? z`C@06u`RB_h-#)o(?uWE%;%O?E>|3eFOKd{3fz~!hq9cB+SF*W3q(^halt&@TCe4o z*KhkO_4_=#nCX*yw9q3M;;TLeso^}g=0N(!0EEl$zz!I zuCLSnfhh`^oh~fJ^*#W!G4yK85wX>|65{+c^w1fx31lkT-&aP3iaTSJ?yiDt?U zR&(@g+5et~!n)Z&;Qu$U+va%izrnesU2x;Xnz$JOCS~@Cx!8pYrDyqtPfg8YLL@OP zb-|wh1nsPLtQuYyB7Vfz!zg&lWm(pRL)PTjtHWQ$=wx~ev3fsa^NuO^7h?30W69wr zOis|#?iNVOMy2Dpk8SXM6R6kHP1v{+9SJ-vD6UvsZQ){+c z+n7NECQ1R6fCVsl?4q+8TBf^4p8A`2sFp>`e+0F+y=Iicg*fjOHE~%dS#2)x#W0_e z;RFJnqZD4lW!!92&;?pA-M^;3Njt}&Bn@Z$vSd3;K?60$EX;Oue>OU`1gmo_!iH&i zH#CNngFvAFM5+MO^jXVl6K{F~ATAsJ**WoM-^(}S%<2_JOIR(6Qxv}x>*dP{; zU8&hU^7KBDru)+JE~f?=f3fvc?^g_z&J|tS(yvC{v6%U@K#zWe9 zzMmuYL_EY#R$*%$e%H{|BTC-=pBNZoflOHU7{#nWGT>bRnA-Y`CHve#Pfx4Y!Q}8~ zzg-jeUEkD3g1ofh@XjR#yCmnu%&NbIRxHbfY+veqGaa(FL>^0WWFh=eQy~6-Bs6U_I2B^9)cn<( zUt#F(Dsicb`<(**oy7#F0C%P>Y7Zx&o9TVGUy#u(i?FFl$mR^Ll;osYio85cJ^%)% zWFw7Nc5-vrTO2LL&R-Sv3xBYFvh8o(EKR87X>#5=r58SFR5G|v5yI^7-aYE5Sa-QS z`&L@ueZIF_M^U*~4Z7aS4Q_a8bbm;)#`gZ?$adS2>^WDa;z)ORK6qoF(80W;frSLR z?tX!5DE}!&0|O#ITd_SUAUx%3v>d%{vMyV$dKrnZW|Q!8f8*J)Z~ZVHym0|w$BJ5~ zE97C@n+BeveqT|kFn$`Go{Gi9-QTao4g(KlWG36Y6AlQBv2zV;=f&xJg&=6~D$|9Fwupd}fbNZ`% zoXw3A?`LWD*C)pDokHu32ZbiPL#K7Z@%8re&lazz7QReY|1DR#Gsr)=*9qLMu`fQD z6i<(Qbsz~ods=Iz*G5Qd-I=exb@sZy6iKa9o+9Y8HgR|9s=S+(h-clCkEFL&ZR~fS z-RVhHchAV=y|@eG4D-Wui~QL2+{X3|N(T2Ik}RWMy2Dk$d2ak+qnjzSqD^T8;)lO6 z4X%f`UyFFK?lkG#TPo4f*Q|6&#RhDuKVHkj-sXD2QL@%a_{%O$MSZkWe@Qx^!f$*% z6|3V;G;D8RZEOL0(!es4&&G2RL*2v4K8^t_tBX|Xs=bu0|d6Zm-Emy*hd@1CgT6YXhyW^0ClzKT?J zB?=2&&9CVIdX4H{;YADp|2phCDmp4s-L?*@SPHL@D$PpDV)eu)Wr5tXh=hos@A-@~ z^m$%(F9b*gCoNC#2+R%b-FVcmOT};dMD*%6Z9=fzoY$AwsClXzN9DBqu6z|$ODGzT zH;yPVdYJ;m$ov%Al{ahiP<})!OLugc7=ZFG(TT?9-%pmS?}lRKnnKE(jZ$DTrZ?!< zEcJ=24%xSck)0c~X^Ofhn6mE%*cvt6V<;{4rgFI%Au{5%gU6&DEi9>tK>YhWuMLf9 zc~DnyoQAK=rQ(R0w%*1{wk-c59P8u{52h)d+GnC~u!nw^xP|@?Soiz+XYe_(GLruB z(hr-r>ePD4D@;gGeDzTqM5sb6N#A1#H6|vnIgHK!6F;a4GLCN~SFliJ|B`xH3wtN_ zz)afVechk${8ah!GEF4aA^NAfq@)1)_ez81MMfqamTgvRooP2uCbHC{BDM8lgDQxB zb`+}##|@YnF~kMuYjrJ4)1<&kJh94dzNCs*Q~brs$))nJ`VBt2;K)@?NEKi&vUK^o z8Svm(kT9TFy5(5JnQ2CCaD(*C5)pxhHz2=pD49}L8jy`bH7tKaU=qe90?`B7U$9#b z1l{>X5d)+>LS3o;1ab+Q;-NGVQ=kD2mc(QD2zghuCXSAbEl$lgFl_OHRGJ==7dhB$ zKm$L(9v<7yX9Z;Bc0i>yo-$3M{Kdr@2S@qJiWyfbo^&S^K&AL?U%`KADUDPdoF$V@ zd)Y_*00NTkv%MV_gZ{P};RdUPTg8q@yOs*h=Vg`oLdUqZ``fx~^?~->ptdE-m6I=u znxi285Ze5uGsJ&o<+kx>pUYwwH|Q2+7k)jJzB?OT`are`hM z($yTY{ccC~{)LW}g5Uxs-(UpYtBBEK0@rctZhzvs!vpH@RlBK+++j^ip}f&B@0=ip zuR^_IN$PwjLpP}k7QV29{$hrN7-*}l<8(VVBtu$wm{od?k zu3}l|L$wGdhEAPkm&i~GUs6MGC40kk4wm+pfaF)IASYe52jsaw|ICUlS36?0ZW9$5 zIhK5-X|imE;xBb-g645z1o^VexM~2;cG5R6>$gxX?tbB$yXXBxZR2NrSn0hBwQ!V( z$`NoEck+1jyKjBjYevx1z%UIrtvOir$|rtF6!a_N72SC6#$|kyBpuK|yx9;NGx}cW21niFzl%1SfuxQiL z(r9S342+<&g&T-A&&q|pS?1!E?FWT#z<5RI z&X(hz&f~M+e8IhSa@9$&ze|PLZEdNVZH@eBHBYK>u7BD-t?Cnr>|5q$iRbUPQF<-f6EwC zSDU9LLGSzvC=nh!U2HeKA+IuyWcNu^l+xsoDe0ks_)YdspgMPyiVWltUlL%XiOH1Y zN&g~AT{5u&h3DDX1<)sI$dyu;=^Z!QrdRqAvC=LIV|Pdms{D$hSa~Prz{XEYt*jQ5 zOBuvmH6#Mna&7^KYF2>p?irS_+gmnHhh4CLx73s*3 zA6+iF5cu9MUJie*L-~|lwGLW8TtajjJFuOt23wUyvf%#)%Gqp)2>U@MYA!xZu(lSGmlyCGJl@*+b!@Dnq5`P9iorh2 zA;S;$db>D#;c{HTB9Us93SVGcos=~4b{e2wWoy`>&~jxm=%!{O!Vwpp8w(WI)?Dp~ zG}qTR=eT;48@ryG7t`X1*fF@62dwv-eCBaW(~I?56APF=vIDUPAZu zS{56{?v9oPRp`l-p`ENF^N5NP#&T}KrO~0x1wIbODRPHQZoJPyI0*gsZP1Rw0!8Q>~3h2pP zW*fhEggpfhofn(lB=$K+HDXf)E;^|ICxui<&QI5u2nNsGWl2_`6lPe89t80B%IUA| z7RAd?p;8^%y>skp6*jolcDL{Z+JBBktkpTU2((GaKth&|W<=#Lh0jfT24+TT1P2>O zE5Ac3+a6Kj+HQvfBkp1q656fk=9U6WK7v5YUD3>ZS4i?ybgRUyIOMqPk@D{Dw+V0qKS;i<#9t0RIst+v};-qc-@t-4;U zSDMiir5fQH?6Rh}Vny!i^-GG92Y+mHAg#K1Rk+HLuQLxUD-~sG?FYUy`oHB2w~1}9 zBR?QPE?ao!=f9^+I~%YGyrXY6wA6~5QadtBd#A;F-l-E?Xsst+HCw$0^bVMSt7N5J zsGu}9GHY$GTfNC72_CueLW5_)zqJ6+|3WvxMl{VXo|28PEB<*R%kL)kf~`PA=gGg^ z9NySCovioLJU^G(Z*%Yw_Z%nz=w|L)5|Z^{EzQFD;xAk;&4u;qp=`bQR5FW!YcWZL zyUh58Gakw>?!RniK~M;M@H}w0lkY1hj2MsR8J!f{VZe#Ez$W9CR~}r~!cq6sx%%qB zdt^Y*P!*D`*_bO2b9G<2*>zO75}LdVtI8DwYnkSDHss*!Qme0WUU`IW>b_CWqTzvD2!EsDpR6Zsb^=zhid0mt)=E(v?@wm_Ij6?@9a zNhykcTRgxZwL0yVwF?3cBo_Gi=VxZiHR0*5eDJ~Kez5!7s-vbXW4PYz2W!F(853** zETf10WADKbDeJfTrb6-fwpUiU-qyE{ajBNk7WRfr%`IzsCrZ(eOa?!yb4|qHbAqHD zyF-8cU~pmP>1Hsi1G=te%X~rmiF@&kBk|p!0pcg0raI~po>gka;hCa)__?47lh#IM zHx-lh>X5z3r(?1y0<&7~t!yvA_3-PmHcJSRYF_)Midxqi2I z{YMxb+~;_3xpTbYM`1)ja|^@DN+t|2)a+afj)ybFDSG3x^gTuz?4GZpMrt>`$C_#( zpQkuyCDdSHgO(2^DTLwiU?arZY&pqWqAm!k9aP@tJ@7O50AI2UPnUV#`Z>DM&72Aj zGw_}!K_o@|+{s5qw5fu<*4~p9?fp){qHGyTt`1fFc;#$W$rU%T9ynr4&Zd2ut>G0v zt`b6+L}$pl4Y2H6vBUra0$_~3x58W1h-^& zEqm`_ddT7!iYutp4_r!5o*-iQHNJqO2+MSHZ+>!o!dmU-21ll_qy$h*u z47aqH0u;_+_`gF*|Kh$=3j#z6;^6TH5-*R^Nd+xQc}Pm9cc;vE9Y5N$jR5LVw`1lG zB71k^Kee?u|4mz)!+HBI>+xGONq8qWCucK22r0(9W@w0zMK86~diZvtFrhBBmX;hJ zb-cX-a|`6t*jT@KgV}K0)HYOJ3$Te5w3%E=KZ78VDJeUa; z1eB=L0P{Xc{lZF{gK&Wnk3K29LP2Mc+CxPW;`maqD1-6+RX?FO&~AEVaL{zNL~(O- zb1Cc}bW{>Pl8A--#Z+Ec(%yx~=L3ia?tSS?roKuRM;1<&YDCVagP-10NiA-$3=bQp zpyj0|OVAM%mwg zWdswUThY*h`{U;#HX7A_Qsc5FA0zrnX-A-86BkN| zx7%wj2uw1hnv-F`EW(%~z%U6NAMNqyPjS*QT6?~+%HHehaWAy# z>A^H(*dC2(?bUd@0$Q@Aog1X0T3&;OiP0iSW9iy&Tnfi>4s1J0#xxh=fLdgH&b-lf zfEfvDfc=Z~l7|_74B9a_QIfQ$5ta{=DF*;GHA#E3kXe&2@oGI2L3_$NSIBRiu0T1u zIGiz^@mY|4cm3#75n}SgnfG#pymuJ{mXE)@w>3*{W*j8QBC>f@n}yYNHI9%OLEQXP ziO$>Z79$^x7L&;1_DFU4a-hcBSS8DTI~y8w2&CL{X+s>HfZxOBZ7FRQsO+eNn zX%eItivg%%#<5FEhoA(p=`>W(1;Ikvw_yttN8;_+GmyiLh9NN;JITH;74T{hr510iC7uEy|_=Yt}VQjS8y*m+ej_fR=QX6$p5*SZ8FsadVAl^CBsdsCd>6( zN2TCFz67nrWbAiZD_>AM#ba>&!V-X1Svd+z~7 zW`_EvDZ0L!KDxfT97z3>hN?0Th&ra-cZi0)#*p0HcfCIJYXt3EA&^A02i0m%)JGsf zN@)WlQV1K11IuA_6*VykmG4tl$JFKf=Gq_bT{eE`M?$dA>5Ps7^*dH4?uiYa=+K)} z75!H{H3Vna;3BVp;NVPd*URUJE5QCk12C^zX|i8;-NPq1gCSUm06^I6??HwpNWfUK zyzjQ!o*~E zG*=GT9jw+{e(L^s`sFW|A`>fU{t*dLETmw@EIvi9L?KR1Qr0YA?wjdM?SCj5n-W(2 zK);wU$7nsvt|H1;nlAWxl|7YV)nl&VJC{CpYNyz9b3Paz%b@R~P5BeKLJ!(oEx$BT zyN-Dg|EEI9bYFG}p4ECOOysF-Hq+}7fkNT$E+PRX$;>kP!{vRyzAxynUJ=#>uRQyn zOdMV$2&N*$NTvml9`=Q;xBaPO2Z0iA?F(SkqG#)qF7X~e)V4S7T_*}ksn=iCzzn!Y zWk_$mfYnIs#o^v$PD1x8wt)p|{=X$zdjy0Bb8p%&rk%dSFQpA{*Tb{i zL?QCzncR5lGQFO94s+2kP&{OE6olT+)XaCUh*H}#Pd0f|ML#QiL(gOm?<-pomKotP z;(BvhIhQ+LLITMApVZd{vdC#@Xht^d0>v;h0a)BN5e@wc5%DHyO3@wlSz|#wPJ#eWX;;m-J=^{}di!W#Y}|Y|$SWy30Nd zL4b;S25bol={G>2klgm9X2xO*COOHu$^2N@V8>(5{g*myyWvA4M7_B-zAwk|uV)ou zLxw)1i+uWr5y42;DqJ%~MQ7zW+goe~C%u-eX=40)7IM#aW5SMdq5gM)Gn6xjh{|p) zMJ?iBu1YZ`Ze0fOD8E(vGCuy@{?cd}U}o~a7<=ous={q+cq7sh zf`GJ0w{&-RcZqa2NTZZUcY|~{h_rx!v~+jJW=n2rv%jV9Ip^Mc&i%dLyZ+!OAneVv zo;9C2#vF6Z)s7sWW1YPmL2T!B1$D+5?Hbij7N?G|C1hK?e1lhESO_8?0w-`Oi$d65 zT!d{AmgkQUZqw`7s>f}P*1{;bQ~VuR35eC?{$9P-f>wr$lkMDwN}5o zmF-&r>u0&`J+J^<%2#;#|52(c%iR81l^G(D_cLhp{e2_Jcp8o5QD`@`0$J(Q1_4yj zzU=+N8$2fZ?a&}{oEYf)p&=OFJ;zPCJL}ox?S61kHCXYkRc_^Sf%j!6-`lEkJRa2r zZAHjpROFG?&ZUT2A$;qgdhWN>vEJ8kFfhK$Dcf}mTU5fw0DXytTYbO5>&kOj>vXMn z-}losNXP<|Ue!H-W$b(%xKpBPm4$Ou0mRU_9Fs& zGcnTglt)bmZp#wNHOpoR15aBpC^e-Ui3owr9y$Sey!X4!H(sY$gTWGnnPS1lp8o4c zcqlqKLUngLA7%+v9~>Z48q5jAf_hqw0{asF7uT7I4sYoTxb&47IHL^8XYFcA^h310 zgKpP{^=J%TZX?)p0*qFl+>Jg8%3qy8GoytYBa~Oq#mfI@t;q1~Z6C_IQCp|&Rx!T^K@SfZC%#sBqRR%N~fPds+MTEe{gmT zlHzJ_j;^m}bZa+5IEfAd^{3nx?isTVtwDR**K2bY>FSF8#Jc(Krz-hqJ{gSZEkZ{x z*~VXNQ4bv;+2G|%B*^WZ)=A(>ZukQ>P$?)Y8IzM#5FY0&CA}9r z7MMP&ua5@KP6+>Qj$3!{^x64K^|WSWg@*dk;^I!AKP)efG27!ZPWJ1t=Cl701v2Rx^N%aganFuf;_W?l zc@0-mlCvU6ruFZv1rb!pz(?}idc%EnM^x4`M9}?t|KY<{>}X_gWUIyH=06##O|* zgnsj=`r3z1)WYT4_UF6 z`4B#*RcqfqAJ9t0zBy<**mf+dU}@6EaC(~`_Y$(t22bZci&crBBJv_--lvb5^tp>H&Q8g5%QnAXDF(Rg&eD+Tpi z$Mz4{f`H?cy*Pi*#m{wi!EWu+poAvht|jl=y4+DyS|2yW6T-q$+WpwYD8)p?gIk~} z-}s_JL%Vu<2ne*le&>)z(}j2~{9aCjQ`0`&9P70l6fW%!e=By@5pubXabvdM$9W%} zzE$tPz1T4?t0#109q0So89e&G_MV;8Nd9{ZTa=&hXT9aX4sRbg=S2O!-!ww73c}al z=h%6H-*lI$Rf~;T-}xcT6rVfG`2B9}J?LBn?+IRffXvt*!P^E1AAJ-IGd;+m>&>np zkkVS%Rkvj`Y{v9S=FakBYL5xQQ;?j{(xOOfhV+LlS?s(YrsifAdA@f5m^1?lGwbiz z{97C|p&yLfN^#eR`)ESDAi}~~-;Dh4fqU9|I3-%mgVr$j2nY^w@nO-=9fMC?88pW{4^_Yn((lGOD~<0xGv#vOOLSLTY$k zAO9kPOF5Fhl?2uOcfDrDeGp{$>Voz2Qs=QvMF7d&3)GToc>!jxS$|ii-AT zugWWhU2dFeyCL3=+lO?+KZ34pO!5|V&_Oi1L93-U;AG!BkIy-5o))mMb5$YDY+P>` z0BPo(X-Z0V)g;_S`kwpe_RL{@bOx{IyJuikgTt0IJj;xvg7;kgOML80D+c&nX}sYN zJF{L%r%FOM^Md0-8(fUxY|nuJT_pDUOA0Z8*g~&qa;6%z1&jMNkfi&6X!ca4X|~;F zim9Hscz%%W@vKH~mLc5ZwDT9Oc$45F( zX9{{vhV;^i>`k@^Ms(dm`aS3|!i81XB6`uIxkyl9F(|n1pyBQI29;!6?X^Lt+ZW-r z!C)M_f?R8Ievv%vXP~;bbF)1?;>WQtV{pAz*V0sG_poEB_Q8b+0jfX#hE7lmr> zJ>-`%%Z^XGMU%owA8j2*EcpxW+F5T_;y6<_@E&JdQoe-mNQGr`F zjW=e_j9g^O%y$)%N4K&9ms!Agfp(0!shUivyxHqGRLqLaJO#ae!NnX60Le%b>&cQJ z7J{fS3A5_jH7OI})kLT%%LXWUejh0!&^_(RhF};rc+L6oE??JbOwbvhoZ7-L?(rZ= zRV1)Bi(?PVwnW(HrGfzJv5C7Zer@`7U&?C&P;iQ=DYQFA{;uUtuEWn)c!eTm4D@Dk z|Jv&P^>17}YGWfQSI{s@sWU+X2$VUh314GC+SsXYXG0Tct}nOBd(R?Mbvx&HaRMgd zbI123*Qo!NR9Y&juD%z7((l%~H^)+Ya^j`(=bC*MKV9gq_DQIXNW^70J{DHe9CdGZ zjXd_d9^oCR=J(d!_FQA&a=jw}Bn?|&^|oK9Z+}j=reJaArc{P;G&X@pc@=a68V+MW zB7(mDo?61^HRxKKEcqOj*QWg_)sF@aa8%H^z$8_2IPKBT6V1f)bU3VQ00u}sWnJyP zCB$CS1gVt|#xe+8UgIGALON6stTpKJ{Q2TAS3zY*S2$>CTD9OuY50YDGIQ1SK9wFIV^-WDURh7;|iI zyyT7QH3K`TfJIzdL~|wt7BN7en}081&6XFRkh%O3uNxY4rWqdx$Q}?SQdhIE_`UaI z0s<{MhVaGt5}#muTblqMpB(jU5MW{`r@km&U!uGCWH5g{=)o^&6|r>7On%`icdmKk z>LxO%i2%_BY5(=aLX6>w;hYckB^mdCndeSq_VdE4w)eL@Ed5aEx)XjY+q$pT9zgfMX{Qg;;~NO3#Cx- ziFzP{KB!{u7h(qy!3G`PH>U1Wt%6_jkxw(_ygL(n8;YpR9W8z0jQp{pM^8_)yG?WOgY1qMT8O>m8(rz+S4b`MeGv=SEngh zJNser=lP&C>%rA1KYeSTlqx=99!AziDH-)-4aQUk`!sb_cie(PJhx${HO=G_kx$V> z^eL6_;ibtjOL33M${z7wEFmFt`pOWB~?Ju9ayCt`;VJ4P<1=Wr2-|%kG5}*oz%|Ks5gJ}&qIP*9Nta|%t(ZVhd;K+ zhOfmJQ@|_>2NY$l@Jc6ZWjzDyY80a@sNIgS*K1Wsi02gZ%Gwv3m-LSdblMM{yJ$YO z1oCq^w7>Ly7&p1n2Arm;OSm(W3`^{KJQZC#D#^rYBP74W@QgQ?HDu2fp~{JD9JTR%#jBL7_@C zzEx8g?_4j}nRs8>G5p>D*u?-~92{fbVeK6;@QGm|j>wlE*0xP)TmsTB9&}PKO7)Cb zvZAQ3{p>%wtS1{}@YFtx6Iwl;1jnr`WlTIx8`MM2WBM|Yt3>fJ$_2~Tv*D{b(bfMIJ}Lu+K{;-NsJ9T&kmBb zhQB`ujMXaLzTrlhkL6HWIqRlE#HxZ;wi4e)xl@WqJ$_2lzb1F0(U@h=5+1QVygZ;+UXk^m z9?`PKYBI>=+fnOn2KQ`XXCcFrwDvH*IL8Ub_zBq z{W+6Kz3aw(Alf}w(0uA$5CnF)UL??cE(hzX3A>Jwnq1{kyzq%P4Mf228P)NfrrX7hpB@#&hJkITN`Mq%-Z{6IebK2C&(E0zw2 zt6b^Mh-0{SDt2&tHdF9}t)LaNrx3Gp309adNg@bDI?>GTO=w`XF66mm;SuPQQFM(c zWml{oB;=w05R*q4a?E!YQLl3~sx8a;Os~D4iTPlko>E2hEf_vK!B+2Y51#|p9dZS^ax@|2CK?S zN(&B{>(WY(2la2xq&l3h9kUolFo(7Q;+MTrCVD|N5SOnZPZfJ4s$q#jvoKkMp}e?o zTtsF2$Ubnc?1?RhN8eq@nz%iA zy8irAXhp+qm3y8i_Lm1X7VJo`23F>2p0@ zMY%dAct6wxGYnGyVi>*NRgtBj;q4!GbS+}O^JeIUL`;DZW6aR7TT9c<+*Kd09fF-u z`;-ItW}#E_v?LfIPfA+4r_uvSQ&wt!$c8jqzh-fg9!Zm7@24V>o0*?GCorU9&*`}Y z#Z%*DVhm<625x19~u}Kq#$`gdGA>jo}zycd&cZY zM%&|N@cznZKA!csM7WEu>P|9QtH%`fP*WSdIN4mYIKkk$G;423j&ORH0>>G4R&jsm z-P0I_4)3z&c-`a%`r3SBM*{(Yan;)J!ClEa*A$E_#p3Qa&mw&gf-6T2ZEV;9@oH#x zj*ek^dfIX=WwkJvos>+-u(Vb+dGG95CI;x{-UNKbn-L(Z_~p{jfe)P6{iv9j0i|lw zgM+fvxY9Cfg=h_EA77!pvRB#-&5ZwCp!GuSMe*Ra=kYxnR*WPCZ^@Z%o55@3kRA(; z^zd-|5v? z@VQM(nF?YkrafN773*ZM8b1m-JpTLw8+xZcwaErEzV&bE($tCA|D5POcE5X?)H!WM zKE+p*xXa}YqnigJvd%}-`LZiD6bVwE<>leeiiyIGj;%s#yO);_iMYk*S8q)%7e{b6 z+-4GCSzoRkZZ{oseQlI=M;I=wsHfP;q|_=8Wzh7w-@T>X&nb5Jn7ul~lC z+;i>gwsA*aRi!r@L(7l<&wz4Cv@8<0Fg4v)i*rEP+*h_FhKI6_I0B z2Z87nlgO!424)1F9`+|V*g|XvOyY@R3vMCGE zlFIGL!r2p)<*6*XSkuurr$5@@ss#ttF+J3pWzCcbMd;GA>mf+EXbdUnQJ+I4Hjky1 zmKnMScZ(kz9pV?Gy1NhUoOo{+qK3yOk@xL2shXAynVcOBJHc88gPy#x$eFXQU0aKx zYMK?3+@U#to2Az12nwbT#l&FpC0y!}ik76pJZPZrTn){fmUtjWe(&EOFii17Sp||x zRd*3*R& z4|YoN%%ts#Qr+7|iOm@0N>$6os`l7)vW{ang#pSm3?}$+8EW{jxz1JNRZc6|AU6Rx znS94_6(}_|#E7v3&oA$=S!-3;$lflyp68DW(De;AqUD!p7TT8;d!i$upzs2Tl*B=Z zAKcb|J<&n|F;$sjq-h!&#Q-|%>vtmWrXB_zSP9Eq64#xyJfB==?kb)yq|)3K+B`sE0-PU+^u=`=W&;g8auVJ)HX2irR3(;r0+Of0j`=Wc5-XTR$H zVgR-}r;GIiHDBdD59Lf~g%@UXlL}?FI637EL5FU)T1cYOtW0A@t84Ex!&)cu)sfJ~ zxBJ9HEc|Y3yf$GS2Z*1~npe`sZQYMSzwaBTIpJaY(MNV-)`xCxvB4wga^nZ5z z^F(SOpx*z!{WvxC$$Dbg-M#%Kk-mXJCNOxKkJOWBH8ATs_8b4yKu@WvGh0{Wz0638 z;9%2snQ8=Tb#UhG634EXPB!zChy-JDq$^@Breo0P9=y%h-1VsQz$iub3-q5hZ!qN(fH$ZMyd;b93KkjaxM-TLH8PsNi zCy~^QoSIVVz!{C9ppZPA$v}_%2Ca=JZgAVS5jAoD@^DYjtZym}gEg-H8K36T#xAk? zR@3i``u>Vxq^TRr*pj?lwsM;g>T8tyYfUO3Nofe(#d|9b&2Ius^`jYHmPMJk$W=gA{H~#?ZTZ z--Si?jL}a`O%F?(@m}+t3^ag`xJ2aT?4o*H-~-1=N=58lMbNnO{aC=G0H#SzLdAjI z&)zBSo7NUAkQ^>H*>ewQY2NDn7du?97;qXetB>d6 z^vm?3&*22eMILIUH zM|RIxOH1uhBW6%bBK@4LW9!t4o+u=H+$aX=imX>dl4mzt(Lvg-J0+1_UIeMEuzd=} z6yS|}KRCnsMl~<29@gh-@7fJKU5M&_Yo#i63h6vkYsVcb z3oUa)(%Mz8RkD2OD+|^`ZF!x-`*VzWKhuNaX~{$x$b|YdNkBhTvB-5*^xECf_aAa? z#9?5z?rz%_i@mv9kv3pxZ_GXOBK}euYq=nSZ`!bU#>GUfeu&KSbDzlCXKlV`m{(&C z+1cPReyyHnW9Vus3;F3D?r&q8iJbsKQ$~bfFzEqd%avPCJ6X5D#>GDuqv%PlvZ!L-<2|tHLV6! zmAE&?siu>Pd$3v4N{``7}z-N9&~aPMF;kcga6evMn9$gZR0;3)2!hLdpl zFHz*0Jrv!?b-n;?eM^~T@^SfQJk<}TBXtfHT}bTgG=*#kHjX>N&*T)QQibz8%Q^R#SnHVB&!{TSj*~VVFso?M`03{a8oJnNFsg}@@W_zL( zJE(Mebm&xo%LzqQH&?1?W=2!8g;ZpDv*+}azw7Y2+4<(QfIEWN`=AMighqWCDXF%E z&J$q3X%v%4MLz6{hT78{9YHi=@p?DvBh4Mci|G zBEb@sR}G#mDyl3m4{&hgr_P|mHCB>~-`jbgk)fTX91G?PxSA`sq6X1(ws?cTQti=E zRC6%Mqq>=P6(Iy4cUWSPy%7Ab{0TAmv&(0TW4Bq}0}n^za4o&FlQ;#9MqClZ;GF~4 z^|@wod*1h7kEd4mAzs*;(F>3Pgy06h_KDBczEU|ioW%68ok!>6B+?-=FL5)M*Ow~` za~`0}6PBIXGsa@W``y?Fx6p%E8w=0U-}nT#DJtOv((*k4h`3X?`s{%cyzgEwp(!D4 z{own!UABjPq|ykl+awJn5XOsQeu-+Ywj*K5U;0H7Ph$`OsUENwwD43MBh)Yr9K3j$ zDyOEVFv`m_BsPmfLlaL<#>2w_y{0qrPi@)h#$V67f2O^u_Vco+$fon}eB0B~==-@4 zR}L{kB-OSQLZ}Jaiilbj3Y4$PJ{5c1I?4!j1643z|1b_$rGw3{vR4_T*v!tBsyBLn z;v)Mko%XHx!h1+IV6PYXi^A!Hmp(jeJ&sh!W#jvYkO=5FZ+kOm!55uU4e5IZla|`S zRA;?9UU4ae;EJ8oIZt+-J^@$mng?ShYvN@RRL;*Y8h&sK2N0~{tAVr@ld@U~R!?q( z{eD5R0~nvgTN<@dpP#o_0ZkeOe2NYhnuBxQB!7D~({n|(=lQRN;`)#Ma>%BgXVL>hg1n783nB#evX=x6F0Otx=0i?Q{JC>y3jZf*oaWqL)FCnq{uvKkl4Xv&7V9d8 z7f0(+4~yYFip*FP7+jRv1!<~z9j{o7$wv8(1gR8sl2haJ8(f+>eLJOrMEPDSde}|Dmvr#(TwYvEKfg2{aBkHtvK<(gQ44g>3_Cu5n!y!V z&SJ)QmiI6(y7~z+;eBb8mfY6fO$1~+t^mcbAOMUCS+JIVh_FSsYk%|TVEc#0B>tP8 z3J1x`isU)l*)9DNLj}owjSR8Yg)*`~%dtM(JKnX?;IyHXi!Dz|i!dG&lQXAjR&ZJN zK0mxfctQ#KVw)xC<9Xp`Hv|0SOD|2rbT~}+^RwWc%=Y(w{Mt_?Kw@t&9ae=;Vi;TG z5?yYxkD(t@W2TXT9czc|tUM=!1_@mETk)9?9tz`Uux-7q?|yko%I9MI@e+|Ydf-J~ zdgFncdP=N=LBtoP+Tr10^mjUK`bfrOEKE!zaRz(WA4onfW%C5?uRf6!SAu_5Gq&L( zP6LvP_YOSm`5)9I6OaQ4*x*fwh3ZU>w{m^K_>^5mRg|mSj0}B2vs2_9GD~MKF(_wd zh!d--HzW=ymZG3+SG@U%pt>rV>Q&xOml60X-bZ?0+l@rO*C3GkWyAOWgo34^d14J2 zs?_O~t30Eu#vKE+*g5eswB|E497?SZzubs<2Ik9L+l>tnH75G!RoW@fFw2j3%xkA@ zDCvPjh`aeOsIQc1;CUY6D$K1-?JF#9ad&00O^Kj0%9}TJ#MgjA%;uZxEPi_I-)P#7taN7LA=)LK#I+28g2E z!he4*@axxiA2#glD)fq<1P@y{*7*9SG!E%|AOAi&2kRasI3yQ+lVVh9_m@37G1Kux zWiO6rC}$j+H|ZKpX&pD@$(^tf%U}#p;f|-3JAeNc6-2d}uZ*PHJ15fYU@3p!- z%;^h_eFlcQoUU%ZJjSXc;o7X~A8Rgtvc`S%#T3{qqu0nF;+z?pe?kZiQ2u>O5#2$EG0aIyo%X%B}*Mo=~+#zwAp4Gw1J}xgj@(g z`XgWjM@%-J6Aaw<{7e@+L7>(Y{LlJS8B6cKN?43(3eGfi7&M6$w$tiNVSoP1?9TS~ z1*983cjY7}hl)jE=W*kqpcn%G`Fu(apc^f%KGPq`*x8B8M{1N;UGvaHuks~MOdkCj z>KhvUW!dW-xwYg;p9i@-ZsJqX2(Z1aCi?m~h)xo}n~hrdx(6_5- zt1)qb;$&Gh29O~A#7z~%k!trzczxwpY>o2oh>j8o^y)uhnF2`q&II1HpPw74~*^pD_ ziwGcKT$*Zkat^fb#Px+^lJGbz`~oOZAk&=d7|+KpjLG9;dGq4OWi9F~ZM<9oC#OEM z4z{2mZ4yyJYO1L)X=3R~cD(^{rdHzB!RB<;JqEgj$a>!7cR$~n`J>99XLFUpr4B3= z1(lQ-*w#N83F}DdRM@+^j^~cw%4K?-6j^NSuL*!&$qRW%{aVcn^nxIoNxOn;{4^DS z02zvVSlL)e4!f~jV8WN%(#6j5@&0vq(s5~>aXSG&7Z3)IMD<_ET4gfURtEkP(M5f_ zser>d?%*BH7u37q^%%}*Df~eJJX^fgi-J(rIzIB7!!@Op{{nP_FkWC4fEtgm?BNe#9(Jv?=6zP2 z_zwUmjwmqn$ds)~LK(^h)L2@aR?)GrOxnG`1=3Np%9&DylWULiGYV>2&BqRX_nx9s z@}X)N-kkjUin4%S!w@!GEh* z1T&T`^#!%Zd$`(8lk#NmjKs@zJ{N|_*VJUiU?G4=k6FWSIX+O96MTB=sL zCMoz-e3gEncf7DMp(g-KiZSX&}4-$ zX=w?wejN4^aPs>0xdvRH=jTcP`nm^qOP2phSP8q^r59DI61Z&a*F{GA3@>AE`M+CtNv z7SBlA@u$U}cGgl0Qn%K+^V%w2-pgc(k|ID=70aqCJQ`e6J)+fRf-WXMTtrRzGvF4W z=8ZA{Ai6C`ukc?$l+)6_OYGMYW-gex<^ExH+wAjm%@x4t*2@{HUyo1Zxiul$NA7l_ zt?N~RGFeYnTD#T;++(odb&g15xT@sg|hlurwpp(s{zUE_u1KI)9yfC=d~jG zqX|)X)iW(X-Enjqp-$E7Q<|vU-U@8ZHI@GhX)i2>1v=RJS*;k@satR=sPTVDdlrFm zoaAA8kgMAdsw=;Secf@|NKjcrM3AiA)ky*TE;V~HUskqc*r#_MgTP;~vXqbU1DDHz zd4|_rAW*Fi{I)Q*o%Un?OkqqB$yQ(^iq%zdACee%HyVa1ma=jSZg}MFrr>`Mpjbo{ zY)Fo?m%X)AjI4`|FM+@o;VtgxdGK-lE(yVjGLAav3u9}$r*ZVGi}P5H8fI089ZbpG z57A5};iK*3NZRutHbZ1Fv^?oO;x>JQs}u2V_v>;%=;3;p_;X}E6X^^6I4;TJOaGfv zpWi+}sxl>3u0;+|%)sD90JIBwpPoz>%DT4z%cSQ1T7F7Rw*@;dh(TCb;#K_Ko)UUF;{lVgTNTBGD3@MWjLOPez%dC2ez*SGRadJO&nnyg{!c9c9Vxyv zBd0lFkT){Q_fEq*h^hMWXJStT)ye{B7f`I9eS+U#s|CkF#l5|TB^M8<+?B}MoU?J> z%(d&Ld9_aRcL_T4y%~CEtTH~ikphE0MM>}S`2@6~14#Jn_l<2t<+bEGB0@nwG6a zS9Bjy>Hd2pEs3|u5WHkbXA-k&VM1k{>A~aEA3&TJcUHeLGntYGr%zyin0KG9K8&xi zHJ#D+Svx>GIig`Yh8InZO1w{r2SJ z{7%~L+_1?&mOXuZtHHNz6oK(i|6mT1a=q+ZuF0vMg#Jw}uiC=Y4WN_niqq=~}r8Tai|bU&*9lJrJX~?dJeDPb9#| zA4fvFypQsqSloaGr$TJrcK>8`Y($?76#?|?Jr8-;DgK9e;vsg=YquaWR0g-&$F|*y zpFe`-LGccFC=)fOM`CiuRDXnjBa@+5zS`6+0d#pPR#h?(p8S6xbzd@6ZrbqG8Kk`+ zc*<+US1<4Uy`6bSc<)2r5-+s*Es&J|7f@GbcVz;GW6V6Gey#5NK;>&|h9bPyxU*B* zFCE)?cSJ<2Jw8wBv8#;}%xs&YD|R;?YP{MC0wvqrE9>S!(~UH=J-98*rc%33?@kOL zGJj4moJZ@xrsl>;D!`T zH3{zEvHSCVvkO^duquJB>NM?Cd~&r$PV4N>zbgjBW_O&<4Kg;8k>+({-S!Rn?m1ATY;LUcIN*s9?ZnZ>Dg=5telV4l}>!e%f7fPdzB-8Y3shgolF!;I9ZC)!Ul;tKkePLE^gMX`g z|BkHf-@$q~J2_8 zJCztY$tsP_jvi-YOVSFElQXc#XZOA~hWrM1INd#SY$=By7pi`w-aOFm)W<+>GUph( zXS?Zr^*4*59t;W5m^tscf|V&gyg?W%XLosrzRf;+r!Tvg{0NZGQ@7Q3Yd2V zGx!8}-}3OM=t+)qr(_G>d=INdmmtg;(wtG49;l`I1%x~IO0@r}IUvR_v#ajaFsax$ zD9d|aWPhgjw9G<+-!M%QC{*+LGPjCJAjBIXdcs9*r<~hhFvQL0ery?mA_JM~))?|h z`6P4gq-X{tRCbD!Y9yq&GnbpDBr8LZr%-G=z`$%5==>J+I{D_hJph2-8TbbMoy}hk z$K1WuYpv_uwpTen+sM<8)a4DKkeRM1-B}AqPxD2apRF>y$Lt03!Is@IpB}BwSUNLp zmzrj_C%D3KJ$H1b6@&xJ-pVYrb~1I59zLD2Q)O5G-f*gKjvqe$2u@O6XUhi-3&?D-@j=LH=Geve>UcSxu>0azenL) zvzhVwa?<8b5CRAzX-&+JKi;D>lO55Qx$lnyg(1LMfKKK0Qptvp8!9(3?Q3 zc>rO5TLJkhEe;)6xyS@l=7dg#Rk!mjVLZV)#-rOuco(eDj+T#e--$%_KJMal+rIDx z&XN#qh%LX}_DY|mKP=WGTo#+(eL|(Fs9$RtbKr4Wa4&Ft<;|}X$L^tDECbG_&Fi*0 zr|n=HU_+Ier0bBFG0&ji+}u1xLBS^CklJoPqR@1GBY7-QIC=Rjh7>WpBqN<9vt>TM z3V4Hm1#}&^n#=IoXF;IgO#b-+Q)NIB3qnSOS_7x;r4LV+K_<_b{34*u`;~4Ov*@ll zx*htBxgaDfDe^UwND5a0qI$+kjJ=L99x07nGIZVDnMYrth2!(H6VLHvWjjCS)S2?yQA6p)!SsBt)Jk zv!%Jf4y(v;uTBMal$_JO%BjG-Zs3KbCw!UQ5bFzj3vmyR`_+{z`+htZnY}j@%iyV& z;;D`!{!?TB?ZJekK>onZpA8Hn3W)nYw!jhFG@8@dkv-PR-EFHylaRF^3pZW*b=%2B z!y)15@*Z~}kOfEGc-H&{F0RB3rsBJyRMW%)`c_~hT7MJ(lJX@Z?3mHYFkjJEbnPcd zN=mv46z*yJpaM`6pOiE^E2|xF5Rp%!)u!EjK)nk?-C}`b8Mc3QC08#P6(n?~R(xjc zck9<|-Mx$Zdgz<)b)?CJs*uug?m~WRQ|R{9WZsKrZWwJ#Pfj$BMx`%AYaWK*6g`4) z2RRarU0|EByF8er5)$&?AJ0L-B2^PziwKY^qoMq!6Ie*An)PPkzWM_WsID3|h-Dl3 z;Sb@*g9NEv;)@P5Ai5%Iw;Ia?vJubYIWSEU1JL==3A}WE1UYQx6fO$qGSBYzqA`=GPw640r%yA zT@y&Z*A3;P4KJI9mVU?O35ZsFeh*0K90|nFvqe@(nE*g)F)`u4zHBu33G%jhg6G=s zJ-aH}7rFHlGxC?LWh))O#oQre`n9|jRxnRptcK*Ar0z~5qt^QKOPHq2BPkOC=-(6_ z#HnTHDifFjiL1=EPuU6V$lhSQlsMSF05(f-a4@hB0Pf6YstEXpGBKaaTcC?wLCOL{BY}nGllylO2?4U-=Tb+uja5`@$pA(N)bpmvyJb>C?nQFN&D!2X+mgPXfJasbcZC$vt033Y z!5%U}J%O9Cg)Djv1dz6u`DPiUCQSqMN_pXp(-MV#ZM*#c8}(-gycCx!1U&kj;Iq~) zloy;jx+1VHoAwmc=9)*-E^$BAe-&19!bGBr%(1Z-P+A_QtCDS95=}uN;LoG$h>F#tS>4;Azl}NurBM5F+ zV=B4pQL(c&w8A>FGzoZ@Oc{y-@z-h{YkXh#6fsx``agNS-0ol1_0+P+ssB=fP+Zf` zeXLhw!okPao@l?Brj?+``})S8iI%nmAYHik!YNUE*Vo~jeSdiSPy=FIu?n>^Eyl8R zHt|;p@fziIWpeZ{bOt1-mpe3D$YYt+eE5&Ri-c~kHrfYuudIw;{)!z6e#Gc{^U{TD zNpv@VWUDVQ{8_Kd7PfiNEiovV3oP3ASPDxh?!3It*;N*_hSGwcuDabgMBukmoujlq zkkL|f)p8PoLZQ%XTzz zLcG*AJ38viv7qm**B)>lr~5${6oUnh=(u%RgYe-J%Zt%ypo))C7~S&d0`*IgUAo4? zG->pQq{zSwTMoWwVS2QdvwE*}5#Ib&i-7*J^;r?!u3R7PC~{>`^NAlE9BXN5jFpwa z=Jq3$L;vFMMn*cda&iFwpPT0*-etiL=6^vpX>$5L47g zNjjjBT|p93Jdhr@y_vBF`@5K|1s0Qw$x^&s-$qJm%{1D6)@dc5@_0A7r+n-2VnqTa ztSot|Sj>Dn?8%ntW#iWM%-7mVe_SAUO}mouAvwDWM&=618W= z$s_o`w3|jX+PHF+zzz4&Eflck$`bg!M}Q)BQx!ZfLU2^ z%fm>qtYmH73L@gj@Guo;U|DX!SQRgNlg@Zcwe;;kdJ7|YqyI7A~&~l<#QK?6g?; zLQ7l8mF;(}T$JRYzAGcWtArzfC$LkUw6XhvY@5+V)~Mp=~E znk9Iv4^JIh{`5cA#3vN1Y?Iy@?srvAaWsXdPhl|rOt;yqpYQBiq{o89LF4&evajC&RSRd?oQ$Ov}#y7Y1{GfZR1xEWk^!rQcGTPfhk`;x0~B*RFntL+Vpfn_r`PzL{U`qAIqvMd%8WfbqCHLPbi%=W{Ctb>)404 zuKL_7_XF0PUw492EY6pQyF1e|>9@DP&V2M(9ep3xybJpeU9$frdey*;NRq$?kF|Ia zm;lFahK&CySdQ`Ufk*Eb27b798H8U3JuEji5z1G7!F0*oim-J$^Jms_H#090 z{g2dTfq2&W?mxyxY+!_goVxpQwdI7MK1o&WbDas>HvQh8c$%V&r{hn=!^+wePcHi_ z*u$;(5V!m_bPRa5aHB->ZCfI}*hvY*p&?_2wOKrFZW|W1{QM28xf<-FLKBh@$;)V9 zppd*|D7wxEleu=CQ=SD*%UvQz0hUBUqo)LIE0q(ipz2Vn{2UcK*1sg}hh>J*JhCyz%L?%XGk>mwhv~ zjQGZ5yO4gA?JBSLC=)g(;naJU4h zmat9mTscCb15$8bIf@F3yir@DBovfbD+Btr^QDu`rn_kqSFg_vbx4u=2OD{xVna}) zv}e*Abon^RrrO{9=n;NJlZE(hHjnAB^p1%%jjr*V1c8}1xdcMJ;FI=r{*iiNJcs|# z7^Mr&r^J)Hg$0GwaF^)9frj84ilMa$X9k=5&t&T99DO+dJ-4+=QHGi(2bWswR3Kn? z&1OAnny94qsU8nK}01K62f4@zMXW{=Bhd@ZLwtSKp{y$?*%ZZD`2l5 zMMOTh-^f#-OOeF`ZgvuNyh!7%jjxVi1D0z8#h%;*<6oR_zr2lA3QJe)AgqOjg$=qU zmg^pd)YBL+MaBIn|Go6rrKu7kNw3+uyt+KRwA9w}6}Z{N7~9K;rY(4+YFU613Pjya zblR;nNrU0_4|Z`g%a*3n36NS+b0|}e*fg-)JoKF&hCj$((%a;LlgjkNbsM-_O>J1e zD9|Ww>l0oR^ou)nV(O423JVJ}|B2XPO#dQ7xoJYg^4i*7D18Ef{+q9O82t3RPA(5r zs>HE>1ACa6>rpKBw9fG8x-3GCW!%#}Yv+x>217WN;ARy|i3~Mo&rz+izvY#KMPNl4D4^s1BCE3^`?lLNazRHBuu02jaVZ9=_`sag4Y}QhBt{?+V1aN&toZ z<1xW#@FnCLUv?Kwy40e6r#?73u%=B{CFMsUyT)s{JywGX7#pncH+Ktm7p+|_TvrcT z_(f}v&Ws-TR=v+5q{k+v)J0Rsb#d_Q#MI^8e$^!tWBeRHTQ`}@>WfLlkN|2Z#aS8{ zjrx=fZ&LOL&xMJg2v8}CxL+vEpKGlHbhLy^rkAW_8~jL6bQZX4>`!D_F$1zWv4c?rMW&%^|Ze|>B{GEdXjQC3=OOZ!V- zopv0l4E)G_g!ExLm=_=Tv9elS*C6?iea1LrY&pwJ1e|oJ4QJW@ zJXz0|wP>GLo!eq}<-)l3lZS)2u-Cn_SGMN@>&Cv%qsq$q;7I6SiN%ZS>xD3#_&k^G zEkS9#F*O)poYNnd&DK$?85lBxr+HQA6wQ?$wKdX91AVnGXYRyvuosb^$fp#ps$*q0 zmD~tZ-39G*XarBZ;9D+XtHnAjRN4=?AclzJlMyviQ&?FA$rK}`C?gASrM%>W>H?`x zcwh1G7#q2GUjk#S6zZ^t#)GW;DP$zY#0H8HIObElxF~VCxVWgsaF}r;cQ@pZW&yWW z8f+vd(?54QLLVo>Z@fcJ~Z`^&vWOIF-s_^9fb=-UcYN}>o!rVn$*8Xp6 z{bx+tHaf4RGG)WDxa?JL?d!%17sRS_2o#LH&XA7W3toBK5g9KG{^EEbte9>s{Xa-C zuf$cNf0=omU8RmLmfqBM)xR6B(mQ7#XR=($C9&eU7cQ%GB>Fu7bhNxi5AT>t&HN+ zm2!<=)g+_cBzdz42c)u$&GogfoLr7!zy7wEfds#kT~zK@&QCFWWClr8`@erPhfmm{ zQ{~`kI1$2yYje4($x&Hm&{~1jH#BHzYHn_AQ71PyH=CH7v+4s6rlUM>lj75xCEtj< zGlnoFWlX=aLTa2$aZRd2jS{J{+@hUwixO%4Ak?=SO|mJqx$u&GR1if-g!^*uQik>3 ziKuxW5s1Rp>^bnw_>68VZ*URh!+R(5o`GqSC^OF|utZl^x57860GlK<@bJZQVMB-TsvQF3NeAtGJ5XFtHB7-4SnG zD^Y$chlGA_^q?QVsHV?_nz^i=OP1fkFRk!EHj4F%W#fIqoFCQR$G*UU!>ud=xPnX-W`Wg9kWQl_+!qr#q4S`{QUBL!GQD%Hrwi4 zPY*BMsh-&(p`;`f6ck8zaa4=b<=((ElU7g!35RW5KjjI;804^4c10=f9wj5^-QX}I z&Dn*O+^Q>^e4}RL@H?krwuterk|Q~;es3T0Bt{+umJSsJ%44D={;8hgX|>97QQLXx$q3tu`|`WZK1|?txbLr@eVl_DI6uPKy;3>I`X@e$473oy z(mI|L!+*^9#>g zZN-OAg9x;Vt&Mc{RO*+{cG`V2ivUYldwr3{9xa;1_9M-U93RA&fR}#p#UN z-mW(hs4`%W9n>ME5GB&xPu~IYvv?E>=-t?rc;|`$5rYZ|3nJl<0bvJ0#1sGzn*6}h zGAopa=?tf#H54kSoAM?u6fQnbyKpB#VgdJ&Y!=Ds(JotU+B&SVk~UnK{WYNX+rr|a z*UBY8V=zfdAP1oLpq9!Bg!Q1J@Wb^M$dRB(h~huwNzVMN@6TH5XUwNsrHKY^er1EO1IsM;G~Zk;IgK;? zFxLcQ2#}Eo6T}K8-!r-oLV;@n!3R|tP^aA^%!=#4Mat{2tNfkWuBPU^@{qwMFZ;|L zMN;={iLvDMY5-(r+w&%OlhpV%36YdcUyMt;^VMn&Q@Uj|cp0t$P*=4hw{Dm?YT0{C zwgsEwBS)d&ju|t?hN!3>bMi~j`2|r{+n9zgD5Lc?6`T)lP#7fCyHrup zWJuyK9xqV<;)|VQp3w^pgM+$uDtZhlY)NIQqhaLXxO7ATvj`+Gj=%?v zn=rY%yD#Vizi=aO9f$l0VJ2z(Vg|`zP!wXssP|yRVUW=XOT9!U&+p-q4Tq#bKb&Tc z4;rrr_X-N%H?9ukr99iZ5A}{GZb=hfJYQ7|T9JCSudO1o)~qgJj@Tyk1+Zf^i6k8& zvEkRA4p%O4&!4? zO>@%1!ma>($9bCU?k2@AqiQS5EyWNGl;ZQ<(E+* zd|}rcQiMUO#2J1u7Rr4A##AT`Hb&D zlnn_|d3xOjW4K63 zOQWHo8NTmyQU^*RrI9C!!B9pL`o@3<#eR!RP-^rmBk)n0yma&t3Z$PB8*gfq@AEC< z-FjTb0cwfCqn!J>O&7g^h=Grg+K)}xE>KD!P&yT zYD>N()@MRDOWg}ctAEtyy>k9_$_DZ&dSXkzU5xZp{Dxh$w|@ILx>oCpgdKF?a2z-* z#ur17h#$W&@&jmPv^X+7Eu*196dFouy*giBW@ctK2;C0`N+dXJy3~qZ#dD|F04ea> zQWlkwMqhz^AoT_V8KI`YyXQ2fTv3MR=ECq}K|ULCmkKDbgkqfpUx}ggo=>5kZdguM zZ||O!RiV{SBFj>A<+wGmtmnL)`g*%)-6-FN9I4fV!2oGx+;S(-dF(-L3XJdCtTJ=x z=Mz+inIpMef&<1q`xz8T@lthua~BN{%kicKH47Q7>uwY6pl)tF-0XSI>a3xRDywp7 zKSi7mrq;q%b`N$Ix=%khrd`|f zR_Tq#3MO&bRyKDccZC-S<6uLUdQO;nEDC-|zpfOOM^?!-GW^>wJ9P_=5El<3esGX{ zEY1y+;_bJ=@M6kZ(F4c0(Aq8ScKw=ECPGMpFHg3**t4aInZH;c3N00E@tVy+e)j<-ru*Uz+kVtE*rL~R z5wY8b@CgjWW~{Gv$O{idLbb6JO8%5x+WX0m_g&}jShcx$2+oNWj=cp6y>?GXM_Z^x*K& z%)~@V)N?r8pdZ1+-nL(^2O(QmR1Pv>R)(vipHM7;I7nlYKX&dt~?!T4j7vv8<9 z=Tdh%dalF5F*$=B=zEJ}caz`eQ8laF@3g-pql+`onDWip%6ackRPKc$O($TTaU(gG zH~hve+GS~TzZh?(G^V9a7wC;f;*m>l9<8tK4z)TwD6F|!&%A>-SN1Ra_QS(-$8}@> z=V-dWM{)FVMbpslv@0GKUlxbAo6;bqlD6p!QNz{hay&VNntJ+4P;|+0Wqqp z&y(+N;>CNP;V$MhKJCMg&&<3m3iEZ6)vGVDmU}_yTVj}4odhIV$1e&=Aat8`POA;l z|$unGj zY=v%f%#L}uHziry=IF1LGm&F}>N!0EL&*FHbx;EZRJ-po+e1+d-*co#paB2%3}R ze617*x=LfKGHrL)+0l`&s#G~ruIX9vO%^l_gyLXaLSq&!UZR6Q`GN8e%o=QPp0BP? zfK=v~N*#5BUhQ$dI;EI@c!wx#?PQX6oV&ZevXMH3rn9r|HfxkdgYVPd;i>F(>GguC z8Nd?cb__3qt0Q1siJSFxXURHNZYVKSJJ*>h}F3 z%bJah29-f_7-fEqg^H}AlInsmAe+W0En`k;=%CNcm2D1W4~cH`aPV~tT557p zcxg-|5Mc)N|!T z<<1IQfmQeozHPVJ-uPj3bQw%;!6)IoD_x77ro28$cQl@>cGF}i;igQQiqhJIx?%++ z{F}H4MM45%Vi7-o!%*t7MJBLJ?iQsYu6oaLP-4y1Ce9sq?!4kIOd)wc8#8}q-=od0 zG%hV1>;dIm<#yaruWi?}|1Q1EwdCJp2)zo;VFpv@j@&Qba z0-YuOr9twdvRip&u3DKAId=RxXkLM6#BwTICZqbZIb=g1^0s98YK3&8sBd`9MP)+5 z(!s&YA#1Qf$w?~$1Lo~ZT1iFGBCdK+Ephc1@mOM<<}?8odG$u21Pmyg@)ZXH<1 zx9M~0u8wH^FO)mNjfFJY60}C_kC)+(VYR_(BOj7NHh7f-?Z@d`d#H37XKI8Uo zyCjuk_C;=Xs9m|_n!v135t2Wq(T7^y(R4RhNLfNSd{n1g|HI!?XFdRo7ofQ3?{9wd z5(OpahCf;v@^RdmnmPUNGI9vmoZJEsX}{UuO9tl!Oa8teICD>!ec$%3`c@aLCv*CMK2p##t&Sf z^E=~8!e*xhMeH79C^79FCrx+R-fxD(%WLXLpf`=DBBJb2p|qFn*R4DDRB3X>xzD<_ zoti!9s`ZVhxl~o$-SGLQjTbiWA^DNFMFSQEU@i+i=PN4BIs($t8$3SgHX7!O zj(*`(^#*HPGx!D#cr0C$2M$C_zx+I_lW9TSsnP=jDa`czyjR08NKmt1YHIuf7AHPX z687>Fza8TXJ$69B4*ZM)mCZb zrSqG8Waf0puasgOjTQW5BO2#)1{=e^iFZ2E%Nu+T5>G`hAP-N^uao_zdbN$ebZcfD z5jy8LfK@;8w!L{Lt&)<`HPoOlA#Ze&#q8`Chy2x(HOQdtk@Lx*cG2Xz$e>1JFs9}r z%>G;3?wOUMwAa_C>Xe68$5v@1qCAtx`Hq8xmkLJBDaXhUuiY|co5NF6eX+**O`J92 zuWc1@Nex`DH@DJ)fBqk&X{gbn0166izrZYAv_|+6IHVM$Fv;Zl}HF zI{!Ad>?2T3Y(>jlJFa#lYV~5@NlA2D>ylD>`@!`G2&VL}OetlYPHRQ+n2cAr-0f~R zGGw#-%p|Hw1iqgK)QI&gv`yExc&78f z4O^C5^<_=_(gOl3Q2pLnp{P@)AM69QJuQnir@At3$zq>0>^nk|l-qUJs=L)d%-?pa>C@>zihV}{3PPbI6(a{Tee`tihK5b}bK z`5M!oW9N@a;`?(ya8R+D>(`K=!e+`CGhpAanwzVO*l8q1X^fEkTHtWXbSxmvZNs8l z%GgDjS8S1U44&(Z?1RwREssVQm8%DCr8!@jffKtJAR|0EM+XiZq#ppv z(FPFej9{%*AR3!3-fBH&TX)IWStjb|bC!CJcuvL021AQAu`{jX09POH@1upLhua$Y z#bSvDZ%O>b{Pe%h*T_hg$lr?w?E3>sLly0|#LtpTd?Zod5nXeqRC^vl$ilhDDMMMi zZ5-^;8te|vRzJw~f3G`)=oxz$p0rBi%A}fQjm^KQHBGrH0QKy9s~Ni)PF!;doQO;r zWK9>g0#7j9KS*H>p~m($744h2X?fCH`cL`%y=Z=fv_CN52*}A*VIUPKA2A+R%niF@ zfVuQ~vbNUlBkN1^N<$00f4CUvp{h^ekDr?g@|W|RSEv><@3~f`EOa7e_Mtavel22m zB)fh1kgoCvwHTXSO;=~u!v=j64CYlu-Z3s$is9H$rI>{2ly3TD;Ao)8{cEI`7jL4!%2nvfZ6B3Xi<$0wu`FICp z+uT33sy%M}EH}5aa>}<(P_j&+3(>YJV|?&(?IyLTw}#+L@N`tCr-fqv#0X(n z)Or=S?g7ph*Vz`Iw6{{Woby~&oHXT2lh=^yPqDM!vu1^*YJEf}!^>`ZuQLG-LMA)L zw=gHtUoqBVVtpIbJhQhh<5XQ7>|-JMXHNVwC28&jVrUKWq?c3?CIUKW<>DdY(ZRyR zF$Xn&HvWhwb)2i|s{2a)2H(?MiAP>zh3_ekbTiYBrf9d~VzVCJJ7kRot4)yMEn(cT zW@1?{f&r|jvVg`YjldW}OvOb>%OjKU5vyxubPqGnhXVLxx}ER3uo0R6&wagb0>x8j z#f2T#IqXWT64{jSm&Nb;cf2I$LBul5!z!@YVUpH}Ki z|50|?Y&UyqJn?p;b<`QWy4kuHCBKYEibfE=wg7GB)_-TXeq(BBGTX6r{oF^d*e7LM ze}_-%d?aRKdh-=`6iwCsZB2V`$$ppSV%3+HouN18w)936cw{sL6j1mttK})IDV0#E z*_4u=ShL5fQ`g0Gq>+NV_4KiWK4Y-qN4f3Y*tTcnYc0Omm2*rgU+A`1b)R0V{JtrJ z)|zvXNci5VnEau1)6F!%)*Dy9O#4kGGJ7|e{)_W`Qo^F{MSvVVmHNlp$tN-8&dJU1 zo^{ad&i2`j+yy?M1LH6WVwg*<80G*qsiJsaFuXpkh{y%}(Ua@z){$HeUoZK~4OhIZ z4h|N>#l{hPRxWo(i@^v+^>5mf3lCPaA|j1d@hod20I~@4tx4+HaV~9QW#ne~v69Q% zs3kZ*G)b@8&>4=zmH(>fWz3pi#~i}5{8iGgma6PB!z7Eg7}orIxfFgQzx$R zsjB7ASOc<}-P=kwvrPc(2fzbu)w7%G+o))1D7g}Lg|=Gi;K-z)JZoXCXIj?#%g6NK z0DsH5EvEsi%Cu5bR3?MK>Ba6de78xMQ>XKL>F;_rj6M{y(V+?PePVv;sj2j}3C7b} z!pT-#cIfQ143-mqzZhi!_o;jbp?fFsvkCH;o$&9Mr-HOnleb**Ue9*}X+e=Y;-;(? zdv8(dQescEW>xGjissRTmi(CM)o=8E&tfoEG=a3yp<&{=A>c}6wM3jb}%PqivKVg21jS$;ryF5z=bl8_dg$MbxY zKTchrB)}joU!etk_`>UQi+%NrX>0;6x5>D5Y#O)rbB}%(_1=&wJbz3z4GFut4FAuG zAAFc$#_KLRXlQTE&B3Lm{xq~0=u}Ud2EMO^qVCwFdtM~<(+z9Gp5>#3Bq!{z!CJYK zBhv-kqU0rAk99*F8;@<`{tNW8ZP6E21Ss1JQ52G`o{uX<{ZBQM@tzg!W5?01&u}t# zXRQw#XXLBFS=XU!D7a~P+4o((g2j*lD=|B+4){)!uIVldTM6ic+Bq-QOE1=&7yBK zLzz>5#BC20VVvaGKy5v`dq_6q{VklDTc|JxXl$gCSvsRf%^K+d1CYd{&A4~bkM>S& z>MQ^P6k?~(s15zzzVpYX5$4ybW;;_?W2Ely$>M_(CfEy2i1g;vPl0MIS9h5lK#%Kz ze0Pr`2l@Dhf|OlF)~Az|Hs>{8G}Wpq!ZG}i%^6RE6_Xx{W*17jRSy1T$CrRH;gm3$NIk>=Q%zBQ}b5m&(C&BuJ3GxKOz%H zq?4gv*h|m`2oQ<0a4Y1=8>pY~k*Tu^QH890aV>p|s>#fl6M`>WBO7h$G>eJs%u2ng z*N1KY9klYTzvkXF zDHs^(5L+CG*aTOiP+qP5j-9JAR_=cWAp|8w7HW%D{|u4}DvC^uOCgU17q&kiGHWlfG6PfvFzXGu}&_R_hU@$Nx*p!I%k$2AEUti#oy7yl1A=F z*#CZTZmtP2z5zBYBU8)(hJ><|!c#GCH2+rrODguQZTbP~!rrbW8ohf$?2Sjh)A=f= zx;&m}H5wg)jD**H@lovQr{!s_{2pB{{O5 zn#*>;AJI92ratzSd$z>xJ6fO!P@uJFUU%ccxbjg@yCZKgF?3#JVE~S z+wq_uW^3NdJrY~Xk?LyHjPFWQ=!+Oiu|eo-OZ(Xw9`ohJSL28q2Utc3Sp>t(AL?}N zj4|Lq(#2;K`R!Qh0-%V&AEY;}nmp29>3@kRf7b2nylnrj-5h0f9ZvqTYri!>M^#%c zkragQk;7seVY<^>obKjk%Ej$M-nIG_Z{$zYhX*?fns+}a1Y#M!o`+Xu!3K9foZqZ* zID)5kOVH0E#$NgwEYNFk543cAyHPux{5}<{LXF8$J~_XuJtT_5^jSY4@37M`T0iGb zM-M}~A;?UK^ypJBxZhx&9tgx1DI9;^J2{4yD1^M-M%ZWI#K=HFOWTo}mZmOmOU=`{ zJ(7-8R+g5QHUqJp26L^t79pmK-8w&Bn6%}k)qdZUO85NTMYF0!oq99FU3IGkWT1Xs zXk0()R7>=O1ZK-wR_mg+JHyhO7moLv%bt?bh+*o5(~Gfl#Do2W-UU5cg@IlnrlYXZ zouEzY3rAR+{zZ+;M_ABgoUzwZ9zqaDDHAHRxz?_OqhexM1Tid#!u>fO+y2w~@xqiB zW2NKc(?_+PYo~I_y~43UaZv5CvRIZCt00+A0b6+WY-g(Cj6`KRy#o+6trVkkTVc3* z+$)am^eh2ooo)V!h%7>rg~z3mdtxOGN`Z#qNMJtV58Ym9N+NVx=+l-|_On{VpddsI%%(yDiOrMr;zrQsJK$>g-c!>SjWS&MU_)g-LiaX zP0aG@YS&Cjo|BiBR#jC6_NBM%*umA|+;_3Zu>t&r^ZhDy_P`+G`NI5NKbP==fBw+x z-ID3usLbo_aDv!Gh`qg18a$2s&c%A@=osP-WA;v4mdm_&RMOAC8ySo0+yo1@-Ed9# zrd@7!^lex*7%_e`v#M*udLNl?H(OgvskE#Md)BU__GFUyf}H=3(;DeAlc%M$tDIf_+60Rti4j`{mRtck>z5?$=O4B6+-PL^{TGmSS|kD z5u}zxZ+Il*^MyE~2fH3Vo@&Fq&-fn(9oLJmp zNr4K4mLSuI zpI6XuYiW^^k~%s%VumY!`0)WZfwx}dv5c?F!6l=2NC43gF*1kkDmf5W!eRvKt@C62 zB~@gxnW1@qE>H>WPrMKKcjs5$lk>)KAG)pI2ol!5S6~YM;M%Ul!yIg8pkE=;2ND^q zooxDmoXWyU_nBZ(eG!*>?tr0BDM+(wfjg>{NkQNrt)KakXq$5wQ7rA6h5d8B!0L}* zN?)_ULAvz}R9zzQqPb(d);b_iJ)M1TP1a`O`&D;0GbMV5d{#~->03Gb^V9R;ozQAK z8*Xz(Kse^xUhSmfb?x%%($F62LMNexSL z9tt`s)m|nrs=8B+Q{w}^6b~2!Bz%2^k7}GkxH`P_K{I}t-7CN6ozKjO`-vA1n3iaT zXFjx9Pl<=8x<-=zm?_VXL%c?;;i#Nntvl=Iss2#%nZA;B?KBs}hwc$nLgGibh60G^ zk-c$ZBn}*zKXvPMN#I9kYmO>_=A<+48H$2Z{Y8e}M{HC$VMd+c4l4E*C_2Z_D&-|o zTxwuOX;@~{j~HBjt7P9(40#iUO1W^iaKhzSk3z*RlxYw!ziz2 z>1_5Y=1|lmluQS8@$BzXe`7S`;g>(_;=UfKoer1=m+GF+>)=3x0QG)cI)wak6eL!@ zl@B5WdJMO|orYWsUr>4=Qp3|aRnE=_GkNz4EAvV+UUyQTTeZ75)N#m*2c789>z7kk zFh9#Fjn&^HlvXu_;zB%W{v877(cuC|jJ$tBY*KZoRveYQZCRFwmbX^xlq(Pt`>tBJ zD^L}*SUygLPR%M($bE(3=TRPsr8P-_ztqn!rq#NTN8vj9CDn8I zO0^pjDWt{8zw1jPXk9o?3zhihfT8c6Sk}d(sD#RoTp*s3(Hj%1(}tY=uF7CWxYUpm zgO-EZD+<*khzk%HVhGUuf6A$-Bqb*o%X!7zf~pQXy)3abr{fkvYfB8GWg{f2wAwJc z82}Ltcp-Eja#f*y{fQf_;H60U^%aZ{c{|;YnVWlMZf>rxZ!bI%y7a8L0}^|7IQWY5 za!R}BY`V#&L*xG8&ErkFGcf+#ztmo0ViA@%j^F?uz7%!^)*C@uM|7GVxJH*FrW;N4 zk8ywGpcq+SK#v9Pj|@yFl$&C{O@*u6e+^~F&IFG21Z); zKLXqzjSB4Vg})rRxVf?HHUK^XU`hXc2KX4yM~w*-{!X1rQ+QZ3=l5SeU!A)jo*D6w zC(IcvUM_vQS*}j<(%4wU{Fl+^CuFw0ee!CxcSxT+8?2 z9kITJOUoaQ$Y0#*LI~Onfud+1^f}q9Lovm|v(K`|XM|M8Dwc%0zN1o}Yd;^fT(Z9h z`P_YL*b5sEYtM0=dfjWvsc!J?RDL7nS4V7A78(fNvvj#VoKL_p*6#aoukX&Jqk-Q# zR308$m8HBU{8lhqBBb1L-(FC6wNeooVWCBC*_qz=6eE~akl0}Ip#Co@uTvTPBRw~r z#xvO`%4>0Pc_MyfW*t(yC@0gqp~}m$F6xgFbB^uxk2WTekpO{E*mCpL?i!w&7 z*3%}WjZeSMjJQ1xi*L}w!=KW9^qw?vS2H`tiQX4x1h+HH&VGM0DZR+%mT9AB zqX3lXiJ+6d?fji8pXl$kVwsv&6(}ue3`El_r9z0<|#A3`$BBy&q>lc$- z-zZ4~MI`Y1rKCM$k^|f=Zrrj@6vQ=DLESd-q(^bOioP15VEXiKJQFcRZ+R+ zv1p)$=>L`8>FZSIMyXFo8wxkys=K}a#yyN8_HTh8F5U5b{@V(CR(`ah1oN`7S>`;p z!YzjR?Skj>BJAX^ukdbeS&Hi4Ck5M5S2Wa}7|9l?<>nueX7RzIOXdJtitR$~t;uyI z!Su2*{%yZ90s<66^CVnO&fcVo-uG@9lZEfZXN z!1R==FMv@t9PiM(%zk-4-g)VTqq+@Fuw`mFoJbV9M7QBcxczlcz&F*_w7(GkC(fZ$ z#JM*bZnng<1MPTFBaGiOj0-rwriu!SIFF<_B^71q+s)bk6rNwvg3y~hCJ*|gWM8gb z%Iawz?|*I3MaguC(!X~Z`Q#n8PdSNQpSL9|@MEj6uUAeI-jN+2`8;CYLFAjo=7@PO z)Cg;Ee{Bf2c2rOrF2}6kY%sd`z@mRN34k^o5(#^gsv431&#;?JKn@|iW$B4KrS6hn ze5%VgblLmP7!h9&0P;(73J~V%zo=F{=TgzS*sv`--Gt>fs+@K`wUT7Rcu6wQa%bv4 zTVd5-<9i14)Y6g|z2|VW=l4CEEPogYfVNFSZ7cOhZdZVn^z{X*BJ2RgjQ=caZ9p+_ z)ICzdKvtPgkMeWRjvsE{CsJbdEjVMUTEn?ms%kMbm5?-Rc=3lq;v`hGcc7edob-DA zZw*JJC<(B(6(ClkV@sCl#Y4qy5RrnH!-mIOB2Rb9gxPcRrjx;Rcso&@RC;6Zxy@d-cn zRWeJ?hWcKVip_4ZXY1Y$1-rFrG;NFbZvz+ zNkF`IftJOHuz8C&a2sq(|0}GE(x47bnga)s7%rGD7y@*%xT%wdQz?Lp5ZKNF7v$S) zmDX2oP|@yIc31_G(l1?`>zfC*(J!CH*KMo{iZGd`IRO&Ea?a3)GB#D4sub@DeL6)_ z9ktDHv$}0I;?%0jc-DI7fpLf%U%DQ_owiMpFj1OgXAZsy)$v=o@|5Dk4Oudr#uq&d z5D!_FL_$ZmR&wRFgNgNm@uo|@^TvX}J#1bvj9*BzW?p>?1<;fBlB5?317im~LqkDZ zTV8%*`-y@5gW%@H>WI7lq(vh)9JY#E&Cj2r%7S5R0NFx;$oavv;ahGURix!kBjQTK$W0u5ma4K6f*cBwJJ>d-*tn5Qy+iA&?U zygNZ_rDf>-cy!mYn$>n|s)#tgJ3g{^ijT6hGwmMI_Ef8SiO&(~=joD|$LX}E`Ff_6 z!OfM?MpKp2HYF+h)6S(&?JNtT@A->?YhDotBFKj-`kkzU(}(?UXDG|=OSLi;K~VvW z=;|$CJb3Y8cN~>c%wsL}^)Cnlj#& z`Ulu@WsMKAg(gUA_69}r8* z2O|_bZ@OQgdl|Kl+FM>9J4(Da?(i$DcnIu|&zg??Ej__Qm8)70bzL_yhbk8rZ1X0 z|3unQKS~fZCmpKi?kX`9)fpVCpF*`kApJAaNGK2}5sbV}0auFV%!#KP5foIg8qZC% z=fSk&1pzC5%4xfnKW4m9s07g(Oj%`#l|;edphR|xnHL5YMfjZkQG~tG1n${vw1MgZD2)5?J)>o?Ft~aI_+@7<_?bQIRlq zK`pJN={wY=`h1%VK$^ilL7=aG6USi&v z?nukB(=GjdMvn2E=DN4T&DWI)|YbK;BPfT@==zxGlx}X%xQctO* zg0QgJusud7gSc1%w)(!4!}RoYMJM8BSP@G^bIzVH#AE3?AuZB-gzk#H64Z;f; zdiSNZD^)EVgB{iOpFvrM?5A_EtqEaRc*gfz@g<;5j=pX-mMXIvu-smVM{0OQ>(yao zY4fTO^h%UA*38;$#~}08s@%DQ!y+mS9AVUPvmEn~qOD1Pw`~pLv0mRa+at^|+hQUJ zADusZ?80IE&5Mb@=}X?V47sQZ}36rR6tB{3-GmefmjZc+F1%ZRUTkM{3?i6aTY_1op zNVgY&d~Vujj6{G)P!=u{;HCAjWeRoWnp%kAi=eYPj^B*mbl_Xhnr+)hv(c2m09QxH zK%v1Enu_@cvHyry>CwfgfuCg=>s#5IN7PPP^wtNX^51u+HFx`7=8MXrY?B9XHRsia zsngF1@vv?=a;dJ#jaB7WRaFHAL5C|dlZjV76>a5n{Z36ucbX19E-~1lG_JZ;%28!2 z;l19Uy%Kt7Hu(P-d&{7>+NEoFAS4jn-JRg>Bsc_jm*BzO-GaNjySqz*ySuv++~M2F zea_==)i=MUb}^f+eRZ#1y;kTQ{tw6qMk)mR^OGH`amirRa1Qpu?n6A-()ZjyTEnXW zt8t+y;kxPXgDpLZtJP0z>2*oT^VVoHtu1niJ@HX<*l_-Vs_B4b-J+90<~;mNQsP{y z)txK|a5w*hIo1D3e3r6kh1jvTTa8C3@<{h@U9g`i)v{W4CmlucjP$>?_HF!Ad+YE9 z*6i*+aAX#u1C^p6L)n?vX3DY93xk;mt6VYHs*pK(ZEZ9XI~f@hr&>-nk>^8=hqksT zZF$P%L?8pKmia;9aUY+CAZDkVQMm3=hF9aNG*jiPot0v*e+R%!{omvks~e*aH=Po(CcSIvIh@k|sW#bfQM^<^KSn3q(?c?I&W@cvrk@|2e zxDeO3(`>7ReDXYWUF<&e)7fN95asOx`hNkBra|b>Pp*>X-J$?okta5`yOXK{0!?^1 z2|ecAqjm(w2PmH|jQwEgs(PWOD|vjMl6|M;87GTIF_#nxZht%)nj03*mApdi*RNsF zFsF6($0C9_-ifJMf@6rhH@E?g9mckWW2v4iI_cQQTdLJ|) zgTf6)+xPNCgH5^iKh$w#4ArG~4pkJk3dV(2|2AxLUU}dxuqUkXx&{(QLeLlBs?N@s zyWS@J3u2l<$ovODA+OKOD^9XM(%x=v@r%UfS718YxIgTz7#sVqkP-Km_aH``dIE#l{ zWpd4-5;`DKqeNloN1z@obXk$L(HDv_IXMZK)oaqJe2Qn&!Sc;aM17_C)UJ3LZ7ism zgnO|gF7!3JDEqTnTqQC4Yj5biCf!9eq-g`8`0`T(>;Op#eB#xm%fj%9ty(*&TK@+G zzL-T5vPq8($XgPRZ$zvwS#K7>TPoRuyR=Piu|ncMujUPD#UG^19=SYW0Pk>LLNQtc zyVJC}g0gA98KKB18biNr5EW`jN{qY=bt!pHHk`?~lUf@G-(m;-Qi35BC)@8Dr9cia z@Lj`cuEO=SFermK{9ccmi&#vfE559SvYsYCN7%S`Tr;H-{x2MpBH#J(f;m@~(wyzd zEOD!}```3SS*LFK;;6lbLm3MA6zWF>0jCcT51#*ElD>7a`WG{q#I7L#D75{D-Nql4 z34e4V001|LAd|x}n7?Qap_m6{)^9=A%bh`hmvl*%^%u|tprHPzZ@0KlE-dXt-Cl1m z^MDP)y64j=Oajz{=^tF}&t4!N7Lgz}&(E#&^=kpuNkGTYKOn&46q!f|Jmn7-^#?6_ zZiDjWaJxO3E7xFUWktZ}S;!RyXk^4Y!~Y!8Ioi@Ju&W(~EM>&06h_;hJ*$3_BRtO; zkFCk$A9q=k8=h~)c<)N{GnJbfgfFMh)`I8~*p%67Hr$zSO2)D~0xwa?%FbsDMN94# zU?Ko4mVred2iRe*R;OpXMx&+M-Pvl5;cz;)ldRyu{!B;%q8d8hb<16__k+>(9?CHH zISl7!!S9RrW^PkCZf1#Tqlg~vizRkN=Qw5be^D`=56bytzBj7dvO|@rF{I+vs%f#Y zfYu!hK#2RG&~U5o?VdP5{%0`bvHA@Y<&$-p=$V)6(5(3_Gac1XOP%#X7)s>>Tw63o zhtbYf|9i$%3fhZx=GAgPpN8Fu(Q%130cY6jy{e+~b;tg^0r$F_W#ghAt4iaXP+9#0m+of8nB*YWpIA|A%s^51z= zKK&d4GkdS#L6O9SBPJO~9?(gHoIv*e{E9jg1r^E5*zwgd6O!x(`72E2c&7cJqnE)@ z=&BJv&RB;teL`G2{8}wz_v-oe`P|RHwAo6}xP(V*xPGgVDN)0in4Tb@+rGdkemD8+$w>`xtZ^c5|h*SyKws+k35 z{K-%wh@GLp4v(Tl%c;J}V}BUG*cgIWL;LSFcdTP!CAineQnfL&D&Rt6>(d2VP8^u= z=pJnGY$CY`@OV&-{o|dGr`iKbe?aNFOL!>$CFmr1ki(nFL{L*W=Y+G~%A@8^{A4xYOq+ za6`ufahQbXUA5dtt0f)wETOiQQyXzSa{bGmH4xiZ6pb%mYytPDXD(*g=?oS9J+Z_3 zSNpI}X(T5>Phkdf{2MBLc4<`!R@z!0XbK1`1 z;$3^f(o3Ow9y?%X{{V^!FGT+*3y$DRikD%9HGR`#n^Yb(_>!|tHh^{W{$Yd%<`Q|B5}%NKA* zvym}10#MTrSq@sA8@|4IJHG}!LS~!5YjciD`+ShLQ{jBH@KWco2y$K2xo2kBaI`;Qb~sZrnmEw#(e5@;3%rbpDN+svuO2Nt{164Y<1fF!ezQ%L+; zZw?3VS}@sU@yhjHQEaWPn;cJ<=IP!~$pZ?YI;~K&yT`{*0jYxS*$j--!;&hAy}BD5 zEty16mwr+8LHM6NPqw#f0a4O?iNpwk&mEpM|8VkR2TyVe?^sxGJk{0dNk|;X$e;t{ z(*uX%WNtcR7_F*5!hrx%prs8~nbo=DAj4fs-rDi+?HDlpAxv+E!^~k{Fwrzr(3gKP zCzk-`q()22fJ(by$8q(&!Rpk>zqtSuv8*o2P=Ki%i=yNFgru-<|ApDioZ3Kb~Eh=Kp)cpkqt1+&~T z1g6VkC`b+}*yK|%8|Xufe5puNP78`OhY4Qv8(TTKTfWX$`H_xOF*$S7tM>JzK%2rj zA2|X1-8)d$kc|NX$hdT16GVun9F!bVgMb*2--DP4V_H`t9vnmn2C^<7)=)+%X(N_W zB`TTUDbacFSsaw#0|*x%nD&u_4EW1k@uokaY^l1eEjRwV=L}CJWeiP9gt}!5Z4V3b z{;8Z0kDF^V!zs@fIhdD~UHF+A4K2P>3nDKckeumoMCy>^@!2qRyycFekrc0?5XNvT3HR(%E_xg*#2RnCv5$RM>PSxd`E<>%M*8e_sQl%77hJL)U+YVG5v%fS ztg`UO<5ubD*5A(6jOC6ghCN)=t?#rdNHefXBHn?3(ViEYRj)U>wEbr{Oa#*1U3c99 z>Iufc-WWHcQVXn{IKSyTtn;$F`|Ww1z=OpZ$+On@v?-BH`IPBt zqgaXVld9UOaSOEN{g}D~Igd(_F0*6k+nkR5h3^lIHVph=RBX6g$MON|rFu7SXl43+ z$Jqe%eNCO?_G|kzvC4VbcNsGmf({4d`UQt)oXH;wzlf3YQD8;7k+H+_-@2N90RI2TUMPKqgEshAi3EPLkrrtZqsU)HR(!6jdA zh=IGIf2W@RKat1B=Y>5>u0fTb5@I0B=bQca_2UG?O-@hjDgu{KAma1MUGrS+Q#DLF zDtfeN(DTkyH5tH{wi#UAas#PZV+aLekD(#j^x@aOzGVBym$`qL zgtM>cN7Ye3P#XUFE`x@WAX(1F-9%1CXLYCDk=nY#*K>UKNdkqACn8aEI=S9h2mI~U$dZTf|0S;qO8 zqT^-yaq-L8?Doac_-c`l5r-ZyLmvGjfD|g0{sT0m%qb-#s4Zzbu~@%=W63QdrqzM; z`WNxwUuB5@#ve{UURIsTuC%!^!1~&{#=L($UjXi1M`}M0WE3wQ)OB?=LbPMW{ zB@KbUq(~@1P?>z?yc11!Yp&MlOUcf*z1#6^%;Ra{`@!`xs`A5A%0E1>miGic2z=SY z@Cql@o|(s|&1RXNL+5TS4=d>;Ic;gK2sTbSw_h^^3ujNbvkxLxITPR9FpLop_US^Y z_s*`T6smC780T8|yBIrR)iR2TrT@go?QWEGEy$JyH;B8nhBAd0fUnSn6;ieW$_(#z zfdEZN8lB)Kats#lcV*x`>Qw1)*1I~i4Y`hf&gyVQDmyuu@sf3FCGu(Mv{%ZW8_MSY zix-GSRG;%z$*_-WoZ2UKg|2apt~<`__&q)0Vmlkpna*Gf02C<_GpKk5Ok58SzKB{$ zNo0;R9JuiKN~ts#qsN1r@nLbqeEdu%OJj5K|6nQiCDSm{AD+0gn~{)c%!{Xjw z{4Z@)x?q4ddHB5(%i{#jp)AniW2wtNDi9=C2SjwnM_iVwA++^3IRblEPG9gx)E=_( z7E|e>pUz*)d`Kh@a_1_!TO{Yg_f)?dKi^oBn59v8U_s{Enze;Cv zcqoXt!@YB&>0}D=FXaiRbXy+~1~hd@$R|L8n=}t65?5FoN)lx-MW9{L287uDznWdK z*8dGl|2@;g*t|53$z>7l+8}f;B{tDKOuuF~46%zufq(SIR+-8qwdQz9&~Es0{L___ zLa~0tz>fVtxM@laTP3nLfn!Xe9JX(~pLg}LoDbsQ%|S&_pRs#tXGWU5K5LCC+Fwn? zZk4!E%4OiAU;**;LC9KKJ42Yef!_kd1 zc@i+bi8PXzd`#qoG##A!PQK;_sZKZ@N} zWv;%mX>9(*wL`PfAP zuD5M#5mf8j&awe>7kkVkDOWhh84YiU^{Je`S#)BlnV8Aj2p6GK_`Bwqu)gF z>EmTav#}R3OQ&$~g93}gVMCa`)QYmr-1u?{KwW(lmHVWmJCot&qb!)Jf;YBqyllHl z*fO(2b5Vj|-b1)?N32ApM=)7){{@LjFn88fZKIL9JFVPG<>>{A&Go#2ogMl2@5%lv zkk7~nEiV3IZh?kc@_`d-3xPKI&YP_DBlAdMMLN5Apd7-v1Mdsm+foFrt8Q+dWxLgE zbKL)fS#6{I1azxWuHW@bM^y(%lQ^tI;3$nU+p3qIIZf zJym<9=A-}1@Pp=}!}RO#idy#!p%YVE=p>r!KjddcDV6ijE&cJ&9+i*6HfyCk!ppbN zn4l_H?vjqkQ8b^7ZHsff|C5WTKP#gs>C zUdCX(h`%YJL)Nkv(5i_kL%yOx2qC8sA;v_BxQf+$Pc2vQ^fHGcTD*>0mC88Z=UX$n zO;0v<957mYgxL4EW~XT>&Lp4_7>JOBf_~(s*uQ&zF6QUgi)qW5JsTZjic5@i0DN@3 zVT378Z= zQn^u+Vq}b@ma17^`l~@(U20A*`Uww_g45lZ3h?~r@ULr&DurR}hmvtYqBAcYM#uRj zwN5gxsyePERTrC_Ilz3DTYqf!p4sn~!v^ntuTN}Wnn2zgAH`daaf?pjx=f7qHyhtv zj!jM-r0jB#5DNJim$E6yUiuky^2@?r``e-dJu=y7*4P?ew7+mVhhZL1I{L9#Oa8nu zgpxl&=bI}}btcs&*=}Dl-xK%9L2++sVw2B<4p*vwP}^d)tpilQcvg3BF4NzMINbJQ z5&54W_Os%ILkzRU7{K)xt10JB%8rhPV~306HY;P~qzU$ulX9dS3%Da-@GXA3NGfd? z+Y1~yo-3TBwb0^#OaU0J??C8@MTfAvG1rgW`ud4&j(5?^txZj(QjrOjD|yDwdVGMM z_GPcTy0Km*E3cjwRQ9(Xep2lH{W~}Q?u_SWMtpqH+S+3Y2~przt*tsw*eoazE3Vv( zckxP!0FtgX0F-**Z{l*k^dc)aGwo|}dpjvV8e^RHI$p+U`OMbWe&2LzuQ^Ecyp5S! zTCF_}w9YrQ)vBneU2TjhP?Nl0nx-!|0`<@;NbIfdl#M>JmIwav3WOK!sN8+%a5(E5 zt=$QH=5-4RL(ujT&s#3bXB_8!8gc2@@Cru+v%cwHU#Ita+)$y41_v={t8&^-B?z)! zSt@9E66~Iw=24sB*Y7p#1&n*}yglV3A^VoU9e3i4J@Voe64KoD-JNaBx=Lrk%9(`B z)bTvDp1{(=bj5kOET`{ld!Fw$h0IfoR(QN@JlaT4IB%N7-*I@^B_e65l-Z@PlrD3D z9EkY4@QTk@CL?23wwWW&d2PkdYhDNXstY)mVo+2(}pftFu>VHZ!rZqJc)0rg z{RAWkbgU3El--_2dJfz6nU90ToZh~GK!KI0Fb3Kk_|TIt^x>_BYeChFa=vXaIgn0m zct0UQx~5|W12Gwg7qss&qgrG;k&rt-HooRQ-IQ=IuM)YR<@kg_X5&P}i1tKUTMmhT z)>*#cy3bS4HLq)B<39Cm8Fo;U#jv%th4O{^__3RG%Yz&#c>q3(U!y{7QW8>hJQy0)?6waLHQ74av25L;9P`W}gXO4jT5Nl+sa~ zm#(4k(OUxVwPVRI`Bu`)(@}@1ml|cbZ)v@VyesacBCS1Gb1f|LRzt_G-Gc-85_{H> z{98oi;-(f|l)rQpZ|M5o+2j3+h!Eu9!-UQ7O6`6vQ^?2l18X#`v}74EQ`;peS|ZRFmYkR9 zZ&Swk7=U0tFfwqA7}EUNq-l;|@5R|rJJsnuQl(L2nN?JqOuG9i+z;_gWuSl7wY|Q# zqGChUDz<%qfxmSKu%RG$JZ^`k=b^br?<=-QL0>8n=vwWnzdvjq^@fgyDl70w$e<<- zH;ubI&Fm)D(8opdMQ5MUmg`AAyk_E^d(F>Zjvo8d&H!rK2Op*m?SXy(U=`Lz^wi$|{>(h&%v{9vb=?H^lCynv;m*-k!3M)?IX$^&8>{Q|1?Mzn z?@7-O6+{<69Z~BaLYi0TUAjl^+G6y)05N5Pa=M~e8(3VWr=JjxYS`w8_jFs!U4-1p6-o;>&khFa} z4n=~;@6Pt5(?iB=Z@HezuPNAE>YQ0waX(q8J~=sQYT}3=x?G28opvmm4F?{y(Auj} zetye<0DK=GJPkp9n`NYi?cXJ$R%~x?^}YHPbOIzc=MzG%7Mr*~%qle!*ADra3kA)R z=b6SEEO(#iIg4~`%i{>m7n^g~+&&5{v++Xb>Tr8ijJEPbzCX`Q*Njr?aTWd03LVVH z#!KuU2pf_^iX5yYO^aXqxKO?LlBBL@ES8uzOO3`V0?(y}T@E+bmDzC{&+(o9GjbUW zk%1C~FcNrik8^XC>e2S`*7mORZj3ZK<`EgIG8(EWp2xd9P?rwLvJl~x=^thr3;G?G)&P}Yf5f9|Pifj}?mRmoU%Tk zcdu0@T|Iq{&FD1P&<9IfTOl8$w>LJo=r+K1vtks=S`KUt@kaI2wSMjT_sj-wqG(Q?%3Dr;CZ~MxtEZoP z4$>-bp)kEV_yjc0yNBk3$lj&1%?RmvCD=AWZm}|Vq4GOuf00mMr{p(5O<(7 zDjVf=*-y+JP>UEMe;Y^oW7R(u#DbasULXCDwXduR;Fk953;V~6hLVmgHT;2pF%>Zu{pDY z#;0gNvJq=U+IqPy%JkMS7x8lBQu?iWWj*XPGYT`#oX6+P&88nnrB}z83AWnW+V;jX z2?z*2vwRY`-w6Q(p>IUl@%ZS*n3R{Z_7`7@T)B63OH?=zW^YAju%x~6t9n?cC`{tO zG24;6x2|^|(58NOF$Vj9(kebR%8ob8_$Mu$Ji7-bh_w8;pEHWvQ5jf5pJsz$-PmL% zogp8Pv;n55dM;ij1-`w0>NT|m_ zjUPz>@0y1ZNdQoqUY!X5-n`VWgR^mp+z?e9W+sTyxU};L&MmFMLaH!$8LGL;`sS@Z z`mjp{XNi0Vs$r~$Eaa=8AI36(9Z(sb?@M=p-G?+S8h=0DaH#Cff~O-XJ-w|pkEi%i zVbkEqU|eXD6AOaOS?UxCQsQs!?rrt@{7`TT&;dD50!95ZruFrLUjSbd?Z_6_7^6{1 z8JQnL0_q!iyW-(-m?{aaNR$!i3|!U4K2}rCE=~Qty=vTlJ->+j1Isd$zXRg1_3Ed= zDBl$osQ3{{!3=cdPqL+}arXsO2Lt-g zCSW@pwx-g@zu&Smm=5fljmHmCQq>ab9chX>fjIp4m$H!u^-DiTI;HZ3IVoPtROXpR z92P(EwGC>0ivJ2c)QH3s#fl|iI_YY)UePjB<9Nu=HmvKC2yQ3-4OezHExvx8FIxTJ zECe21+_p-}%QuGM7%GwC&dlpGjz3C!VUsH%km#J=6j$X{rqf-?X&eQmJ9>XVUVMXn z-vj|J;0Kl%CBQE5_3Kbpdgy=VDiTg=QTEVb;g0i0g<7%*hwjRpoSeWL=I@Wl;f9|5 zO|Wtn-6&(5b>@*v!j4{Rs6yd~RL0)P)>pZ>=B}7`@e-ggPP2Y;G|Rz9-8Kk-7ih_c zeYi98G+lkPuELjjHC8uyxppq`(ViRMZSyslfP$*x)?Ky({TI$2aA79k`l~eS6&NZy zOfV=Tl-YLGxI;32Dl#bNO&>BbF^#2jV*oOTn3zF;cR?UeyRt@7a<`eRn?$~*f`_+I zRH6r+#xia~9F0@EGG0y9cJJNm%WT>BdeDITesJNNQ=TSbhso~KF*>BS$GT$8)dPhW z&PyM6=wdoOPs3iKz?9b%Z)Mv>-1!*A>(zWfAS6Ei&6QDSso}7vR`X5(JySTJ!rsI8 z#p-ksYFICK{gDV@9E9&`&3@nK2{91gokQ>-P@f}W`~WK>7kJlJx0ziNw#)DWq;k`K z>4|cDuVDEYPp3CkL^m>2K2Zaqa|ZZFlkMW*n85*DWh&bnn2**@TYlmSYDpT3xyItb zPKtGrS#%V+-WOO{*?PnD1_?TIF!?Or+xO|8J0t5W*#iQiXbQ;+Mjt?Sn?ZRy;AGi zKg<+CZ+9}g{IxF4!vG2DQmuK34k!&UyIna>uVwlc|LvwbjWZ^;H1Xp&ZRIoy$@@Yq){@(S;)|PK6A#9X9 z-w*-=t+SH$XsPN%IS_SfZ{TC^(Gh#kDx)f6Lsa!^h4lFd)kvu@g-1u2Z zJuoy>x`*1~W9b;Bn^jO?G@ilh^?dO|B)8g;=EWC?E)Js$D3C4QcH9D$bG*HUVXX&ydfpw*jHoAB052nmucy>-DCC z`8xJ*VEXykTO$LL;&DQBXJ=)3pB_fTk#uNXUdqtT1k<}({@i~dVjBf2v=-!;W7jFp z8uFOj-6dohCwA^3`?Qo4({hDWNMu`;eiY>YGd;MR!p3uRkh!Yp0z)L7%}%Oj+dm2L zt@)swa|ss_hIe?Z8!&v#>q{sShFPuK4PLBhda4TiQ-3kyj}a0RRJ>Qi)Yz#hwy=^O zUz$`#RGpme=spZ+k-?@NDO4RR;z4F{*V4F-c+p{lIiI2I%VgAVy*yB4YCDd&=*4;C z*~}}9^WL41#M&RK<@vdM8m?D|B??d3b3I!|alrNF^BT_});Bgb6Lz6-cPk$+95<)# zra&D26XJBmBqdQ{?uYh>`OK;uX$HXgN>xmu$^Ny9Rg0EYXv6R{7nb@>@E=kYf;c>4 zk-R4rQ883lYz2@q^VL9Exb1>%Jt7X}+8gLw)VY!=eU81V!B(n8g+&*(bL+;ov#?@m zCt0RPySuDjug~}Q&e^gir>c+d`v-_-0JSnhTj7Ja?|~CV#2HPTq(jD%X_1kUU-OYe zdsk1T-t#@rX)WIMN@ei6%#@wxCcZIWn^qzar8c=<)xF4=E9djP8{XbFT4nOwSxH}O zB>&_rklggV9LMTbs$L)kO_Jem)}72P5}C=Xzp~|Fsm=S~x#P0l>~hMXZ1szozC2{Z zIstg&As8XvYzhhsfkBu_a0*%()4ZOhnzUItTv}awJ%xAcc^8+~k)ffrjzaBr+n!R6 z=WFG%luMT1wG^I+aj-xCtbTkxY!ew{)EyB+&~jXQ&&u&2B=pD;4GLQm3xKc_o<}Ria1|B0=Sapd&|}S4 zQ|k?HSV(&S90-jK3^=&Cf!x5w)zwi$yIh%qf&xK6_l1$P(;4Zg7NF2Zz=SZsDyS$Z zSl`x7{2E?dR4Y~t>D|hxAQfj%&}>sBg9?II`bc}$eN?%lMLE$TB=jUf1=6iI+#jDW z5fN_Hp|&ca9~qi1CjQAwx==WYf_|<~{X8egW?J+rK4)4_A)Uv{!U`}wkiTqkwaxvq z#T^Fgw;7W^Y_bVmShsH0cXdKUr~m;?`Sm^rEsUQ=-~B(t3lS&t zd8E`gYCoC$n+uSOiFv=^U(t_UpK|=6(k_gDdFG{PBBEC{R$6}w&f57M4KeZ0B_cxq zGQS+kV2J5Bc%+5Kz`uzOB6h^TbDsbH_0K9$gt0{1y!=Q)*Bkohk6Zl!z8sN3Ws52% z710f1JlttLRbJIOG=;tYv9zY|-e~!?|W`hjZLB?EJ~+hs*HZ10J!r zfPE6tjA(Ij@fDbpSVQ&}XQxuP>$6EaxTRS$lS2K{dUD_-ieN!~TG1 z;lM}T<8jZY$JkIyukA=CUKkJn=GvV<-{Ik}US8O(En}>|UKlFJUkCLUnnkd|Z^gr+ zYjOj&AF_r2vmhYlSLLQm?fcIc@;mdXo(Zl%5yc3vfI##Dw-HVEK4e5{(%n->j^NWv z;i$c%l052rkfgpauUHQ-WdrqmzVaNPQX98X$Enl)dm%*!TKrA?uI;j~(|Dj}?sLni zUD;!8B!U5sDDTZ827QmjM~3*97TZA>9RqBSf|0A~8htRD^8>~b=jn(E8Tbn9)r%)# z%-8$AB)mvK8+Nb#a7;@RR^fHJwYQcX5(X$7=hV5~ z`*ug&Sjkkzm&7b;YwIwDCjlD&r}0O4)@rllrTyRCViwKKtV71nkD1$INkkTU#-_fy?*6n&rOEw z@B9<2j^M>7L`eFza6FAn<}g1BtmXmp;Iyd_{C6HPHe_#wXtk@u9bR0MB=-dCXxh(~ zZc-+)zb5gP@6f44p=Dm||}P_kC~rhO>aO+{=__tE7}A@(=nKQ4J$K30jOnlB*`30(s*}~NUFw7 z7b1)m{JlTGL1$Y+^hC}d+`JcsXXK&(&#~2KwIGjdH9edKCJyMK$ zvF!T2xCk#3-z?ehKKrd<4 zqlg6eS5){_p3c~k9d>pR_xhci+9hdI!7_2<93h@z!3?V8LVY`zcW|ID>~UteJcc|V zUkcLi7L|OAt= zyU9%J8XFt`=1Y4_HCU;98J#Blx+WW9^tYGIxR(X&cPr?p%zKL#;ukg=qM?^#m>8Zn zNxmaT&d%R@Vy$SCJo^tWg1aB}`bH%n@|K_3GhT9*@o2aICP~Jdk&0>^=!RSNYgfrP znt4M4>ru`lHQ}*V>MSJe35hm*wyUqf(jdvvWWZ06nU}ZyrHiU?KxEV1#Q$V0>t(5- z{3@@Yph0=Knr=o0uyO4fN6c2X=+stcgjLW{(6YT{+1xxmIVn^8)T_s6^8%h~uket6 zGCUf=_bq!(dXIHi^(DRy=Dm7ikck)7>;sk5O@NvUmy%FZ|16k2?@IN&WV6*;&C1j8 zIeIA#0`hj)k#8CC95>T~k{F1AEOW#w%)@E^SI0Z7o{cJJ0*%dW@*2562}e$%w(H>5 zEx=}kvn9pbt?A|ZimnjMQ)Ai2vkZx6&KMz2* zCrLU9a?4QvQb8UKkG7*$_gTNBc76);z+ zv%Vzde-$A6w)rDiRzqu?ng14iA8@jqn3#0zknJY`P%)wzy9IE6b5u5&CB8OMWn;5O z&{Mz(o@WwNeZAYArP&Yf4HiQ%BgTV!nhQ34^nf+*=7$BlI~ZOdT@LEP<{EakR;VG;i4} z-kQn%H{zMOv(;9cjtRsp*#L96mLSsp;uq>QWP**tzayv0yClPEJ|?x+R=c zI>x>|Sw7$0#K*ueJ`MUCf;KQY{bdQ@Vo`70?oR0|OXRpe%!IVr^H7vQIRp|pb7jP; zpOiaZ)0dX4HNJV*lL)l4xnpx69^rh&XS962r%bebLyVI4vDxky{Z!N)WZE3A;3FYXG=B&fL5^K{d(`vy6SXeN3{8R%sibSSFD?tNzGYob+S}XH?~gDv zHU>%x0NCRrfPCvB@qaYg9f}uhMSIv8j1}>T4Q@G;d)-!%T0JYW#*j?YAyuLb&>Msc z9h<`v&kjCMN=RTc96~kg_eB(V7oJ5aKp2lnkAW`X;jZQ0hFhsQH3%-)p4V66D^Q+m z<&6ruuORX{`0^e45^@a3b}w3I6d3HXQ|Ng*3#xWKjCV{BYk}f9);4m)M z8cXC)t(`^uU5LVnp-{*y8*MJ+XWO9gK~=a6We=UWfTt(eC}`AH1RH+Wq_N#ajexb_ z7tvu$ZfeJ}i#*Q#NbVap1y+wkbMg=YpVz6`b{s3hI{wPdou}Dgek0`FRUY|Q$&IaT zN5cVjYeJT)5j!RI!ZO7F6Sw&P+tvW|PyXH3I2j(%2Clir1rVXXo~FSTbp4p_7V!9n1vj`0{px)=ceie!?f*aRI!DSD1bUoEFK{AoqN-RzZailu?N@2mT-XI%UI_iALq zArncm0kKe^V*zw$7nk1N-a&&JJ_4{~fdS=#-OIW8y}g(Q4aAz5+sI3ren#8_sj}{Y z-_CJjUDH^q??yRO7L4ARu_UF~bHz@YT&NmS++xgt4g7R(#{+pYCm5c;J?Lq}9isCx zeV5Kk>sQ3Pf0;LzTj5zh@_SzsJmkwOY;cnIu#IPi@cKIZ9!PL!AQB&QGx6x{!&I$P zMMuy3y<{qTxsU)M)1Ja)>QamqTs*VNmS zPC_In0t2Z^kZ~hRXhDbAg^j|UHo)K-;7@KZTlA!*ABg-S9cUO&3rgPpLKh2fOT5S5 ze^`l{&?NE*0r+9$vV+T}b?|fwVB>R;Ga`CVEA65mEheNODx{`oj!#U9-65_og~dEW zt1as-8D)RqaTn=v1;$ZRrebc_TL%8!^Qq13?`}b?L8I@u*E>GeYIUq%_KgbH#R~l9 zLY~4pfjc}YBBIM+^8v*oi_$ zW?oMR*@fdQ1Bw|d@dSJvHM++&g~+{2*XLYubwOFq86*^_FE?hbr@)se)K`9fKj>J( zWtfoM_hAwE$iYd;EoGe%sX7fEAgRsb?SQ>RDYE24CFGBhbKk>hk2{K)r-plx!7%H& z-u(gt(z4;v zPhi~xsai*=tK_Q=Zy5da=1;Z>+?Zno6kUv=ygRS_d3TCT(Y!1lPlOB<>x^gqmp>^fi*E)8!$((bGX5#+tLUrdxhc z8W<%+;cj=3gYYG6(<|7({%FGR4LH?+;G}4{pN^;o8mb8%yYVVOI+mH1_Ix=^KMu_F zWgWdh!9gWtOTi{#GBCpSgGu>CgQa{6XOUp08MP)4)NiSTiRNJ>_)<8_406}CcO?PI z2m!V?dEUkqs!>B9bK5r({npdVmBZ6nYCXqq6*`ZOzV)P0{ur`4TYUa*c)(lwcH^tl zZPs{NW@&ejuqvJrgpf6ltqKZZWx)ocB&31{{Ve2rHTQOz;3JB9A7YRG)v>pGR$&iM zUMB_yG{%<=U-5!h5iUCpoJ?yVa5ClH=ST(`jwcJ78ygJ9V?b-%+Ij&Pue4}fH9E~g zYzbszBuBRwSu$amAkCgW4*%d6%ywuWH))_NSr@#SB;7YqPoyZ7_G$HXG?T!S@u-+8 zkQav;c7xBwmpR!%i>kxQzU?THU}|P7@3;5w51-jyG|}!~NEEwgv`av;&cgoU70+qP zppBUeRN~6-!9Uj#aPJRVyIOhaJ$_3td!v%_#pY~i+9c1}nZ})sv{vF$MzmSz3seQf ztp3L4&CjMG0P%=Qojnx(kbMKr$?XSlPEvmY77@*GK|w)N2#Un_P9(2R@cZHC!@9)$Yer z8NUS^PPQ2D5XWQUKNWpcVvuN(iw|=4tq^H;{%#u+8|!A@)WPJXvNE9nO8``ZbuXHw zt)7p~OH}?u6*vQj+0X}S$U79=uX^^tQlY1vS0Q%Z4Nk?kIp`x86)Uq24Qif6{%b}u_&T2md=_2MV=)Mkm053Rx1p^wg#Ff zXu%d@S<447FR`;I6Qtld4ZfhD4{8=YHeI2}5=cd_Dt zsosBcJH&Y+z@$FDKafdu?>NjfgZY?0q~x{RA9?#+O}G0QhAh9;(TaCx+o8Yd3!{RY z!P|c3Wm8^t^q;LgufO?>ccMRxc2{_=g_KODw+&@$@JeMjes(H3$P~2Flvn z(D@Fdm#g_6uM#NEj|YX_LcHmbo;y~NQfBGy>NVBPi1!9bKHb@K$hli>ojWfPB?l${ zCI5_Q8_xgj>O07R2a6jt z{bt~j;tY3Je%hpYy!ie8gZYq5A)BRkj=uyXAMZ+!+KOkPHT(qQAGrv)wNr;@|iC72&PZ89Ic9%WY1qNVPxq#0n{nl%7vv+l5B{@QLX7FbyC9 zKGCVI^!G}$7WHyATH5l8>R?i+7!dN+F&sp~wkkXa{0`H1Jw0Csm6gUhTJ3t%S^CcB zsmJZ{&u?u&V3=zJh+yhoZIk9lj)eXbS>jSs_0va)64S85>=gXuL3|YaA3)YvcqACI zX`)pq-pW=r*RaA|B4c=)aV|E;tMuj$w_&X=Q|*n9LD`{7?d?XRiXX+8?h__U5biM2 zidn}T8>?OnqL1rQM}7{tkfe3++IT=4;e%M5@H(;|CE4I!t7HA%L#!L`fj82#*DL?1 zz!y@n9-9g_x+eCdkPx>V4NkH{aJSGN1N5@>9BmS+mp<@TswhxJTi7tnQm3`5pVv7# zWM5xjUk-f&*fkEn+2r+3Sa83fio#&xm76WpT6HG=aMRRGQ~KGZVQxgy_ztM#Wng8I z4M3oS?pp5gbDzS7@sZEB!^OWk(|K-38!5(myfBpb9c6^t)-ab_^A-x<L*Nk#C|S@TM7Q_aB=bdDgWmOrVV;a1Gs<2i&!V+Tgr|#Di#&~-A}rJJ^7QpObpR| zRQW|m!^=9pj3G<`1#g|@r2@9Ml9`TJa0ynX`}sX~!9Bsso%%8>M6sj!)AdR~DZW+y zyx(=>VYz$gvQeOP5=}rcKmQBKzU^6)MHzMCaz;84=*AS^!e$|IfSySS0==K_k%Ieq z;Lm+WJ+g*GgZn5`n{leV(NC;a*b zvl#0m?z_UQdk%RY@N#+dhCcWV2mm;r`KMnX!KO81d>vn0@5<0l+Pg^!Hj(bTwy2Hj-!3zx zCmx4z}CBiDIe;27(z*<6}r4&LZNAG4bVwg14<~quuJfD2~nD-obx- z9rb$LUf@T}SDs}Sgqx=mO~%bWvh|cncp}`7B90c#m&q_ZrGgR=66(4h=U-3mYOiB= ze!e@!WiuC*kf<@WSDMIaM*4cLaxR!l!0yZ0+REK;it4^RKFpV9fba05u^?NGRcuOwGM zU|+x;=V#AO{xi=e%w@Ool1?zIbZlq4jtEc1_wBFseY&vE4DxG;F1#gh{{S`p{{J_i zrYOdM{l7;$oUtNG4w+>o#VzJ8H1#Wtk|a)MEdk`tJhqibLU-<=oWiP;0Ufu3$!llE zH4WWb8yYzNQQ@B{1?wHrU>1FLc6MesV5poKD|=goMYeWQ-r

    0C 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 diff --git a/code/web/docs/ams/html/dblayer_8php.html b/code/web/docs/ams/html/dblayer_8php.html deleted file mode 100644 index 278d76934..000000000 --- a/code/web/docs/ams/html/dblayer_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php File Reference - - - - - - - - - - - -

    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  DBLayer
     Handles the database connections. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/deprecated.html b/code/web/docs/ams/html/deprecated.html deleted file mode 100644 index 932150748..000000000 --- a/code/web/docs/ams/html/deprecated.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - -Ryzom Account Management System: Deprecated List - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - -
    -
    -
    -
    Deprecated List
    -
    -
    -
    -
    Global Support_Group ()
    -
    should be removed in the future, because getGroups does the same.
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/design.html b/code/web/docs/ams/html/design.html deleted file mode 100644 index 5c3f1db25..000000000 --- a/code/web/docs/ams/html/design.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -Ryzom Account Management System: Design Info - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - -
    -
    -
    -
    Design Info
    -
    -
    -

    -A brief introduction to the design of the AMS

    -

    We will take a look at the current db design, the way the classes are designed, the way the WWW version works and how it was reused in the drupal module.

    -

    -The database structure

    -

    My project started with the design of our database. I had to think about the advanced AMS features in advance. This is the reason why there are still a few unused DB tables in the design, the plan however is to use those as soon as possible by implementing the extra features.

    -

    The tables that are unused are the following:

    -
      -
    • -ticket_group
    • -
    • -in_group
    • -
    • -tag
    • -
    • -tagged
    • -
    -

    The idea for the ticket_groups was to provide the ability to bundle multiple tickets together in groups, this could be used for tickets that are alike or are in a weird way related. The idea for the tagging was to provide an extra system that allows to query tickets based on their tags (datamining). These features can be easily added in the future!

    -

    Let's take a look at the 'used' tables. The database structure is shown in the image below. For each table I made a matching class that handles the info of that table.

    -

    Quite central you can see the ticket table. As you can see, a ticket has a ticket_category field and author field, these hold the id of the related row in the ticket_category and ticket_user table. There's also the relation between a ticket and it's log entries, this is done by the ticket foreign key in the ticket_log table. The same counts for most other tables that are related to the ticket, they all got a ticket column used as foreign key.

    -

    Another thing that you might notice is the separation between ticket_reply and ticket_content, this is a 1-to-1 relation and this makes it easier to search between the replies if we only need their general information without having to take care of the content. The ticket_user is another quite important table that's being foreigned keyed by the others. It holds the permission of a user and the externID links to an ID given by the CMS(or our own www version)

    -

    Most things are pretty clear and straight forward, you can find the MYSQL Workbench file in the ryzom_ams/www/html/sql folder, which might give a better overview and can be used to update the DB easily when adding/modifying features in the future.

    -
    -db.png -
    -

    -Technologies used

    - -

    -Information regarding the structure

    -

    As you might have noticed, the ryzom_ams directory contains 3 directories: the ams_lib dir, the www dir and a drupal_module dir.

    -

    the ams_lib contains the following important dirs/files:

    -
      -
    • -autoload dir holds all classes of the lib
    • -
    • -cron dir holds the cron functions regarding email and the ams_querycache
    • -
    • -ingame_templates dir holds the templates that are being used while ingame
    • -
    • -smarty dir the smarty files (http://www.smarty.net/)
    • -
    • -translations dir multiple .ini files, one for each language that's being supported.
    • -
    • -libinclude.php php file that holds the __autoload function
    • -
    -

    the www contains the following important dirs/files:

    -
      -
    • -autoload dir holds the webusers.php file (which extends the Users.php file in the lib)
    • -
    • -func dir holds php files that contain a function that is being executed after filling in a form.
    • -
    • -inc dir holds php files that contain a function that is being executed before loading a specific file.
    • -
    • -templates dir holds the templates being used outgame.
    • -
    • -config.php php file that holds configuration settings
    • -
    -

    the drupal_module contains the following important dirs/files:

    -
      -
    • -autoload dir holds the webusers.php file that uses drupal functions (which extends the Users.php file in the lib)
    • -
    • -func dir holds php files that contain a function that is being executed after filling in a form.
    • -
    • -inc dir holds php files that contain a function that is being executed before loading a specific file.
    • -
    • -templates dir holds the templates being used outgame.
    • -
    • -config.php php file that holds configuration settings
    • -
    • -ryzommanage.info drupal file that holds information being used by drupal
    • -
    • -ryzommanage.install drupal file thats being used for installing the module
    • -
    • -ryzommanage.module drupal file that holds all functionality that's being needed to handle the AMS in drupal. (read more about it at the wiki page)
    • -
    -

    Important: the func dir and inc dir in the drupal_module are almost empty, that's because the inc/func directories of the WWW version can be copied to the drupal version, they are exactly the same. However, because the drupal_module isn't completely up to date, the settings page doesn't has the extra fields (like gender,country,..) therefore the ingame template file, inc files related to that are still in the module.

    -

    -How does the page loading work?

    -
    -info.jpg -
    -

    -How are the classes being used?

    -

    Like I mentioned above, each DB table has a class related that handles the data linked to that table and has functions working with that data.

    -

    The private attributes of each class are similar to the fields in the DB table. Every class also has the following functions:

    -
      -
    • -function __construct()
    • -
    • -function set($values)
    • -
    • -function create()
    • -
    • -function delete()
    • -
    • -function load( $id) or named similar
    • -
    • -some also have: update ()
    • -
    -

    These methods are being used by the public static functions of that class, which represent the 'real' AMS-functions, the ones being used by the inc/func files.

    -

    You can reference for example the Support_Group class's information, which shows this setup!

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/doxygen.css b/code/web/docs/ams/html/doxygen.css deleted file mode 100644 index cee0d06b5..000000000 --- a/code/web/docs/ams/html/doxygen.css +++ /dev/null @@ -1,949 +0,0 @@ -/* The standard CSS for doxygen */ - -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 13px; - line-height: 1.3; -} - -/* @group Heading Levels */ - -h1 { - font-size: 150%; -} - -.title { - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2 { - font-size: 120%; -} - -h3 { - font-size: 100%; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd, p.starttd { - margin-top: 2px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -.fragment { - font-family: monospace, fixed; - font-size: 105%; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 8px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #C4CFE5; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; -} - -.memname { - white-space: nowrap; - font-weight: bold; - margin-left: 6px; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 8px; - -moz-border-radius-topleft: 8px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 8px; - -webkit-border-top-left-radius: 8px; - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 2px 5px; - background-color: #FBFCFD; - border-top-width: 0; - /* opera specific markup */ - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} - -.params, .retval, .exception, .tparams { - border-spacing: 6px 2px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - - - - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0px; -} - -/* these are for tree view when used as main index */ - -.directory { - font-size: 9pt; - font-weight: bold; - margin: 5px; -} - -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ - -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ - -.directory > h3 { - margin-top: 0; -} - -.directory p { - margin: 0px; - white-space: nowrap; -} - -.directory div { - display: none; - margin: 0px; -} - -.directory img { - vertical-align: -30%; -} - -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; -} - -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -.directory-alt > h3 { - margin-top: 0; -} - -.directory-alt p { - margin: 0px; - white-space: nowrap; -} - -.directory-alt div { - display: none; - margin: 0px; -} - -.directory-alt img { - vertical-align: -30%; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable { - border-collapse:collapse; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; -} - -table.fieldtable { - width: 100%; - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - width: 100%; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -div.ingroups -{ - margin-left: 5px; - font-size: 8pt; - padding-left: 5px; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 7px; -} - -dl -{ - padding: 0 0 0 10px; -} - -dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug -{ - border-left:4px solid; - padding: 0 0 0 6px; -} - -dl.note -{ - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - border-color: #00D000; -} - -dl.deprecated -{ - border-color: #505050; -} - -dl.todo -{ - border-color: #00C0E0; -} - -dl.test -{ - border-color: #3030E0; -} - -dl.bug -{ - border-color: #C08050; -} - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } - pre.fragment - { - overflow: visible; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - } -} - diff --git a/code/web/docs/ams/html/doxygen.png b/code/web/docs/ams/html/doxygen.png deleted file mode 100644 index 635ed52fce7057ac24df92ec7664088a881fa5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3942 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 A+yDRo diff --git a/code/web/docs/ams/html/drupal__module_2ryzommanage_2autoload_2webusers_8php.html b/code/web/docs/ams/html/drupal__module_2ryzommanage_2autoload_2webusers_8php.html deleted file mode 100644 index 6cd2773c7..000000000 --- a/code/web/docs/ams/html/drupal__module_2ryzommanage_2autoload_2webusers_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/autoload/webusers.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/autoload/webusers.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  WebUsers
     handles CMS/WWW related functions regarding user management & registration. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/drupal__module_2ryzommanage_2config_8php.html b/code/web/docs/ams/html/drupal__module_2ryzommanage_2config_8php.html deleted file mode 100644 index 612e717e2..000000000 --- a/code/web/docs/ams/html/drupal__module_2ryzommanage_2config_8php.html +++ /dev/null @@ -1,820 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/config.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/config.php File Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Variables

     $cfg ['db']['web']['host'] = variable_get('ryzommanage_webserverurl', 'localhost')
     This file contains all variables needed by other php scripts.
     $cfg ['db']['web']['port'] = variable_get('ryzommanage_webmysqlport', '3306')
     $cfg ['db']['web']['name'] = variable_get('ryzommanage_webdbname', 'drupal')
     $cfg ['db']['web']['user'] = variable_get('ryzommanage_webusername', 'shard')
     $cfg ['db']['web']['pass'] = variable_get('ryzommanage_webpassword', '')
     $cfg ['db']['lib']['host'] = variable_get('ryzommanage_libserverurl', 'localhost')
     $cfg ['db']['lib']['port'] = variable_get('ryzommanage_libmysqlport', '3306')
     $cfg ['db']['lib']['name'] = variable_get('ryzommanage_libdbname', 'ryzom_ams_lib')
     $cfg ['db']['lib']['user'] = variable_get('ryzommanage_libusername', 'shard')
     $cfg ['db']['lib']['pass'] = variable_get('ryzommanage_libpassword', '')
     $cfg ['db']['shard']['host'] = variable_get('ryzommanage_shardserverurl', 'localhost')
     $cfg ['db']['shard']['port'] = variable_get('ryzommanage_shardmysqlport', '3306')
     $cfg ['db']['shard']['name'] = variable_get('ryzommanage_sharddbname', 'nel')
     $cfg ['db']['shard']['user'] = variable_get('ryzommanage_shardusername', 'shard')
     $cfg ['db']['shard']['pass'] = variable_get('ryzommanage_shardpassword', '')
     $cfg ['db']['ring']['host'] = variable_get('ryzommanage_ringserverurl', 'localhost')
     $cfg ['db']['ring']['port'] = variable_get('ryzommanage_ringmysqlport', '3306')
     $cfg ['db']['ring']['name'] = variable_get('ryzommanage_ringdbname', 'ring_open')
     $cfg ['db']['ring']['user'] = variable_get('ryzommanage_ringusername', 'shard')
     $cfg ['db']['ring']['pass'] = variable_get('ryzommanage_ringpassword', '')
     $cfg ['mail']['default_mailserver'] = '{imap.gmail.com:993/imap/ssl}INBOX'
     $cfg ['mail']['default_groupemail'] = 'amsryzom@gmail.com'
     $cfg ['mail']['default_groupname'] = 'Ryzomcore Support'
     $cfg ['mail']['default_username'] = 'amsryzom@gmail.com'
     $cfg ['mail']['default_password'] = 'lol123bol'
     $cfg ['mail']['host'] = "ryzomcore.com"
     $SUPPORT_GROUP_IMAP_CRYPTKEY = "azerty"
     $TICKET_MAILING_SUPPORT = false
     $MAIL_DIR = "/tmp/mail"
     $MAIL_LOG_PATH = "/tmp/mail/cron_mail.log"
     $cfg ['crypt']['key'] = 'Sup3rS3cr3tStuff'
     $cfg ['crypt']['enc_method'] = 'AES-256-CBC'
     $cfg ['crypt']['hash_method'] = "SHA512"
     $TOS_URL = variable_get('ryzommanage_TOS', 'www.mytosurlhere.com')
     $ALLOW_UNKNOWN = true
     $CREATE_RING = true
     $AMS_LIB = dirname( __FILE__ ) . '/ams_lib'
     $AMS_TRANS = $AMS_LIB . '/translations'
     $AMS_CACHEDIR = $AMS_LIB . '/cache'
     $SITEBASE = dirname( __FILE__ )
     $BASE_WEBPATH = 'http://localhost:40917/drupal'
     $IMAGELOC_WEBPATH = $BASE_WEBPATH. '/sites/all/modules/ryzommanage/ams_lib/img'
     $WEBPATH = $BASE_WEBPATH .'/ams'
     $INGAME_WEBPATH = $BASE_WEBPATH . '/ingame'
     $CONFIG_PATH = dirname( __FILE__ )
     $DEFAULT_LANGUAGE = 'en'
     $TICKET_LOGGING = true
     $TIME_FORMAT = "m-d-Y H:i:s"
     $INGAME_LAYOUT = "basic"
     $FORCE_INGAME = false
    -

    Variable Documentation

    - -
    -
    - - - - -
    $ALLOW_UNKNOWN = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $AMS_CACHEDIR = $AMS_LIB . '/cache'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $AMS_LIB = dirname( __FILE__ ) . '/ams_lib'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $AMS_TRANS = $AMS_LIB . '/translations'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $BASE_WEBPATH = 'http://localhost:40917/drupal'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['host'] = variable_get('ryzommanage_webserverurl', 'localhost')
    -
    -
    - -

    This file contains all variables needed by other php scripts.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['port'] = variable_get('ryzommanage_webmysqlport', '3306')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['name'] = variable_get('ryzommanage_webdbname', 'drupal')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['user'] = variable_get('ryzommanage_webusername', 'shard')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['pass'] = variable_get('ryzommanage_webpassword', '')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['host'] = variable_get('ryzommanage_libserverurl', 'localhost')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['port'] = variable_get('ryzommanage_libmysqlport', '3306')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['name'] = variable_get('ryzommanage_libdbname', 'ryzom_ams_lib')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['user'] = variable_get('ryzommanage_libusername', 'shard')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['pass'] = variable_get('ryzommanage_libpassword', '')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['host'] = variable_get('ryzommanage_shardserverurl', 'localhost')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['port'] = variable_get('ryzommanage_shardmysqlport', '3306')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['name'] = variable_get('ryzommanage_sharddbname', 'nel')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['user'] = variable_get('ryzommanage_shardusername', 'shard')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['pass'] = variable_get('ryzommanage_shardpassword', '')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['host'] = variable_get('ryzommanage_ringserverurl', 'localhost')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['port'] = variable_get('ryzommanage_ringmysqlport', '3306')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['name'] = variable_get('ryzommanage_ringdbname', 'ring_open')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['user'] = variable_get('ryzommanage_ringusername', 'shard')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['pass'] = variable_get('ryzommanage_ringpassword', '')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_mailserver'] = '{imap.gmail.com:993/imap/ssl}INBOX'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_groupemail'] = 'amsryzom@gmail.com'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_groupname'] = 'Ryzomcore Support'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_username'] = 'amsryzom@gmail.com'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_password'] = 'lol123bol'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['host'] = "ryzomcore.com"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['crypt']['key'] = 'Sup3rS3cr3tStuff'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['crypt']['enc_method'] = 'AES-256-CBC'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['crypt']['hash_method'] = "SHA512"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $CONFIG_PATH = dirname( __FILE__ )
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $CREATE_RING = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $DEFAULT_LANGUAGE = 'en'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $FORCE_INGAME = false
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $IMAGELOC_WEBPATH = $BASE_WEBPATH. '/sites/all/modules/ryzommanage/ams_lib/img'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $INGAME_LAYOUT = "basic"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $INGAME_WEBPATH = $BASE_WEBPATH . '/ingame'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $MAIL_DIR = "/tmp/mail"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $MAIL_LOG_PATH = "/tmp/mail/cron_mail.log"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $SITEBASE = dirname( __FILE__ )
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $SUPPORT_GROUP_IMAP_CRYPTKEY = "azerty"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TICKET_LOGGING = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TICKET_MAILING_SUPPORT = false
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TIME_FORMAT = "m-d-Y H:i:s"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TOS_URL = variable_get('ryzommanage_TOS', 'www.mytosurlhere.com')
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $WEBPATH = $BASE_WEBPATH .'/ams'
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2logout_8php.html b/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2logout_8php.html deleted file mode 100644 index 5bfd6bf13..000000000 --- a/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2logout_8php.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/logout.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/logout.php File Reference
    -
    -
    - - - -

    -Functions

     logout ()
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    logout ()
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2settings_8php.html b/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2settings_8php.html deleted file mode 100644 index 6c4aad8c5..000000000 --- a/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2settings_8php.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/settings.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/settings.php File Reference
    -
    -
    - - - - -

    -Functions

     settings ()
     getCountryArray ()
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    getCountryArray ()
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    settings ()
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2show__user_8php.html b/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2show__user_8php.html deleted file mode 100644 index 089184d66..000000000 --- a/code/web/docs/ams/html/drupal__module_2ryzommanage_2inc_2show__user_8php.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/show_user.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/show_user.php File Reference
    -
    -
    - - - -

    -Functions

     show_user ()
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_user ()
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/error_8php.html b/code/web/docs/ams/html/error_8php.html deleted file mode 100644 index 18103076e..000000000 --- a/code/web/docs/ams/html/error_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php File Reference
    -
    -
    - - - - -

    -Functions

     error ()
     This function is beign used to load info that's needed for the error page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    error ()
    -
    -
    - -

    This function is beign used to load info that's needed for the error page.

    -

    if a error_code session var is set it will unset it (else 404 is used), and it will return the error code so it can be used in the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/files.html b/code/web/docs/ams/html/files.html deleted file mode 100644 index ac4afa38c..000000000 --- a/code/web/docs/ams/html/files.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - -Ryzom Account Management System: File List - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    -
    -
    File List
    -
    -
    -
    Here is a list of all files with brief descriptions:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/libinclude.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/assigned.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/gui_elements.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mycrypt.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/pagination.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue_handler.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/sync_cron.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/config.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/autoload/webusers.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/logout.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/settings.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/inc/show_user.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/config.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/index.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_sgroup.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/add_user_to_sgroup.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/change_receivemail.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/modify_email_of_sgroup.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/change_permission.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/dashboard.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/login.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/logout.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/register.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/sgroup_list.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_queue.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_reply.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_sgroup.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket_info.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket_log.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/syncing.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php
    info.php
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/forwarded_8php.html b/code/web/docs/ams/html/forwarded_8php.html deleted file mode 100644 index c63feb786..000000000 --- a/code/web/docs/ams/html/forwarded_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/forwarded.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Forwarded
     Handles the forwarding of a ticket to a support_group. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/func_2login_8php.html b/code/web/docs/ams/html/func_2login_8php.html deleted file mode 100644 index 42c3b2cfc..000000000 --- a/code/web/docs/ams/html/func_2login_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php File Reference
    -
    -
    - - - - -

    -Functions

     login ()
     This function is beign used to login a user.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    login ()
    -
    -
    - -

    This function is beign used to login a user.

    -

    It will first check if the sent POST data returns a match with the DB, if it does, some session variables will be appointed to the user and he will be redirected to the index page again. If it didn't match, the template will be reloaded and a matching error message will be shown.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions.html b/code/web/docs/ams/html/functions.html deleted file mode 100644 index 15739f418..000000000 --- a/code/web/docs/ams/html/functions.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - $ -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x5f.html b/code/web/docs/ams/html/functions_0x5f.html deleted file mode 100644 index d3ed223bd..000000000 --- a/code/web/docs/ams/html/functions_0x5f.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - _ -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x61.html b/code/web/docs/ams/html/functions_0x61.html deleted file mode 100644 index 71b75926d..000000000 --- a/code/web/docs/ams/html/functions_0x61.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - a -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x63.html b/code/web/docs/ams/html/functions_0x63.html deleted file mode 100644 index e54bfdd94..000000000 --- a/code/web/docs/ams/html/functions_0x63.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - c -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x64.html b/code/web/docs/ams/html/functions_0x64.html deleted file mode 100644 index ccb18fba0..000000000 --- a/code/web/docs/ams/html/functions_0x64.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - d -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x65.html b/code/web/docs/ams/html/functions_0x65.html deleted file mode 100644 index 5b0059440..000000000 --- a/code/web/docs/ams/html/functions_0x65.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - e -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x66.html b/code/web/docs/ams/html/functions_0x66.html deleted file mode 100644 index a3f6b19ed..000000000 --- a/code/web/docs/ams/html/functions_0x66.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - f -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x67.html b/code/web/docs/ams/html/functions_0x67.html deleted file mode 100644 index 6545e7d84..000000000 --- a/code/web/docs/ams/html/functions_0x67.html +++ /dev/null @@ -1,461 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - g -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x68.html b/code/web/docs/ams/html/functions_0x68.html deleted file mode 100644 index 50b2e6fd2..000000000 --- a/code/web/docs/ams/html/functions_0x68.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - h -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x69.html b/code/web/docs/ams/html/functions_0x69.html deleted file mode 100644 index 10bdba341..000000000 --- a/code/web/docs/ams/html/functions_0x69.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - i -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x6c.html b/code/web/docs/ams/html/functions_0x6c.html deleted file mode 100644 index b3146013a..000000000 --- a/code/web/docs/ams/html/functions_0x6c.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - l -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x6d.html b/code/web/docs/ams/html/functions_0x6d.html deleted file mode 100644 index 69ab3be22..000000000 --- a/code/web/docs/ams/html/functions_0x6d.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - m -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x6e.html b/code/web/docs/ams/html/functions_0x6e.html deleted file mode 100644 index 78bc0f4c2..000000000 --- a/code/web/docs/ams/html/functions_0x6e.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - n -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x6f.html b/code/web/docs/ams/html/functions_0x6f.html deleted file mode 100644 index f33e2ca29..000000000 --- a/code/web/docs/ams/html/functions_0x6f.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - o -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x73.html b/code/web/docs/ams/html/functions_0x73.html deleted file mode 100644 index eb3fce49c..000000000 --- a/code/web/docs/ams/html/functions_0x73.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - s -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x74.html b/code/web/docs/ams/html/functions_0x74.html deleted file mode 100644 index 737b1e6f0..000000000 --- a/code/web/docs/ams/html/functions_0x74.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - t -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x75.html b/code/web/docs/ams/html/functions_0x75.html deleted file mode 100644 index 76a7f2de4..000000000 --- a/code/web/docs/ams/html/functions_0x75.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - u -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_0x76.html b/code/web/docs/ams/html/functions_0x76.html deleted file mode 100644 index 4eea14d7c..000000000 --- a/code/web/docs/ams/html/functions_0x76.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    - -

    - v -

      -
    • validEmail() -: Users -
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func.html b/code/web/docs/ams/html/functions_func.html deleted file mode 100644 index 95c9509f0..000000000 --- a/code/web/docs/ams/html/functions_func.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    - - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x61.html b/code/web/docs/ams/html/functions_func_0x61.html deleted file mode 100644 index eecdf704b..000000000 --- a/code/web/docs/ams/html/functions_func_0x61.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - a -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x63.html b/code/web/docs/ams/html/functions_func_0x63.html deleted file mode 100644 index 4601329e1..000000000 --- a/code/web/docs/ams/html/functions_func_0x63.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - c -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x64.html b/code/web/docs/ams/html/functions_func_0x64.html deleted file mode 100644 index 1b13f2d4f..000000000 --- a/code/web/docs/ams/html/functions_func_0x64.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - d -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x65.html b/code/web/docs/ams/html/functions_func_0x65.html deleted file mode 100644 index ccaad6ae0..000000000 --- a/code/web/docs/ams/html/functions_func_0x65.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - e -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x66.html b/code/web/docs/ams/html/functions_func_0x66.html deleted file mode 100644 index 5db22a523..000000000 --- a/code/web/docs/ams/html/functions_func_0x66.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - f -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x67.html b/code/web/docs/ams/html/functions_func_0x67.html deleted file mode 100644 index 1737c3390..000000000 --- a/code/web/docs/ams/html/functions_func_0x67.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - g -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x68.html b/code/web/docs/ams/html/functions_func_0x68.html deleted file mode 100644 index 9904982e0..000000000 --- a/code/web/docs/ams/html/functions_func_0x68.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - h -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x69.html b/code/web/docs/ams/html/functions_func_0x69.html deleted file mode 100644 index dc34cf2ba..000000000 --- a/code/web/docs/ams/html/functions_func_0x69.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - i -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x6c.html b/code/web/docs/ams/html/functions_func_0x6c.html deleted file mode 100644 index 714735a9f..000000000 --- a/code/web/docs/ams/html/functions_func_0x6c.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - l -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x6d.html b/code/web/docs/ams/html/functions_func_0x6d.html deleted file mode 100644 index d9e0a3d0f..000000000 --- a/code/web/docs/ams/html/functions_func_0x6d.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - m -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x6e.html b/code/web/docs/ams/html/functions_func_0x6e.html deleted file mode 100644 index e63e0096d..000000000 --- a/code/web/docs/ams/html/functions_func_0x6e.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - n -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x6f.html b/code/web/docs/ams/html/functions_func_0x6f.html deleted file mode 100644 index 052a9e878..000000000 --- a/code/web/docs/ams/html/functions_func_0x6f.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - o -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x73.html b/code/web/docs/ams/html/functions_func_0x73.html deleted file mode 100644 index e54b1d413..000000000 --- a/code/web/docs/ams/html/functions_func_0x73.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - s -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x74.html b/code/web/docs/ams/html/functions_func_0x74.html deleted file mode 100644 index 01dc511f8..000000000 --- a/code/web/docs/ams/html/functions_func_0x74.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - t -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x75.html b/code/web/docs/ams/html/functions_func_0x75.html deleted file mode 100644 index 8461fb53c..000000000 --- a/code/web/docs/ams/html/functions_func_0x75.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - u -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_func_0x76.html b/code/web/docs/ams/html/functions_func_0x76.html deleted file mode 100644 index df3e6c9d6..000000000 --- a/code/web/docs/ams/html/functions_func_0x76.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Functions - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - v -

      -
    • validEmail() -: Users -
    • -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/functions_vars.html b/code/web/docs/ams/html/functions_vars.html deleted file mode 100644 index 3e1822ad5..000000000 --- a/code/web/docs/ams/html/functions_vars.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - -Ryzom Account Management System: Data Fields - Variables - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - $ -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/globals.html b/code/web/docs/ams/html/globals.html deleted file mode 100644 index e47399641..000000000 --- a/code/web/docs/ams/html/globals.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - -Ryzom Account Management System: Globals - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - $ -

    - - -

    - _ -

    - - -

    - a -

    - - -

    - c -

    - - -

    - d -

    - - -

    - e -

    - - -

    - g -

    - - -

    - l -

    - - -

    - m -

    - - -

    - r -

    - - -

    - s -

    - - -

    - u -

    - - -

    - w -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/globals_func.html b/code/web/docs/ams/html/globals_func.html deleted file mode 100644 index 72b667802..000000000 --- a/code/web/docs/ams/html/globals_func.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - -Ryzom Account Management System: Globals - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - _ -

    - - -

    - a -

    - - -

    - c -

    - - -

    - d -

    - - -

    - e -

    - - -

    - g -

    - - -

    - l -

    - - -

    - m -

    - - -

    - r -

    - - -

    - s -

    - - -

    - u -

    - - -

    - w -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/globals_vars.html b/code/web/docs/ams/html/globals_vars.html deleted file mode 100644 index 3bf8fc1ea..000000000 --- a/code/web/docs/ams/html/globals_vars.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - -Ryzom Account Management System: Globals - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - - - -
    -
    -  - -

    - $ -

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/gui__elements_8php.html b/code/web/docs/ams/html/gui__elements_8php.html deleted file mode 100644 index 871ced11e..000000000 --- a/code/web/docs/ams/html/gui__elements_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/gui_elements.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/gui_elements.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Gui_Elements
     Helper class for generating gui related elements. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/helpers_8php.html b/code/web/docs/ams/html/helpers_8php.html deleted file mode 100644 index c69ac3d2d..000000000 --- a/code/web/docs/ams/html/helpers_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Helpers
     Helper class for more site specific functions. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/hierarchy.html b/code/web/docs/ams/html/hierarchy.html deleted file mode 100644 index d4224c3d0..000000000 --- a/code/web/docs/ams/html/hierarchy.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -Ryzom Account Management System: Class Hierarchy - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    -
    -
    Class Hierarchy
    -
    - - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/in__support__group_8php.html b/code/web/docs/ams/html/in__support__group_8php.html deleted file mode 100644 index 3df89eb62..000000000 --- a/code/web/docs/ams/html/in__support__group_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/in_support_group.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  In_Support_Group
     Handles the linkage of users being in a support group. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/inc_2login_8php.html b/code/web/docs/ams/html/inc_2login_8php.html deleted file mode 100644 index 428266ea6..000000000 --- a/code/web/docs/ams/html/inc_2login_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/login.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/login.php File Reference
    -
    -
    - - - - -

    -Functions

     login ()
     This function is beign used to load info that's needed for the login page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    login ()
    -
    -
    - -

    This function is beign used to load info that's needed for the login page.

    -

    it will try to auto-login, this can only be used while ingame, the web browser sends additional cookie information that's also stored in the open_ring db. We will compare the values and if they match, the user will be automatically logged in!

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/index.html b/code/web/docs/ams/html/index.html deleted file mode 100644 index 82188ca7c..000000000 --- a/code/web/docs/ams/html/index.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - -Ryzom Account Management System: The Ryzom AMS information pages. - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - -
    -
    -
    -
    The Ryzom AMS information pages.
    -
    -
    -

    -Introduction

    -

    Welcome to the documentation pages of the ryzom account management system library.
    - Doxygen is being used to generate these webpages. They should offer a good reference for anyone who is interested in working with the AMS library.

    -

    -More info?

    -

    if you want more information take a look at the ryzomcore wikipages and the design pages

    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/index_8php.html b/code/web/docs/ams/html/index_8php.html deleted file mode 100644 index 1a7125c9f..000000000 --- a/code/web/docs/ams/html/index_8php.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/index.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/index.php File Reference
    -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/info.jpg b/code/web/docs/ams/html/info.jpg deleted file mode 100644 index 9c9f050922ef11093dd81d5668a49420e1d20a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464423 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 z 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

    khph>h1mqLxk;uX`d=_GP0=rGnR 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 =+ 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 k%O5Lb4cU6=kGb&M1T|?;jj1vbaZ68r`BU;2 - - - - -Ryzom Account Management System: info.php File Reference - - - - - - - - - - - -

    -
    -
    -
    info.php File Reference
    -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/install_8php.html b/code/web/docs/ams/html/install_8php.html deleted file mode 100644 index e05c51d76..000000000 --- a/code/web/docs/ams/html/install_8php.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php File Reference
    -
    -
    - - - -

    -Variables

    global $cfg
    -

    Variable Documentation

    - -
    -
    - - - - -
    global $cfg
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/installdox b/code/web/docs/ams/html/installdox deleted file mode 100644 index edf5bbfe3..000000000 --- a/code/web/docs/ams/html/installdox +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/perl - -%subst = ( ); -$quiet = 0; - -while ( @ARGV ) { - $_ = shift @ARGV; - if ( s/^-// ) { - if ( /^l(.*)/ ) { - $v = ($1 eq "") ? shift @ARGV : $1; - ($v =~ /\/$/) || ($v .= "/"); - $_ = $v; - if ( /(.+)\@(.+)/ ) { - if ( exists $subst{$1} ) { - $subst{$1} = $2; - } else { - print STDERR "Unknown tag file $1 given with option -l\n"; - &usage(); - } - } else { - print STDERR "Argument $_ is invalid for option -l\n"; - &usage(); - } - } - elsif ( /^q/ ) { - $quiet = 1; - } - elsif ( /^\?|^h/ ) { - &usage(); - } - else { - print STDERR "Illegal option -$_\n"; - &usage(); - } - } - else { - push (@files, $_ ); - } -} - -foreach $sub (keys %subst) -{ - if ( $subst{$sub} eq "" ) - { - print STDERR "No substitute given for tag file `$sub'\n"; - &usage(); - } - elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) - { - print "Substituting $subst{$sub} for each occurrence of tag file $sub\n"; - } -} - -if ( ! @files ) { - if (opendir(D,".")) { - foreach $file ( readdir(D) ) { - $match = ".html"; - next if ( $file =~ /^\.\.?$/ ); - ($file =~ /$match/) && (push @files, $file); - ($file =~ /\.svg/) && (push @files, $file); - ($file =~ "navtree.js") && (push @files, $file); - } - closedir(D); - } -} - -if ( ! @files ) { - print STDERR "Warning: No input files given and none found!\n"; -} - -foreach $f (@files) -{ - if ( ! $quiet ) { - print "Editing: $f...\n"; - } - $oldf = $f; - $f .= ".bak"; - unless (rename $oldf,$f) { - print STDERR "Error: cannot rename file $oldf\n"; - exit 1; - } - if (open(F,"<$f")) { - unless (open(G,">$oldf")) { - print STDERR "Error: opening file $oldf for writing\n"; - exit 1; - } - if ($oldf ne "tree.js") { - while () { - s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; - print G "$_"; - } - } - else { - while () { - s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; - print G "$_"; - } - } - } - else { - print STDERR "Warning file $f does not exist\n"; - } - unlink $f; -} - -sub usage { - print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; - print STDERR "Options:\n"; - print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; - print STDERR " -q Quiet mode\n\n"; - exit 1; -} diff --git a/code/web/docs/ams/html/jquery.js b/code/web/docs/ams/html/jquery.js deleted file mode 100644 index 90b3a2bc3..000000000 --- a/code/web/docs/ams/html/jquery.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
    "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
    ","
    "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

    ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
    ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) -{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
    ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() -{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
    ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); - -/* - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' -
    - - - - - - - diff --git a/code/web/docs/ams/html/logo.png b/code/web/docs/ams/html/logo.png deleted file mode 100644 index a072d6eafc703b0180e60f9c527fb2eab12b809d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19642 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 Bwf_JB diff --git a/code/web/docs/ams/html/mail__cron_8php.html b/code/web/docs/ams/html/mail__cron_8php.html deleted file mode 100644 index d08742e2a..000000000 --- a/code/web/docs/ams/html/mail__cron_8php.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php File Reference
    -
    -
    - - - - -

    -Variables

     $mail_handler = new Mail_Handler()
     This small piece of php code calls the cron() function of the Mail_Handler.
    -

    Variable Documentation

    - -
    -
    - - - - -
    $mail_handler = new Mail_Handler()
    -
    -
    - -

    This small piece of php code calls the cron() function of the Mail_Handler.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/mail__handler_8php.html b/code/web/docs/ams/html/mail__handler_8php.html deleted file mode 100644 index 51c5ead9e..000000000 --- a/code/web/docs/ams/html/mail__handler_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Mail_Handler
     Handles the mailing functionality. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/modify__email__of__sgroup_8php.html b/code/web/docs/ams/html/modify__email__of__sgroup_8php.html deleted file mode 100644 index 12cc4f71b..000000000 --- a/code/web/docs/ams/html/modify__email__of__sgroup_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/modify_email_of_sgroup.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/modify_email_of_sgroup.php File Reference
    -
    -
    - - - - -

    -Functions

     modify_email_of_sgroup ()
     This function is beign used to modify the email related to a support group.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    modify_email_of_sgroup ()
    -
    -
    - -

    This function is beign used to modify the email related to a support group.

    -

    It will first check if the user who executed this function is an admin. If this is not the case the page will be redirected to an error page. the new email will be validated and in case it's valid we'll add it to the db. Before adding it, we will encrypt the password by using the MyCrypt class. Afterwards the password gets updated and the page redirected again.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/mycrypt_8php.html b/code/web/docs/ams/html/mycrypt_8php.html deleted file mode 100644 index 6c440fabe..000000000 --- a/code/web/docs/ams/html/mycrypt_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mycrypt.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mycrypt.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  MyCrypt
     Basic encryption/decryption class. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/nav_f.png b/code/web/docs/ams/html/nav_f.png deleted file mode 100644 index 1b07a16207e67c95fe2ee17e7016e6d08ac7ac99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQfZzpjv*C{Z|{2YIT`Y>1X`Eg z-tTbne1`SITM8Q!Pb(<)UFZ(m>wMzvKZQqKM~~GcZ=A7j<~E6K62>ozFS=cD3)mf8 z9WX0+R&m(l9KUsLdTx4?9~({T__KA%`}olPJ^N;y|F^pHgs_K%!rj~{8>RwnWbkzL Kb6Mw<&;$VTdq1fF diff --git a/code/web/docs/ams/html/nav_h.png b/code/web/docs/ams/html/nav_h.png deleted file mode 100644 index 01f5fa6a596e36bd12c2d6ceff1b0169fda7e699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t1`SUa$B+ufw|6&kG8phMJMJ~w va4>Y+bZ&9QY?(VEUPY_cGd9nQ`um^ZSUyYpAAuKhL7F^W{an^LB{Ts5DmojT diff --git a/code/web/docs/ams/html/open.png b/code/web/docs/ams/html/open.png deleted file mode 100644 index 7b35d2c2c389743089632fe24c3104f2173d97af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vww^AIAr*{o=Nbw!DDW^(zOibV zl!F8B0?t?i!vld4k#$~0_AX3zElaokn - - - - -Ryzom Account Management System: Related Pages - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - -
    -
    -
    -
    Related Pages
    -
    -
    -
    Here is a list of all related documentation pages:
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/pagination_8php.html b/code/web/docs/ams/html/pagination_8php.html deleted file mode 100644 index 880e06a36..000000000 --- a/code/web/docs/ams/html/pagination_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/pagination.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/pagination.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Pagination
     Handles returning arrays based on a given pagenumber. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/querycache_8php.html b/code/web/docs/ams/html/querycache_8php.html deleted file mode 100644 index 0a9593825..000000000 --- a/code/web/docs/ams/html/querycache_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/querycache.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Querycache
     class for storing changes when shard is offline. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/register_8php.html b/code/web/docs/ams/html/register_8php.html deleted file mode 100644 index d326886af..000000000 --- a/code/web/docs/ams/html/register_8php.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/register.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/register.php File Reference
    -
    -
    - - - - -

    -Functions

     register ()
     This function is beign used to load info that's needed for the register page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    register ()
    -
    -
    - -

    This function is beign used to load info that's needed for the register page.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/reply__on__ticket_8php.html b/code/web/docs/ams/html/reply__on__ticket_8php.html deleted file mode 100644 index aed5249ba..000000000 --- a/code/web/docs/ams/html/reply__on__ticket_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php File Reference
    -
    -
    - - - - -

    -Functions

     reply_on_ticket ()
     This function is beign used to reply on a ticket.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    reply_on_ticket ()
    -
    -
    - -

    This function is beign used to reply on a ticket.

    -

    It will first check if the user who executed this function is a mod/admin or the topic creator himself. If this is not the case the page will be redirected to an error page. in case the isset($_POST['hidden'] is set and the user is a mod, the message will be hidden for the topic starter. The reply will be created. If $_POST['ChangeStatus']) & $_POST['ChangePriority'] is set it will try to update the status and priority. Afterwards the page is being redirecte to the ticket again.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/search/all_24.html b/code/web/docs/ams/html/search/all_24.html deleted file mode 100644 index 476d13496..000000000 --- a/code/web/docs/ams/html/search/all_24.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_24.js b/code/web/docs/ams/html/search/all_24.js deleted file mode 100644 index 8e8a493e9..000000000 --- a/code/web/docs/ams/html/search/all_24.js +++ /dev/null @@ -1,91 +0,0 @@ -var searchData= -[ - ['_24allow_5funknown',['$ALLOW_UNKNOWN',['../drupal__module_2ryzommanage_2config_8php.html#a384355265e4331097d55252f901eddff',1,'$ALLOW_UNKNOWN(): config.php'],['../www_2config_8php.html#a384355265e4331097d55252f901eddff',1,'$ALLOW_UNKNOWN(): config.php']]], - ['_24amountofrows',['$amountOfRows',['../classPagination.html#a6b5c716eec440d8dc5b9754c53c545ec',1,'Pagination']]], - ['_24ams_5fcachedir',['$AMS_CACHEDIR',['../drupal__module_2ryzommanage_2config_8php.html#a92879a931e7a7d0ae6919e70a1529747',1,'$AMS_CACHEDIR(): config.php'],['../www_2config_8php.html#a92879a931e7a7d0ae6919e70a1529747',1,'$AMS_CACHEDIR(): config.php']]], - ['_24ams_5flib',['$AMS_LIB',['../drupal__module_2ryzommanage_2config_8php.html#a75086b9c8602bf3417773bae7ef0cdc8',1,'$AMS_LIB(): config.php'],['../www_2config_8php.html#a75086b9c8602bf3417773bae7ef0cdc8',1,'$AMS_LIB(): config.php']]], - ['_24ams_5ftrans',['$AMS_TRANS',['../drupal__module_2ryzommanage_2config_8php.html#acc96a0076127356b4f9f00f4bdfa9b65',1,'$AMS_TRANS(): config.php'],['../www_2config_8php.html#acc96a0076127356b4f9f00f4bdfa9b65',1,'$AMS_TRANS(): config.php']]], - ['_24author',['$author',['../classTicket.html#ac35b828f7d4064a7c9f849c255468ee3',1,'Ticket\$author()'],['../classTicket__Log.html#ac35b828f7d4064a7c9f849c255468ee3',1,'Ticket_Log\$author()'],['../classTicket__Reply.html#ac35b828f7d4064a7c9f849c255468ee3',1,'Ticket_Reply\$author()']]], - ['_24base_5fwebpath',['$BASE_WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#a2e954ee09fb5f52b9d05caf9dfc3d5ad',1,'$BASE_WEBPATH(): config.php'],['../www_2config_8php.html#a2e954ee09fb5f52b9d05caf9dfc3d5ad',1,'$BASE_WEBPATH(): config.php']]], - ['_24cfg',['$cfg',['../drupal__module_2ryzommanage_2config_8php.html#a32f90fc68bcb40de0bae38354fd0a5fe',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a6b776651fa7defe140c03ed3bd86aa96',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a68f172c430a17022c9f74ae1acd24a00',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1805c74760836f682459a12a17d50589',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a94213b6df61b8a6b62abbe7c956493a4',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a4b555022064138fee1d7edea873c5e9e',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1b49c1f0de42e603443bea2c93276c13',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7c5f3fd8aea7ae8363c6cdc9addd9b62',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7b5bbf5b3c541b46d06deaffeeb76424',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1dca44c652dd54f6879957cf8d4a039c',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a56e7e53dac48b99f62d41d387c8624e6',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#adc2648938b5135f1f2aab1d92d33418e',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1324eeda6b288c0a26d7071db555090c',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a63d97fffb2ff86525bb6cacb74113a73',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7147f422b8150cd3f3c8a68325208607',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a53f42728714b4e86b885c12f7846cd06',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#aa68c438d0b6b38d756d8724bac554f1b',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#ae4ae1095a3543d5607464a88e6330a07',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7cf20f61de759c233272150b12e866d8',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#aed7bed5da2b934c742cb60d23c06f752',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1606e0620d5a628b865e0df5c217ce7e',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a41e3a386ec52e0f05bdcad04acecf619',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#ac2c263a1e16ebd69dbf247e8d82c9f63',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a9996bf49f150442cf9d564725d0dea24',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#aa7eb09eb019c344553a61b54606cb650',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a79b711e7ee81b7435a8dba7cb132b34a',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a8578ffa00c2dbcf5d34a97bcff79058b',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a50d80d35dbd37739f844a93a36fce557',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a55031a1c3c2b9d87e37558811b311ff8',1,'$cfg(): config.php'],['../www_2config_8php.html#a32f90fc68bcb40de0bae38354fd0a5fe',1,'$cfg(): config.php'],['../www_2config_8php.html#a6b776651fa7defe140c03ed3bd86aa96',1,'$cfg(): config.php'],['../www_2config_8php.html#a68f172c430a17022c9f74ae1acd24a00',1,'$cfg(): config.php'],['../www_2config_8php.html#a1805c74760836f682459a12a17d50589',1,'$cfg(): config.php'],['../www_2config_8php.html#a94213b6df61b8a6b62abbe7c956493a4',1,'$cfg(): config.php'],['../www_2config_8php.html#a4b555022064138fee1d7edea873c5e9e',1,'$cfg(): config.php'],['../www_2config_8php.html#a1b49c1f0de42e603443bea2c93276c13',1,'$cfg(): config.php'],['../www_2config_8php.html#a7c5f3fd8aea7ae8363c6cdc9addd9b62',1,'$cfg(): config.php'],['../www_2config_8php.html#a7b5bbf5b3c541b46d06deaffeeb76424',1,'$cfg(): config.php'],['../www_2config_8php.html#a1dca44c652dd54f6879957cf8d4a039c',1,'$cfg(): config.php'],['../www_2config_8php.html#a56e7e53dac48b99f62d41d387c8624e6',1,'$cfg(): config.php'],['../www_2config_8php.html#adc2648938b5135f1f2aab1d92d33418e',1,'$cfg(): config.php'],['../www_2config_8php.html#a1324eeda6b288c0a26d7071db555090c',1,'$cfg(): config.php'],['../www_2config_8php.html#a63d97fffb2ff86525bb6cacb74113a73',1,'$cfg(): config.php'],['../www_2config_8php.html#a7147f422b8150cd3f3c8a68325208607',1,'$cfg(): config.php'],['../www_2config_8php.html#a53f42728714b4e86b885c12f7846cd06',1,'$cfg(): config.php'],['../www_2config_8php.html#aa68c438d0b6b38d756d8724bac554f1b',1,'$cfg(): config.php'],['../www_2config_8php.html#ae4ae1095a3543d5607464a88e6330a07',1,'$cfg(): config.php'],['../www_2config_8php.html#a7cf20f61de759c233272150b12e866d8',1,'$cfg(): config.php'],['../www_2config_8php.html#aed7bed5da2b934c742cb60d23c06f752',1,'$cfg(): config.php'],['../www_2config_8php.html#a1606e0620d5a628b865e0df5c217ce7e',1,'$cfg(): config.php'],['../www_2config_8php.html#a41e3a386ec52e0f05bdcad04acecf619',1,'$cfg(): config.php'],['../www_2config_8php.html#ac2c263a1e16ebd69dbf247e8d82c9f63',1,'$cfg(): config.php'],['../www_2config_8php.html#a9996bf49f150442cf9d564725d0dea24',1,'$cfg(): config.php'],['../www_2config_8php.html#aa7eb09eb019c344553a61b54606cb650',1,'$cfg(): config.php'],['../www_2config_8php.html#a79b711e7ee81b7435a8dba7cb132b34a',1,'$cfg(): config.php'],['../www_2config_8php.html#a8578ffa00c2dbcf5d34a97bcff79058b',1,'$cfg(): config.php'],['../www_2config_8php.html#a50d80d35dbd37739f844a93a36fce557',1,'$cfg(): config.php'],['../www_2config_8php.html#a55031a1c3c2b9d87e37558811b311ff8',1,'$cfg(): config.php'],['../install_8php.html#a449cc4bf6cfd310810993b3ef5251aa5',1,'$cfg(): install.php']]], - ['_24client_5fversion',['$client_version',['../classTicket__Info.html#ac43fbb88dcd0696ad49d5f805f369a61',1,'Ticket_Info']]], - ['_24config',['$config',['../classMyCrypt.html#a49c7011be9c979d9174c52a8b83e5d8e',1,'MyCrypt']]], - ['_24config_5fpath',['$CONFIG_PATH',['../drupal__module_2ryzommanage_2config_8php.html#ae15921e2ebd5885ecf37d31a2cf6ab7a',1,'$CONFIG_PATH(): config.php'],['../www_2config_8php.html#ae15921e2ebd5885ecf37d31a2cf6ab7a',1,'$CONFIG_PATH(): config.php']]], - ['_24connect_5fstate',['$connect_state',['../classTicket__Info.html#a33f4c9badf7f0c5c6728bba0ffacd66e',1,'Ticket_Info']]], - ['_24content',['$content',['../classTicket__Content.html#a57b284fe00866494b33afa80ba729bed',1,'Ticket_Content\$content()'],['../classTicket__Reply.html#a57b284fe00866494b33afa80ba729bed',1,'Ticket_Reply\$content()']]], - ['_24country',['$country',['../classWebUsers.html#a1437a5f6eb157f0eb267a26e0ad4f1ba',1,'WebUsers']]], - ['_24cpu_5fid',['$cpu_id',['../classTicket__Info.html#abea88d0d04f0d548115a0e85eef42e42',1,'Ticket_Info']]], - ['_24cpu_5fmask',['$cpu_mask',['../classTicket__Info.html#a9b0c63551b567630d1aa82f33c328ab0',1,'Ticket_Info']]], - ['_24create_5fring',['$CREATE_RING',['../drupal__module_2ryzommanage_2config_8php.html#a16031d9d4e5065229bc3b00dfd4202fa',1,'$CREATE_RING(): config.php'],['../www_2config_8php.html#a16031d9d4e5065229bc3b00dfd4202fa',1,'$CREATE_RING(): config.php']]], - ['_24current',['$current',['../classPagination.html#a2c4c58e377f6c66ca38c8ea97666fc5e',1,'Pagination']]], - ['_24db',['$db',['../classMail__Handler.html#a1fa3127fc82f96b1436d871ef02be319',1,'Mail_Handler\$db()'],['../classQuerycache.html#a1fa3127fc82f96b1436d871ef02be319',1,'Querycache\$db()']]], - ['_24default_5flanguage',['$DEFAULT_LANGUAGE',['../drupal__module_2ryzommanage_2config_8php.html#a7b56c2ed5a82ceb21fc73cef77beb150',1,'$DEFAULT_LANGUAGE(): config.php'],['../www_2config_8php.html#a7b56c2ed5a82ceb21fc73cef77beb150',1,'$DEFAULT_LANGUAGE(): config.php']]], - ['_24element_5farray',['$element_array',['../classPagination.html#a8fa0f6a15481ba69e7be913eaa15594c',1,'Pagination']]], - ['_24email',['$email',['../classWebUsers.html#ad634f418b20382e2802f80532d76d3cd',1,'WebUsers']]], - ['_24externid',['$externId',['../classTicket__User.html#af51400fe5820e964cb38fcc60b3afd84',1,'Ticket_User']]], - ['_24firstname',['$firstname',['../classWebUsers.html#a55793c72c535d153ffd3f0e43377898b',1,'WebUsers']]], - ['_24force_5fingame',['$FORCE_INGAME',['../drupal__module_2ryzommanage_2config_8php.html#aabd939b29ed900f5fc489f1a957fc6ce',1,'$FORCE_INGAME(): config.php'],['../www_2config_8php.html#aabd939b29ed900f5fc489f1a957fc6ce',1,'$FORCE_INGAME(): config.php']]], - ['_24gender',['$gender',['../classWebUsers.html#a0f1d7cfb9dc6f494b9014885205fc47e',1,'WebUsers']]], - ['_24group',['$group',['../classForwarded.html#ad530a85733b0ec1dc321859fd8faa0dc',1,'Forwarded\$group()'],['../classIn__Support__Group.html#ad530a85733b0ec1dc321859fd8faa0dc',1,'In_Support_Group\$group()']]], - ['_24groupemail',['$groupEmail',['../classSupport__Group.html#ab7ad611af238b28f1f65a32cb152acd1',1,'Support_Group']]], - ['_24hidden',['$hidden',['../classTicket__Reply.html#a4a374564d2858d8ae869a8fb890aad56',1,'Ticket_Reply']]], - ['_24ht',['$ht',['../classTicket__Info.html#a969583a6605ed731abf5849a5202db1e',1,'Ticket_Info']]], - ['_24imageloc_5fwebpath',['$IMAGELOC_WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#a16820074dcd11e4881ca6461377db000',1,'$IMAGELOC_WEBPATH(): config.php'],['../www_2config_8php.html#a16820074dcd11e4881ca6461377db000',1,'$IMAGELOC_WEBPATH(): config.php']]], - ['_24imap_5fmailserver',['$iMAP_MailServer',['../classSupport__Group.html#ad9f2ef2089fe446a9ac49a19a450d636',1,'Support_Group']]], - ['_24imap_5fpassword',['$iMAP_Password',['../classSupport__Group.html#a4166a2fc4b594ee425d7f40870e16455',1,'Support_Group']]], - ['_24imap_5fusername',['$iMAP_Username',['../classSupport__Group.html#a2b549eb4d5773efd741a2990817af0ea',1,'Support_Group']]], - ['_24ingame_5flayout',['$INGAME_LAYOUT',['../drupal__module_2ryzommanage_2config_8php.html#a0deedf69fea8c97030373e15a68c4cc5',1,'$INGAME_LAYOUT(): config.php'],['../www_2config_8php.html#a0deedf69fea8c97030373e15a68c4cc5',1,'$INGAME_LAYOUT(): config.php']]], - ['_24ingame_5fwebpath',['$INGAME_WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#ae9f6aa9c61501bca7b8851925c636d87',1,'$INGAME_WEBPATH(): config.php'],['../www_2config_8php.html#ae9f6aa9c61501bca7b8851925c636d87',1,'$INGAME_WEBPATH(): config.php']]], - ['_24language',['$language',['../classWebUsers.html#a83170d318260a5a2e2a79dccdd371b10',1,'WebUsers']]], - ['_24last',['$last',['../classPagination.html#acf48db609a946d13953d8060363fd1d3',1,'Pagination']]], - ['_24lastname',['$lastname',['../classWebUsers.html#a1d2ddb6354180329b59e8b90ed94dc7f',1,'WebUsers']]], - ['_24local_5faddress',['$local_address',['../classTicket__Info.html#a467dca5673d4c9f737dac972ab05720c',1,'Ticket_Info']]], - ['_24login',['$login',['../classWebUsers.html#afc31993e855f9631572adfedcfe6f34b',1,'WebUsers']]], - ['_24mail_5fdir',['$MAIL_DIR',['../drupal__module_2ryzommanage_2config_8php.html#a9f8fc644554910de5434f78a5f23044e',1,'$MAIL_DIR(): config.php'],['../www_2config_8php.html#a9f8fc644554910de5434f78a5f23044e',1,'$MAIL_DIR(): config.php']]], - ['_24mail_5fhandler',['$mail_handler',['../mail__cron_8php.html#a160a75d95407d877e9c2542e3ddd8c43',1,'mail_cron.php']]], - ['_24mail_5flog_5fpath',['$MAIL_LOG_PATH',['../drupal__module_2ryzommanage_2config_8php.html#afe6e9ed40480c14cb7a119fb84cb557a',1,'$MAIL_LOG_PATH(): config.php'],['../www_2config_8php.html#afe6e9ed40480c14cb7a119fb84cb557a',1,'$MAIL_LOG_PATH(): config.php']]], - ['_24memory',['$memory',['../classTicket__Info.html#a5e20a9a3e12271b3b8d685805590c9e0',1,'Ticket_Info']]], - ['_24name',['$name',['../classSupport__Group.html#ab2fc40d43824ea3e1ce5d86dee0d763b',1,'Support_Group\$name()'],['../classTicket__Category.html#ab2fc40d43824ea3e1ce5d86dee0d763b',1,'Ticket_Category\$name()']]], - ['_24nel3d',['$nel3d',['../classTicket__Info.html#a9b616e5fbafadc93aa4bdf3ccbf31498',1,'Ticket_Info']]], - ['_24os',['$os',['../classTicket__Info.html#a292791d5d8e3ded85cb2e8ec80dea0d9',1,'Ticket_Info']]], - ['_24pagination',['$pagination',['../classTicket__Queue__Handler.html#a388a4a950e936f746d3b9c1b56450ce7',1,'Ticket_Queue_Handler']]], - ['_24params',['$params',['../classTicket__Queue.html#afe68e6fbe7acfbffc0af0c84a1996466',1,'Ticket_Queue']]], - ['_24patch_5fversion',['$patch_version',['../classTicket__Info.html#a55fc0854f90ed36ab9774ba7bd2af53f',1,'Ticket_Info']]], - ['_24pdo',['$PDO',['../classDBLayer.html#acdb2149c05a21fe144fb05ec524a51f3',1,'DBLayer']]], - ['_24permission',['$permission',['../classTicket__User.html#aad04b6f3304fe6a13d5be37f7cd28938',1,'Ticket_User']]], - ['_24priority',['$priority',['../classTicket.html#a2677e505e860db863720ac4e216fd3f2',1,'Ticket']]], - ['_24processor',['$processor',['../classTicket__Info.html#a11fe8ad69d64b596f8b712b0b7e7e1e3',1,'Ticket_Info']]], - ['_24query',['$query',['../classQuerycache.html#af59a5f7cd609e592c41dc3643efd3c98',1,'Querycache\$query()'],['../classTicket__Log.html#af59a5f7cd609e592c41dc3643efd3c98',1,'Ticket_Log\$query()'],['../classTicket__Queue.html#af59a5f7cd609e592c41dc3643efd3c98',1,'Ticket_Queue\$query()']]], - ['_24queue',['$queue',['../classTicket.html#a4a0b48f6ae2fcb248a4f0288c7c344a6',1,'Ticket\$queue()'],['../classTicket__Queue__Handler.html#a4a0b48f6ae2fcb248a4f0288c7c344a6',1,'Ticket_Queue_Handler\$queue()']]], - ['_24receivemail',['$receiveMail',['../classWebUsers.html#a3c74ba660e348124f36d978b137f691d',1,'WebUsers']]], - ['_24server_5ftick',['$server_tick',['../classTicket__Info.html#aeac33ccad750e9ee81a22414db1224ab',1,'Ticket_Info']]], - ['_24sgroupid',['$sGroupId',['../classSupport__Group.html#a23265908fce0f131e03ba1ede7f42647',1,'Support_Group']]], - ['_24shardid',['$shardid',['../classTicket__Info.html#ac73283a0a8308fb7594543e4a049942c',1,'Ticket_Info']]], - ['_24sid',['$SID',['../classQuerycache.html#a69c31f890638fa4930097cf55ae27995',1,'Querycache']]], - ['_24sitebase',['$SITEBASE',['../drupal__module_2ryzommanage_2config_8php.html#a9eb41824afc2b8150c27648859f07357',1,'$SITEBASE(): config.php'],['../www_2config_8php.html#a9eb41824afc2b8150c27648859f07357',1,'$SITEBASE(): config.php']]], - ['_24status',['$status',['../classTicket.html#a58391ea75f2d29d5d708d7050b641c33',1,'Ticket']]], - ['_24support_5fgroup_5fimap_5fcryptkey',['$SUPPORT_GROUP_IMAP_CRYPTKEY',['../drupal__module_2ryzommanage_2config_8php.html#a3ed2ac4433023af3e95f8912f00125ea',1,'$SUPPORT_GROUP_IMAP_CRYPTKEY(): config.php'],['../www_2config_8php.html#a3ed2ac4433023af3e95f8912f00125ea',1,'$SUPPORT_GROUP_IMAP_CRYPTKEY(): config.php']]], - ['_24tag',['$tag',['../classSupport__Group.html#a81d5015d41ed8ec66e9db8cdc5db9555',1,'Support_Group']]], - ['_24tcategoryid',['$tCategoryId',['../classTicket__Category.html#a0111df4559c9f524272d94df0b7f9d6b',1,'Ticket_Category']]], - ['_24tcontentid',['$tContentId',['../classTicket__Content.html#a2249787a24edd706ae7a54609a601d6f',1,'Ticket_Content']]], - ['_24ticket',['$ticket',['../classAssigned.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Assigned\$ticket()'],['../classForwarded.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Forwarded\$ticket()'],['../classTicket__Info.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Ticket_Info\$ticket()'],['../classTicket__Log.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Ticket_Log\$ticket()'],['../classTicket__Reply.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Ticket_Reply\$ticket()']]], - ['_24ticket_5fcategory',['$ticket_category',['../classTicket.html#a86e470072892575063c478122fb65184',1,'Ticket']]], - ['_24ticket_5flogging',['$TICKET_LOGGING',['../drupal__module_2ryzommanage_2config_8php.html#aa59491d29009336d89423cccd3adc5de',1,'$TICKET_LOGGING(): config.php'],['../www_2config_8php.html#aa59491d29009336d89423cccd3adc5de',1,'$TICKET_LOGGING(): config.php']]], - ['_24ticket_5fmailing_5fsupport',['$TICKET_MAILING_SUPPORT',['../drupal__module_2ryzommanage_2config_8php.html#a23c3d413e56a57bc04d69627a4ed2b14',1,'$TICKET_MAILING_SUPPORT(): config.php'],['../www_2config_8php.html#a23c3d413e56a57bc04d69627a4ed2b14',1,'$TICKET_MAILING_SUPPORT(): config.php']]], - ['_24tid',['$tId',['../classTicket.html#a3eda2fecc2433b6b6b3b957110e937ca',1,'Ticket']]], - ['_24time_5fformat',['$TIME_FORMAT',['../drupal__module_2ryzommanage_2config_8php.html#a613b2c043c06772e7119587b26eb9989',1,'$TIME_FORMAT(): config.php'],['../www_2config_8php.html#a613b2c043c06772e7119587b26eb9989',1,'$TIME_FORMAT(): config.php']]], - ['_24timestamp',['$timestamp',['../classTicket.html#a2b69de9676dd97c675cd4d9bcceb684c',1,'Ticket\$timestamp()'],['../classTicket__Log.html#a2b69de9676dd97c675cd4d9bcceb684c',1,'Ticket_Log\$timestamp()'],['../classTicket__Reply.html#a2b69de9676dd97c675cd4d9bcceb684c',1,'Ticket_Reply\$timestamp()']]], - ['_24tinfoid',['$tInfoId',['../classTicket__Info.html#a4c2ae13b7827d13b9629e3fc57335f8f',1,'Ticket_Info']]], - ['_24title',['$title',['../classTicket.html#ada57e7bb7c152edad18fe2f166188691',1,'Ticket']]], - ['_24tlogid',['$tLogId',['../classTicket__Log.html#a734657bd8aac85b5a33e03646c17eb65',1,'Ticket_Log']]], - ['_24tos_5furl',['$TOS_URL',['../drupal__module_2ryzommanage_2config_8php.html#aef688ce4c627fa2fbd8037fd2cceef78',1,'$TOS_URL(): config.php'],['../www_2config_8php.html#aef688ce4c627fa2fbd8037fd2cceef78',1,'$TOS_URL(): config.php']]], - ['_24treplyid',['$tReplyId',['../classTicket__Reply.html#a29f22c2783e510d4764a99a648a0cc36',1,'Ticket_Reply']]], - ['_24tuserid',['$tUserId',['../classTicket__User.html#a2f1828693b198682ae3e926e63a4c110',1,'Ticket_User']]], - ['_24type',['$type',['../classQuerycache.html#a9a4a6fba2208984cabb3afacadf33919',1,'Querycache']]], - ['_24uid',['$uId',['../classWebUsers.html#a8f11c60ae8f70a5059b97bc0ea9d0de5',1,'WebUsers']]], - ['_24user',['$user',['../classAssigned.html#a598ca4e71b15a1313ec95f0df1027ca5',1,'Assigned\$user()'],['../classIn__Support__Group.html#a598ca4e71b15a1313ec95f0df1027ca5',1,'In_Support_Group\$user()']]], - ['_24user_5fid',['$user_id',['../classTicket__Info.html#af0fcd925f00973e32f7214859dfb3c6b',1,'Ticket_Info']]], - ['_24user_5fposition',['$user_position',['../classTicket__Info.html#afc9fcd144a71e56898632daf43854aa7',1,'Ticket_Info']]], - ['_24view_5fposition',['$view_position',['../classTicket__Info.html#ae325cbe2a7e27757b90b12d595c4dfe9',1,'Ticket_Info']]], - ['_24webpath',['$WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#a562d30b98806af1e001a3ff855e8890a',1,'$WEBPATH(): config.php'],['../www_2config_8php.html#a562d30b98806af1e001a3ff855e8890a',1,'$WEBPATH(): config.php']]] -]; diff --git a/code/web/docs/ams/html/search/all_5f.html b/code/web/docs/ams/html/search/all_5f.html deleted file mode 100644 index 1f27755ab..000000000 --- a/code/web/docs/ams/html/search/all_5f.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_5f.js b/code/web/docs/ams/html/search/all_5f.js deleted file mode 100644 index 844048eb7..000000000 --- a/code/web/docs/ams/html/search/all_5f.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['_5f_5fautoload',['__autoload',['../libinclude_8php.html#a2ecfde85f554ea0b3fef0993aef304a9',1,'libinclude.php']]], - ['_5f_5fconstruct',['__construct',['../classAssigned.html#a095c5d389db211932136b53f25f39685',1,'Assigned\__construct()'],['../classDBLayer.html#a800f8efee13692788b13ee57c5960092',1,'DBLayer\__construct()'],['../classForwarded.html#a095c5d389db211932136b53f25f39685',1,'Forwarded\__construct()'],['../classIn__Support__Group.html#a095c5d389db211932136b53f25f39685',1,'In_Support_Group\__construct()'],['../classMyCrypt.html#af200cbfd49bfea2fecf5629ab2361033',1,'MyCrypt\__construct()'],['../classPagination.html#a2a1aecb8f526796b3d62e8278edc07c3',1,'Pagination\__construct()'],['../classQuerycache.html#a095c5d389db211932136b53f25f39685',1,'Querycache\__construct()'],['../classSupport__Group.html#a095c5d389db211932136b53f25f39685',1,'Support_Group\__construct()'],['../classTicket.html#a095c5d389db211932136b53f25f39685',1,'Ticket\__construct()'],['../classTicket__Category.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Category\__construct()'],['../classTicket__Content.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Content\__construct()'],['../classTicket__Info.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Info\__construct()'],['../classTicket__Log.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Log\__construct()'],['../classTicket__Queue__Handler.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Queue_Handler\__construct()'],['../classTicket__Reply.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Reply\__construct()'],['../classTicket__User.html#a095c5d389db211932136b53f25f39685',1,'Ticket_User\__construct()'],['../classWebUsers.html#a4e63742e531873e01e1e97dd7530539b',1,'WebUsers\__construct($UId=0)'],['../classWebUsers.html#a4e63742e531873e01e1e97dd7530539b',1,'WebUsers\__construct($UId=0)']]] -]; diff --git a/code/web/docs/ams/html/search/all_61.html b/code/web/docs/ams/html/search/all_61.html deleted file mode 100644 index a3164d553..000000000 --- a/code/web/docs/ams/html/search/all_61.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_61.js b/code/web/docs/ams/html/search/all_61.js deleted file mode 100644 index a077db22c..000000000 --- a/code/web/docs/ams/html/search/all_61.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['add_5fsgroup',['add_sgroup',['../add__sgroup_8php.html#a45490c056bdd114ef28893fc29286d2b',1,'add_sgroup.php']]], - ['add_5fsgroup_2ephp',['add_sgroup.php',['../add__sgroup_8php.html',1,'']]], - ['add_5fuser',['add_user',['../add__user_8php.html#a69e8de25de7560db0292bb474882a489',1,'add_user.php']]], - ['add_5fuser_2ephp',['add_user.php',['../add__user_8php.html',1,'']]], - ['add_5fuser_5fto_5fsgroup',['add_user_to_sgroup',['../add__user__to__sgroup_8php.html#a6ad0c5a1bfd563e11a107bf0023b6150',1,'add_user_to_sgroup.php']]], - ['add_5fuser_5fto_5fsgroup_2ephp',['add_user_to_sgroup.php',['../add__user__to__sgroup_8php.html',1,'']]], - ['addusertosupportgroup',['addUserToSupportGroup',['../classSupport__Group.html#a4616317379ffef08dbaeea2a9dbba02c',1,'Support_Group']]], - ['assigned',['Assigned',['../classAssigned.html',1,'']]], - ['assigned_2ephp',['assigned.php',['../assigned_8php.html',1,'']]], - ['assignticket',['assignTicket',['../classAssigned.html#a51c3d5b6f78de455619581fd3e591f17',1,'Assigned\assignTicket()'],['../classTicket.html#a51c3d5b6f78de455619581fd3e591f17',1,'Ticket\assignTicket()']]] -]; diff --git a/code/web/docs/ams/html/search/all_63.html b/code/web/docs/ams/html/search/all_63.html deleted file mode 100644 index 56b5ad1e9..000000000 --- a/code/web/docs/ams/html/search/all_63.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_63.js b/code/web/docs/ams/html/search/all_63.js deleted file mode 100644 index c54f2f697..000000000 --- a/code/web/docs/ams/html/search/all_63.js +++ /dev/null @@ -1,51 +0,0 @@ -var searchData= -[ - ['change_5finfo',['change_info',['../change__info_8php.html#a1bbc74a7da07012d55b0b45726534265',1,'change_info.php']]], - ['change_5finfo_2ephp',['change_info.php',['../change__info_8php.html',1,'']]], - ['change_5fmail',['change_mail',['../change__mail_8php.html#a03d0bca67a96c8744bd74623e128ab83',1,'change_mail.php']]], - ['change_5fmail_2ephp',['change_mail.php',['../change__mail_8php.html',1,'']]], - ['change_5fpassword',['change_password',['../change__password_8php.html#a888360ab43db15eba1d5cc3623d4100f',1,'change_password.php']]], - ['change_5fpassword_2ephp',['change_password.php',['../change__password_8php.html',1,'']]], - ['change_5fpermission',['change_permission',['../classTicket__User.html#a78d4d6de74b1ee26cb9192f36e022416',1,'Ticket_User\change_permission()'],['../change__permission_8php.html#a9ad639fafd67bdc579cf3170cd0d26e7',1,'change_permission(): change_permission.php']]], - ['change_5fpermission_2ephp',['change_permission.php',['../change__permission_8php.html',1,'']]], - ['change_5freceivemail',['change_receivemail',['../change__receivemail_8php.html#a22ae748f60d7b4200dce30c94a52c421',1,'change_receivemail.php']]], - ['change_5freceivemail_2ephp',['change_receivemail.php',['../change__receivemail_8php.html',1,'']]], - ['check_5fchange_5fpassword',['check_change_password',['../classUsers.html#a9c78408d50465957eeb8068810315a8e',1,'Users']]], - ['check_5fif_5fgame_5fclient',['check_if_game_client',['../classHelpers.html#a4e3e5309a66456d81a1effdabcc9cd79',1,'Helpers']]], - ['check_5flogin_5fingame',['check_login_ingame',['../classHelpers.html#abd01528a1145831a4fc98eae7ffaca36',1,'Helpers']]], - ['check_5fmethods',['check_methods',['../classMyCrypt.html#ad72fefc790b0bb1ac6edc252427b0970',1,'MyCrypt']]], - ['check_5fregister',['check_Register',['../classUsers.html#a740de04dc3aa7cf3bed959540ffab8f8',1,'Users']]], - ['checkemail',['checkEmail',['../classUsers.html#a76646237ab053cdde386c06aa5437d8a',1,'Users']]], - ['checkemailexists',['checkEmailExists',['../classUsers.html#a37275e677004927b6b1a30e16c5b5b38',1,'Users\checkEmailExists()'],['../classWebUsers.html#a37275e677004927b6b1a30e16c5b5b38',1,'WebUsers\checkEmailExists($email)'],['../classWebUsers.html#a37275e677004927b6b1a30e16c5b5b38',1,'WebUsers\checkEmailExists($email)']]], - ['checkloginmatch',['checkLoginMatch',['../classUsers.html#af0b98012abb190cf4617999f008de27e',1,'Users\checkLoginMatch()'],['../classWebUsers.html#a11894eb69bb2f172baf5186e8f92246d',1,'WebUsers\checkLoginMatch($username, $password)'],['../classWebUsers.html#a11894eb69bb2f172baf5186e8f92246d',1,'WebUsers\checkLoginMatch($username, $password)']]], - ['checkpassword',['checkPassword',['../classUsers.html#a4cb5e34b56fb6de0ec318fb59e90838f',1,'Users']]], - ['checkuser',['checkUser',['../classUsers.html#adfffce17947a9f72d68838db250c9ab8',1,'Users']]], - ['checkusernameexists',['checkUserNameExists',['../classUsers.html#ac3a8cb9a038f6aef0bd98be091274122',1,'Users\checkUserNameExists()'],['../classWebUsers.html#ac3a8cb9a038f6aef0bd98be091274122',1,'WebUsers\checkUserNameExists($username)'],['../classWebUsers.html#ac3a8cb9a038f6aef0bd98be091274122',1,'WebUsers\checkUserNameExists($username)']]], - ['config_2ephp',['config.php',['../www_2config_8php.html',1,'']]], - ['config_2ephp',['config.php',['../drupal__module_2ryzommanage_2config_8php.html',1,'']]], - ['confirmpassword',['confirmPassword',['../classUsers.html#a2f5349025bed3874f08d80652cab2fe0',1,'Users']]], - ['constr_5fexternid',['constr_ExternId',['../classTicket__User.html#a4e5c577ed0a9da4b1c56397912f02ba0',1,'Ticket_User']]], - ['constr_5fsgroupid',['constr_SGroupId',['../classSupport__Group.html#a873beb80bd0b5d572704cdb6d2ec34eb',1,'Support_Group']]], - ['constr_5ftcategoryid',['constr_TCategoryId',['../classTicket__Category.html#a332d2dd59b46fc933a3c9a1b2967803a',1,'Ticket_Category']]], - ['constr_5ftcontentid',['constr_TContentId',['../classTicket__Content.html#aa28ad9a063c1914ff75d19afd25c707f',1,'Ticket_Content']]], - ['constr_5ftlogid',['constr_TLogId',['../classTicket__Log.html#a001ec13f64bb026b1c8a3b3bd02ee22b',1,'Ticket_Log']]], - ['constr_5ftreplyid',['constr_TReplyId',['../classTicket__Reply.html#a4b4493d28e8518a87667d285c49e5e24',1,'Ticket_Reply']]], - ['constr_5ftuserid',['constr_TUserId',['../classTicket__User.html#a10939bce9b667f26d3827993b4e3df1d',1,'Ticket_User']]], - ['create',['create',['../classAssigned.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Assigned\create()'],['../classForwarded.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Forwarded\create()'],['../classIn__Support__Group.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'In_Support_Group\create()'],['../classSupport__Group.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Support_Group\create()'],['../classTicket.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket\create()'],['../classTicket__Content.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket_Content\create()'],['../classTicket__Info.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket_Info\create()'],['../classTicket__Reply.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket_Reply\create()']]], - ['create_5ffolders',['create_folders',['../classHelpers.html#add8ef9ce82106c505f6f04c2a8e3b2b4',1,'Helpers']]], - ['create_5fticket',['create_Ticket',['../classTicket.html#a81b3285033bc3c9e89adfa8da34d61de',1,'Ticket\create_Ticket()'],['../create__ticket_8php.html#a65bcbfccf737c72927d15c06783cd9f4',1,'create_ticket(): create_ticket.php']]], - ['create_5fticket_2ephp',['create_ticket.php',['../create__ticket_8php.html',1,'']]], - ['create_5fticket_5finfo',['create_Ticket_Info',['../classTicket__Info.html#aaa4e26c92338b70e874135af9c02bba9',1,'Ticket_Info']]], - ['createlogentry',['createLogEntry',['../classTicket__Log.html#a345a2da9c23780c7e6aef7134baa1749',1,'Ticket_Log']]], - ['createpermissions',['createPermissions',['../classUsers.html#aeac9f32fd53c97c92e5c774e154399df',1,'Users']]], - ['createqueue',['createQueue',['../classTicket__Queue.html#af077496b6071af47c19a873bf025c1f3',1,'Ticket_Queue\createQueue()'],['../classTicket__Queue__Handler.html#af077496b6071af47c19a873bf025c1f3',1,'Ticket_Queue_Handler\createQueue()']]], - ['createreply',['createReply',['../classTicket.html#af6568341f5052034440f79c0e74707a3',1,'Ticket\createReply()'],['../classTicket__Reply.html#aa6fa056fff4ddafc3eabf3ed72143e1b',1,'Ticket_Reply\createReply()']]], - ['createsupportgroup',['createSupportGroup',['../classSupport__Group.html#a31ee7c68c0ffb77438bb9ff095962568',1,'Support_Group']]], - ['createticket',['createticket',['../createticket_8php.html#aa8253d883a3ba14c6449a13ed2bb9c8f',1,'createticket.php']]], - ['createticket_2ephp',['createticket.php',['../createticket_8php.html',1,'']]], - ['createticketcategory',['createTicketCategory',['../classTicket__Category.html#a506fc7f32de9547e91a5dbb68c391907',1,'Ticket_Category']]], - ['createticketuser',['createTicketUser',['../classTicket__User.html#a37c416f7d3723874f3ac49c7f9f5a21c',1,'Ticket_User']]], - ['createuser',['createUser',['../classUsers.html#ac93aebf1960fb12975b120a2c394a8af',1,'Users']]], - ['createwebuser',['createWebuser',['../classWebUsers.html#a0cb7168a6b8358106512804ff28cea17',1,'WebUsers\createWebuser($name, $pass, $mail)'],['../classWebUsers.html#a0cb7168a6b8358106512804ff28cea17',1,'WebUsers\createWebuser($name, $pass, $mail)']]], - ['cron',['cron',['../classMail__Handler.html#a1b65890aa4eb8c0c6129c3e787a53405',1,'Mail_Handler']]] -]; diff --git a/code/web/docs/ams/html/search/all_64.html b/code/web/docs/ams/html/search/all_64.html deleted file mode 100644 index b53ff083e..000000000 --- a/code/web/docs/ams/html/search/all_64.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_64.js b/code/web/docs/ams/html/search/all_64.js deleted file mode 100644 index a897983e6..000000000 --- a/code/web/docs/ams/html/search/all_64.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['dashboard',['dashboard',['../dashboard_8php.html#a54d0c80ff20df9df6439bb87608c375a',1,'dashboard.php']]], - ['dashboard_2ephp',['dashboard.php',['../dashboard_8php.html',1,'']]], - ['dblayer',['DBLayer',['../classDBLayer.html',1,'']]], - ['dblayer_2ephp',['dblayer.php',['../dblayer_8php.html',1,'']]], - ['decode_5futf8',['decode_utf8',['../classMail__Handler.html#a6fc5947eaa45b0724f8720b374481275',1,'Mail_Handler']]], - ['decrypt',['decrypt',['../classMyCrypt.html#aed69cdc691e1155856c905ee1c08d9b7',1,'MyCrypt']]], - ['delete',['delete',['../classAssigned.html#a13bdffdd926f26b825ea57066334ff01',1,'Assigned\delete()'],['../classForwarded.html#a13bdffdd926f26b825ea57066334ff01',1,'Forwarded\delete()'],['../classIn__Support__Group.html#a13bdffdd926f26b825ea57066334ff01',1,'In_Support_Group\delete()'],['../classSupport__Group.html#a13bdffdd926f26b825ea57066334ff01',1,'Support_Group\delete()']]], - ['deletesupportgroup',['deleteSupportGroup',['../classSupport__Group.html#ab4a7d3ba86333a058027c7d58b9137f1',1,'Support_Group']]], - ['deleteuserofsupportgroup',['deleteUserOfSupportGroup',['../classSupport__Group.html#ad2d1a010903640e39545085b93b9a4f1',1,'Support_Group']]] -]; diff --git a/code/web/docs/ams/html/search/all_65.html b/code/web/docs/ams/html/search/all_65.html deleted file mode 100644 index 66cc83487..000000000 --- a/code/web/docs/ams/html/search/all_65.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_65.js b/code/web/docs/ams/html/search/all_65.js deleted file mode 100644 index 537250038..000000000 --- a/code/web/docs/ams/html/search/all_65.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['encrypt',['encrypt',['../classMyCrypt.html#a07bcc8ef1d23370470ecb5ae8fc07dfa',1,'MyCrypt']]], - ['error',['error',['../error_8php.html#a43b8d30b879d4f09ceb059b02af2bc02',1,'error.php']]], - ['error_2ephp',['error.php',['../error_8php.html',1,'']]], - ['execute',['execute',['../classDBLayer.html#a9a0e3ecb193fecd94263eda79c54bcc4',1,'DBLayer']]], - ['executereturnid',['executeReturnId',['../classDBLayer.html#a9a8137347ec2d551de3ec54cfb3bdb1a',1,'DBLayer']]], - ['executewithoutparams',['executeWithoutParams',['../classDBLayer.html#a33552c5325c469ac1aa0d049d2312468',1,'DBLayer']]] -]; diff --git a/code/web/docs/ams/html/search/all_66.html b/code/web/docs/ams/html/search/all_66.html deleted file mode 100644 index 3d1f8b35e..000000000 --- a/code/web/docs/ams/html/search/all_66.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_66.js b/code/web/docs/ams/html/search/all_66.js deleted file mode 100644 index 9959a693e..000000000 --- a/code/web/docs/ams/html/search/all_66.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['forwarded',['Forwarded',['../classForwarded.html',1,'']]], - ['forwarded_2ephp',['forwarded.php',['../forwarded_8php.html',1,'']]], - ['forwardticket',['forwardTicket',['../classForwarded.html#aa6f01e425a0f845ce55c2d90aeb11db0',1,'Forwarded\forwardTicket()'],['../classTicket.html#a3fdc6def6a0feaf4c2458811b8c75050',1,'Ticket\forwardTicket()']]] -]; diff --git a/code/web/docs/ams/html/search/all_67.html b/code/web/docs/ams/html/search/all_67.html deleted file mode 100644 index 41a459ae7..000000000 --- a/code/web/docs/ams/html/search/all_67.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_67.js b/code/web/docs/ams/html/search/all_67.js deleted file mode 100644 index d55d29ded..000000000 --- a/code/web/docs/ams/html/search/all_67.js +++ /dev/null @@ -1,108 +0,0 @@ -var searchData= -[ - ['generatesalt',['generateSALT',['../classUsers.html#afb7603ac9556c1069fbf1c0062251203',1,'Users']]], - ['get_5femail_5fby_5fuser_5fid',['get_email_by_user_id',['../classTicket__User.html#a7274bc305ccce731091c68d1607cb6e9',1,'Ticket_User']]], - ['get_5fid_5ffrom_5femail',['get_id_from_email',['../classTicket__User.html#a7feeb7a909bf6733de21300d0ea0e1bd',1,'Ticket_User']]], - ['get_5fid_5ffrom_5fusername',['get_id_from_username',['../classTicket__User.html#a0bcfa281f41b948eb42dd18992724543',1,'Ticket_User']]], - ['get_5fmime_5ftype',['get_mime_type',['../classMail__Handler.html#a719c5051ef00fbb0d7c7ce2c78e3b4e1',1,'Mail_Handler']]], - ['get_5fpart',['get_part',['../classMail__Handler.html#ab3a5e8f69692826c6dae96f873859642',1,'Mail_Handler']]], - ['get_5fticket_5fid_5ffrom_5fsubject',['get_ticket_id_from_subject',['../classMail__Handler.html#a8604569b1e012ea3b1fe466018f75ce2',1,'Mail_Handler']]], - ['get_5fusername_5ffrom_5fid',['get_username_from_id',['../classTicket__User.html#a266ff1e60e08dcd8c7e70f22f5a33e93',1,'Ticket_User']]], - ['getaction',['getAction',['../classTicket__Log.html#a189a4abe5faf11f4320d5d3f1d3d1715',1,'Ticket_Log']]], - ['getactiontextarray',['getActionTextArray',['../classTicket__Log.html#ac760071c0ce36337c16d8146fcb3bade',1,'Ticket_Log']]], - ['getallcategories',['getAllCategories',['../classTicket__Category.html#a1e4b8ecfd737337e35976126b521499f',1,'Ticket_Category']]], - ['getalllogs',['getAllLogs',['../classTicket__Log.html#aeaf1c995cc807afe241f6e7bdc684921',1,'Ticket_Log']]], - ['getallsupportgroups',['getAllSupportGroups',['../classSupport__Group.html#ad3fc18cb894f789d19a768ea63d9b673',1,'Support_Group']]], - ['getallusersofsupportgroup',['getAllUsersOfSupportGroup',['../classSupport__Group.html#a7f1662394a31e2a05e9863def178df12',1,'Support_Group']]], - ['getallusersquery',['getAllUsersQuery',['../classWebUsers.html#a2f8e928ed02e462b40e909965250fb7d',1,'WebUsers\getAllUsersQuery()'],['../classWebUsers.html#a2f8e928ed02e462b40e909965250fb7d',1,'WebUsers\getAllUsersQuery()']]], - ['getamountofrows',['getAmountOfRows',['../classPagination.html#ae43f78382809e3cd2aaa3c455cb0b2b4',1,'Pagination']]], - ['getargument',['getArgument',['../classTicket__Log.html#a88ec9370bcbdb60301f89e401c9e64e1',1,'Ticket_Log']]], - ['getassigned',['getAssigned',['../classTicket.html#a8234a4e23319778d234b3957f8b5d06c',1,'Ticket']]], - ['getauthor',['getAuthor',['../classTicket.html#a5286e30390ae3e1b274940286493dd24',1,'Ticket\getAuthor()'],['../classTicket__Log.html#a5286e30390ae3e1b274940286493dd24',1,'Ticket_Log\getAuthor()'],['../classTicket__Reply.html#a5286e30390ae3e1b274940286493dd24',1,'Ticket_Reply\getAuthor()']]], - ['getcategoryname',['getCategoryName',['../classTicket.html#a689e9d131777e7f1219ee0d65b088cb3',1,'Ticket']]], - ['getclient_5fversion',['getClient_Version',['../classTicket__Info.html#a5a9884f9f9b63d4a6ed8c6112704277d',1,'Ticket_Info']]], - ['getconnect_5fstate',['getConnect_State',['../classTicket__Info.html#a51a5247b7c82f60479ccdcfa33041c27',1,'Ticket_Info']]], - ['getcontent',['getContent',['../classTicket__Content.html#a58e43f09a06ce4e29b192c4e17ce7915',1,'Ticket_Content\getContent()'],['../classTicket__Reply.html#a58e43f09a06ce4e29b192c4e17ce7915',1,'Ticket_Reply\getContent()']]], - ['getcountryarray',['getCountryArray',['../drupal__module_2ryzommanage_2inc_2settings_8php.html#a9342547984d3c9a5ece41572951f8edf',1,'getCountryArray(): settings.php'],['../www_2html_2inc_2settings_8php.html#a9342547984d3c9a5ece41572951f8edf',1,'getCountryArray(): settings.php']]], - ['getcpu_5fmask',['getCPU_Mask',['../classTicket__Info.html#ae85e54574e6e0b17cd33b8c49255d228',1,'Ticket_Info']]], - ['getcpuid',['getCPUId',['../classTicket__Info.html#aba21caccb000efb673b8b66ca70a36c7',1,'Ticket_Info']]], - ['getcurrent',['getCurrent',['../classPagination.html#ad926899d7cac34a3f1a90e552d8eb27d',1,'Pagination']]], - ['getdb',['getDb',['../classQuerycache.html#aceb656ee5135578ab3a9947252caa772',1,'Querycache']]], - ['getelements',['getElements',['../classPagination.html#a97a3a3e912139aa222a7ca13fdb27d33',1,'Pagination']]], - ['getemail',['getEmail',['../classWebUsers.html#a02a01849f28e2535e888ae4ec87b20f2',1,'WebUsers\getEmail()'],['../classWebUsers.html#a02a01849f28e2535e888ae4ec87b20f2',1,'WebUsers\getEmail()']]], - ['getentireticket',['getEntireTicket',['../classTicket.html#a00572e06f01ae1cadb5949f1b45e8f04',1,'Ticket']]], - ['getexternid',['getExternId',['../classTicket__User.html#ace230deb485c9f115f7fea4ce92442a3',1,'Ticket_User']]], - ['getforwardedgroupid',['getForwardedGroupId',['../classTicket.html#aedbfa4efd5aaa96ac713817d12156f7e',1,'Ticket']]], - ['getforwardedgroupname',['getForwardedGroupName',['../classTicket.html#a34e17d1cc053a7b86ce2b58a3a347c7e',1,'Ticket']]], - ['getgroup',['getGroup',['../classForwarded.html#a4f44e7bc9de772c21b4304d11e87bf16',1,'Forwarded\getGroup()'],['../classIn__Support__Group.html#a4f44e7bc9de772c21b4304d11e87bf16',1,'In_Support_Group\getGroup()'],['../classSupport__Group.html#af6697615443145a2981e62aa741c3afa',1,'Support_Group\getGroup()']]], - ['getgroupemail',['getGroupEmail',['../classSupport__Group.html#a9d0f36a53db49c1f57e3cab8a61a7d90',1,'Support_Group']]], - ['getgroups',['getGroups',['../classSupport__Group.html#a562142b89699a1063ea9769030250365',1,'Support_Group']]], - ['gethidden',['getHidden',['../classTicket__Reply.html#a1d032efbce2b4edb7c269a1e13562f40',1,'Ticket_Reply']]], - ['getht',['getHT',['../classTicket__Info.html#a90d3c0edc1e767875c7fb98880886e73',1,'Ticket_Info']]], - ['getid',['getId',['../classWebUsers.html#a585ef354b38d0fad9d92f45e183b639f',1,'WebUsers\getId($username)'],['../classWebUsers.html#a585ef354b38d0fad9d92f45e183b639f',1,'WebUsers\getId($username)']]], - ['getidfromemail',['getIdFromEmail',['../classWebUsers.html#aee8d6b322defc5dfe8e47f382becca62',1,'WebUsers\getIdFromEmail($email)'],['../classWebUsers.html#aee8d6b322defc5dfe8e47f382becca62',1,'WebUsers\getIdFromEmail($email)']]], - ['getimap_5fmailserver',['getIMAP_MailServer',['../classSupport__Group.html#a30d67354e52f95489b93923440ff0661',1,'Support_Group']]], - ['getimap_5fpassword',['getIMAP_Password',['../classSupport__Group.html#a4983db184794db8f05ce93f5ba11ba7e',1,'Support_Group']]], - ['getimap_5fusername',['getIMAP_Username',['../classSupport__Group.html#a0ace9f66f2541d29e060cb7728030e93',1,'Support_Group']]], - ['getinfo',['getInfo',['../classWebUsers.html#a164026f74736817927e1cacd282a2e28',1,'WebUsers\getInfo()'],['../classWebUsers.html#a164026f74736817927e1cacd282a2e28',1,'WebUsers\getInfo()']]], - ['getlanguage',['getLanguage',['../classWebUsers.html#afcef2403c4111bc44ef0530f1e493909',1,'WebUsers\getLanguage()'],['../classWebUsers.html#afcef2403c4111bc44ef0530f1e493909',1,'WebUsers\getLanguage()']]], - ['getlast',['getLast',['../classPagination.html#a9316ede6960667d832997c8e20223623',1,'Pagination']]], - ['getlatestreply',['getLatestReply',['../classTicket.html#a3a4ce7e9c445dd245b3370304d0afd92',1,'Ticket']]], - ['getlinks',['getLinks',['../classPagination.html#aeecf550e63b55ecd5d737ecc46e07d3a',1,'Pagination']]], - ['getlocal_5faddress',['getLocal_Address',['../classTicket__Info.html#a49b4c851eff2f3d06531a39baa8423f5',1,'Ticket_Info']]], - ['getlogsofticket',['getLogsOfTicket',['../classTicket__Log.html#a37ad4d95b0bb2d5a6dfc2dd7c3744292',1,'Ticket_Log']]], - ['getmemory',['getMemory',['../classTicket__Info.html#a144248575cd034a40315155a9b48ff87',1,'Ticket_Info']]], - ['getmodsandadmins',['getModsAndAdmins',['../classTicket__User.html#a71099747902fb7e064ec1d4128ea4576',1,'Ticket_User']]], - ['getname',['getName',['../classSupport__Group.html#a3d0963e68bb313b163a73f2803c64600',1,'Support_Group\getName()'],['../classTicket__Category.html#a3d0963e68bb313b163a73f2803c64600',1,'Ticket_Category\getName()']]], - ['getnel3d',['getNel3D',['../classTicket__Info.html#abe3ae528bfd5495720c3adeff59fe11e',1,'Ticket_Info']]], - ['getnewestticket',['getNewestTicket',['../classTicket__Queue__Handler.html#ab5a79318a0c771083f03400093b3b2ec',1,'Ticket_Queue_Handler']]], - ['getnroftickets',['getNrOfTickets',['../classTicket__Queue__Handler.html#ada8f87ed8466c5e0477fa20359c3c8ad',1,'Ticket_Queue_Handler']]], - ['getnrofticketsassignedwaiting',['getNrOfTicketsAssignedWaiting',['../classTicket__Queue__Handler.html#a0d3daaaf5c79188eb62bb3adda11fa2a',1,'Ticket_Queue_Handler']]], - ['getnrofticketstodo',['getNrOfTicketsToDo',['../classTicket__Queue__Handler.html#ae8d1a2a66991583c05c173147e8dc657',1,'Ticket_Queue_Handler']]], - ['getos',['getOS',['../classTicket__Info.html#a9a1b88474ad97701d67a752d0c4d65c5',1,'Ticket_Info']]], - ['getpagination',['getPagination',['../classTicket__Queue__Handler.html#ab45a102a508e9727b108e8f24486c464',1,'Ticket_Queue_Handler']]], - ['getparams',['getParams',['../classTicket__Queue.html#ae32cd7c32721b02d676bb63b4b1366db',1,'Ticket_Queue']]], - ['getpatch_5fversion',['getPatch_Version',['../classTicket__Info.html#a6e41e115b03a1f152bd2c28c77d5fbac',1,'Ticket_Info']]], - ['getpermission',['getPermission',['../classTicket__User.html#a478067ecf173884c2ee3e5b94e746200',1,'Ticket_User']]], - ['getpriority',['getPriority',['../classTicket.html#a1e7a3c168dcd0901a0d2669c67575b55',1,'Ticket']]], - ['getpriorityarray',['getPriorityArray',['../classTicket.html#a509625cccc0b41f4ab3a658df705b3dc',1,'Ticket']]], - ['getprioritytext',['getPriorityText',['../classTicket.html#ae07f7808a12f2789593722f3293bd105',1,'Ticket']]], - ['getprocessor',['getProcessor',['../classTicket__Info.html#a3ace868ad456ff61f545cb44ee01c562',1,'Ticket_Info']]], - ['getquery',['getQuery',['../classQuerycache.html#a55f162785567258fe5138af282e588c2',1,'Querycache\getQuery()'],['../classTicket__Log.html#a55f162785567258fe5138af282e588c2',1,'Ticket_Log\getQuery()'],['../classTicket__Queue.html#a55f162785567258fe5138af282e588c2',1,'Ticket_Queue\getQuery()']]], - ['getqueue',['getQueue',['../classTicket.html#aa7a8055e5ee1eb792f29443ddb79c4d3',1,'Ticket']]], - ['getreceivemail',['getReceiveMail',['../classWebUsers.html#ae4680f622bd8d571530615fb616d37e7',1,'WebUsers\getReceiveMail()'],['../classWebUsers.html#ae4680f622bd8d571530615fb616d37e7',1,'WebUsers\getReceiveMail()']]], - ['getrepliesofticket',['getRepliesOfTicket',['../classTicket__Reply.html#a7e80a6437bb6ee90be42a32f3a82fe76',1,'Ticket_Reply']]], - ['getserver_5ftick',['getServer_Tick',['../classTicket__Info.html#a5a5799e4e54d3fa4858716b4464710c0',1,'Ticket_Info']]], - ['getsgroupid',['getSGroupId',['../classSupport__Group.html#a77d0961efe9609ebb268f8672e71bba4',1,'Support_Group']]], - ['getsgroupofticket',['getSGroupOfTicket',['../classForwarded.html#a4de002d45322cf62ce493f49933d33bd',1,'Forwarded']]], - ['getshardid',['getShardId',['../classTicket__Info.html#a36306b5367015050fb516fcaaff8351f',1,'Ticket_Info']]], - ['getsid',['getSID',['../classQuerycache.html#a5bac91964d19751986cccad6fad28dda',1,'Querycache']]], - ['getstatus',['getStatus',['../classTicket.html#a9d21636071f529e2154051d3ea6e5921',1,'Ticket']]], - ['getstatusarray',['getStatusArray',['../classTicket.html#aa728c6a1f8ddd7030acbf5a4ca913b50',1,'Ticket']]], - ['getstatustext',['getStatusText',['../classTicket.html#aab26af198dc3a59295747084b85435ff',1,'Ticket']]], - ['gettag',['getTag',['../classSupport__Group.html#ab86ba36154b20e6bbfa3ba705f12f9d6',1,'Support_Group']]], - ['gettcategoryid',['getTCategoryId',['../classTicket__Category.html#acb530a119e5e52230a92ece95cc7ec82',1,'Ticket_Category']]], - ['gettcontentid',['getTContentId',['../classTicket__Content.html#a9245dceab917ad08e5244c9395b347ae',1,'Ticket_Content']]], - ['getticket',['getTicket',['../classAssigned.html#a42ddf34a72af750b7013fa309b67e46c',1,'Assigned\getTicket()'],['../classForwarded.html#a42ddf34a72af750b7013fa309b67e46c',1,'Forwarded\getTicket()'],['../classTicket__Info.html#a42ddf34a72af750b7013fa309b67e46c',1,'Ticket_Info\getTicket()'],['../classTicket__Log.html#a42ddf34a72af750b7013fa309b67e46c',1,'Ticket_Log\getTicket()'],['../classTicket__Reply.html#a42ddf34a72af750b7013fa309b67e46c',1,'Ticket_Reply\getTicket()']]], - ['getticket_5fcategory',['getTicket_Category',['../classTicket.html#addff2fc457fe07664f4eb39efcea45f9',1,'Ticket']]], - ['gettickets',['getTickets',['../classTicket__Queue__Handler.html#a45e8c11ba9485041fa92c7c470a8f9f9',1,'Ticket_Queue_Handler']]], - ['getticketsof',['getTicketsOf',['../classTicket.html#aa426904463cd0eb50d9b2f4becdd242f',1,'Ticket']]], - ['gettid',['getTId',['../classTicket.html#aa7af74696d9898008992c494cec136dd',1,'Ticket']]], - ['gettimestamp',['getTimestamp',['../classTicket.html#a92aa1d82129ec8cd803d64c28efcb30f',1,'Ticket\getTimestamp()'],['../classTicket__Log.html#a92aa1d82129ec8cd803d64c28efcb30f',1,'Ticket_Log\getTimestamp()'],['../classTicket__Reply.html#a92aa1d82129ec8cd803d64c28efcb30f',1,'Ticket_Reply\getTimestamp()']]], - ['gettinfoid',['getTInfoId',['../classTicket__Info.html#ad7c7ccc1926763c252d32d1fee5a7f69',1,'Ticket_Info']]], - ['gettitle',['getTitle',['../classTicket.html#a95e859a4588a39a1824b717378a84c29',1,'Ticket']]], - ['gettlogid',['getTLogId',['../classTicket__Log.html#ab174d340ee116d8cc3aa377003421fc5',1,'Ticket_Log']]], - ['gettreplyid',['getTReplyId',['../classTicket__Reply.html#ade0c35755c1a1af8fa4c9bae8b4c51f1',1,'Ticket_Reply']]], - ['gettuserid',['getTUserId',['../classTicket__User.html#a4a31c27c61f9794200b647bf810461f5',1,'Ticket_User']]], - ['gettype',['getType',['../classQuerycache.html#a830b5c75df72b32396701bc563fbe3c7',1,'Querycache']]], - ['getuid',['getUId',['../classWebUsers.html#aa36a98da4146d85e7813e99df7d97497',1,'WebUsers\getUId()'],['../classWebUsers.html#aa36a98da4146d85e7813e99df7d97497',1,'WebUsers\getUId()']]], - ['getuser',['getUser',['../classAssigned.html#ae81b7186fb97a7c6457edcc68c9aa2ef',1,'Assigned\getUser()'],['../classIn__Support__Group.html#ae81b7186fb97a7c6457edcc68c9aa2ef',1,'In_Support_Group\getUser()']]], - ['getuser_5fid',['getUser_Id',['../classTicket__Info.html#a9c2fe31c14609e2255773d5a4dd154d8',1,'Ticket_Info']]], - ['getuser_5fposition',['getUser_Position',['../classTicket__Info.html#a3f5a46d846543219d6321d2f8751d1f0',1,'Ticket_Info']]], - ['getuserassignedtoticket',['getUserAssignedToTicket',['../classAssigned.html#afcfb156712a9477a97423a49238d13c5',1,'Assigned']]], - ['getusername',['getUsername',['../classWebUsers.html#a81b37a3c9d639574e394f80c1138c75e',1,'WebUsers\getUsername()'],['../classWebUsers.html#a81b37a3c9d639574e394f80c1138c75e',1,'WebUsers\getUsername()']]], - ['getusers',['getUsers',['../classWebUsers.html#a0fc10b64683021b70c7eb95fb514c119',1,'WebUsers\getUsers()'],['../classWebUsers.html#a0fc10b64683021b70c7eb95fb514c119',1,'WebUsers\getUsers()']]], - ['getview_5fposition',['getView_Position',['../classTicket__Info.html#a525dbd26fc788c7c152f6c686a9a5d11',1,'Ticket_Info']]], - ['gui_5felements',['Gui_Elements',['../classGui__Elements.html',1,'']]], - ['gui_5felements_2ephp',['gui_elements.php',['../gui__elements_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_68.html b/code/web/docs/ams/html/search/all_68.html deleted file mode 100644 index 6df909782..000000000 --- a/code/web/docs/ams/html/search/all_68.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_68.js b/code/web/docs/ams/html/search/all_68.js deleted file mode 100644 index 551ff1628..000000000 --- a/code/web/docs/ams/html/search/all_68.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['handle_5flanguage',['handle_language',['../classHelpers.html#a334920d0652c160c6145d3bd7be31a22',1,'Helpers']]], - ['hashiv',['hashIV',['../classMyCrypt.html#a1bdf94a5906655bf0965338c9d17ab27',1,'MyCrypt']]], - ['hasinfo',['hasInfo',['../classTicket.html#afca07df3cc25a0e1a15d3f69bd6afa62',1,'Ticket']]], - ['helpers',['Helpers',['../classHelpers.html',1,'']]], - ['helpers_2ephp',['helpers.php',['../helpers_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_69.html b/code/web/docs/ams/html/search/all_69.html deleted file mode 100644 index 1a00b554d..000000000 --- a/code/web/docs/ams/html/search/all_69.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_69.js b/code/web/docs/ams/html/search/all_69.js deleted file mode 100644 index a0e19a9ec..000000000 --- a/code/web/docs/ams/html/search/all_69.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['in_5fsupport_5fgroup',['In_Support_Group',['../classIn__Support__Group.html',1,'']]], - ['in_5fsupport_5fgroup_2ephp',['in_support_group.php',['../in__support__group_8php.html',1,'']]], - ['incoming_5fmail_5fhandler',['incoming_mail_handler',['../classMail__Handler.html#a2896dabadb8e435de7ba7bbb258f8a96',1,'Mail_Handler']]], - ['index_2ephp',['index.php',['../index_8php.html',1,'']]], - ['info_2ephp',['info.php',['../info_8php.html',1,'']]], - ['install_2ephp',['install.php',['../install_8php.html',1,'']]], - ['isadmin',['isAdmin',['../classTicket__User.html#ae8a7d91474cde916fced2127fab426d2',1,'Ticket_User']]], - ['isassigned',['isAssigned',['../classAssigned.html#ade127364a5e5635077119b7217b6059c',1,'Assigned']]], - ['isforwarded',['isForwarded',['../classForwarded.html#ac1fa2045188edf04b07c523e1c6f68a0',1,'Forwarded']]], - ['isloggedin',['isLoggedIn',['../classWebUsers.html#a33bdd79e5da367ebddd4cfbdbbfc7cff',1,'WebUsers\isLoggedIn()'],['../classWebUsers.html#a33bdd79e5da367ebddd4cfbdbbfc7cff',1,'WebUsers\isLoggedIn()']]], - ['ismod',['isMod',['../classTicket__User.html#a8d88cdbf205bf7d24be03157d25bb7d8',1,'Ticket_User']]] -]; diff --git a/code/web/docs/ams/html/search/all_6c.html b/code/web/docs/ams/html/search/all_6c.html deleted file mode 100644 index f6383cc22..000000000 --- a/code/web/docs/ams/html/search/all_6c.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_6c.js b/code/web/docs/ams/html/search/all_6c.js deleted file mode 100644 index d76ada768..000000000 --- a/code/web/docs/ams/html/search/all_6c.js +++ /dev/null @@ -1,28 +0,0 @@ -var searchData= -[ - ['libinclude_2ephp',['libinclude.php',['../libinclude_8php.html',1,'']]], - ['load',['load',['../classAssigned.html#a689011be59ec3d216ebe6852f07ab37f',1,'Assigned\load()'],['../classForwarded.html#a689011be59ec3d216ebe6852f07ab37f',1,'Forwarded\load()']]], - ['load_5fwith_5fsgroupid',['load_With_SGroupId',['../classSupport__Group.html#a6beae177f45da42a57b100b5481f49bf',1,'Support_Group']]], - ['load_5fwith_5fsid',['load_With_SID',['../classQuerycache.html#ae960510ccb242704233c38d787242f53',1,'Querycache']]], - ['load_5fwith_5ftcategoryid',['load_With_TCategoryId',['../classTicket__Category.html#ab3a70940917530d91a39536a6d45a21d',1,'Ticket_Category']]], - ['load_5fwith_5ftcontentid',['load_With_TContentId',['../classTicket__Content.html#ad8b1226537a055701bcc3fe4af87257b',1,'Ticket_Content']]], - ['load_5fwith_5fticket',['load_With_Ticket',['../classTicket__Info.html#afcf4006cdd19b05919b5df34d3345ad2',1,'Ticket_Info']]], - ['load_5fwith_5ftid',['load_With_TId',['../classTicket.html#ac17d9e1158fb77707da1f6cd3e425d54',1,'Ticket']]], - ['load_5fwith_5ftinfoid',['load_With_TInfoId',['../classTicket__Info.html#a1681685f76483b7944bf6848b29caa4a',1,'Ticket_Info']]], - ['load_5fwith_5ftlogid',['load_With_TLogId',['../classTicket__Log.html#a76e8e991002c7e408f7b182556cdeade',1,'Ticket_Log']]], - ['load_5fwith_5ftreplyid',['load_With_TReplyId',['../classTicket__Reply.html#ac9a387c63aad0b81a8161d2515f697d9',1,'Ticket_Reply']]], - ['load_5fwith_5ftuserid',['load_With_TUserId',['../classTicket__User.html#af43df1ba39e073e4b3a0120e6e4d3140',1,'Ticket_User']]], - ['loadallclosedtickets',['loadAllClosedTickets',['../classTicket__Queue.html#af2a9b20ac9dc0e1992f717abbb418be7',1,'Ticket_Queue']]], - ['loadallnotassignedtickets',['loadAllNotAssignedTickets',['../classTicket__Queue.html#a771627a0bd387cd666474a6ef0d5eaaf',1,'Ticket_Queue']]], - ['loadallopentickets',['loadAllOpenTickets',['../classTicket__Queue.html#a3a1cf8a88a3604e093f7d276050f1c49',1,'Ticket_Queue']]], - ['loadalltickets',['loadAllTickets',['../classTicket__Queue.html#a80542bde30a8a589f1d088422cb7719b',1,'Ticket_Queue']]], - ['loadassignedandwaiting',['loadAssignedandWaiting',['../classTicket__Queue.html#a348c76f7ae32437b7e91b57671d6f33d',1,'Ticket_Queue']]], - ['loadtemplate',['loadTemplate',['../classHelpers.html#a78997ab39ba0237dc7a5441b58601211',1,'Helpers']]], - ['loadtodotickets',['loadToDoTickets',['../classTicket__Queue.html#ad88848edf9a9132eb0cfcac904a8459f',1,'Ticket_Queue']]], - ['login',['login',['../func_2login_8php.html#aa311da27ba5706f5710cea7706c8eae1',1,'login(): login.php'],['../inc_2login_8php.html#aa311da27ba5706f5710cea7706c8eae1',1,'login(): login.php']]], - ['login_2ephp',['login.php',['../func_2login_8php.html',1,'']]], - ['login_2ephp',['login.php',['../inc_2login_8php.html',1,'']]], - ['logout',['logout',['../drupal__module_2ryzommanage_2inc_2logout_8php.html#a082405d89acd6835c3a7c7a08a7adbab',1,'logout(): logout.php'],['../www_2html_2inc_2logout_8php.html#a082405d89acd6835c3a7c7a08a7adbab',1,'logout(): logout.php']]], - ['logout_2ephp',['logout.php',['../www_2html_2inc_2logout_8php.html',1,'']]], - ['logout_2ephp',['logout.php',['../drupal__module_2ryzommanage_2inc_2logout_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_6d.html b/code/web/docs/ams/html/search/all_6d.html deleted file mode 100644 index 2e27d4d64..000000000 --- a/code/web/docs/ams/html/search/all_6d.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_6d.js b/code/web/docs/ams/html/search/all_6d.js deleted file mode 100644 index fb08a60ab..000000000 --- a/code/web/docs/ams/html/search/all_6d.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['mail_5fcron_2ephp',['mail_cron.php',['../mail__cron_8php.html',1,'']]], - ['mail_5ffork',['mail_fork',['../classMail__Handler.html#ac6f9bcfab65cc93fdd4723284fff6b7a',1,'Mail_Handler']]], - ['mail_5fhandler',['Mail_Handler',['../classMail__Handler.html',1,'']]], - ['mail_5fhandler_2ephp',['mail_handler.php',['../mail__handler_8php.html',1,'']]], - ['make_5ftable',['make_table',['../classGui__Elements.html#a639930203d81ff01840ac90a51cbbfe7',1,'Gui_Elements']]], - ['make_5ftable_5fwith_5fkey_5fis_5fid',['make_table_with_key_is_id',['../classGui__Elements.html#ae3c8c19fce4cdd7d87d4ae759ab06f24',1,'Gui_Elements']]], - ['modify_5femail_5fof_5fsgroup',['modify_email_of_sgroup',['../modify__email__of__sgroup_8php.html#acb8c4a7ad3e36662d1d22ba56a98d0ab',1,'modify_email_of_sgroup.php']]], - ['modify_5femail_5fof_5fsgroup_2ephp',['modify_email_of_sgroup.php',['../modify__email__of__sgroup_8php.html',1,'']]], - ['mycrypt',['MyCrypt',['../classMyCrypt.html',1,'']]], - ['mycrypt_2ephp',['mycrypt.php',['../mycrypt_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_6e.html b/code/web/docs/ams/html/search/all_6e.html deleted file mode 100644 index 1f92ee5b6..000000000 --- a/code/web/docs/ams/html/search/all_6e.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_6e.js b/code/web/docs/ams/html/search/all_6e.js deleted file mode 100644 index 0831ed960..000000000 --- a/code/web/docs/ams/html/search/all_6e.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['new_5fmessage_5fid',['new_message_id',['../classMail__Handler.html#a667ca75b6c659157d855c3d19978a436',1,'Mail_Handler']]] -]; diff --git a/code/web/docs/ams/html/search/all_6f.html b/code/web/docs/ams/html/search/all_6f.html deleted file mode 100644 index 61827e82e..000000000 --- a/code/web/docs/ams/html/search/all_6f.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_6f.js b/code/web/docs/ams/html/search/all_6f.js deleted file mode 100644 index f8a8b3016..000000000 --- a/code/web/docs/ams/html/search/all_6f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['outputtime',['outputTime',['../classHelpers.html#a4370c805a72fe32c03b178b03ad2e393',1,'Helpers']]] -]; diff --git a/code/web/docs/ams/html/search/all_70.html b/code/web/docs/ams/html/search/all_70.html deleted file mode 100644 index 0340151b6..000000000 --- a/code/web/docs/ams/html/search/all_70.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_70.js b/code/web/docs/ams/html/search/all_70.js deleted file mode 100644 index e09f3f7d0..000000000 --- a/code/web/docs/ams/html/search/all_70.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['pagination',['Pagination',['../classPagination.html',1,'']]], - ['pagination_2ephp',['pagination.php',['../pagination_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_71.html b/code/web/docs/ams/html/search/all_71.html deleted file mode 100644 index b4dc1e6ee..000000000 --- a/code/web/docs/ams/html/search/all_71.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_71.js b/code/web/docs/ams/html/search/all_71.js deleted file mode 100644 index 8b0805dd8..000000000 --- a/code/web/docs/ams/html/search/all_71.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['querycache',['Querycache',['../classQuerycache.html',1,'']]], - ['querycache_2ephp',['querycache.php',['../querycache_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_72.html b/code/web/docs/ams/html/search/all_72.html deleted file mode 100644 index 0ab18d65f..000000000 --- a/code/web/docs/ams/html/search/all_72.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_72.js b/code/web/docs/ams/html/search/all_72.js deleted file mode 100644 index ece0a9538..000000000 --- a/code/web/docs/ams/html/search/all_72.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['register',['register',['../register_8php.html#acc294a6cc8e69743746820e3d15e3f78',1,'register.php']]], - ['register_2ephp',['register.php',['../register_8php.html',1,'']]], - ['reply_5fon_5fticket',['reply_on_ticket',['../reply__on__ticket_8php.html#a79f0a445c77e8e1e59eb9e72cbf39dba',1,'reply_on_ticket.php']]], - ['reply_5fon_5fticket_2ephp',['reply_on_ticket.php',['../reply__on__ticket_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_73.html b/code/web/docs/ams/html/search/all_73.html deleted file mode 100644 index 1ec8f174d..000000000 --- a/code/web/docs/ams/html/search/all_73.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_73.js b/code/web/docs/ams/html/search/all_73.js deleted file mode 100644 index aee17ff0a..000000000 --- a/code/web/docs/ams/html/search/all_73.js +++ /dev/null @@ -1,90 +0,0 @@ -var searchData= -[ - ['send_5fmail',['send_mail',['../classMail__Handler.html#a50308ad0711aee080dacef7e3f574699',1,'Mail_Handler']]], - ['send_5fticketing_5fmail',['send_ticketing_mail',['../classMail__Handler.html#abe649044c8b8bd8eb05787a401865e6d',1,'Mail_Handler']]], - ['set',['set',['../classAssigned.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Assigned\set()'],['../classForwarded.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Forwarded\set()'],['../classIn__Support__Group.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'In_Support_Group\set()'],['../classQuerycache.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Querycache\set()'],['../classSupport__Group.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Support_Group\set()'],['../classTicket.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket\set()'],['../classTicket__Info.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_Info\set()'],['../classTicket__Log.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_Log\set()'],['../classTicket__Reply.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_Reply\set()'],['../classTicket__User.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_User\set()'],['../classWebUsers.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'WebUsers\set($values)'],['../classWebUsers.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'WebUsers\set($values)']]], - ['setamsemail',['setAmsEmail',['../classUsers.html#ad1cbb1fe6ee72f46dc385bec6e274363',1,'Users']]], - ['setamspassword',['setAmsPassword',['../classUsers.html#ab89812058b0a71baf492af4652d67501',1,'Users']]], - ['setauthor',['setAuthor',['../classTicket.html#a0c8f116992af7c8737c70119dae00d45',1,'Ticket\setAuthor()'],['../classTicket__Log.html#a0c8f116992af7c8737c70119dae00d45',1,'Ticket_Log\setAuthor()'],['../classTicket__Reply.html#a0c8f116992af7c8737c70119dae00d45',1,'Ticket_Reply\setAuthor()']]], - ['setclient_5fversion',['setClient_Version',['../classTicket__Info.html#af06e75f73ae40120cc371f6ddd9ab49c',1,'Ticket_Info']]], - ['setconnect_5fstate',['setConnect_State',['../classTicket__Info.html#a4de823fc3a051d3aac3d526badef313c',1,'Ticket_Info']]], - ['setcontent',['setContent',['../classTicket__Content.html#a76e94f05c5cc0044993a35492097df4d',1,'Ticket_Content\setContent()'],['../classTicket__Reply.html#a76e94f05c5cc0044993a35492097df4d',1,'Ticket_Reply\setContent()']]], - ['setcpu_5fmask',['setCPU_Mask',['../classTicket__Info.html#a5f19999ab39a2ac0b7d6f2ced9223ae6',1,'Ticket_Info']]], - ['setcpuid',['setCPUId',['../classTicket__Info.html#af1f04d3bdcbaf28b246eb94a484f397c',1,'Ticket_Info']]], - ['setdb',['setDb',['../classQuerycache.html#afa9c249972ca269a2b1a399ed2faf9b4',1,'Querycache']]], - ['setemail',['setEmail',['../classWebUsers.html#a0cd214763f395718db166fbd598689f4',1,'WebUsers\setEmail($user, $mail)'],['../classWebUsers.html#a0cd214763f395718db166fbd598689f4',1,'WebUsers\setEmail($user, $mail)']]], - ['setexternid',['setExternId',['../classTicket__User.html#ad38846bb954052a5293ae2d26cf810d2',1,'Ticket_User']]], - ['setgroup',['setGroup',['../classForwarded.html#a3116db27c2e2f33cbb10a9488db34da3',1,'Forwarded\setGroup()'],['../classIn__Support__Group.html#a3116db27c2e2f33cbb10a9488db34da3',1,'In_Support_Group\setGroup()']]], - ['setgroupemail',['setGroupEmail',['../classSupport__Group.html#abbb0e975fd21a42439970ebb3eba5fea',1,'Support_Group']]], - ['sethidden',['setHidden',['../classTicket__Reply.html#a0b67f1016974c7b153b8944a94c88045',1,'Ticket_Reply']]], - ['setht',['setHT',['../classTicket__Info.html#a9ef93ff2fede4bd9b1cb8da2129dee20',1,'Ticket_Info']]], - ['setimap_5fmailserver',['setIMAP_MailServer',['../classSupport__Group.html#a71f266f2bba1fc4fb6df4cf083988938',1,'Support_Group']]], - ['setimap_5fpassword',['setIMAP_Password',['../classSupport__Group.html#ad6fcb63d4ae129567e8bea8786a75d87',1,'Support_Group']]], - ['setimap_5fusername',['setIMAP_Username',['../classSupport__Group.html#a6856519261b543f27bc001616c2881eb',1,'Support_Group']]], - ['setlanguage',['setLanguage',['../classWebUsers.html#a5ab1bd5f0959a3c33a46c176d9412c80',1,'WebUsers\setLanguage($user, $language)'],['../classWebUsers.html#a5ab1bd5f0959a3c33a46c176d9412c80',1,'WebUsers\setLanguage($user, $language)']]], - ['setlocal_5faddress',['setLocal_Address',['../classTicket__Info.html#a144b42f39cea6b24624c6c547df6aeeb',1,'Ticket_Info']]], - ['setmemory',['setMemory',['../classTicket__Info.html#a6f6f6925a18d24d2ecd5166a325be609',1,'Ticket_Info']]], - ['setname',['setName',['../classSupport__Group.html#aa3dcc220094e19fef1f918a3a917dba7',1,'Support_Group\setName()'],['../classTicket__Category.html#aa3dcc220094e19fef1f918a3a917dba7',1,'Ticket_Category\setName()']]], - ['setnel3d',['setNel3D',['../classTicket__Info.html#a77fbf6da57aa02e075be0905dc6cdd48',1,'Ticket_Info']]], - ['setos',['setOS',['../classTicket__Info.html#aacb7cbb0f04959ae64ba1c3aac36df54',1,'Ticket_Info']]], - ['setpassword',['setPassword',['../classWebUsers.html#a91506e5f74c9884045e865ef7c314fed',1,'WebUsers\setPassword($user, $pass)'],['../classWebUsers.html#a91506e5f74c9884045e865ef7c314fed',1,'WebUsers\setPassword($user, $pass)']]], - ['setpatch_5fversion',['setPatch_Version',['../classTicket__Info.html#a1d0f55ed3b50a72bf882591474d2ff72',1,'Ticket_Info']]], - ['setpermission',['setPermission',['../classTicket__User.html#adf7c497fb026ee6e05f6ece91f541839',1,'Ticket_User']]], - ['setpriority',['setPriority',['../classTicket.html#a3080d0b46978a8f82022bbb6e5fc0c1c',1,'Ticket']]], - ['setprocessor',['setProcessor',['../classTicket__Info.html#a8b66f72ec1928b89058cd0a9b4dd8c11',1,'Ticket_Info']]], - ['setquery',['setQuery',['../classQuerycache.html#adbd6075ec5d3bd84122e52b0134ed8e7',1,'Querycache\setQuery()'],['../classTicket__Log.html#adbd6075ec5d3bd84122e52b0134ed8e7',1,'Ticket_Log\setQuery()']]], - ['setqueue',['setQueue',['../classTicket.html#a1595d3fe708fe4f453922054407a1c03',1,'Ticket']]], - ['setreceivemail',['setReceiveMail',['../classWebUsers.html#aa0f439ff7a5cd6377a557f545fbeb45c',1,'WebUsers\setReceiveMail($user, $receivemail)'],['../classWebUsers.html#aa0f439ff7a5cd6377a557f545fbeb45c',1,'WebUsers\setReceiveMail($user, $receivemail)']]], - ['setserver_5ftick',['setServer_Tick',['../classTicket__Info.html#ab6ff52082590b43d90f8f37fd5b31086',1,'Ticket_Info']]], - ['setsgroupid',['setSGroupId',['../classSupport__Group.html#aa49cb914be98fc354a45584c6f2b8be1',1,'Support_Group']]], - ['setshardid',['setShardId',['../classTicket__Info.html#a4026e593012113e253b80e3bbd5f6c13',1,'Ticket_Info']]], - ['setsid',['setSID',['../classQuerycache.html#a2f536a1f8c8e463eb0346ac375f2a24d',1,'Querycache']]], - ['setstatus',['setStatus',['../classTicket.html#a66605893c4afc9855f1e0cf8ccccac09',1,'Ticket']]], - ['settag',['setTag',['../classSupport__Group.html#a4de944a53debc51843530fe96296f220',1,'Support_Group']]], - ['settcategoryid',['setTCategoryId',['../classTicket__Category.html#a39a64c3f7ab33ba3f5a67c31647e889f',1,'Ticket_Category']]], - ['settcontentid',['setTContentId',['../classTicket__Content.html#ae07366727208e060372063e96591c5d4',1,'Ticket_Content']]], - ['setticket',['setTicket',['../classAssigned.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Assigned\setTicket()'],['../classForwarded.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Forwarded\setTicket()'],['../classTicket__Info.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Ticket_Info\setTicket()'],['../classTicket__Log.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Ticket_Log\setTicket()'],['../classTicket__Reply.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Ticket_Reply\setTicket()']]], - ['setticket_5fcategory',['setTicket_Category',['../classTicket.html#a4e38b2a263b5a934b76cd77f026308c3',1,'Ticket']]], - ['settid',['setTId',['../classTicket.html#a8c72dc7b09645b390043f5a4664e7c7f',1,'Ticket']]], - ['settimestamp',['setTimestamp',['../classTicket.html#a4e05995d5cc78cdc9ffe72d864811ac6',1,'Ticket\setTimestamp()'],['../classTicket__Log.html#aa8903a0020a17d745524806f4e751f4c',1,'Ticket_Log\setTimestamp()'],['../classTicket__Reply.html#aa8903a0020a17d745524806f4e751f4c',1,'Ticket_Reply\setTimestamp()']]], - ['settinfoid',['setTInfoId',['../classTicket__Info.html#a5e98fba0b50f74645a2fdaa8f4d0c1ea',1,'Ticket_Info']]], - ['settings',['settings',['../drupal__module_2ryzommanage_2inc_2settings_8php.html#ad7354383714c6ae99d6ee1bfb95ab49f',1,'settings(): settings.php'],['../www_2html_2inc_2settings_8php.html#ad7354383714c6ae99d6ee1bfb95ab49f',1,'settings(): settings.php']]], - ['settings_2ephp',['settings.php',['../drupal__module_2ryzommanage_2inc_2settings_8php.html',1,'']]], - ['settings_2ephp',['settings.php',['../www_2html_2inc_2settings_8php.html',1,'']]], - ['settitle',['setTitle',['../classTicket.html#ac765da6fa83b06ea39c0edc9b3e6c6c0',1,'Ticket']]], - ['settlogid',['setTLogId',['../classTicket__Log.html#aca708aae8c7320e11d9e08936ec74dec',1,'Ticket_Log']]], - ['settreplyid',['setTReplyId',['../classTicket__Reply.html#a7b91b481de87eb1515212d62b298cb94',1,'Ticket_Reply']]], - ['settuserid',['setTUserId',['../classTicket__User.html#a0faf8954e86346e7b566870b1a3c0a4a',1,'Ticket_User']]], - ['settype',['setType',['../classQuerycache.html#a0f29af8d4b9fdd8959739727a33acee5',1,'Querycache']]], - ['setuser',['setUser',['../classAssigned.html#af560ca7f201e2f871384a150e8ffd9aa',1,'Assigned\setUser()'],['../classIn__Support__Group.html#af560ca7f201e2f871384a150e8ffd9aa',1,'In_Support_Group\setUser()']]], - ['setuser_5fid',['setUser_Id',['../classTicket__Info.html#aec77405f6e096f2c0493383724f33034',1,'Ticket_Info']]], - ['setuser_5fposition',['setUser_Position',['../classTicket__Info.html#a41cfb7786d3252b2ec7aec42d77add9f',1,'Ticket_Info']]], - ['setview_5fposition',['setView_Position',['../classTicket__Info.html#a58912ec04451ab232d88bd78b6a8c2ea',1,'Ticket_Info']]], - ['sgroup_5flist',['sgroup_list',['../sgroup__list_8php.html#ab3af46486585b0ddced2de27a5d7a000',1,'sgroup_list.php']]], - ['sgroup_5flist_2ephp',['sgroup_list.php',['../sgroup__list_8php.html',1,'']]], - ['show_5fqueue',['show_queue',['../show__queue_8php.html#a48695b07fef725dbf0b4f261b1fe1547',1,'show_queue.php']]], - ['show_5fqueue_2ephp',['show_queue.php',['../show__queue_8php.html',1,'']]], - ['show_5freply',['show_reply',['../show__reply_8php.html#ad8e51d3b3a4bf996fb07199a08ca9a3e',1,'show_reply.php']]], - ['show_5freply_2ephp',['show_reply.php',['../show__reply_8php.html',1,'']]], - ['show_5fsgroup',['show_sgroup',['../show__sgroup_8php.html#a118719426cb30ed43e39c2af24cfea2d',1,'show_sgroup.php']]], - ['show_5fsgroup_2ephp',['show_sgroup.php',['../show__sgroup_8php.html',1,'']]], - ['show_5fticket',['show_ticket',['../show__ticket_8php.html#a1249d6cae97f6949ce3a7754fa1b7016',1,'show_ticket.php']]], - ['show_5fticket_2ephp',['show_ticket.php',['../show__ticket_8php.html',1,'']]], - ['show_5fticket_5finfo',['show_ticket_info',['../show__ticket__info_8php.html#a579a5c89b55189455a8237369a78f0d8',1,'show_ticket_info.php']]], - ['show_5fticket_5finfo_2ephp',['show_ticket_info.php',['../show__ticket__info_8php.html',1,'']]], - ['show_5fticket_5flog',['show_ticket_log',['../show__ticket__log_8php.html#ab37298a659581e85338601f2259ead49',1,'show_ticket_log.php']]], - ['show_5fticket_5flog_2ephp',['show_ticket_log.php',['../show__ticket__log_8php.html',1,'']]], - ['show_5fuser',['show_user',['../drupal__module_2ryzommanage_2inc_2show__user_8php.html#ac755ca62882d4caca41c7822793b8812',1,'show_user(): show_user.php'],['../www_2html_2inc_2show__user_8php.html#ac755ca62882d4caca41c7822793b8812',1,'show_user(): show_user.php']]], - ['show_5fuser_2ephp',['show_user.php',['../drupal__module_2ryzommanage_2inc_2show__user_8php.html',1,'']]], - ['show_5fuser_2ephp',['show_user.php',['../www_2html_2inc_2show__user_8php.html',1,'']]], - ['support_5fgroup',['Support_Group',['../classSupport__Group.html',1,'']]], - ['support_5fgroup_2ephp',['support_group.php',['../support__group_8php.html',1,'']]], - ['supportgroup_5fentrynotexists',['supportGroup_EntryNotExists',['../classSupport__Group.html#aa557f337f57a3bb530f1f04df78c0f1e',1,'Support_Group']]], - ['supportgroup_5fexists',['supportGroup_Exists',['../classSupport__Group.html#ac235662693dcc9c2be51e6f1a2c426b6',1,'Support_Group']]], - ['sync',['Sync',['../classSync.html',1,'']]], - ['sync_2ephp',['sync.php',['../sync_8php.html',1,'']]], - ['sync_5fcron_2ephp',['sync_cron.php',['../sync__cron_8php.html',1,'']]], - ['syncdata',['syncdata',['../classSync.html#ad1211cc677b7aafcc4ebcc25f3cacdda',1,'Sync']]], - ['syncing',['syncing',['../syncing_8php.html#a8d4df31796dab54a8d0c9c9ec32cf7f9',1,'syncing.php']]], - ['syncing_2ephp',['syncing.php',['../syncing_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_74.html b/code/web/docs/ams/html/search/all_74.html deleted file mode 100644 index fdc6589d0..000000000 --- a/code/web/docs/ams/html/search/all_74.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_74.js b/code/web/docs/ams/html/search/all_74.js deleted file mode 100644 index 4c4c97839..000000000 --- a/code/web/docs/ams/html/search/all_74.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['ticket',['Ticket',['../classTicket.html',1,'']]], - ['ticket_2ephp',['ticket.php',['../ticket_8php.html',1,'']]], - ['ticket_5fcategory',['Ticket_Category',['../classTicket__Category.html',1,'']]], - ['ticket_5fcategory_2ephp',['ticket_category.php',['../ticket__category_8php.html',1,'']]], - ['ticket_5fcontent',['Ticket_Content',['../classTicket__Content.html',1,'']]], - ['ticket_5fcontent_2ephp',['ticket_content.php',['../ticket__content_8php.html',1,'']]], - ['ticket_5finfo',['Ticket_Info',['../classTicket__Info.html',1,'']]], - ['ticket_5finfo_2ephp',['ticket_info.php',['../ticket__info_8php.html',1,'']]], - ['ticket_5flog',['Ticket_Log',['../classTicket__Log.html',1,'']]], - ['ticket_5flog_2ephp',['ticket_log.php',['../ticket__log_8php.html',1,'']]], - ['ticket_5fqueue',['Ticket_Queue',['../classTicket__Queue.html',1,'']]], - ['ticket_5fqueue_2ephp',['ticket_queue.php',['../ticket__queue_8php.html',1,'']]], - ['ticket_5fqueue_5fhandler',['Ticket_Queue_Handler',['../classTicket__Queue__Handler.html',1,'']]], - ['ticket_5fqueue_5fhandler_2ephp',['ticket_queue_handler.php',['../ticket__queue__handler_8php.html',1,'']]], - ['ticket_5freply',['Ticket_Reply',['../classTicket__Reply.html',1,'']]], - ['ticket_5freply_2ephp',['ticket_reply.php',['../ticket__reply_8php.html',1,'']]], - ['ticket_5fuser',['Ticket_User',['../classTicket__User.html',1,'']]], - ['ticket_5fuser_2ephp',['ticket_user.php',['../ticket__user_8php.html',1,'']]], - ['ticketexists',['ticketExists',['../classTicket.html#a091d7ec56d4dc4bf980b81e8069b76d0',1,'Ticket']]], - ['tickethasinfo',['TicketHasInfo',['../classTicket__Info.html#a361217eb1d85e13aa534dabfbbd64a86',1,'Ticket_Info']]], - ['time_5felapsed_5fstring',['time_elapsed_string',['../classGui__Elements.html#a04d9bc70e65231a470426f0a94b7583d',1,'Gui_Elements']]] -]; diff --git a/code/web/docs/ams/html/search/all_75.html b/code/web/docs/ams/html/search/all_75.html deleted file mode 100644 index ab8455ed5..000000000 --- a/code/web/docs/ams/html/search/all_75.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_75.js b/code/web/docs/ams/html/search/all_75.js deleted file mode 100644 index ad5f4cb36..000000000 --- a/code/web/docs/ams/html/search/all_75.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['unassignticket',['unAssignTicket',['../classAssigned.html#a8263a9c223957bb558a2c16d4431ca29',1,'Assigned\unAssignTicket()'],['../classTicket.html#a8263a9c223957bb558a2c16d4431ca29',1,'Ticket\unAssignTicket()']]], - ['update',['update',['../classQuerycache.html#a842e4774e3b3601a005b995c02f7e883',1,'Querycache\update()'],['../classSupport__Group.html#a842e4774e3b3601a005b995c02f7e883',1,'Support_Group\update()'],['../classTicket.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket\update()'],['../classTicket__Category.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Category\update()'],['../classTicket__Content.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Content\update()'],['../classTicket__Log.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Log\update()'],['../classTicket__Reply.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Reply\update()'],['../classTicket__User.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_User\update()']]], - ['updateticketstatus',['updateTicketStatus',['../classTicket.html#a6da2625040e9f06c583e9303082c556f',1,'Ticket']]], - ['updateticketstatusandpriority',['updateTicketStatusAndPriority',['../classTicket.html#a64f08c8987c9eb00d4bfc9ef94e45326',1,'Ticket']]], - ['userexistsinsgroup',['userExistsInSGroup',['../classIn__Support__Group.html#a1a25afa24efc6c01ffd236f735281543',1,'In_Support_Group']]], - ['userlist',['userlist',['../userlist_8php.html#a55709a05f18e09358e2b02531eb859ad',1,'userlist.php']]], - ['userlist_2ephp',['userlist.php',['../userlist_8php.html',1,'']]], - ['users',['Users',['../classUsers.html',1,'']]], - ['users_2ephp',['users.php',['../users_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/all_76.html b/code/web/docs/ams/html/search/all_76.html deleted file mode 100644 index 0ff5edd34..000000000 --- a/code/web/docs/ams/html/search/all_76.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_76.js b/code/web/docs/ams/html/search/all_76.js deleted file mode 100644 index 1566125d3..000000000 --- a/code/web/docs/ams/html/search/all_76.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['validemail',['validEmail',['../classUsers.html#a73637e760498c5cea55074896ec982ac',1,'Users']]] -]; diff --git a/code/web/docs/ams/html/search/all_77.html b/code/web/docs/ams/html/search/all_77.html deleted file mode 100644 index 73323d316..000000000 --- a/code/web/docs/ams/html/search/all_77.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/all_77.js b/code/web/docs/ams/html/search/all_77.js deleted file mode 100644 index 5a36cb483..000000000 --- a/code/web/docs/ams/html/search/all_77.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['webusers',['WebUsers',['../classWebUsers.html',1,'']]], - ['webusers_2ephp',['webusers.php',['../drupal__module_2ryzommanage_2autoload_2webusers_8php.html',1,'']]], - ['webusers_2ephp',['webusers.php',['../www_2html_2autoload_2webusers_8php.html',1,'']]], - ['write_5fuser',['write_user',['../add__user_8php.html#a09df49f177966f5b08af71ec43760e0c',1,'add_user.php']]] -]; diff --git a/code/web/docs/ams/html/search/classes_61.html b/code/web/docs/ams/html/search/classes_61.html deleted file mode 100644 index 85e5d72a3..000000000 --- a/code/web/docs/ams/html/search/classes_61.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_61.js b/code/web/docs/ams/html/search/classes_61.js deleted file mode 100644 index 39d4914a1..000000000 --- a/code/web/docs/ams/html/search/classes_61.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['assigned',['Assigned',['../classAssigned.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_64.html b/code/web/docs/ams/html/search/classes_64.html deleted file mode 100644 index 590270830..000000000 --- a/code/web/docs/ams/html/search/classes_64.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_64.js b/code/web/docs/ams/html/search/classes_64.js deleted file mode 100644 index db9b214c1..000000000 --- a/code/web/docs/ams/html/search/classes_64.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['dblayer',['DBLayer',['../classDBLayer.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_66.html b/code/web/docs/ams/html/search/classes_66.html deleted file mode 100644 index 941988c65..000000000 --- a/code/web/docs/ams/html/search/classes_66.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_66.js b/code/web/docs/ams/html/search/classes_66.js deleted file mode 100644 index 518614d90..000000000 --- a/code/web/docs/ams/html/search/classes_66.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['forwarded',['Forwarded',['../classForwarded.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_67.html b/code/web/docs/ams/html/search/classes_67.html deleted file mode 100644 index 78b514df0..000000000 --- a/code/web/docs/ams/html/search/classes_67.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_67.js b/code/web/docs/ams/html/search/classes_67.js deleted file mode 100644 index e85658e41..000000000 --- a/code/web/docs/ams/html/search/classes_67.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['gui_5felements',['Gui_Elements',['../classGui__Elements.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_68.html b/code/web/docs/ams/html/search/classes_68.html deleted file mode 100644 index 475eeb738..000000000 --- a/code/web/docs/ams/html/search/classes_68.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_68.js b/code/web/docs/ams/html/search/classes_68.js deleted file mode 100644 index 9e86cb7a3..000000000 --- a/code/web/docs/ams/html/search/classes_68.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['helpers',['Helpers',['../classHelpers.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_69.html b/code/web/docs/ams/html/search/classes_69.html deleted file mode 100644 index 961dbea27..000000000 --- a/code/web/docs/ams/html/search/classes_69.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_69.js b/code/web/docs/ams/html/search/classes_69.js deleted file mode 100644 index 49e6133b0..000000000 --- a/code/web/docs/ams/html/search/classes_69.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['in_5fsupport_5fgroup',['In_Support_Group',['../classIn__Support__Group.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_6d.html b/code/web/docs/ams/html/search/classes_6d.html deleted file mode 100644 index abe6f0d1d..000000000 --- a/code/web/docs/ams/html/search/classes_6d.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_6d.js b/code/web/docs/ams/html/search/classes_6d.js deleted file mode 100644 index ae1e0f417..000000000 --- a/code/web/docs/ams/html/search/classes_6d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['mail_5fhandler',['Mail_Handler',['../classMail__Handler.html',1,'']]], - ['mycrypt',['MyCrypt',['../classMyCrypt.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_70.html b/code/web/docs/ams/html/search/classes_70.html deleted file mode 100644 index e4b520874..000000000 --- a/code/web/docs/ams/html/search/classes_70.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_70.js b/code/web/docs/ams/html/search/classes_70.js deleted file mode 100644 index 157d7c6b6..000000000 --- a/code/web/docs/ams/html/search/classes_70.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['pagination',['Pagination',['../classPagination.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_71.html b/code/web/docs/ams/html/search/classes_71.html deleted file mode 100644 index 80a4fbb83..000000000 --- a/code/web/docs/ams/html/search/classes_71.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_71.js b/code/web/docs/ams/html/search/classes_71.js deleted file mode 100644 index e2ca060ac..000000000 --- a/code/web/docs/ams/html/search/classes_71.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['querycache',['Querycache',['../classQuerycache.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_73.html b/code/web/docs/ams/html/search/classes_73.html deleted file mode 100644 index a1bf0b912..000000000 --- a/code/web/docs/ams/html/search/classes_73.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_73.js b/code/web/docs/ams/html/search/classes_73.js deleted file mode 100644 index 8941e45df..000000000 --- a/code/web/docs/ams/html/search/classes_73.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['support_5fgroup',['Support_Group',['../classSupport__Group.html',1,'']]], - ['sync',['Sync',['../classSync.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_74.html b/code/web/docs/ams/html/search/classes_74.html deleted file mode 100644 index f7f27cea7..000000000 --- a/code/web/docs/ams/html/search/classes_74.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_74.js b/code/web/docs/ams/html/search/classes_74.js deleted file mode 100644 index 90ec7727d..000000000 --- a/code/web/docs/ams/html/search/classes_74.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['ticket',['Ticket',['../classTicket.html',1,'']]], - ['ticket_5fcategory',['Ticket_Category',['../classTicket__Category.html',1,'']]], - ['ticket_5fcontent',['Ticket_Content',['../classTicket__Content.html',1,'']]], - ['ticket_5finfo',['Ticket_Info',['../classTicket__Info.html',1,'']]], - ['ticket_5flog',['Ticket_Log',['../classTicket__Log.html',1,'']]], - ['ticket_5fqueue',['Ticket_Queue',['../classTicket__Queue.html',1,'']]], - ['ticket_5fqueue_5fhandler',['Ticket_Queue_Handler',['../classTicket__Queue__Handler.html',1,'']]], - ['ticket_5freply',['Ticket_Reply',['../classTicket__Reply.html',1,'']]], - ['ticket_5fuser',['Ticket_User',['../classTicket__User.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_75.html b/code/web/docs/ams/html/search/classes_75.html deleted file mode 100644 index 807d7426e..000000000 --- a/code/web/docs/ams/html/search/classes_75.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_75.js b/code/web/docs/ams/html/search/classes_75.js deleted file mode 100644 index 432c5d270..000000000 --- a/code/web/docs/ams/html/search/classes_75.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['users',['Users',['../classUsers.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/classes_77.html b/code/web/docs/ams/html/search/classes_77.html deleted file mode 100644 index e3967e972..000000000 --- a/code/web/docs/ams/html/search/classes_77.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/classes_77.js b/code/web/docs/ams/html/search/classes_77.js deleted file mode 100644 index 0e579ee3d..000000000 --- a/code/web/docs/ams/html/search/classes_77.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['webusers',['WebUsers',['../classWebUsers.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/close.png b/code/web/docs/ams/html/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/code/web/docs/ams/html/search/files_61.html b/code/web/docs/ams/html/search/files_61.html deleted file mode 100644 index 5a8e45499..000000000 --- a/code/web/docs/ams/html/search/files_61.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_61.js b/code/web/docs/ams/html/search/files_61.js deleted file mode 100644 index db9b27c9e..000000000 --- a/code/web/docs/ams/html/search/files_61.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['add_5fsgroup_2ephp',['add_sgroup.php',['../add__sgroup_8php.html',1,'']]], - ['add_5fuser_2ephp',['add_user.php',['../add__user_8php.html',1,'']]], - ['add_5fuser_5fto_5fsgroup_2ephp',['add_user_to_sgroup.php',['../add__user__to__sgroup_8php.html',1,'']]], - ['assigned_2ephp',['assigned.php',['../assigned_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_63.html b/code/web/docs/ams/html/search/files_63.html deleted file mode 100644 index 6611a5b91..000000000 --- a/code/web/docs/ams/html/search/files_63.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_63.js b/code/web/docs/ams/html/search/files_63.js deleted file mode 100644 index 47c38c050..000000000 --- a/code/web/docs/ams/html/search/files_63.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['change_5finfo_2ephp',['change_info.php',['../change__info_8php.html',1,'']]], - ['change_5fmail_2ephp',['change_mail.php',['../change__mail_8php.html',1,'']]], - ['change_5fpassword_2ephp',['change_password.php',['../change__password_8php.html',1,'']]], - ['change_5fpermission_2ephp',['change_permission.php',['../change__permission_8php.html',1,'']]], - ['change_5freceivemail_2ephp',['change_receivemail.php',['../change__receivemail_8php.html',1,'']]], - ['config_2ephp',['config.php',['../www_2config_8php.html',1,'']]], - ['config_2ephp',['config.php',['../drupal__module_2ryzommanage_2config_8php.html',1,'']]], - ['create_5fticket_2ephp',['create_ticket.php',['../create__ticket_8php.html',1,'']]], - ['createticket_2ephp',['createticket.php',['../createticket_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_64.html b/code/web/docs/ams/html/search/files_64.html deleted file mode 100644 index 1a32bf882..000000000 --- a/code/web/docs/ams/html/search/files_64.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_64.js b/code/web/docs/ams/html/search/files_64.js deleted file mode 100644 index 8307e204b..000000000 --- a/code/web/docs/ams/html/search/files_64.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['dashboard_2ephp',['dashboard.php',['../dashboard_8php.html',1,'']]], - ['dblayer_2ephp',['dblayer.php',['../dblayer_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_65.html b/code/web/docs/ams/html/search/files_65.html deleted file mode 100644 index 1eadd1b02..000000000 --- a/code/web/docs/ams/html/search/files_65.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_65.js b/code/web/docs/ams/html/search/files_65.js deleted file mode 100644 index ec7451ee2..000000000 --- a/code/web/docs/ams/html/search/files_65.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['error_2ephp',['error.php',['../error_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_66.html b/code/web/docs/ams/html/search/files_66.html deleted file mode 100644 index c05640363..000000000 --- a/code/web/docs/ams/html/search/files_66.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_66.js b/code/web/docs/ams/html/search/files_66.js deleted file mode 100644 index ab77df41b..000000000 --- a/code/web/docs/ams/html/search/files_66.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['forwarded_2ephp',['forwarded.php',['../forwarded_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_67.html b/code/web/docs/ams/html/search/files_67.html deleted file mode 100644 index d5df283f3..000000000 --- a/code/web/docs/ams/html/search/files_67.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_67.js b/code/web/docs/ams/html/search/files_67.js deleted file mode 100644 index e6e52c243..000000000 --- a/code/web/docs/ams/html/search/files_67.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['gui_5felements_2ephp',['gui_elements.php',['../gui__elements_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_68.html b/code/web/docs/ams/html/search/files_68.html deleted file mode 100644 index 8ead5893f..000000000 --- a/code/web/docs/ams/html/search/files_68.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_68.js b/code/web/docs/ams/html/search/files_68.js deleted file mode 100644 index 05d1801f3..000000000 --- a/code/web/docs/ams/html/search/files_68.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['helpers_2ephp',['helpers.php',['../helpers_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_69.html b/code/web/docs/ams/html/search/files_69.html deleted file mode 100644 index 7fbd757cd..000000000 --- a/code/web/docs/ams/html/search/files_69.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_69.js b/code/web/docs/ams/html/search/files_69.js deleted file mode 100644 index 74065c1ec..000000000 --- a/code/web/docs/ams/html/search/files_69.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['in_5fsupport_5fgroup_2ephp',['in_support_group.php',['../in__support__group_8php.html',1,'']]], - ['index_2ephp',['index.php',['../index_8php.html',1,'']]], - ['info_2ephp',['info.php',['../info_8php.html',1,'']]], - ['install_2ephp',['install.php',['../install_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_6c.html b/code/web/docs/ams/html/search/files_6c.html deleted file mode 100644 index 642a54585..000000000 --- a/code/web/docs/ams/html/search/files_6c.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_6c.js b/code/web/docs/ams/html/search/files_6c.js deleted file mode 100644 index 3b8359fc2..000000000 --- a/code/web/docs/ams/html/search/files_6c.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['libinclude_2ephp',['libinclude.php',['../libinclude_8php.html',1,'']]], - ['login_2ephp',['login.php',['../inc_2login_8php.html',1,'']]], - ['login_2ephp',['login.php',['../func_2login_8php.html',1,'']]], - ['logout_2ephp',['logout.php',['../www_2html_2inc_2logout_8php.html',1,'']]], - ['logout_2ephp',['logout.php',['../drupal__module_2ryzommanage_2inc_2logout_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_6d.html b/code/web/docs/ams/html/search/files_6d.html deleted file mode 100644 index d9d93006b..000000000 --- a/code/web/docs/ams/html/search/files_6d.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_6d.js b/code/web/docs/ams/html/search/files_6d.js deleted file mode 100644 index b19770b9b..000000000 --- a/code/web/docs/ams/html/search/files_6d.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['mail_5fcron_2ephp',['mail_cron.php',['../mail__cron_8php.html',1,'']]], - ['mail_5fhandler_2ephp',['mail_handler.php',['../mail__handler_8php.html',1,'']]], - ['modify_5femail_5fof_5fsgroup_2ephp',['modify_email_of_sgroup.php',['../modify__email__of__sgroup_8php.html',1,'']]], - ['mycrypt_2ephp',['mycrypt.php',['../mycrypt_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_70.html b/code/web/docs/ams/html/search/files_70.html deleted file mode 100644 index abcae9a6f..000000000 --- a/code/web/docs/ams/html/search/files_70.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_70.js b/code/web/docs/ams/html/search/files_70.js deleted file mode 100644 index f1c0593fa..000000000 --- a/code/web/docs/ams/html/search/files_70.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['pagination_2ephp',['pagination.php',['../pagination_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_71.html b/code/web/docs/ams/html/search/files_71.html deleted file mode 100644 index bb4ccc7cc..000000000 --- a/code/web/docs/ams/html/search/files_71.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_71.js b/code/web/docs/ams/html/search/files_71.js deleted file mode 100644 index c2eeb72ca..000000000 --- a/code/web/docs/ams/html/search/files_71.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['querycache_2ephp',['querycache.php',['../querycache_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_72.html b/code/web/docs/ams/html/search/files_72.html deleted file mode 100644 index 609fb48fc..000000000 --- a/code/web/docs/ams/html/search/files_72.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_72.js b/code/web/docs/ams/html/search/files_72.js deleted file mode 100644 index 721d27957..000000000 --- a/code/web/docs/ams/html/search/files_72.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['register_2ephp',['register.php',['../register_8php.html',1,'']]], - ['reply_5fon_5fticket_2ephp',['reply_on_ticket.php',['../reply__on__ticket_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_73.html b/code/web/docs/ams/html/search/files_73.html deleted file mode 100644 index e0de9e6b5..000000000 --- a/code/web/docs/ams/html/search/files_73.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_73.js b/code/web/docs/ams/html/search/files_73.js deleted file mode 100644 index 2ce5655bb..000000000 --- a/code/web/docs/ams/html/search/files_73.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['settings_2ephp',['settings.php',['../drupal__module_2ryzommanage_2inc_2settings_8php.html',1,'']]], - ['settings_2ephp',['settings.php',['../www_2html_2inc_2settings_8php.html',1,'']]], - ['sgroup_5flist_2ephp',['sgroup_list.php',['../sgroup__list_8php.html',1,'']]], - ['show_5fqueue_2ephp',['show_queue.php',['../show__queue_8php.html',1,'']]], - ['show_5freply_2ephp',['show_reply.php',['../show__reply_8php.html',1,'']]], - ['show_5fsgroup_2ephp',['show_sgroup.php',['../show__sgroup_8php.html',1,'']]], - ['show_5fticket_2ephp',['show_ticket.php',['../show__ticket_8php.html',1,'']]], - ['show_5fticket_5finfo_2ephp',['show_ticket_info.php',['../show__ticket__info_8php.html',1,'']]], - ['show_5fticket_5flog_2ephp',['show_ticket_log.php',['../show__ticket__log_8php.html',1,'']]], - ['show_5fuser_2ephp',['show_user.php',['../www_2html_2inc_2show__user_8php.html',1,'']]], - ['show_5fuser_2ephp',['show_user.php',['../drupal__module_2ryzommanage_2inc_2show__user_8php.html',1,'']]], - ['support_5fgroup_2ephp',['support_group.php',['../support__group_8php.html',1,'']]], - ['sync_2ephp',['sync.php',['../sync_8php.html',1,'']]], - ['sync_5fcron_2ephp',['sync_cron.php',['../sync__cron_8php.html',1,'']]], - ['syncing_2ephp',['syncing.php',['../syncing_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_74.html b/code/web/docs/ams/html/search/files_74.html deleted file mode 100644 index 017b3fe9f..000000000 --- a/code/web/docs/ams/html/search/files_74.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_74.js b/code/web/docs/ams/html/search/files_74.js deleted file mode 100644 index 47b5068e4..000000000 --- a/code/web/docs/ams/html/search/files_74.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['ticket_2ephp',['ticket.php',['../ticket_8php.html',1,'']]], - ['ticket_5fcategory_2ephp',['ticket_category.php',['../ticket__category_8php.html',1,'']]], - ['ticket_5fcontent_2ephp',['ticket_content.php',['../ticket__content_8php.html',1,'']]], - ['ticket_5finfo_2ephp',['ticket_info.php',['../ticket__info_8php.html',1,'']]], - ['ticket_5flog_2ephp',['ticket_log.php',['../ticket__log_8php.html',1,'']]], - ['ticket_5fqueue_2ephp',['ticket_queue.php',['../ticket__queue_8php.html',1,'']]], - ['ticket_5fqueue_5fhandler_2ephp',['ticket_queue_handler.php',['../ticket__queue__handler_8php.html',1,'']]], - ['ticket_5freply_2ephp',['ticket_reply.php',['../ticket__reply_8php.html',1,'']]], - ['ticket_5fuser_2ephp',['ticket_user.php',['../ticket__user_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_75.html b/code/web/docs/ams/html/search/files_75.html deleted file mode 100644 index 8ea7b3d4b..000000000 --- a/code/web/docs/ams/html/search/files_75.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_75.js b/code/web/docs/ams/html/search/files_75.js deleted file mode 100644 index 2d05f2341..000000000 --- a/code/web/docs/ams/html/search/files_75.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['userlist_2ephp',['userlist.php',['../userlist_8php.html',1,'']]], - ['users_2ephp',['users.php',['../users_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/files_77.html b/code/web/docs/ams/html/search/files_77.html deleted file mode 100644 index 69f689782..000000000 --- a/code/web/docs/ams/html/search/files_77.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/files_77.js b/code/web/docs/ams/html/search/files_77.js deleted file mode 100644 index 5c7ec501b..000000000 --- a/code/web/docs/ams/html/search/files_77.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['webusers_2ephp',['webusers.php',['../drupal__module_2ryzommanage_2autoload_2webusers_8php.html',1,'']]], - ['webusers_2ephp',['webusers.php',['../www_2html_2autoload_2webusers_8php.html',1,'']]] -]; diff --git a/code/web/docs/ams/html/search/functions_5f.html b/code/web/docs/ams/html/search/functions_5f.html deleted file mode 100644 index cb54e927d..000000000 --- a/code/web/docs/ams/html/search/functions_5f.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_5f.js b/code/web/docs/ams/html/search/functions_5f.js deleted file mode 100644 index 844048eb7..000000000 --- a/code/web/docs/ams/html/search/functions_5f.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['_5f_5fautoload',['__autoload',['../libinclude_8php.html#a2ecfde85f554ea0b3fef0993aef304a9',1,'libinclude.php']]], - ['_5f_5fconstruct',['__construct',['../classAssigned.html#a095c5d389db211932136b53f25f39685',1,'Assigned\__construct()'],['../classDBLayer.html#a800f8efee13692788b13ee57c5960092',1,'DBLayer\__construct()'],['../classForwarded.html#a095c5d389db211932136b53f25f39685',1,'Forwarded\__construct()'],['../classIn__Support__Group.html#a095c5d389db211932136b53f25f39685',1,'In_Support_Group\__construct()'],['../classMyCrypt.html#af200cbfd49bfea2fecf5629ab2361033',1,'MyCrypt\__construct()'],['../classPagination.html#a2a1aecb8f526796b3d62e8278edc07c3',1,'Pagination\__construct()'],['../classQuerycache.html#a095c5d389db211932136b53f25f39685',1,'Querycache\__construct()'],['../classSupport__Group.html#a095c5d389db211932136b53f25f39685',1,'Support_Group\__construct()'],['../classTicket.html#a095c5d389db211932136b53f25f39685',1,'Ticket\__construct()'],['../classTicket__Category.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Category\__construct()'],['../classTicket__Content.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Content\__construct()'],['../classTicket__Info.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Info\__construct()'],['../classTicket__Log.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Log\__construct()'],['../classTicket__Queue__Handler.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Queue_Handler\__construct()'],['../classTicket__Reply.html#a095c5d389db211932136b53f25f39685',1,'Ticket_Reply\__construct()'],['../classTicket__User.html#a095c5d389db211932136b53f25f39685',1,'Ticket_User\__construct()'],['../classWebUsers.html#a4e63742e531873e01e1e97dd7530539b',1,'WebUsers\__construct($UId=0)'],['../classWebUsers.html#a4e63742e531873e01e1e97dd7530539b',1,'WebUsers\__construct($UId=0)']]] -]; diff --git a/code/web/docs/ams/html/search/functions_61.html b/code/web/docs/ams/html/search/functions_61.html deleted file mode 100644 index 7f395337e..000000000 --- a/code/web/docs/ams/html/search/functions_61.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_61.js b/code/web/docs/ams/html/search/functions_61.js deleted file mode 100644 index 8bc0ff34b..000000000 --- a/code/web/docs/ams/html/search/functions_61.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['add_5fsgroup',['add_sgroup',['../add__sgroup_8php.html#a45490c056bdd114ef28893fc29286d2b',1,'add_sgroup.php']]], - ['add_5fuser',['add_user',['../add__user_8php.html#a69e8de25de7560db0292bb474882a489',1,'add_user.php']]], - ['add_5fuser_5fto_5fsgroup',['add_user_to_sgroup',['../add__user__to__sgroup_8php.html#a6ad0c5a1bfd563e11a107bf0023b6150',1,'add_user_to_sgroup.php']]], - ['addusertosupportgroup',['addUserToSupportGroup',['../classSupport__Group.html#a4616317379ffef08dbaeea2a9dbba02c',1,'Support_Group']]], - ['assignticket',['assignTicket',['../classAssigned.html#a51c3d5b6f78de455619581fd3e591f17',1,'Assigned\assignTicket()'],['../classTicket.html#a51c3d5b6f78de455619581fd3e591f17',1,'Ticket\assignTicket()']]] -]; diff --git a/code/web/docs/ams/html/search/functions_63.html b/code/web/docs/ams/html/search/functions_63.html deleted file mode 100644 index 9ebe11d69..000000000 --- a/code/web/docs/ams/html/search/functions_63.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_63.js b/code/web/docs/ams/html/search/functions_63.js deleted file mode 100644 index dfdf9b93d..000000000 --- a/code/web/docs/ams/html/search/functions_63.js +++ /dev/null @@ -1,42 +0,0 @@ -var searchData= -[ - ['change_5finfo',['change_info',['../change__info_8php.html#a1bbc74a7da07012d55b0b45726534265',1,'change_info.php']]], - ['change_5fmail',['change_mail',['../change__mail_8php.html#a03d0bca67a96c8744bd74623e128ab83',1,'change_mail.php']]], - ['change_5fpassword',['change_password',['../change__password_8php.html#a888360ab43db15eba1d5cc3623d4100f',1,'change_password.php']]], - ['change_5fpermission',['change_permission',['../classTicket__User.html#a78d4d6de74b1ee26cb9192f36e022416',1,'Ticket_User\change_permission()'],['../change__permission_8php.html#a9ad639fafd67bdc579cf3170cd0d26e7',1,'change_permission(): change_permission.php']]], - ['change_5freceivemail',['change_receivemail',['../change__receivemail_8php.html#a22ae748f60d7b4200dce30c94a52c421',1,'change_receivemail.php']]], - ['check_5fchange_5fpassword',['check_change_password',['../classUsers.html#a9c78408d50465957eeb8068810315a8e',1,'Users']]], - ['check_5fif_5fgame_5fclient',['check_if_game_client',['../classHelpers.html#a4e3e5309a66456d81a1effdabcc9cd79',1,'Helpers']]], - ['check_5flogin_5fingame',['check_login_ingame',['../classHelpers.html#abd01528a1145831a4fc98eae7ffaca36',1,'Helpers']]], - ['check_5fmethods',['check_methods',['../classMyCrypt.html#ad72fefc790b0bb1ac6edc252427b0970',1,'MyCrypt']]], - ['check_5fregister',['check_Register',['../classUsers.html#a740de04dc3aa7cf3bed959540ffab8f8',1,'Users']]], - ['checkemail',['checkEmail',['../classUsers.html#a76646237ab053cdde386c06aa5437d8a',1,'Users']]], - ['checkemailexists',['checkEmailExists',['../classUsers.html#a37275e677004927b6b1a30e16c5b5b38',1,'Users\checkEmailExists()'],['../classWebUsers.html#a37275e677004927b6b1a30e16c5b5b38',1,'WebUsers\checkEmailExists($email)'],['../classWebUsers.html#a37275e677004927b6b1a30e16c5b5b38',1,'WebUsers\checkEmailExists($email)']]], - ['checkloginmatch',['checkLoginMatch',['../classUsers.html#af0b98012abb190cf4617999f008de27e',1,'Users\checkLoginMatch()'],['../classWebUsers.html#a11894eb69bb2f172baf5186e8f92246d',1,'WebUsers\checkLoginMatch($username, $password)'],['../classWebUsers.html#a11894eb69bb2f172baf5186e8f92246d',1,'WebUsers\checkLoginMatch($username, $password)']]], - ['checkpassword',['checkPassword',['../classUsers.html#a4cb5e34b56fb6de0ec318fb59e90838f',1,'Users']]], - ['checkuser',['checkUser',['../classUsers.html#adfffce17947a9f72d68838db250c9ab8',1,'Users']]], - ['checkusernameexists',['checkUserNameExists',['../classUsers.html#ac3a8cb9a038f6aef0bd98be091274122',1,'Users\checkUserNameExists()'],['../classWebUsers.html#ac3a8cb9a038f6aef0bd98be091274122',1,'WebUsers\checkUserNameExists($username)'],['../classWebUsers.html#ac3a8cb9a038f6aef0bd98be091274122',1,'WebUsers\checkUserNameExists($username)']]], - ['confirmpassword',['confirmPassword',['../classUsers.html#a2f5349025bed3874f08d80652cab2fe0',1,'Users']]], - ['constr_5fexternid',['constr_ExternId',['../classTicket__User.html#a4e5c577ed0a9da4b1c56397912f02ba0',1,'Ticket_User']]], - ['constr_5fsgroupid',['constr_SGroupId',['../classSupport__Group.html#a873beb80bd0b5d572704cdb6d2ec34eb',1,'Support_Group']]], - ['constr_5ftcategoryid',['constr_TCategoryId',['../classTicket__Category.html#a332d2dd59b46fc933a3c9a1b2967803a',1,'Ticket_Category']]], - ['constr_5ftcontentid',['constr_TContentId',['../classTicket__Content.html#aa28ad9a063c1914ff75d19afd25c707f',1,'Ticket_Content']]], - ['constr_5ftlogid',['constr_TLogId',['../classTicket__Log.html#a001ec13f64bb026b1c8a3b3bd02ee22b',1,'Ticket_Log']]], - ['constr_5ftreplyid',['constr_TReplyId',['../classTicket__Reply.html#a4b4493d28e8518a87667d285c49e5e24',1,'Ticket_Reply']]], - ['constr_5ftuserid',['constr_TUserId',['../classTicket__User.html#a10939bce9b667f26d3827993b4e3df1d',1,'Ticket_User']]], - ['create',['create',['../classAssigned.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Assigned\create()'],['../classForwarded.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Forwarded\create()'],['../classIn__Support__Group.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'In_Support_Group\create()'],['../classSupport__Group.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Support_Group\create()'],['../classTicket.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket\create()'],['../classTicket__Content.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket_Content\create()'],['../classTicket__Info.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket_Info\create()'],['../classTicket__Reply.html#a435e7d7525d4bcd0ed5e34a469f3adf6',1,'Ticket_Reply\create()']]], - ['create_5ffolders',['create_folders',['../classHelpers.html#add8ef9ce82106c505f6f04c2a8e3b2b4',1,'Helpers']]], - ['create_5fticket',['create_Ticket',['../classTicket.html#a81b3285033bc3c9e89adfa8da34d61de',1,'Ticket\create_Ticket()'],['../create__ticket_8php.html#a65bcbfccf737c72927d15c06783cd9f4',1,'create_ticket(): create_ticket.php']]], - ['create_5fticket_5finfo',['create_Ticket_Info',['../classTicket__Info.html#aaa4e26c92338b70e874135af9c02bba9',1,'Ticket_Info']]], - ['createlogentry',['createLogEntry',['../classTicket__Log.html#a345a2da9c23780c7e6aef7134baa1749',1,'Ticket_Log']]], - ['createpermissions',['createPermissions',['../classUsers.html#aeac9f32fd53c97c92e5c774e154399df',1,'Users']]], - ['createqueue',['createQueue',['../classTicket__Queue.html#af077496b6071af47c19a873bf025c1f3',1,'Ticket_Queue\createQueue()'],['../classTicket__Queue__Handler.html#af077496b6071af47c19a873bf025c1f3',1,'Ticket_Queue_Handler\createQueue()']]], - ['createreply',['createReply',['../classTicket.html#af6568341f5052034440f79c0e74707a3',1,'Ticket\createReply()'],['../classTicket__Reply.html#aa6fa056fff4ddafc3eabf3ed72143e1b',1,'Ticket_Reply\createReply()']]], - ['createsupportgroup',['createSupportGroup',['../classSupport__Group.html#a31ee7c68c0ffb77438bb9ff095962568',1,'Support_Group']]], - ['createticket',['createticket',['../createticket_8php.html#aa8253d883a3ba14c6449a13ed2bb9c8f',1,'createticket.php']]], - ['createticketcategory',['createTicketCategory',['../classTicket__Category.html#a506fc7f32de9547e91a5dbb68c391907',1,'Ticket_Category']]], - ['createticketuser',['createTicketUser',['../classTicket__User.html#a37c416f7d3723874f3ac49c7f9f5a21c',1,'Ticket_User']]], - ['createuser',['createUser',['../classUsers.html#ac93aebf1960fb12975b120a2c394a8af',1,'Users']]], - ['createwebuser',['createWebuser',['../classWebUsers.html#a0cb7168a6b8358106512804ff28cea17',1,'WebUsers\createWebuser($name, $pass, $mail)'],['../classWebUsers.html#a0cb7168a6b8358106512804ff28cea17',1,'WebUsers\createWebuser($name, $pass, $mail)']]], - ['cron',['cron',['../classMail__Handler.html#a1b65890aa4eb8c0c6129c3e787a53405',1,'Mail_Handler']]] -]; diff --git a/code/web/docs/ams/html/search/functions_64.html b/code/web/docs/ams/html/search/functions_64.html deleted file mode 100644 index d8b63943c..000000000 --- a/code/web/docs/ams/html/search/functions_64.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_64.js b/code/web/docs/ams/html/search/functions_64.js deleted file mode 100644 index da5e1ad06..000000000 --- a/code/web/docs/ams/html/search/functions_64.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['dashboard',['dashboard',['../dashboard_8php.html#a54d0c80ff20df9df6439bb87608c375a',1,'dashboard.php']]], - ['decode_5futf8',['decode_utf8',['../classMail__Handler.html#a6fc5947eaa45b0724f8720b374481275',1,'Mail_Handler']]], - ['decrypt',['decrypt',['../classMyCrypt.html#aed69cdc691e1155856c905ee1c08d9b7',1,'MyCrypt']]], - ['delete',['delete',['../classAssigned.html#a13bdffdd926f26b825ea57066334ff01',1,'Assigned\delete()'],['../classForwarded.html#a13bdffdd926f26b825ea57066334ff01',1,'Forwarded\delete()'],['../classIn__Support__Group.html#a13bdffdd926f26b825ea57066334ff01',1,'In_Support_Group\delete()'],['../classSupport__Group.html#a13bdffdd926f26b825ea57066334ff01',1,'Support_Group\delete()']]], - ['deletesupportgroup',['deleteSupportGroup',['../classSupport__Group.html#ab4a7d3ba86333a058027c7d58b9137f1',1,'Support_Group']]], - ['deleteuserofsupportgroup',['deleteUserOfSupportGroup',['../classSupport__Group.html#ad2d1a010903640e39545085b93b9a4f1',1,'Support_Group']]] -]; diff --git a/code/web/docs/ams/html/search/functions_65.html b/code/web/docs/ams/html/search/functions_65.html deleted file mode 100644 index a77debae0..000000000 --- a/code/web/docs/ams/html/search/functions_65.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_65.js b/code/web/docs/ams/html/search/functions_65.js deleted file mode 100644 index 348a0bc5f..000000000 --- a/code/web/docs/ams/html/search/functions_65.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['encrypt',['encrypt',['../classMyCrypt.html#a07bcc8ef1d23370470ecb5ae8fc07dfa',1,'MyCrypt']]], - ['error',['error',['../error_8php.html#a43b8d30b879d4f09ceb059b02af2bc02',1,'error.php']]], - ['execute',['execute',['../classDBLayer.html#a9a0e3ecb193fecd94263eda79c54bcc4',1,'DBLayer']]], - ['executereturnid',['executeReturnId',['../classDBLayer.html#a9a8137347ec2d551de3ec54cfb3bdb1a',1,'DBLayer']]], - ['executewithoutparams',['executeWithoutParams',['../classDBLayer.html#a33552c5325c469ac1aa0d049d2312468',1,'DBLayer']]] -]; diff --git a/code/web/docs/ams/html/search/functions_66.html b/code/web/docs/ams/html/search/functions_66.html deleted file mode 100644 index 319a5316a..000000000 --- a/code/web/docs/ams/html/search/functions_66.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_66.js b/code/web/docs/ams/html/search/functions_66.js deleted file mode 100644 index 608fb4187..000000000 --- a/code/web/docs/ams/html/search/functions_66.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['forwardticket',['forwardTicket',['../classForwarded.html#aa6f01e425a0f845ce55c2d90aeb11db0',1,'Forwarded\forwardTicket()'],['../classTicket.html#a3fdc6def6a0feaf4c2458811b8c75050',1,'Ticket\forwardTicket()']]] -]; diff --git a/code/web/docs/ams/html/search/functions_67.html b/code/web/docs/ams/html/search/functions_67.html deleted file mode 100644 index d0ab42a3f..000000000 --- a/code/web/docs/ams/html/search/functions_67.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_67.js b/code/web/docs/ams/html/search/functions_67.js deleted file mode 100644 index 6f68d029b..000000000 --- a/code/web/docs/ams/html/search/functions_67.js +++ /dev/null @@ -1,106 +0,0 @@ -var searchData= -[ - ['generatesalt',['generateSALT',['../classUsers.html#afb7603ac9556c1069fbf1c0062251203',1,'Users']]], - ['get_5femail_5fby_5fuser_5fid',['get_email_by_user_id',['../classTicket__User.html#a7274bc305ccce731091c68d1607cb6e9',1,'Ticket_User']]], - ['get_5fid_5ffrom_5femail',['get_id_from_email',['../classTicket__User.html#a7feeb7a909bf6733de21300d0ea0e1bd',1,'Ticket_User']]], - ['get_5fid_5ffrom_5fusername',['get_id_from_username',['../classTicket__User.html#a0bcfa281f41b948eb42dd18992724543',1,'Ticket_User']]], - ['get_5fmime_5ftype',['get_mime_type',['../classMail__Handler.html#a719c5051ef00fbb0d7c7ce2c78e3b4e1',1,'Mail_Handler']]], - ['get_5fpart',['get_part',['../classMail__Handler.html#ab3a5e8f69692826c6dae96f873859642',1,'Mail_Handler']]], - ['get_5fticket_5fid_5ffrom_5fsubject',['get_ticket_id_from_subject',['../classMail__Handler.html#a8604569b1e012ea3b1fe466018f75ce2',1,'Mail_Handler']]], - ['get_5fusername_5ffrom_5fid',['get_username_from_id',['../classTicket__User.html#a266ff1e60e08dcd8c7e70f22f5a33e93',1,'Ticket_User']]], - ['getaction',['getAction',['../classTicket__Log.html#a189a4abe5faf11f4320d5d3f1d3d1715',1,'Ticket_Log']]], - ['getactiontextarray',['getActionTextArray',['../classTicket__Log.html#ac760071c0ce36337c16d8146fcb3bade',1,'Ticket_Log']]], - ['getallcategories',['getAllCategories',['../classTicket__Category.html#a1e4b8ecfd737337e35976126b521499f',1,'Ticket_Category']]], - ['getalllogs',['getAllLogs',['../classTicket__Log.html#aeaf1c995cc807afe241f6e7bdc684921',1,'Ticket_Log']]], - ['getallsupportgroups',['getAllSupportGroups',['../classSupport__Group.html#ad3fc18cb894f789d19a768ea63d9b673',1,'Support_Group']]], - ['getallusersofsupportgroup',['getAllUsersOfSupportGroup',['../classSupport__Group.html#a7f1662394a31e2a05e9863def178df12',1,'Support_Group']]], - ['getallusersquery',['getAllUsersQuery',['../classWebUsers.html#a2f8e928ed02e462b40e909965250fb7d',1,'WebUsers\getAllUsersQuery()'],['../classWebUsers.html#a2f8e928ed02e462b40e909965250fb7d',1,'WebUsers\getAllUsersQuery()']]], - ['getamountofrows',['getAmountOfRows',['../classPagination.html#ae43f78382809e3cd2aaa3c455cb0b2b4',1,'Pagination']]], - ['getargument',['getArgument',['../classTicket__Log.html#a88ec9370bcbdb60301f89e401c9e64e1',1,'Ticket_Log']]], - ['getassigned',['getAssigned',['../classTicket.html#a8234a4e23319778d234b3957f8b5d06c',1,'Ticket']]], - ['getauthor',['getAuthor',['../classTicket.html#a5286e30390ae3e1b274940286493dd24',1,'Ticket\getAuthor()'],['../classTicket__Log.html#a5286e30390ae3e1b274940286493dd24',1,'Ticket_Log\getAuthor()'],['../classTicket__Reply.html#a5286e30390ae3e1b274940286493dd24',1,'Ticket_Reply\getAuthor()']]], - ['getcategoryname',['getCategoryName',['../classTicket.html#a689e9d131777e7f1219ee0d65b088cb3',1,'Ticket']]], - ['getclient_5fversion',['getClient_Version',['../classTicket__Info.html#a5a9884f9f9b63d4a6ed8c6112704277d',1,'Ticket_Info']]], - ['getconnect_5fstate',['getConnect_State',['../classTicket__Info.html#a51a5247b7c82f60479ccdcfa33041c27',1,'Ticket_Info']]], - ['getcontent',['getContent',['../classTicket__Content.html#a58e43f09a06ce4e29b192c4e17ce7915',1,'Ticket_Content\getContent()'],['../classTicket__Reply.html#a58e43f09a06ce4e29b192c4e17ce7915',1,'Ticket_Reply\getContent()']]], - ['getcountryarray',['getCountryArray',['../drupal__module_2ryzommanage_2inc_2settings_8php.html#a9342547984d3c9a5ece41572951f8edf',1,'getCountryArray(): settings.php'],['../www_2html_2inc_2settings_8php.html#a9342547984d3c9a5ece41572951f8edf',1,'getCountryArray(): settings.php']]], - ['getcpu_5fmask',['getCPU_Mask',['../classTicket__Info.html#ae85e54574e6e0b17cd33b8c49255d228',1,'Ticket_Info']]], - ['getcpuid',['getCPUId',['../classTicket__Info.html#aba21caccb000efb673b8b66ca70a36c7',1,'Ticket_Info']]], - ['getcurrent',['getCurrent',['../classPagination.html#ad926899d7cac34a3f1a90e552d8eb27d',1,'Pagination']]], - ['getdb',['getDb',['../classQuerycache.html#aceb656ee5135578ab3a9947252caa772',1,'Querycache']]], - ['getelements',['getElements',['../classPagination.html#a97a3a3e912139aa222a7ca13fdb27d33',1,'Pagination']]], - ['getemail',['getEmail',['../classWebUsers.html#a02a01849f28e2535e888ae4ec87b20f2',1,'WebUsers\getEmail()'],['../classWebUsers.html#a02a01849f28e2535e888ae4ec87b20f2',1,'WebUsers\getEmail()']]], - ['getentireticket',['getEntireTicket',['../classTicket.html#a00572e06f01ae1cadb5949f1b45e8f04',1,'Ticket']]], - ['getexternid',['getExternId',['../classTicket__User.html#ace230deb485c9f115f7fea4ce92442a3',1,'Ticket_User']]], - ['getforwardedgroupid',['getForwardedGroupId',['../classTicket.html#aedbfa4efd5aaa96ac713817d12156f7e',1,'Ticket']]], - ['getforwardedgroupname',['getForwardedGroupName',['../classTicket.html#a34e17d1cc053a7b86ce2b58a3a347c7e',1,'Ticket']]], - ['getgroup',['getGroup',['../classForwarded.html#a4f44e7bc9de772c21b4304d11e87bf16',1,'Forwarded\getGroup()'],['../classIn__Support__Group.html#a4f44e7bc9de772c21b4304d11e87bf16',1,'In_Support_Group\getGroup()'],['../classSupport__Group.html#af6697615443145a2981e62aa741c3afa',1,'Support_Group\getGroup()']]], - ['getgroupemail',['getGroupEmail',['../classSupport__Group.html#a9d0f36a53db49c1f57e3cab8a61a7d90',1,'Support_Group']]], - ['getgroups',['getGroups',['../classSupport__Group.html#a562142b89699a1063ea9769030250365',1,'Support_Group']]], - ['gethidden',['getHidden',['../classTicket__Reply.html#a1d032efbce2b4edb7c269a1e13562f40',1,'Ticket_Reply']]], - ['getht',['getHT',['../classTicket__Info.html#a90d3c0edc1e767875c7fb98880886e73',1,'Ticket_Info']]], - ['getid',['getId',['../classWebUsers.html#a585ef354b38d0fad9d92f45e183b639f',1,'WebUsers\getId($username)'],['../classWebUsers.html#a585ef354b38d0fad9d92f45e183b639f',1,'WebUsers\getId($username)']]], - ['getidfromemail',['getIdFromEmail',['../classWebUsers.html#aee8d6b322defc5dfe8e47f382becca62',1,'WebUsers\getIdFromEmail($email)'],['../classWebUsers.html#aee8d6b322defc5dfe8e47f382becca62',1,'WebUsers\getIdFromEmail($email)']]], - ['getimap_5fmailserver',['getIMAP_MailServer',['../classSupport__Group.html#a30d67354e52f95489b93923440ff0661',1,'Support_Group']]], - ['getimap_5fpassword',['getIMAP_Password',['../classSupport__Group.html#a4983db184794db8f05ce93f5ba11ba7e',1,'Support_Group']]], - ['getimap_5fusername',['getIMAP_Username',['../classSupport__Group.html#a0ace9f66f2541d29e060cb7728030e93',1,'Support_Group']]], - ['getinfo',['getInfo',['../classWebUsers.html#a164026f74736817927e1cacd282a2e28',1,'WebUsers\getInfo()'],['../classWebUsers.html#a164026f74736817927e1cacd282a2e28',1,'WebUsers\getInfo()']]], - ['getlanguage',['getLanguage',['../classWebUsers.html#afcef2403c4111bc44ef0530f1e493909',1,'WebUsers\getLanguage()'],['../classWebUsers.html#afcef2403c4111bc44ef0530f1e493909',1,'WebUsers\getLanguage()']]], - ['getlast',['getLast',['../classPagination.html#a9316ede6960667d832997c8e20223623',1,'Pagination']]], - ['getlatestreply',['getLatestReply',['../classTicket.html#a3a4ce7e9c445dd245b3370304d0afd92',1,'Ticket']]], - ['getlinks',['getLinks',['../classPagination.html#aeecf550e63b55ecd5d737ecc46e07d3a',1,'Pagination']]], - ['getlocal_5faddress',['getLocal_Address',['../classTicket__Info.html#a49b4c851eff2f3d06531a39baa8423f5',1,'Ticket_Info']]], - ['getlogsofticket',['getLogsOfTicket',['../classTicket__Log.html#a37ad4d95b0bb2d5a6dfc2dd7c3744292',1,'Ticket_Log']]], - ['getmemory',['getMemory',['../classTicket__Info.html#a144248575cd034a40315155a9b48ff87',1,'Ticket_Info']]], - ['getmodsandadmins',['getModsAndAdmins',['../classTicket__User.html#a71099747902fb7e064ec1d4128ea4576',1,'Ticket_User']]], - ['getname',['getName',['../classSupport__Group.html#a3d0963e68bb313b163a73f2803c64600',1,'Support_Group\getName()'],['../classTicket__Category.html#a3d0963e68bb313b163a73f2803c64600',1,'Ticket_Category\getName()']]], - ['getnel3d',['getNel3D',['../classTicket__Info.html#abe3ae528bfd5495720c3adeff59fe11e',1,'Ticket_Info']]], - ['getnewestticket',['getNewestTicket',['../classTicket__Queue__Handler.html#ab5a79318a0c771083f03400093b3b2ec',1,'Ticket_Queue_Handler']]], - ['getnroftickets',['getNrOfTickets',['../classTicket__Queue__Handler.html#ada8f87ed8466c5e0477fa20359c3c8ad',1,'Ticket_Queue_Handler']]], - ['getnrofticketsassignedwaiting',['getNrOfTicketsAssignedWaiting',['../classTicket__Queue__Handler.html#a0d3daaaf5c79188eb62bb3adda11fa2a',1,'Ticket_Queue_Handler']]], - ['getnrofticketstodo',['getNrOfTicketsToDo',['../classTicket__Queue__Handler.html#ae8d1a2a66991583c05c173147e8dc657',1,'Ticket_Queue_Handler']]], - ['getos',['getOS',['../classTicket__Info.html#a9a1b88474ad97701d67a752d0c4d65c5',1,'Ticket_Info']]], - ['getpagination',['getPagination',['../classTicket__Queue__Handler.html#ab45a102a508e9727b108e8f24486c464',1,'Ticket_Queue_Handler']]], - ['getparams',['getParams',['../classTicket__Queue.html#ae32cd7c32721b02d676bb63b4b1366db',1,'Ticket_Queue']]], - ['getpatch_5fversion',['getPatch_Version',['../classTicket__Info.html#a6e41e115b03a1f152bd2c28c77d5fbac',1,'Ticket_Info']]], - ['getpermission',['getPermission',['../classTicket__User.html#a478067ecf173884c2ee3e5b94e746200',1,'Ticket_User']]], - ['getpriority',['getPriority',['../classTicket.html#a1e7a3c168dcd0901a0d2669c67575b55',1,'Ticket']]], - ['getpriorityarray',['getPriorityArray',['../classTicket.html#a509625cccc0b41f4ab3a658df705b3dc',1,'Ticket']]], - ['getprioritytext',['getPriorityText',['../classTicket.html#ae07f7808a12f2789593722f3293bd105',1,'Ticket']]], - ['getprocessor',['getProcessor',['../classTicket__Info.html#a3ace868ad456ff61f545cb44ee01c562',1,'Ticket_Info']]], - ['getquery',['getQuery',['../classQuerycache.html#a55f162785567258fe5138af282e588c2',1,'Querycache\getQuery()'],['../classTicket__Log.html#a55f162785567258fe5138af282e588c2',1,'Ticket_Log\getQuery()'],['../classTicket__Queue.html#a55f162785567258fe5138af282e588c2',1,'Ticket_Queue\getQuery()']]], - ['getqueue',['getQueue',['../classTicket.html#aa7a8055e5ee1eb792f29443ddb79c4d3',1,'Ticket']]], - ['getreceivemail',['getReceiveMail',['../classWebUsers.html#ae4680f622bd8d571530615fb616d37e7',1,'WebUsers\getReceiveMail()'],['../classWebUsers.html#ae4680f622bd8d571530615fb616d37e7',1,'WebUsers\getReceiveMail()']]], - ['getrepliesofticket',['getRepliesOfTicket',['../classTicket__Reply.html#a7e80a6437bb6ee90be42a32f3a82fe76',1,'Ticket_Reply']]], - ['getserver_5ftick',['getServer_Tick',['../classTicket__Info.html#a5a5799e4e54d3fa4858716b4464710c0',1,'Ticket_Info']]], - ['getsgroupid',['getSGroupId',['../classSupport__Group.html#a77d0961efe9609ebb268f8672e71bba4',1,'Support_Group']]], - ['getsgroupofticket',['getSGroupOfTicket',['../classForwarded.html#a4de002d45322cf62ce493f49933d33bd',1,'Forwarded']]], - ['getshardid',['getShardId',['../classTicket__Info.html#a36306b5367015050fb516fcaaff8351f',1,'Ticket_Info']]], - ['getsid',['getSID',['../classQuerycache.html#a5bac91964d19751986cccad6fad28dda',1,'Querycache']]], - ['getstatus',['getStatus',['../classTicket.html#a9d21636071f529e2154051d3ea6e5921',1,'Ticket']]], - ['getstatusarray',['getStatusArray',['../classTicket.html#aa728c6a1f8ddd7030acbf5a4ca913b50',1,'Ticket']]], - ['getstatustext',['getStatusText',['../classTicket.html#aab26af198dc3a59295747084b85435ff',1,'Ticket']]], - ['gettag',['getTag',['../classSupport__Group.html#ab86ba36154b20e6bbfa3ba705f12f9d6',1,'Support_Group']]], - ['gettcategoryid',['getTCategoryId',['../classTicket__Category.html#acb530a119e5e52230a92ece95cc7ec82',1,'Ticket_Category']]], - ['gettcontentid',['getTContentId',['../classTicket__Content.html#a9245dceab917ad08e5244c9395b347ae',1,'Ticket_Content']]], - ['getticket',['getTicket',['../classAssigned.html#a42ddf34a72af750b7013fa309b67e46c',1,'Assigned\getTicket()'],['../classForwarded.html#a42ddf34a72af750b7013fa309b67e46c',1,'Forwarded\getTicket()'],['../classTicket__Info.html#a42ddf34a72af750b7013fa309b67e46c',1,'Ticket_Info\getTicket()'],['../classTicket__Log.html#a42ddf34a72af750b7013fa309b67e46c',1,'Ticket_Log\getTicket()'],['../classTicket__Reply.html#a42ddf34a72af750b7013fa309b67e46c',1,'Ticket_Reply\getTicket()']]], - ['getticket_5fcategory',['getTicket_Category',['../classTicket.html#addff2fc457fe07664f4eb39efcea45f9',1,'Ticket']]], - ['gettickets',['getTickets',['../classTicket__Queue__Handler.html#a45e8c11ba9485041fa92c7c470a8f9f9',1,'Ticket_Queue_Handler']]], - ['getticketsof',['getTicketsOf',['../classTicket.html#aa426904463cd0eb50d9b2f4becdd242f',1,'Ticket']]], - ['gettid',['getTId',['../classTicket.html#aa7af74696d9898008992c494cec136dd',1,'Ticket']]], - ['gettimestamp',['getTimestamp',['../classTicket.html#a92aa1d82129ec8cd803d64c28efcb30f',1,'Ticket\getTimestamp()'],['../classTicket__Log.html#a92aa1d82129ec8cd803d64c28efcb30f',1,'Ticket_Log\getTimestamp()'],['../classTicket__Reply.html#a92aa1d82129ec8cd803d64c28efcb30f',1,'Ticket_Reply\getTimestamp()']]], - ['gettinfoid',['getTInfoId',['../classTicket__Info.html#ad7c7ccc1926763c252d32d1fee5a7f69',1,'Ticket_Info']]], - ['gettitle',['getTitle',['../classTicket.html#a95e859a4588a39a1824b717378a84c29',1,'Ticket']]], - ['gettlogid',['getTLogId',['../classTicket__Log.html#ab174d340ee116d8cc3aa377003421fc5',1,'Ticket_Log']]], - ['gettreplyid',['getTReplyId',['../classTicket__Reply.html#ade0c35755c1a1af8fa4c9bae8b4c51f1',1,'Ticket_Reply']]], - ['gettuserid',['getTUserId',['../classTicket__User.html#a4a31c27c61f9794200b647bf810461f5',1,'Ticket_User']]], - ['gettype',['getType',['../classQuerycache.html#a830b5c75df72b32396701bc563fbe3c7',1,'Querycache']]], - ['getuid',['getUId',['../classWebUsers.html#aa36a98da4146d85e7813e99df7d97497',1,'WebUsers\getUId()'],['../classWebUsers.html#aa36a98da4146d85e7813e99df7d97497',1,'WebUsers\getUId()']]], - ['getuser',['getUser',['../classAssigned.html#ae81b7186fb97a7c6457edcc68c9aa2ef',1,'Assigned\getUser()'],['../classIn__Support__Group.html#ae81b7186fb97a7c6457edcc68c9aa2ef',1,'In_Support_Group\getUser()']]], - ['getuser_5fid',['getUser_Id',['../classTicket__Info.html#a9c2fe31c14609e2255773d5a4dd154d8',1,'Ticket_Info']]], - ['getuser_5fposition',['getUser_Position',['../classTicket__Info.html#a3f5a46d846543219d6321d2f8751d1f0',1,'Ticket_Info']]], - ['getuserassignedtoticket',['getUserAssignedToTicket',['../classAssigned.html#afcfb156712a9477a97423a49238d13c5',1,'Assigned']]], - ['getusername',['getUsername',['../classWebUsers.html#a81b37a3c9d639574e394f80c1138c75e',1,'WebUsers\getUsername()'],['../classWebUsers.html#a81b37a3c9d639574e394f80c1138c75e',1,'WebUsers\getUsername()']]], - ['getusers',['getUsers',['../classWebUsers.html#a0fc10b64683021b70c7eb95fb514c119',1,'WebUsers\getUsers()'],['../classWebUsers.html#a0fc10b64683021b70c7eb95fb514c119',1,'WebUsers\getUsers()']]], - ['getview_5fposition',['getView_Position',['../classTicket__Info.html#a525dbd26fc788c7c152f6c686a9a5d11',1,'Ticket_Info']]] -]; diff --git a/code/web/docs/ams/html/search/functions_68.html b/code/web/docs/ams/html/search/functions_68.html deleted file mode 100644 index 66b85be31..000000000 --- a/code/web/docs/ams/html/search/functions_68.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_68.js b/code/web/docs/ams/html/search/functions_68.js deleted file mode 100644 index 68cc67ed7..000000000 --- a/code/web/docs/ams/html/search/functions_68.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['handle_5flanguage',['handle_language',['../classHelpers.html#a334920d0652c160c6145d3bd7be31a22',1,'Helpers']]], - ['hashiv',['hashIV',['../classMyCrypt.html#a1bdf94a5906655bf0965338c9d17ab27',1,'MyCrypt']]], - ['hasinfo',['hasInfo',['../classTicket.html#afca07df3cc25a0e1a15d3f69bd6afa62',1,'Ticket']]] -]; diff --git a/code/web/docs/ams/html/search/functions_69.html b/code/web/docs/ams/html/search/functions_69.html deleted file mode 100644 index e2041976c..000000000 --- a/code/web/docs/ams/html/search/functions_69.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_69.js b/code/web/docs/ams/html/search/functions_69.js deleted file mode 100644 index e23cc85fc..000000000 --- a/code/web/docs/ams/html/search/functions_69.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['incoming_5fmail_5fhandler',['incoming_mail_handler',['../classMail__Handler.html#a2896dabadb8e435de7ba7bbb258f8a96',1,'Mail_Handler']]], - ['isadmin',['isAdmin',['../classTicket__User.html#ae8a7d91474cde916fced2127fab426d2',1,'Ticket_User']]], - ['isassigned',['isAssigned',['../classAssigned.html#ade127364a5e5635077119b7217b6059c',1,'Assigned']]], - ['isforwarded',['isForwarded',['../classForwarded.html#ac1fa2045188edf04b07c523e1c6f68a0',1,'Forwarded']]], - ['isloggedin',['isLoggedIn',['../classWebUsers.html#a33bdd79e5da367ebddd4cfbdbbfc7cff',1,'WebUsers\isLoggedIn()'],['../classWebUsers.html#a33bdd79e5da367ebddd4cfbdbbfc7cff',1,'WebUsers\isLoggedIn()']]], - ['ismod',['isMod',['../classTicket__User.html#a8d88cdbf205bf7d24be03157d25bb7d8',1,'Ticket_User']]] -]; diff --git a/code/web/docs/ams/html/search/functions_6c.html b/code/web/docs/ams/html/search/functions_6c.html deleted file mode 100644 index da371cfab..000000000 --- a/code/web/docs/ams/html/search/functions_6c.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_6c.js b/code/web/docs/ams/html/search/functions_6c.js deleted file mode 100644 index 51fb577db..000000000 --- a/code/web/docs/ams/html/search/functions_6c.js +++ /dev/null @@ -1,23 +0,0 @@ -var searchData= -[ - ['load',['load',['../classAssigned.html#a689011be59ec3d216ebe6852f07ab37f',1,'Assigned\load()'],['../classForwarded.html#a689011be59ec3d216ebe6852f07ab37f',1,'Forwarded\load()']]], - ['load_5fwith_5fsgroupid',['load_With_SGroupId',['../classSupport__Group.html#a6beae177f45da42a57b100b5481f49bf',1,'Support_Group']]], - ['load_5fwith_5fsid',['load_With_SID',['../classQuerycache.html#ae960510ccb242704233c38d787242f53',1,'Querycache']]], - ['load_5fwith_5ftcategoryid',['load_With_TCategoryId',['../classTicket__Category.html#ab3a70940917530d91a39536a6d45a21d',1,'Ticket_Category']]], - ['load_5fwith_5ftcontentid',['load_With_TContentId',['../classTicket__Content.html#ad8b1226537a055701bcc3fe4af87257b',1,'Ticket_Content']]], - ['load_5fwith_5fticket',['load_With_Ticket',['../classTicket__Info.html#afcf4006cdd19b05919b5df34d3345ad2',1,'Ticket_Info']]], - ['load_5fwith_5ftid',['load_With_TId',['../classTicket.html#ac17d9e1158fb77707da1f6cd3e425d54',1,'Ticket']]], - ['load_5fwith_5ftinfoid',['load_With_TInfoId',['../classTicket__Info.html#a1681685f76483b7944bf6848b29caa4a',1,'Ticket_Info']]], - ['load_5fwith_5ftlogid',['load_With_TLogId',['../classTicket__Log.html#a76e8e991002c7e408f7b182556cdeade',1,'Ticket_Log']]], - ['load_5fwith_5ftreplyid',['load_With_TReplyId',['../classTicket__Reply.html#ac9a387c63aad0b81a8161d2515f697d9',1,'Ticket_Reply']]], - ['load_5fwith_5ftuserid',['load_With_TUserId',['../classTicket__User.html#af43df1ba39e073e4b3a0120e6e4d3140',1,'Ticket_User']]], - ['loadallclosedtickets',['loadAllClosedTickets',['../classTicket__Queue.html#af2a9b20ac9dc0e1992f717abbb418be7',1,'Ticket_Queue']]], - ['loadallnotassignedtickets',['loadAllNotAssignedTickets',['../classTicket__Queue.html#a771627a0bd387cd666474a6ef0d5eaaf',1,'Ticket_Queue']]], - ['loadallopentickets',['loadAllOpenTickets',['../classTicket__Queue.html#a3a1cf8a88a3604e093f7d276050f1c49',1,'Ticket_Queue']]], - ['loadalltickets',['loadAllTickets',['../classTicket__Queue.html#a80542bde30a8a589f1d088422cb7719b',1,'Ticket_Queue']]], - ['loadassignedandwaiting',['loadAssignedandWaiting',['../classTicket__Queue.html#a348c76f7ae32437b7e91b57671d6f33d',1,'Ticket_Queue']]], - ['loadtemplate',['loadTemplate',['../classHelpers.html#a78997ab39ba0237dc7a5441b58601211',1,'Helpers']]], - ['loadtodotickets',['loadToDoTickets',['../classTicket__Queue.html#ad88848edf9a9132eb0cfcac904a8459f',1,'Ticket_Queue']]], - ['login',['login',['../func_2login_8php.html#aa311da27ba5706f5710cea7706c8eae1',1,'login(): login.php'],['../inc_2login_8php.html#aa311da27ba5706f5710cea7706c8eae1',1,'login(): login.php']]], - ['logout',['logout',['../drupal__module_2ryzommanage_2inc_2logout_8php.html#a082405d89acd6835c3a7c7a08a7adbab',1,'logout(): logout.php'],['../www_2html_2inc_2logout_8php.html#a082405d89acd6835c3a7c7a08a7adbab',1,'logout(): logout.php']]] -]; diff --git a/code/web/docs/ams/html/search/functions_6d.html b/code/web/docs/ams/html/search/functions_6d.html deleted file mode 100644 index d01ac5376..000000000 --- a/code/web/docs/ams/html/search/functions_6d.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_6d.js b/code/web/docs/ams/html/search/functions_6d.js deleted file mode 100644 index 2f5fc5e1e..000000000 --- a/code/web/docs/ams/html/search/functions_6d.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['mail_5ffork',['mail_fork',['../classMail__Handler.html#ac6f9bcfab65cc93fdd4723284fff6b7a',1,'Mail_Handler']]], - ['make_5ftable',['make_table',['../classGui__Elements.html#a639930203d81ff01840ac90a51cbbfe7',1,'Gui_Elements']]], - ['make_5ftable_5fwith_5fkey_5fis_5fid',['make_table_with_key_is_id',['../classGui__Elements.html#ae3c8c19fce4cdd7d87d4ae759ab06f24',1,'Gui_Elements']]], - ['modify_5femail_5fof_5fsgroup',['modify_email_of_sgroup',['../modify__email__of__sgroup_8php.html#acb8c4a7ad3e36662d1d22ba56a98d0ab',1,'modify_email_of_sgroup.php']]] -]; diff --git a/code/web/docs/ams/html/search/functions_6e.html b/code/web/docs/ams/html/search/functions_6e.html deleted file mode 100644 index d734dd07e..000000000 --- a/code/web/docs/ams/html/search/functions_6e.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_6e.js b/code/web/docs/ams/html/search/functions_6e.js deleted file mode 100644 index 0831ed960..000000000 --- a/code/web/docs/ams/html/search/functions_6e.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['new_5fmessage_5fid',['new_message_id',['../classMail__Handler.html#a667ca75b6c659157d855c3d19978a436',1,'Mail_Handler']]] -]; diff --git a/code/web/docs/ams/html/search/functions_6f.html b/code/web/docs/ams/html/search/functions_6f.html deleted file mode 100644 index 222f0f836..000000000 --- a/code/web/docs/ams/html/search/functions_6f.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_6f.js b/code/web/docs/ams/html/search/functions_6f.js deleted file mode 100644 index f8a8b3016..000000000 --- a/code/web/docs/ams/html/search/functions_6f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['outputtime',['outputTime',['../classHelpers.html#a4370c805a72fe32c03b178b03ad2e393',1,'Helpers']]] -]; diff --git a/code/web/docs/ams/html/search/functions_72.html b/code/web/docs/ams/html/search/functions_72.html deleted file mode 100644 index a4336f7c4..000000000 --- a/code/web/docs/ams/html/search/functions_72.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_72.js b/code/web/docs/ams/html/search/functions_72.js deleted file mode 100644 index 857dcd26f..000000000 --- a/code/web/docs/ams/html/search/functions_72.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['register',['register',['../register_8php.html#acc294a6cc8e69743746820e3d15e3f78',1,'register.php']]], - ['reply_5fon_5fticket',['reply_on_ticket',['../reply__on__ticket_8php.html#a79f0a445c77e8e1e59eb9e72cbf39dba',1,'reply_on_ticket.php']]] -]; diff --git a/code/web/docs/ams/html/search/functions_73.html b/code/web/docs/ams/html/search/functions_73.html deleted file mode 100644 index 774d577f5..000000000 --- a/code/web/docs/ams/html/search/functions_73.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_73.js b/code/web/docs/ams/html/search/functions_73.js deleted file mode 100644 index 50284d9b1..000000000 --- a/code/web/docs/ams/html/search/functions_73.js +++ /dev/null @@ -1,73 +0,0 @@ -var searchData= -[ - ['send_5fmail',['send_mail',['../classMail__Handler.html#a50308ad0711aee080dacef7e3f574699',1,'Mail_Handler']]], - ['send_5fticketing_5fmail',['send_ticketing_mail',['../classMail__Handler.html#abe649044c8b8bd8eb05787a401865e6d',1,'Mail_Handler']]], - ['set',['set',['../classAssigned.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Assigned\set()'],['../classForwarded.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Forwarded\set()'],['../classIn__Support__Group.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'In_Support_Group\set()'],['../classQuerycache.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Querycache\set()'],['../classSupport__Group.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Support_Group\set()'],['../classTicket.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket\set()'],['../classTicket__Info.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_Info\set()'],['../classTicket__Log.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_Log\set()'],['../classTicket__Reply.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_Reply\set()'],['../classTicket__User.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'Ticket_User\set()'],['../classWebUsers.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'WebUsers\set($values)'],['../classWebUsers.html#a8bdfe0a5256e35367225bcd6d278ef21',1,'WebUsers\set($values)']]], - ['setamsemail',['setAmsEmail',['../classUsers.html#ad1cbb1fe6ee72f46dc385bec6e274363',1,'Users']]], - ['setamspassword',['setAmsPassword',['../classUsers.html#ab89812058b0a71baf492af4652d67501',1,'Users']]], - ['setauthor',['setAuthor',['../classTicket.html#a0c8f116992af7c8737c70119dae00d45',1,'Ticket\setAuthor()'],['../classTicket__Log.html#a0c8f116992af7c8737c70119dae00d45',1,'Ticket_Log\setAuthor()'],['../classTicket__Reply.html#a0c8f116992af7c8737c70119dae00d45',1,'Ticket_Reply\setAuthor()']]], - ['setclient_5fversion',['setClient_Version',['../classTicket__Info.html#af06e75f73ae40120cc371f6ddd9ab49c',1,'Ticket_Info']]], - ['setconnect_5fstate',['setConnect_State',['../classTicket__Info.html#a4de823fc3a051d3aac3d526badef313c',1,'Ticket_Info']]], - ['setcontent',['setContent',['../classTicket__Content.html#a76e94f05c5cc0044993a35492097df4d',1,'Ticket_Content\setContent()'],['../classTicket__Reply.html#a76e94f05c5cc0044993a35492097df4d',1,'Ticket_Reply\setContent()']]], - ['setcpu_5fmask',['setCPU_Mask',['../classTicket__Info.html#a5f19999ab39a2ac0b7d6f2ced9223ae6',1,'Ticket_Info']]], - ['setcpuid',['setCPUId',['../classTicket__Info.html#af1f04d3bdcbaf28b246eb94a484f397c',1,'Ticket_Info']]], - ['setdb',['setDb',['../classQuerycache.html#afa9c249972ca269a2b1a399ed2faf9b4',1,'Querycache']]], - ['setemail',['setEmail',['../classWebUsers.html#a0cd214763f395718db166fbd598689f4',1,'WebUsers\setEmail($user, $mail)'],['../classWebUsers.html#a0cd214763f395718db166fbd598689f4',1,'WebUsers\setEmail($user, $mail)']]], - ['setexternid',['setExternId',['../classTicket__User.html#ad38846bb954052a5293ae2d26cf810d2',1,'Ticket_User']]], - ['setgroup',['setGroup',['../classForwarded.html#a3116db27c2e2f33cbb10a9488db34da3',1,'Forwarded\setGroup()'],['../classIn__Support__Group.html#a3116db27c2e2f33cbb10a9488db34da3',1,'In_Support_Group\setGroup()']]], - ['setgroupemail',['setGroupEmail',['../classSupport__Group.html#abbb0e975fd21a42439970ebb3eba5fea',1,'Support_Group']]], - ['sethidden',['setHidden',['../classTicket__Reply.html#a0b67f1016974c7b153b8944a94c88045',1,'Ticket_Reply']]], - ['setht',['setHT',['../classTicket__Info.html#a9ef93ff2fede4bd9b1cb8da2129dee20',1,'Ticket_Info']]], - ['setimap_5fmailserver',['setIMAP_MailServer',['../classSupport__Group.html#a71f266f2bba1fc4fb6df4cf083988938',1,'Support_Group']]], - ['setimap_5fpassword',['setIMAP_Password',['../classSupport__Group.html#ad6fcb63d4ae129567e8bea8786a75d87',1,'Support_Group']]], - ['setimap_5fusername',['setIMAP_Username',['../classSupport__Group.html#a6856519261b543f27bc001616c2881eb',1,'Support_Group']]], - ['setlanguage',['setLanguage',['../classWebUsers.html#a5ab1bd5f0959a3c33a46c176d9412c80',1,'WebUsers\setLanguage($user, $language)'],['../classWebUsers.html#a5ab1bd5f0959a3c33a46c176d9412c80',1,'WebUsers\setLanguage($user, $language)']]], - ['setlocal_5faddress',['setLocal_Address',['../classTicket__Info.html#a144b42f39cea6b24624c6c547df6aeeb',1,'Ticket_Info']]], - ['setmemory',['setMemory',['../classTicket__Info.html#a6f6f6925a18d24d2ecd5166a325be609',1,'Ticket_Info']]], - ['setname',['setName',['../classSupport__Group.html#aa3dcc220094e19fef1f918a3a917dba7',1,'Support_Group\setName()'],['../classTicket__Category.html#aa3dcc220094e19fef1f918a3a917dba7',1,'Ticket_Category\setName()']]], - ['setnel3d',['setNel3D',['../classTicket__Info.html#a77fbf6da57aa02e075be0905dc6cdd48',1,'Ticket_Info']]], - ['setos',['setOS',['../classTicket__Info.html#aacb7cbb0f04959ae64ba1c3aac36df54',1,'Ticket_Info']]], - ['setpassword',['setPassword',['../classWebUsers.html#a91506e5f74c9884045e865ef7c314fed',1,'WebUsers\setPassword($user, $pass)'],['../classWebUsers.html#a91506e5f74c9884045e865ef7c314fed',1,'WebUsers\setPassword($user, $pass)']]], - ['setpatch_5fversion',['setPatch_Version',['../classTicket__Info.html#a1d0f55ed3b50a72bf882591474d2ff72',1,'Ticket_Info']]], - ['setpermission',['setPermission',['../classTicket__User.html#adf7c497fb026ee6e05f6ece91f541839',1,'Ticket_User']]], - ['setpriority',['setPriority',['../classTicket.html#a3080d0b46978a8f82022bbb6e5fc0c1c',1,'Ticket']]], - ['setprocessor',['setProcessor',['../classTicket__Info.html#a8b66f72ec1928b89058cd0a9b4dd8c11',1,'Ticket_Info']]], - ['setquery',['setQuery',['../classQuerycache.html#adbd6075ec5d3bd84122e52b0134ed8e7',1,'Querycache\setQuery()'],['../classTicket__Log.html#adbd6075ec5d3bd84122e52b0134ed8e7',1,'Ticket_Log\setQuery()']]], - ['setqueue',['setQueue',['../classTicket.html#a1595d3fe708fe4f453922054407a1c03',1,'Ticket']]], - ['setreceivemail',['setReceiveMail',['../classWebUsers.html#aa0f439ff7a5cd6377a557f545fbeb45c',1,'WebUsers\setReceiveMail($user, $receivemail)'],['../classWebUsers.html#aa0f439ff7a5cd6377a557f545fbeb45c',1,'WebUsers\setReceiveMail($user, $receivemail)']]], - ['setserver_5ftick',['setServer_Tick',['../classTicket__Info.html#ab6ff52082590b43d90f8f37fd5b31086',1,'Ticket_Info']]], - ['setsgroupid',['setSGroupId',['../classSupport__Group.html#aa49cb914be98fc354a45584c6f2b8be1',1,'Support_Group']]], - ['setshardid',['setShardId',['../classTicket__Info.html#a4026e593012113e253b80e3bbd5f6c13',1,'Ticket_Info']]], - ['setsid',['setSID',['../classQuerycache.html#a2f536a1f8c8e463eb0346ac375f2a24d',1,'Querycache']]], - ['setstatus',['setStatus',['../classTicket.html#a66605893c4afc9855f1e0cf8ccccac09',1,'Ticket']]], - ['settag',['setTag',['../classSupport__Group.html#a4de944a53debc51843530fe96296f220',1,'Support_Group']]], - ['settcategoryid',['setTCategoryId',['../classTicket__Category.html#a39a64c3f7ab33ba3f5a67c31647e889f',1,'Ticket_Category']]], - ['settcontentid',['setTContentId',['../classTicket__Content.html#ae07366727208e060372063e96591c5d4',1,'Ticket_Content']]], - ['setticket',['setTicket',['../classAssigned.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Assigned\setTicket()'],['../classForwarded.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Forwarded\setTicket()'],['../classTicket__Info.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Ticket_Info\setTicket()'],['../classTicket__Log.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Ticket_Log\setTicket()'],['../classTicket__Reply.html#a47c6ae5b3cd713fdbf0a7f4d568b7c27',1,'Ticket_Reply\setTicket()']]], - ['setticket_5fcategory',['setTicket_Category',['../classTicket.html#a4e38b2a263b5a934b76cd77f026308c3',1,'Ticket']]], - ['settid',['setTId',['../classTicket.html#a8c72dc7b09645b390043f5a4664e7c7f',1,'Ticket']]], - ['settimestamp',['setTimestamp',['../classTicket.html#a4e05995d5cc78cdc9ffe72d864811ac6',1,'Ticket\setTimestamp()'],['../classTicket__Log.html#aa8903a0020a17d745524806f4e751f4c',1,'Ticket_Log\setTimestamp()'],['../classTicket__Reply.html#aa8903a0020a17d745524806f4e751f4c',1,'Ticket_Reply\setTimestamp()']]], - ['settinfoid',['setTInfoId',['../classTicket__Info.html#a5e98fba0b50f74645a2fdaa8f4d0c1ea',1,'Ticket_Info']]], - ['settings',['settings',['../drupal__module_2ryzommanage_2inc_2settings_8php.html#ad7354383714c6ae99d6ee1bfb95ab49f',1,'settings(): settings.php'],['../www_2html_2inc_2settings_8php.html#ad7354383714c6ae99d6ee1bfb95ab49f',1,'settings(): settings.php']]], - ['settitle',['setTitle',['../classTicket.html#ac765da6fa83b06ea39c0edc9b3e6c6c0',1,'Ticket']]], - ['settlogid',['setTLogId',['../classTicket__Log.html#aca708aae8c7320e11d9e08936ec74dec',1,'Ticket_Log']]], - ['settreplyid',['setTReplyId',['../classTicket__Reply.html#a7b91b481de87eb1515212d62b298cb94',1,'Ticket_Reply']]], - ['settuserid',['setTUserId',['../classTicket__User.html#a0faf8954e86346e7b566870b1a3c0a4a',1,'Ticket_User']]], - ['settype',['setType',['../classQuerycache.html#a0f29af8d4b9fdd8959739727a33acee5',1,'Querycache']]], - ['setuser',['setUser',['../classAssigned.html#af560ca7f201e2f871384a150e8ffd9aa',1,'Assigned\setUser()'],['../classIn__Support__Group.html#af560ca7f201e2f871384a150e8ffd9aa',1,'In_Support_Group\setUser()']]], - ['setuser_5fid',['setUser_Id',['../classTicket__Info.html#aec77405f6e096f2c0493383724f33034',1,'Ticket_Info']]], - ['setuser_5fposition',['setUser_Position',['../classTicket__Info.html#a41cfb7786d3252b2ec7aec42d77add9f',1,'Ticket_Info']]], - ['setview_5fposition',['setView_Position',['../classTicket__Info.html#a58912ec04451ab232d88bd78b6a8c2ea',1,'Ticket_Info']]], - ['sgroup_5flist',['sgroup_list',['../sgroup__list_8php.html#ab3af46486585b0ddced2de27a5d7a000',1,'sgroup_list.php']]], - ['show_5fqueue',['show_queue',['../show__queue_8php.html#a48695b07fef725dbf0b4f261b1fe1547',1,'show_queue.php']]], - ['show_5freply',['show_reply',['../show__reply_8php.html#ad8e51d3b3a4bf996fb07199a08ca9a3e',1,'show_reply.php']]], - ['show_5fsgroup',['show_sgroup',['../show__sgroup_8php.html#a118719426cb30ed43e39c2af24cfea2d',1,'show_sgroup.php']]], - ['show_5fticket',['show_ticket',['../show__ticket_8php.html#a1249d6cae97f6949ce3a7754fa1b7016',1,'show_ticket.php']]], - ['show_5fticket_5finfo',['show_ticket_info',['../show__ticket__info_8php.html#a579a5c89b55189455a8237369a78f0d8',1,'show_ticket_info.php']]], - ['show_5fticket_5flog',['show_ticket_log',['../show__ticket__log_8php.html#ab37298a659581e85338601f2259ead49',1,'show_ticket_log.php']]], - ['show_5fuser',['show_user',['../drupal__module_2ryzommanage_2inc_2show__user_8php.html#ac755ca62882d4caca41c7822793b8812',1,'show_user(): show_user.php'],['../www_2html_2inc_2show__user_8php.html#ac755ca62882d4caca41c7822793b8812',1,'show_user(): show_user.php']]], - ['supportgroup_5fentrynotexists',['supportGroup_EntryNotExists',['../classSupport__Group.html#aa557f337f57a3bb530f1f04df78c0f1e',1,'Support_Group']]], - ['supportgroup_5fexists',['supportGroup_Exists',['../classSupport__Group.html#ac235662693dcc9c2be51e6f1a2c426b6',1,'Support_Group']]], - ['syncdata',['syncdata',['../classSync.html#ad1211cc677b7aafcc4ebcc25f3cacdda',1,'Sync']]], - ['syncing',['syncing',['../syncing_8php.html#a8d4df31796dab54a8d0c9c9ec32cf7f9',1,'syncing.php']]] -]; diff --git a/code/web/docs/ams/html/search/functions_74.html b/code/web/docs/ams/html/search/functions_74.html deleted file mode 100644 index e3c96c339..000000000 --- a/code/web/docs/ams/html/search/functions_74.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_74.js b/code/web/docs/ams/html/search/functions_74.js deleted file mode 100644 index 62c7f6f79..000000000 --- a/code/web/docs/ams/html/search/functions_74.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['ticketexists',['ticketExists',['../classTicket.html#a091d7ec56d4dc4bf980b81e8069b76d0',1,'Ticket']]], - ['tickethasinfo',['TicketHasInfo',['../classTicket__Info.html#a361217eb1d85e13aa534dabfbbd64a86',1,'Ticket_Info']]], - ['time_5felapsed_5fstring',['time_elapsed_string',['../classGui__Elements.html#a04d9bc70e65231a470426f0a94b7583d',1,'Gui_Elements']]] -]; diff --git a/code/web/docs/ams/html/search/functions_75.html b/code/web/docs/ams/html/search/functions_75.html deleted file mode 100644 index 2d61754d1..000000000 --- a/code/web/docs/ams/html/search/functions_75.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_75.js b/code/web/docs/ams/html/search/functions_75.js deleted file mode 100644 index 08d9856d5..000000000 --- a/code/web/docs/ams/html/search/functions_75.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['unassignticket',['unAssignTicket',['../classAssigned.html#a8263a9c223957bb558a2c16d4431ca29',1,'Assigned\unAssignTicket()'],['../classTicket.html#a8263a9c223957bb558a2c16d4431ca29',1,'Ticket\unAssignTicket()']]], - ['update',['update',['../classQuerycache.html#a842e4774e3b3601a005b995c02f7e883',1,'Querycache\update()'],['../classSupport__Group.html#a842e4774e3b3601a005b995c02f7e883',1,'Support_Group\update()'],['../classTicket.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket\update()'],['../classTicket__Category.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Category\update()'],['../classTicket__Content.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Content\update()'],['../classTicket__Log.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Log\update()'],['../classTicket__Reply.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_Reply\update()'],['../classTicket__User.html#a842e4774e3b3601a005b995c02f7e883',1,'Ticket_User\update()']]], - ['updateticketstatus',['updateTicketStatus',['../classTicket.html#a6da2625040e9f06c583e9303082c556f',1,'Ticket']]], - ['updateticketstatusandpriority',['updateTicketStatusAndPriority',['../classTicket.html#a64f08c8987c9eb00d4bfc9ef94e45326',1,'Ticket']]], - ['userexistsinsgroup',['userExistsInSGroup',['../classIn__Support__Group.html#a1a25afa24efc6c01ffd236f735281543',1,'In_Support_Group']]], - ['userlist',['userlist',['../userlist_8php.html#a55709a05f18e09358e2b02531eb859ad',1,'userlist.php']]] -]; diff --git a/code/web/docs/ams/html/search/functions_76.html b/code/web/docs/ams/html/search/functions_76.html deleted file mode 100644 index 2ec05695c..000000000 --- a/code/web/docs/ams/html/search/functions_76.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_76.js b/code/web/docs/ams/html/search/functions_76.js deleted file mode 100644 index 1566125d3..000000000 --- a/code/web/docs/ams/html/search/functions_76.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['validemail',['validEmail',['../classUsers.html#a73637e760498c5cea55074896ec982ac',1,'Users']]] -]; diff --git a/code/web/docs/ams/html/search/functions_77.html b/code/web/docs/ams/html/search/functions_77.html deleted file mode 100644 index 8fe97554f..000000000 --- a/code/web/docs/ams/html/search/functions_77.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/functions_77.js b/code/web/docs/ams/html/search/functions_77.js deleted file mode 100644 index ed7a85370..000000000 --- a/code/web/docs/ams/html/search/functions_77.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['write_5fuser',['write_user',['../add__user_8php.html#a09df49f177966f5b08af71ec43760e0c',1,'add_user.php']]] -]; diff --git a/code/web/docs/ams/html/search/mag_sel.png b/code/web/docs/ams/html/search/mag_sel.png deleted file mode 100644 index 81f6040a2092402b4d98f9ffa8855d12a0d4ca17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn diff --git a/code/web/docs/ams/html/search/nomatches.html b/code/web/docs/ams/html/search/nomatches.html deleted file mode 100644 index b1ded27e9..000000000 --- a/code/web/docs/ams/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/code/web/docs/ams/html/search/search.css b/code/web/docs/ams/html/search/search.css deleted file mode 100644 index d18c1da8c..000000000 --- a/code/web/docs/ams/html/search/search.css +++ /dev/null @@ -1,238 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - position: absolute; - float: none; - display: inline; - margin-top: 8px; - right: 0px; - width: 170px; - z-index: 102; - background-color: white; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:116px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:0px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 1; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} diff --git a/code/web/docs/ams/html/search/search.js b/code/web/docs/ams/html/search/search.js deleted file mode 100644 index 9746f607f..000000000 --- a/code/web/docs/ams/html/search/search.js +++ /dev/null @@ -1,803 +0,0 @@ -// Search script generated by doxygen -// Copyright (C) 2009 by Dimitri van Heesch. - -// The code in this file is loosly based on main.js, part of Natural Docs, -// which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL. - -var indexSectionsWithContent = -{ - 0: "0000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000010101111111001111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100101111000100110111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111001100111111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101111111001111001111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 4: "0000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -}; - -var indexSectionNames = -{ - 0: "all", - 1: "classes", - 2: "files", - 3: "functions", - 4: "variables" -}; - -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var hexCode; - if (code<16) - { - hexCode="0"+code.toString(16); - } - else - { - hexCode=code.toString(16); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') - { - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W diff --git a/code/web/docs/ams/html/search/search_r.png b/code/web/docs/ams/html/search/search_r.png deleted file mode 100644 index 97ee8b439687084201b79c6f776a41f495c6392a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/code/web/docs/ams/html/search/variables_24.js b/code/web/docs/ams/html/search/variables_24.js deleted file mode 100644 index 8e8a493e9..000000000 --- a/code/web/docs/ams/html/search/variables_24.js +++ /dev/null @@ -1,91 +0,0 @@ -var searchData= -[ - ['_24allow_5funknown',['$ALLOW_UNKNOWN',['../drupal__module_2ryzommanage_2config_8php.html#a384355265e4331097d55252f901eddff',1,'$ALLOW_UNKNOWN(): config.php'],['../www_2config_8php.html#a384355265e4331097d55252f901eddff',1,'$ALLOW_UNKNOWN(): config.php']]], - ['_24amountofrows',['$amountOfRows',['../classPagination.html#a6b5c716eec440d8dc5b9754c53c545ec',1,'Pagination']]], - ['_24ams_5fcachedir',['$AMS_CACHEDIR',['../drupal__module_2ryzommanage_2config_8php.html#a92879a931e7a7d0ae6919e70a1529747',1,'$AMS_CACHEDIR(): config.php'],['../www_2config_8php.html#a92879a931e7a7d0ae6919e70a1529747',1,'$AMS_CACHEDIR(): config.php']]], - ['_24ams_5flib',['$AMS_LIB',['../drupal__module_2ryzommanage_2config_8php.html#a75086b9c8602bf3417773bae7ef0cdc8',1,'$AMS_LIB(): config.php'],['../www_2config_8php.html#a75086b9c8602bf3417773bae7ef0cdc8',1,'$AMS_LIB(): config.php']]], - ['_24ams_5ftrans',['$AMS_TRANS',['../drupal__module_2ryzommanage_2config_8php.html#acc96a0076127356b4f9f00f4bdfa9b65',1,'$AMS_TRANS(): config.php'],['../www_2config_8php.html#acc96a0076127356b4f9f00f4bdfa9b65',1,'$AMS_TRANS(): config.php']]], - ['_24author',['$author',['../classTicket.html#ac35b828f7d4064a7c9f849c255468ee3',1,'Ticket\$author()'],['../classTicket__Log.html#ac35b828f7d4064a7c9f849c255468ee3',1,'Ticket_Log\$author()'],['../classTicket__Reply.html#ac35b828f7d4064a7c9f849c255468ee3',1,'Ticket_Reply\$author()']]], - ['_24base_5fwebpath',['$BASE_WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#a2e954ee09fb5f52b9d05caf9dfc3d5ad',1,'$BASE_WEBPATH(): config.php'],['../www_2config_8php.html#a2e954ee09fb5f52b9d05caf9dfc3d5ad',1,'$BASE_WEBPATH(): config.php']]], - ['_24cfg',['$cfg',['../drupal__module_2ryzommanage_2config_8php.html#a32f90fc68bcb40de0bae38354fd0a5fe',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a6b776651fa7defe140c03ed3bd86aa96',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a68f172c430a17022c9f74ae1acd24a00',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1805c74760836f682459a12a17d50589',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a94213b6df61b8a6b62abbe7c956493a4',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a4b555022064138fee1d7edea873c5e9e',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1b49c1f0de42e603443bea2c93276c13',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7c5f3fd8aea7ae8363c6cdc9addd9b62',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7b5bbf5b3c541b46d06deaffeeb76424',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1dca44c652dd54f6879957cf8d4a039c',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a56e7e53dac48b99f62d41d387c8624e6',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#adc2648938b5135f1f2aab1d92d33418e',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1324eeda6b288c0a26d7071db555090c',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a63d97fffb2ff86525bb6cacb74113a73',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7147f422b8150cd3f3c8a68325208607',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a53f42728714b4e86b885c12f7846cd06',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#aa68c438d0b6b38d756d8724bac554f1b',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#ae4ae1095a3543d5607464a88e6330a07',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a7cf20f61de759c233272150b12e866d8',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#aed7bed5da2b934c742cb60d23c06f752',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a1606e0620d5a628b865e0df5c217ce7e',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a41e3a386ec52e0f05bdcad04acecf619',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#ac2c263a1e16ebd69dbf247e8d82c9f63',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a9996bf49f150442cf9d564725d0dea24',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#aa7eb09eb019c344553a61b54606cb650',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a79b711e7ee81b7435a8dba7cb132b34a',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a8578ffa00c2dbcf5d34a97bcff79058b',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a50d80d35dbd37739f844a93a36fce557',1,'$cfg(): config.php'],['../drupal__module_2ryzommanage_2config_8php.html#a55031a1c3c2b9d87e37558811b311ff8',1,'$cfg(): config.php'],['../www_2config_8php.html#a32f90fc68bcb40de0bae38354fd0a5fe',1,'$cfg(): config.php'],['../www_2config_8php.html#a6b776651fa7defe140c03ed3bd86aa96',1,'$cfg(): config.php'],['../www_2config_8php.html#a68f172c430a17022c9f74ae1acd24a00',1,'$cfg(): config.php'],['../www_2config_8php.html#a1805c74760836f682459a12a17d50589',1,'$cfg(): config.php'],['../www_2config_8php.html#a94213b6df61b8a6b62abbe7c956493a4',1,'$cfg(): config.php'],['../www_2config_8php.html#a4b555022064138fee1d7edea873c5e9e',1,'$cfg(): config.php'],['../www_2config_8php.html#a1b49c1f0de42e603443bea2c93276c13',1,'$cfg(): config.php'],['../www_2config_8php.html#a7c5f3fd8aea7ae8363c6cdc9addd9b62',1,'$cfg(): config.php'],['../www_2config_8php.html#a7b5bbf5b3c541b46d06deaffeeb76424',1,'$cfg(): config.php'],['../www_2config_8php.html#a1dca44c652dd54f6879957cf8d4a039c',1,'$cfg(): config.php'],['../www_2config_8php.html#a56e7e53dac48b99f62d41d387c8624e6',1,'$cfg(): config.php'],['../www_2config_8php.html#adc2648938b5135f1f2aab1d92d33418e',1,'$cfg(): config.php'],['../www_2config_8php.html#a1324eeda6b288c0a26d7071db555090c',1,'$cfg(): config.php'],['../www_2config_8php.html#a63d97fffb2ff86525bb6cacb74113a73',1,'$cfg(): config.php'],['../www_2config_8php.html#a7147f422b8150cd3f3c8a68325208607',1,'$cfg(): config.php'],['../www_2config_8php.html#a53f42728714b4e86b885c12f7846cd06',1,'$cfg(): config.php'],['../www_2config_8php.html#aa68c438d0b6b38d756d8724bac554f1b',1,'$cfg(): config.php'],['../www_2config_8php.html#ae4ae1095a3543d5607464a88e6330a07',1,'$cfg(): config.php'],['../www_2config_8php.html#a7cf20f61de759c233272150b12e866d8',1,'$cfg(): config.php'],['../www_2config_8php.html#aed7bed5da2b934c742cb60d23c06f752',1,'$cfg(): config.php'],['../www_2config_8php.html#a1606e0620d5a628b865e0df5c217ce7e',1,'$cfg(): config.php'],['../www_2config_8php.html#a41e3a386ec52e0f05bdcad04acecf619',1,'$cfg(): config.php'],['../www_2config_8php.html#ac2c263a1e16ebd69dbf247e8d82c9f63',1,'$cfg(): config.php'],['../www_2config_8php.html#a9996bf49f150442cf9d564725d0dea24',1,'$cfg(): config.php'],['../www_2config_8php.html#aa7eb09eb019c344553a61b54606cb650',1,'$cfg(): config.php'],['../www_2config_8php.html#a79b711e7ee81b7435a8dba7cb132b34a',1,'$cfg(): config.php'],['../www_2config_8php.html#a8578ffa00c2dbcf5d34a97bcff79058b',1,'$cfg(): config.php'],['../www_2config_8php.html#a50d80d35dbd37739f844a93a36fce557',1,'$cfg(): config.php'],['../www_2config_8php.html#a55031a1c3c2b9d87e37558811b311ff8',1,'$cfg(): config.php'],['../install_8php.html#a449cc4bf6cfd310810993b3ef5251aa5',1,'$cfg(): install.php']]], - ['_24client_5fversion',['$client_version',['../classTicket__Info.html#ac43fbb88dcd0696ad49d5f805f369a61',1,'Ticket_Info']]], - ['_24config',['$config',['../classMyCrypt.html#a49c7011be9c979d9174c52a8b83e5d8e',1,'MyCrypt']]], - ['_24config_5fpath',['$CONFIG_PATH',['../drupal__module_2ryzommanage_2config_8php.html#ae15921e2ebd5885ecf37d31a2cf6ab7a',1,'$CONFIG_PATH(): config.php'],['../www_2config_8php.html#ae15921e2ebd5885ecf37d31a2cf6ab7a',1,'$CONFIG_PATH(): config.php']]], - ['_24connect_5fstate',['$connect_state',['../classTicket__Info.html#a33f4c9badf7f0c5c6728bba0ffacd66e',1,'Ticket_Info']]], - ['_24content',['$content',['../classTicket__Content.html#a57b284fe00866494b33afa80ba729bed',1,'Ticket_Content\$content()'],['../classTicket__Reply.html#a57b284fe00866494b33afa80ba729bed',1,'Ticket_Reply\$content()']]], - ['_24country',['$country',['../classWebUsers.html#a1437a5f6eb157f0eb267a26e0ad4f1ba',1,'WebUsers']]], - ['_24cpu_5fid',['$cpu_id',['../classTicket__Info.html#abea88d0d04f0d548115a0e85eef42e42',1,'Ticket_Info']]], - ['_24cpu_5fmask',['$cpu_mask',['../classTicket__Info.html#a9b0c63551b567630d1aa82f33c328ab0',1,'Ticket_Info']]], - ['_24create_5fring',['$CREATE_RING',['../drupal__module_2ryzommanage_2config_8php.html#a16031d9d4e5065229bc3b00dfd4202fa',1,'$CREATE_RING(): config.php'],['../www_2config_8php.html#a16031d9d4e5065229bc3b00dfd4202fa',1,'$CREATE_RING(): config.php']]], - ['_24current',['$current',['../classPagination.html#a2c4c58e377f6c66ca38c8ea97666fc5e',1,'Pagination']]], - ['_24db',['$db',['../classMail__Handler.html#a1fa3127fc82f96b1436d871ef02be319',1,'Mail_Handler\$db()'],['../classQuerycache.html#a1fa3127fc82f96b1436d871ef02be319',1,'Querycache\$db()']]], - ['_24default_5flanguage',['$DEFAULT_LANGUAGE',['../drupal__module_2ryzommanage_2config_8php.html#a7b56c2ed5a82ceb21fc73cef77beb150',1,'$DEFAULT_LANGUAGE(): config.php'],['../www_2config_8php.html#a7b56c2ed5a82ceb21fc73cef77beb150',1,'$DEFAULT_LANGUAGE(): config.php']]], - ['_24element_5farray',['$element_array',['../classPagination.html#a8fa0f6a15481ba69e7be913eaa15594c',1,'Pagination']]], - ['_24email',['$email',['../classWebUsers.html#ad634f418b20382e2802f80532d76d3cd',1,'WebUsers']]], - ['_24externid',['$externId',['../classTicket__User.html#af51400fe5820e964cb38fcc60b3afd84',1,'Ticket_User']]], - ['_24firstname',['$firstname',['../classWebUsers.html#a55793c72c535d153ffd3f0e43377898b',1,'WebUsers']]], - ['_24force_5fingame',['$FORCE_INGAME',['../drupal__module_2ryzommanage_2config_8php.html#aabd939b29ed900f5fc489f1a957fc6ce',1,'$FORCE_INGAME(): config.php'],['../www_2config_8php.html#aabd939b29ed900f5fc489f1a957fc6ce',1,'$FORCE_INGAME(): config.php']]], - ['_24gender',['$gender',['../classWebUsers.html#a0f1d7cfb9dc6f494b9014885205fc47e',1,'WebUsers']]], - ['_24group',['$group',['../classForwarded.html#ad530a85733b0ec1dc321859fd8faa0dc',1,'Forwarded\$group()'],['../classIn__Support__Group.html#ad530a85733b0ec1dc321859fd8faa0dc',1,'In_Support_Group\$group()']]], - ['_24groupemail',['$groupEmail',['../classSupport__Group.html#ab7ad611af238b28f1f65a32cb152acd1',1,'Support_Group']]], - ['_24hidden',['$hidden',['../classTicket__Reply.html#a4a374564d2858d8ae869a8fb890aad56',1,'Ticket_Reply']]], - ['_24ht',['$ht',['../classTicket__Info.html#a969583a6605ed731abf5849a5202db1e',1,'Ticket_Info']]], - ['_24imageloc_5fwebpath',['$IMAGELOC_WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#a16820074dcd11e4881ca6461377db000',1,'$IMAGELOC_WEBPATH(): config.php'],['../www_2config_8php.html#a16820074dcd11e4881ca6461377db000',1,'$IMAGELOC_WEBPATH(): config.php']]], - ['_24imap_5fmailserver',['$iMAP_MailServer',['../classSupport__Group.html#ad9f2ef2089fe446a9ac49a19a450d636',1,'Support_Group']]], - ['_24imap_5fpassword',['$iMAP_Password',['../classSupport__Group.html#a4166a2fc4b594ee425d7f40870e16455',1,'Support_Group']]], - ['_24imap_5fusername',['$iMAP_Username',['../classSupport__Group.html#a2b549eb4d5773efd741a2990817af0ea',1,'Support_Group']]], - ['_24ingame_5flayout',['$INGAME_LAYOUT',['../drupal__module_2ryzommanage_2config_8php.html#a0deedf69fea8c97030373e15a68c4cc5',1,'$INGAME_LAYOUT(): config.php'],['../www_2config_8php.html#a0deedf69fea8c97030373e15a68c4cc5',1,'$INGAME_LAYOUT(): config.php']]], - ['_24ingame_5fwebpath',['$INGAME_WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#ae9f6aa9c61501bca7b8851925c636d87',1,'$INGAME_WEBPATH(): config.php'],['../www_2config_8php.html#ae9f6aa9c61501bca7b8851925c636d87',1,'$INGAME_WEBPATH(): config.php']]], - ['_24language',['$language',['../classWebUsers.html#a83170d318260a5a2e2a79dccdd371b10',1,'WebUsers']]], - ['_24last',['$last',['../classPagination.html#acf48db609a946d13953d8060363fd1d3',1,'Pagination']]], - ['_24lastname',['$lastname',['../classWebUsers.html#a1d2ddb6354180329b59e8b90ed94dc7f',1,'WebUsers']]], - ['_24local_5faddress',['$local_address',['../classTicket__Info.html#a467dca5673d4c9f737dac972ab05720c',1,'Ticket_Info']]], - ['_24login',['$login',['../classWebUsers.html#afc31993e855f9631572adfedcfe6f34b',1,'WebUsers']]], - ['_24mail_5fdir',['$MAIL_DIR',['../drupal__module_2ryzommanage_2config_8php.html#a9f8fc644554910de5434f78a5f23044e',1,'$MAIL_DIR(): config.php'],['../www_2config_8php.html#a9f8fc644554910de5434f78a5f23044e',1,'$MAIL_DIR(): config.php']]], - ['_24mail_5fhandler',['$mail_handler',['../mail__cron_8php.html#a160a75d95407d877e9c2542e3ddd8c43',1,'mail_cron.php']]], - ['_24mail_5flog_5fpath',['$MAIL_LOG_PATH',['../drupal__module_2ryzommanage_2config_8php.html#afe6e9ed40480c14cb7a119fb84cb557a',1,'$MAIL_LOG_PATH(): config.php'],['../www_2config_8php.html#afe6e9ed40480c14cb7a119fb84cb557a',1,'$MAIL_LOG_PATH(): config.php']]], - ['_24memory',['$memory',['../classTicket__Info.html#a5e20a9a3e12271b3b8d685805590c9e0',1,'Ticket_Info']]], - ['_24name',['$name',['../classSupport__Group.html#ab2fc40d43824ea3e1ce5d86dee0d763b',1,'Support_Group\$name()'],['../classTicket__Category.html#ab2fc40d43824ea3e1ce5d86dee0d763b',1,'Ticket_Category\$name()']]], - ['_24nel3d',['$nel3d',['../classTicket__Info.html#a9b616e5fbafadc93aa4bdf3ccbf31498',1,'Ticket_Info']]], - ['_24os',['$os',['../classTicket__Info.html#a292791d5d8e3ded85cb2e8ec80dea0d9',1,'Ticket_Info']]], - ['_24pagination',['$pagination',['../classTicket__Queue__Handler.html#a388a4a950e936f746d3b9c1b56450ce7',1,'Ticket_Queue_Handler']]], - ['_24params',['$params',['../classTicket__Queue.html#afe68e6fbe7acfbffc0af0c84a1996466',1,'Ticket_Queue']]], - ['_24patch_5fversion',['$patch_version',['../classTicket__Info.html#a55fc0854f90ed36ab9774ba7bd2af53f',1,'Ticket_Info']]], - ['_24pdo',['$PDO',['../classDBLayer.html#acdb2149c05a21fe144fb05ec524a51f3',1,'DBLayer']]], - ['_24permission',['$permission',['../classTicket__User.html#aad04b6f3304fe6a13d5be37f7cd28938',1,'Ticket_User']]], - ['_24priority',['$priority',['../classTicket.html#a2677e505e860db863720ac4e216fd3f2',1,'Ticket']]], - ['_24processor',['$processor',['../classTicket__Info.html#a11fe8ad69d64b596f8b712b0b7e7e1e3',1,'Ticket_Info']]], - ['_24query',['$query',['../classQuerycache.html#af59a5f7cd609e592c41dc3643efd3c98',1,'Querycache\$query()'],['../classTicket__Log.html#af59a5f7cd609e592c41dc3643efd3c98',1,'Ticket_Log\$query()'],['../classTicket__Queue.html#af59a5f7cd609e592c41dc3643efd3c98',1,'Ticket_Queue\$query()']]], - ['_24queue',['$queue',['../classTicket.html#a4a0b48f6ae2fcb248a4f0288c7c344a6',1,'Ticket\$queue()'],['../classTicket__Queue__Handler.html#a4a0b48f6ae2fcb248a4f0288c7c344a6',1,'Ticket_Queue_Handler\$queue()']]], - ['_24receivemail',['$receiveMail',['../classWebUsers.html#a3c74ba660e348124f36d978b137f691d',1,'WebUsers']]], - ['_24server_5ftick',['$server_tick',['../classTicket__Info.html#aeac33ccad750e9ee81a22414db1224ab',1,'Ticket_Info']]], - ['_24sgroupid',['$sGroupId',['../classSupport__Group.html#a23265908fce0f131e03ba1ede7f42647',1,'Support_Group']]], - ['_24shardid',['$shardid',['../classTicket__Info.html#ac73283a0a8308fb7594543e4a049942c',1,'Ticket_Info']]], - ['_24sid',['$SID',['../classQuerycache.html#a69c31f890638fa4930097cf55ae27995',1,'Querycache']]], - ['_24sitebase',['$SITEBASE',['../drupal__module_2ryzommanage_2config_8php.html#a9eb41824afc2b8150c27648859f07357',1,'$SITEBASE(): config.php'],['../www_2config_8php.html#a9eb41824afc2b8150c27648859f07357',1,'$SITEBASE(): config.php']]], - ['_24status',['$status',['../classTicket.html#a58391ea75f2d29d5d708d7050b641c33',1,'Ticket']]], - ['_24support_5fgroup_5fimap_5fcryptkey',['$SUPPORT_GROUP_IMAP_CRYPTKEY',['../drupal__module_2ryzommanage_2config_8php.html#a3ed2ac4433023af3e95f8912f00125ea',1,'$SUPPORT_GROUP_IMAP_CRYPTKEY(): config.php'],['../www_2config_8php.html#a3ed2ac4433023af3e95f8912f00125ea',1,'$SUPPORT_GROUP_IMAP_CRYPTKEY(): config.php']]], - ['_24tag',['$tag',['../classSupport__Group.html#a81d5015d41ed8ec66e9db8cdc5db9555',1,'Support_Group']]], - ['_24tcategoryid',['$tCategoryId',['../classTicket__Category.html#a0111df4559c9f524272d94df0b7f9d6b',1,'Ticket_Category']]], - ['_24tcontentid',['$tContentId',['../classTicket__Content.html#a2249787a24edd706ae7a54609a601d6f',1,'Ticket_Content']]], - ['_24ticket',['$ticket',['../classAssigned.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Assigned\$ticket()'],['../classForwarded.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Forwarded\$ticket()'],['../classTicket__Info.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Ticket_Info\$ticket()'],['../classTicket__Log.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Ticket_Log\$ticket()'],['../classTicket__Reply.html#abf7832c7c53a3be2ca8a8fc305006bb0',1,'Ticket_Reply\$ticket()']]], - ['_24ticket_5fcategory',['$ticket_category',['../classTicket.html#a86e470072892575063c478122fb65184',1,'Ticket']]], - ['_24ticket_5flogging',['$TICKET_LOGGING',['../drupal__module_2ryzommanage_2config_8php.html#aa59491d29009336d89423cccd3adc5de',1,'$TICKET_LOGGING(): config.php'],['../www_2config_8php.html#aa59491d29009336d89423cccd3adc5de',1,'$TICKET_LOGGING(): config.php']]], - ['_24ticket_5fmailing_5fsupport',['$TICKET_MAILING_SUPPORT',['../drupal__module_2ryzommanage_2config_8php.html#a23c3d413e56a57bc04d69627a4ed2b14',1,'$TICKET_MAILING_SUPPORT(): config.php'],['../www_2config_8php.html#a23c3d413e56a57bc04d69627a4ed2b14',1,'$TICKET_MAILING_SUPPORT(): config.php']]], - ['_24tid',['$tId',['../classTicket.html#a3eda2fecc2433b6b6b3b957110e937ca',1,'Ticket']]], - ['_24time_5fformat',['$TIME_FORMAT',['../drupal__module_2ryzommanage_2config_8php.html#a613b2c043c06772e7119587b26eb9989',1,'$TIME_FORMAT(): config.php'],['../www_2config_8php.html#a613b2c043c06772e7119587b26eb9989',1,'$TIME_FORMAT(): config.php']]], - ['_24timestamp',['$timestamp',['../classTicket.html#a2b69de9676dd97c675cd4d9bcceb684c',1,'Ticket\$timestamp()'],['../classTicket__Log.html#a2b69de9676dd97c675cd4d9bcceb684c',1,'Ticket_Log\$timestamp()'],['../classTicket__Reply.html#a2b69de9676dd97c675cd4d9bcceb684c',1,'Ticket_Reply\$timestamp()']]], - ['_24tinfoid',['$tInfoId',['../classTicket__Info.html#a4c2ae13b7827d13b9629e3fc57335f8f',1,'Ticket_Info']]], - ['_24title',['$title',['../classTicket.html#ada57e7bb7c152edad18fe2f166188691',1,'Ticket']]], - ['_24tlogid',['$tLogId',['../classTicket__Log.html#a734657bd8aac85b5a33e03646c17eb65',1,'Ticket_Log']]], - ['_24tos_5furl',['$TOS_URL',['../drupal__module_2ryzommanage_2config_8php.html#aef688ce4c627fa2fbd8037fd2cceef78',1,'$TOS_URL(): config.php'],['../www_2config_8php.html#aef688ce4c627fa2fbd8037fd2cceef78',1,'$TOS_URL(): config.php']]], - ['_24treplyid',['$tReplyId',['../classTicket__Reply.html#a29f22c2783e510d4764a99a648a0cc36',1,'Ticket_Reply']]], - ['_24tuserid',['$tUserId',['../classTicket__User.html#a2f1828693b198682ae3e926e63a4c110',1,'Ticket_User']]], - ['_24type',['$type',['../classQuerycache.html#a9a4a6fba2208984cabb3afacadf33919',1,'Querycache']]], - ['_24uid',['$uId',['../classWebUsers.html#a8f11c60ae8f70a5059b97bc0ea9d0de5',1,'WebUsers']]], - ['_24user',['$user',['../classAssigned.html#a598ca4e71b15a1313ec95f0df1027ca5',1,'Assigned\$user()'],['../classIn__Support__Group.html#a598ca4e71b15a1313ec95f0df1027ca5',1,'In_Support_Group\$user()']]], - ['_24user_5fid',['$user_id',['../classTicket__Info.html#af0fcd925f00973e32f7214859dfb3c6b',1,'Ticket_Info']]], - ['_24user_5fposition',['$user_position',['../classTicket__Info.html#afc9fcd144a71e56898632daf43854aa7',1,'Ticket_Info']]], - ['_24view_5fposition',['$view_position',['../classTicket__Info.html#ae325cbe2a7e27757b90b12d595c4dfe9',1,'Ticket_Info']]], - ['_24webpath',['$WEBPATH',['../drupal__module_2ryzommanage_2config_8php.html#a562d30b98806af1e001a3ff855e8890a',1,'$WEBPATH(): config.php'],['../www_2config_8php.html#a562d30b98806af1e001a3ff855e8890a',1,'$WEBPATH(): config.php']]] -]; diff --git a/code/web/docs/ams/html/sgroup__list_8php.html b/code/web/docs/ams/html/sgroup__list_8php.html deleted file mode 100644 index ec06aedcf..000000000 --- a/code/web/docs/ams/html/sgroup__list_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/sgroup_list.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/sgroup_list.php File Reference
    -
    -
    - - - - -

    -Functions

     sgroup_list ()
     This function is beign used to load info that's needed for the sgroup_list page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    sgroup_list ()
    -
    -
    - -

    This function is beign used to load info that's needed for the sgroup_list page.

    -

    check if the person who wants to view this page is a mod/admin, if this is not the case, he will be redirected to an error page. It will return all suppport groups information. Also if the $_GET['delete'] var is set and the user is an admin, he will delete a specific entry.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/show__queue_8php.html b/code/web/docs/ams/html/show__queue_8php.html deleted file mode 100644 index 0ee887073..000000000 --- a/code/web/docs/ams/html/show__queue_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_queue.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_queue.php File Reference
    -
    -
    - - - - -

    -Functions

     show_queue ()
     This function is beign used to load info that's needed for the show_queue page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_queue ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_queue page.

    -

    check if the person who wants to view this page is a mod/admin, if this is not the case, he will be redirected to an error page. if an action is set (this is done by $_GET['action']) it will try to execute it first, actions are: assign a ticket, unassign a ticket an create a queue. There are a few predefined queues which is the 'all tickets' queue, 'archive' queue, 'todo' queue, .. these are passed by $_GET['get']. if $_GET['get'] = create; then it's a custom made queue, this will call the createQueue function which builds the query that we will later use to get the tickets. The tickets fetched will be returned and used in the template. Now why use POST and GET params here and have a createQueue function twice? Well the first time someone creates a queue the POST variables will be used, however after going to the next page it will use the GET params.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/show__reply_8php.html b/code/web/docs/ams/html/show__reply_8php.html deleted file mode 100644 index 0be3d45f5..000000000 --- a/code/web/docs/ams/html/show__reply_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_reply.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_reply.php File Reference
    -
    -
    - - - - -

    -Functions

     show_reply ()
     This function is beign used to load info that's needed for the show_reply page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_reply ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_reply page.

    -

    check if the person is allowed to see the reply, if not he'll be redirected to an error page. data regarding to the reply will be returned by this function that will be used by the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/show__sgroup_8php.html b/code/web/docs/ams/html/show__sgroup_8php.html deleted file mode 100644 index fdffe05d6..000000000 --- a/code/web/docs/ams/html/show__sgroup_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_sgroup.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_sgroup.php File Reference
    -
    -
    - - - - -

    -Functions

     show_sgroup ()
     This function is beign used to load info that's needed for the show_sgroup page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_sgroup ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_sgroup page.

    -

    check if the person browsing this page is a mod/admin, if not he'll be redirected to an error page. if the $_GET['delete'] var is set and the user executing is an admin, an entry will be deleted out of the support group. A list of users that are member of the group will be returned, which can be used by the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/show__ticket_8php.html b/code/web/docs/ams/html/show__ticket_8php.html deleted file mode 100644 index 4d8746ec5..000000000 --- a/code/web/docs/ams/html/show__ticket_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php File Reference
    -
    -
    - - - - -

    -Functions

     show_ticket ()
     This function is beign used to load info that's needed for the show_ticket page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_ticket ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_ticket page.

    -

    check if the person browsing this page is a mod/admin or the ticket creator himself, if not he'll be redirected to an error page. if the $_GET['action'] var is set and the user executing is a mod/admin, it will try to execute the action. The actions here are: forwarding of a ticket, assigning a ticket and unassigning a ticket. This function returns a lot of information that will be used by the template to show the ticket. Mods/admins will be able to also see hidden replies to a ticket.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/show__ticket__info_8php.html b/code/web/docs/ams/html/show__ticket__info_8php.html deleted file mode 100644 index 91ee2707a..000000000 --- a/code/web/docs/ams/html/show__ticket__info_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket_info.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket_info.php File Reference
    -
    -
    - - - - -

    -Functions

     show_ticket_info ()
     This function is beign used to load info that's needed for the show_ticket_info page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_ticket_info ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_ticket_info page.

    -

    check if the person browsing this page is a mod/admin or the ticket creator himself, if not he'll be redirected to an error page. not all tickets have this page related to it, only tickets created ingame will have additional information. The returned info will be used by the template to show the show_ticket_info page.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/show__ticket__log_8php.html b/code/web/docs/ams/html/show__ticket__log_8php.html deleted file mode 100644 index 603f3dbdc..000000000 --- a/code/web/docs/ams/html/show__ticket__log_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket_log.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket_log.php File Reference
    -
    -
    - - - - -

    -Functions

     show_ticket_log ()
     This function is beign used to load info that's needed for the show_ticket_log page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_ticket_log ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_ticket_log page.

    -

    This page shows the logs related to a ticket: who created the ticket, who replied on it, who viewed it, assigned or forwarded it. Only mods/admins are able to browse the log though. The found information is returned so it can be used by the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/support__group_8php.html b/code/web/docs/ams/html/support__group_8php.html deleted file mode 100644 index d2692f073..000000000 --- a/code/web/docs/ams/html/support__group_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/support_group.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Support_Group
     groups moderators & admins together. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/sync_8php.html b/code/web/docs/ams/html/sync_8php.html deleted file mode 100644 index b7b7907da..000000000 --- a/code/web/docs/ams/html/sync_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/sync.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Sync
     handler for performing changes when shard is back online after being offline. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/sync__cron_8php.html b/code/web/docs/ams/html/sync__cron_8php.html deleted file mode 100644 index ede9924a7..000000000 --- a/code/web/docs/ams/html/sync__cron_8php.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/sync_cron.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/sync_cron.php File Reference
    -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/syncing_8php.html b/code/web/docs/ams/html/syncing_8php.html deleted file mode 100644 index 5b4838a79..000000000 --- a/code/web/docs/ams/html/syncing_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/syncing.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/syncing.php File Reference
    -
    -
    - - - - -

    -Functions

     syncing ()
     This function is beign used to load info that's needed for the syncing page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    syncing ()
    -
    -
    - -

    This function is beign used to load info that's needed for the syncing page.

    -

    this function is used for notifying admins that there are unsynced changes, a brief overview of the non syned changes will be shown. The entries are being loaded here so that they can be passed to the template itself. Only admins can browse this page, others will be redirected to an error page.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/tab_a.png b/code/web/docs/ams/html/tab_a.png deleted file mode 100644 index 2d99ef23fed78c7683f0b5aa803d937060d288c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qo)`sjv*C{Z|CmjY;X`^DSv)) z;hc^cTF;t%XWXdwWP5+kt?jQ5uhqKtjd^EY`^^-S;M%tFAj_l)EwVTK)E@1LSD0{e q?a6($SGQTzz1#QBzr0NMKf^0WCX-0bi?u-G89ZJ6T-G@yGywp8?ljB* diff --git a/code/web/docs/ams/html/tab_b.png b/code/web/docs/ams/html/tab_b.png deleted file mode 100644 index b2c3d2be3c7e518fbca6bb30f571882e72fc506d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qk9-Ajv*C{Z|~mbJ)|JfaM8Xd zIP7xAmLwau9@iXhZTrl-TjWj9jM#?{xt`6uU{<)jb9Suc^QnbhJ(o{ib8=j9u0_mE8M7kgF7f<7W7IEf=8(L_qx|g0H;V7iPxm&Q@G7p8W2Kx&iT|YUM=ITC zY<0Qbr;u&AtXD{o@41wH=7&d8=2Z_{M9Tsa=g*t*@A3H$UOlxZk7?f6RUWpx>Fc_L s#LQ{edY3MpIXkMeV^&YV=9fR%8Jv|Kya=#u06K}m)78&qol`;+0RKEt)&Kwi diff --git a/code/web/docs/ams/html/tab_s.png b/code/web/docs/ams/html/tab_s.png deleted file mode 100644 index 978943ac807718de0e69e5a585a8f0a1e5999285..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QZ1e?jv*C{Z|}b5Yzkm-c<7z3 zq^cq0=~}Z;b(!Zvb5Z%sTRFKGlz1=qOFg;myyu?$r`wZb^irPsN1a)6)TwB0r+)wb zPL25;=adu89?fTK`qDR>$D*)b_WOmdKI;Vst02j(hg8%>k diff --git a/code/web/docs/ams/html/tabs.css b/code/web/docs/ams/html/tabs.css deleted file mode 100644 index 21920562a..000000000 --- a/code/web/docs/ams/html/tabs.css +++ /dev/null @@ -1,59 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/code/web/docs/ams/html/ticket_8php.html b/code/web/docs/ams/html/ticket_8php.html deleted file mode 100644 index 09e6d6329..000000000 --- a/code/web/docs/ams/html/ticket_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket
     class that handles most ticket related functions. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__category_8php.html b/code/web/docs/ams/html/ticket__category_8php.html deleted file mode 100644 index e84fafcf0..000000000 --- a/code/web/docs/ams/html/ticket__category_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Category
     Class related to the ticket categories. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__content_8php.html b/code/web/docs/ams/html/ticket__content_8php.html deleted file mode 100644 index 69dbd3954..000000000 --- a/code/web/docs/ams/html/ticket__content_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Content
     Class that handles the content of a reply. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__info_8php.html b/code/web/docs/ams/html/ticket__info_8php.html deleted file mode 100644 index e8e1d079f..000000000 --- a/code/web/docs/ams/html/ticket__info_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_info.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Info
     Class that handles additional info sent by ticket creation ingame. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__log_8php.html b/code/web/docs/ams/html/ticket__log_8php.html deleted file mode 100644 index 645bb27d3..000000000 --- a/code/web/docs/ams/html/ticket__log_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Log
     Class that handles the logging. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__queue_8php.html b/code/web/docs/ams/html/ticket__queue_8php.html deleted file mode 100644 index 6b78f9c7a..000000000 --- a/code/web/docs/ams/html/ticket__queue_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Queue
     Data class that holds a lot of queries that load specific tickets. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__queue__handler_8php.html b/code/web/docs/ams/html/ticket__queue__handler_8php.html deleted file mode 100644 index fa7720f16..000000000 --- a/code/web/docs/ams/html/ticket__queue__handler_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue_handler.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_queue_handler.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Queue_Handler
     returns tickets (queues) that are related in some way. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__reply_8php.html b/code/web/docs/ams/html/ticket__reply_8php.html deleted file mode 100644 index 9594115b5..000000000 --- a/code/web/docs/ams/html/ticket__reply_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_Reply
     handles functions related to replies on tickets. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/ticket__user_8php.html b/code/web/docs/ams/html/ticket__user_8php.html deleted file mode 100644 index e106212f4..000000000 --- a/code/web/docs/ams/html/ticket__user_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Ticket_User
     user entry point in the ticket system. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/todo.html b/code/web/docs/ams/html/todo.html deleted file mode 100644 index e630d4465..000000000 --- a/code/web/docs/ams/html/todo.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Ryzom Account Management System: Todo List - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - -
    -
    -
    -
    Todo List
    -
    -
    -
    -
    Global Helpers ()
    -
    for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead.
    -
    Global Mail_Handler (&$structure)
    -
    take care of the HTML part of incoming emails.
    -
    Class Querycache
    -
    make sure that the querycache class is being used by the sync class and also for inserting the queries themselfs into it. Atm this class isn't used yet if I remember correctly
    -
    Global Ticket ($ticket_id, $newStatus, $newPriority, $author)
    -
    break this function up into a updateStatus (already exists) and updatePriority function and perhaps write a wrapper function for the combo.
    -
    Global Ticket_Log ($ticket_id)
    -
    only use one of the 2 comparable functions in the future and make the other depricated.
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/userlist_8php.html b/code/web/docs/ams/html/userlist_8php.html deleted file mode 100644 index 149a7973c..000000000 --- a/code/web/docs/ams/html/userlist_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php File Reference
    -
    -
    - - - - -

    -Functions

     userlist ()
     This function is beign used to load info that's needed for the userlist page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    userlist ()
    -
    -
    - -

    This function is beign used to load info that's needed for the userlist page.

    -

    this function will return all users by using he pagination class, so that it can be used in the template. Only Mods and Admins can browse this page though.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/users_8php.html b/code/web/docs/ams/html/users_8php.html deleted file mode 100644 index baefc8a11..000000000 --- a/code/web/docs/ams/html/users_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  Users
     handles basic user registration & management functions (shard related). More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/www_2config_8php.html b/code/web/docs/ams/html/www_2config_8php.html deleted file mode 100644 index 2e598c248..000000000 --- a/code/web/docs/ams/html/www_2config_8php.html +++ /dev/null @@ -1,820 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/config.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/config.php File Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Variables

     $cfg ['db']['web']['host'] = 'localhost'
     This file contains all variables needed by other php scripts.
     $cfg ['db']['web']['port'] = '3306'
     $cfg ['db']['web']['name'] = 'ryzom_ams'
     $cfg ['db']['web']['user'] = 'shard'
     $cfg ['db']['web']['pass'] = ''
     $cfg ['db']['lib']['host'] = 'localhost'
     $cfg ['db']['lib']['port'] = '3306'
     $cfg ['db']['lib']['name'] = 'ryzom_ams_lib'
     $cfg ['db']['lib']['user'] = 'shard'
     $cfg ['db']['lib']['pass'] = ''
     $cfg ['db']['shard']['host'] = 'localhost'
     $cfg ['db']['shard']['port'] = '3306'
     $cfg ['db']['shard']['name'] = 'nel'
     $cfg ['db']['shard']['user'] = 'shard'
     $cfg ['db']['shard']['pass'] = ''
     $cfg ['db']['ring']['host'] = 'localhost'
     $cfg ['db']['ring']['port'] = '3306'
     $cfg ['db']['ring']['name'] = 'ring_open'
     $cfg ['db']['ring']['user'] = 'shard'
     $cfg ['db']['ring']['pass'] = ''
     $cfg ['mail']['default_mailserver'] = '{imap.gmail.com:993/imap/ssl}INBOX'
     $cfg ['mail']['default_groupemail'] = 'amsryzom@gmail.com'
     $cfg ['mail']['default_groupname'] = 'Ryzomcore Support'
     $cfg ['mail']['default_username'] = 'amsryzom@gmail.com'
     $cfg ['mail']['default_password'] = 'lol123bol'
     $cfg ['mail']['host'] = "ryzomcore.com"
     $SUPPORT_GROUP_IMAP_CRYPTKEY = "azerty"
     $TICKET_MAILING_SUPPORT = true
     $MAIL_DIR = "/tmp/mail"
     $MAIL_LOG_PATH = "/tmp/mail/cron_mail.log"
     $TOS_URL = "http://createyourtos.com"
     $cfg ['crypt']['key'] = 'Sup3rS3cr3tStuff'
     $cfg ['crypt']['enc_method'] = 'AES-256-CBC'
     $cfg ['crypt']['hash_method'] = "SHA512"
     $ALLOW_UNKNOWN = true
     $CREATE_RING = true
     $AMS_LIB = dirname( dirname( __FILE__ ) ) . '/ams_lib'
     $AMS_TRANS = $AMS_LIB . '/translations'
     $AMS_CACHEDIR = $AMS_LIB . '/cache'
     $SITEBASE = dirname( __FILE__ ) . '/html/'
     $BASE_WEBPATH = 'http://localhost:40917/www/html'
     $IMAGELOC_WEBPATH = 'http://localhost:40917/ams_lib/img'
     $WEBPATH = $BASE_WEBPATH . '/index.php'
     $INGAME_WEBPATH = $BASE_WEBPATH . '/index.php'
     $CONFIG_PATH = dirname( __FILE__ )
     $DEFAULT_LANGUAGE = 'en'
     $TICKET_LOGGING = true
     $TIME_FORMAT = "m-d-Y H:i:s"
     $INGAME_LAYOUT = "basic"
     $FORCE_INGAME = false
    -

    Variable Documentation

    - -
    -
    - - - - -
    $ALLOW_UNKNOWN = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $AMS_CACHEDIR = $AMS_LIB . '/cache'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $AMS_LIB = dirname( dirname( __FILE__ ) ) . '/ams_lib'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $AMS_TRANS = $AMS_LIB . '/translations'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $BASE_WEBPATH = 'http://localhost:40917/www/html'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['host'] = 'localhost'
    -
    -
    - -

    This file contains all variables needed by other php scripts.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['port'] = '3306'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['name'] = 'ryzom_ams'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['user'] = 'shard'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['web']['pass'] = ''
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['host'] = 'localhost'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['port'] = '3306'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['name'] = 'ryzom_ams_lib'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['user'] = 'shard'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['lib']['pass'] = ''
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['host'] = 'localhost'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['port'] = '3306'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['name'] = 'nel'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['user'] = 'shard'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['shard']['pass'] = ''
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['host'] = 'localhost'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['port'] = '3306'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['name'] = 'ring_open'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['user'] = 'shard'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['db']['ring']['pass'] = ''
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_mailserver'] = '{imap.gmail.com:993/imap/ssl}INBOX'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_groupemail'] = 'amsryzom@gmail.com'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_groupname'] = 'Ryzomcore Support'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_username'] = 'amsryzom@gmail.com'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['default_password'] = 'lol123bol'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['mail']['host'] = "ryzomcore.com"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['crypt']['key'] = 'Sup3rS3cr3tStuff'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['crypt']['enc_method'] = 'AES-256-CBC'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $cfg['crypt']['hash_method'] = "SHA512"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $CONFIG_PATH = dirname( __FILE__ )
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $CREATE_RING = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $DEFAULT_LANGUAGE = 'en'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $FORCE_INGAME = false
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $IMAGELOC_WEBPATH = 'http://localhost:40917/ams_lib/img'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $INGAME_LAYOUT = "basic"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $INGAME_WEBPATH = $BASE_WEBPATH . '/index.php'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $MAIL_DIR = "/tmp/mail"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $MAIL_LOG_PATH = "/tmp/mail/cron_mail.log"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $SITEBASE = dirname( __FILE__ ) . '/html/'
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $SUPPORT_GROUP_IMAP_CRYPTKEY = "azerty"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TICKET_LOGGING = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TICKET_MAILING_SUPPORT = true
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TIME_FORMAT = "m-d-Y H:i:s"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $TOS_URL = "http://createyourtos.com"
    -
    -
    - -
    -
    - -
    -
    - - - - -
    $WEBPATH = $BASE_WEBPATH . '/index.php'
    -
    -
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/www_2html_2autoload_2webusers_8php.html b/code/web/docs/ams/html/www_2html_2autoload_2webusers_8php.html deleted file mode 100644 index 9bf55da85..000000000 --- a/code/web/docs/ams/html/www_2html_2autoload_2webusers_8php.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php File Reference
    -
    -
    - - - - -

    -Data Structures

    class  WebUsers
     handles CMS/WWW related functions regarding user management & registration. More...
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/www_2html_2inc_2logout_8php.html b/code/web/docs/ams/html/www_2html_2inc_2logout_8php.html deleted file mode 100644 index d6c860de7..000000000 --- a/code/web/docs/ams/html/www_2html_2inc_2logout_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/logout.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/logout.php File Reference
    -
    -
    - - - - -

    -Functions

     logout ()
     This function is beign used to load info that's needed for the logout page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    logout ()
    -
    -
    - -

    This function is beign used to load info that's needed for the logout page.

    -

    it will just unset & destroy the session

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/www_2html_2inc_2settings_8php.html b/code/web/docs/ams/html/www_2html_2inc_2settings_8php.html deleted file mode 100644 index d49c641ac..000000000 --- a/code/web/docs/ams/html/www_2html_2inc_2settings_8php.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php File Reference
    -
    -
    - - - - - -

    -Functions

     settings ()
     This function is beign used to load info that's needed for the settings page.
     getCountryArray ()
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    getCountryArray ()
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    settings ()
    -
    -
    - -

    This function is beign used to load info that's needed for the settings page.

    -

    check if the person who wants to view this page is a mod/admin or the user to whom te settings belong himself, if this is not the case, he will be redirected to an error page. it will return a lot of information of that user, that's being used for loading the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - diff --git a/code/web/docs/ams/html/www_2html_2inc_2show__user_8php.html b/code/web/docs/ams/html/www_2html_2inc_2show__user_8php.html deleted file mode 100644 index 48f54f06d..000000000 --- a/code/web/docs/ams/html/www_2html_2inc_2show__user_8php.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -Ryzom Account Management System: /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php File Reference - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - -
    -
    Ryzom Account Management System -  1.0 -
    - -
    -
    - - - - - -
    -
    - -
    -
    /home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php File Reference
    -
    -
    - - - - -

    -Functions

     show_user ()
     This function is beign used to load info that's needed for the show_user page.
    -

    Function Documentation

    - -
    -
    - - - - - - - -
    show_user ()
    -
    -
    - -

    This function is beign used to load info that's needed for the show_user page.

    -

    Users can only browse their own user page, while mods/admins can browse all user pages. The current settings of the user being browsed will be loaded, as also their created tickets and this info will be returned so it can be used by the template.

    -
    Author:
    Daan Janssens, mentored by Matthew Lagoe
    - -
    -
    -
    - - - - -
    - -
    - - - - - - - From 64fafda9bc7d2a710b3623cc16f65e346ef1c8ba Mon Sep 17 00:00:00 2001 From: botanic Date: Fri, 15 Aug 2014 03:55:49 -0700 Subject: [PATCH 38/51] updated hgignore --- .hgignore | 29 +++-- .../tools/server/ryzom_ams/www/config.php | 118 ++++++++++++++++++ .../tools/server/ryzom_ams/www/is_installed | 0 3 files changed, 134 insertions(+), 13 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/config.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/is_installed diff --git a/.hgignore b/.hgignore index 829f8812b..1f8453d8a 100644 --- a/.hgignore +++ b/.hgignore @@ -204,16 +204,7 @@ code/nel/tools/pacs/build_rbank/build_rbank code/ryzom/common/data_leveldesign/leveldesign/game_element/xp_table/skills.skill_tree code/ryzom/common/data_leveldesign/leveldesign/game_element/xp_table/xptable.xp_table code/ryzom/tools/server/sql/ryzom_admin_default_data.sql -code/ryzom/tools/server/ryzom_ams/drupal -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/autoload -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/configs -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/cron -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/img -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/plugins -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/smarty -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/translations -code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/libinclude.php -code/ryzom/tools/server/ryzom_ams/www/html/templates_c + # Linux server compile code/ryzom/server/src/entities_game_service/entities_game_service @@ -227,11 +218,23 @@ code/ryzom/server/src/ryzom_welcome_service/ryzom_welcome_service code/ryzom/server/src/tick_service/tick_service # WebTT temp dir code/ryzom/tools/server/www/webtt/app/tmp -code\ryzom\tools\server\ryzom_ams\old # AMS ignore -code/ryzom/tools/server/ryzom_ams/www/config.php -code/ryzom/tools/server/ryzom_ams/www/is_installed +code/web/public_php/ams/is_installed +code/web/docs/ams/html +code/web/public_php/ams/templates_c +code/ryzom/tools/server/ryzom_ams/drupal +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/autoload +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/configs +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/cron +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/img +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/plugins +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/smarty +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/translations +code/ryzom/tools/server/ryzom_ams/drupal_module/ryzommanage/ams_lib/libinclude.php +code/ryzom/tools/server/ryzom_ams/old + + #tools and external dir's external diff --git a/code/ryzom/tools/server/ryzom_ams/www/config.php b/code/ryzom/tools/server/ryzom_ams/www/config.php new file mode 100644 index 000000000..7ade3efb6 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/config.php @@ -0,0 +1,118 @@ + Date: Sat, 16 Aug 2014 14:51:29 +0200 Subject: [PATCH 39/51] Zone light exporter adjust --- code/nel/tools/build_gamedata/all_install_dev.bat | 9 +++++++++ .../build_gamedata/processes/zone_light/1_export.py | 1 + 2 files changed, 10 insertions(+) create mode 100644 code/nel/tools/build_gamedata/all_install_dev.bat diff --git a/code/nel/tools/build_gamedata/all_install_dev.bat b/code/nel/tools/build_gamedata/all_install_dev.bat new file mode 100644 index 000000000..6791bbea0 --- /dev/null +++ b/code/nel/tools/build_gamedata/all_install_dev.bat @@ -0,0 +1,9 @@ +title Ryzom Core: 3_install.py +3_install.py +title Ryzom Core: a1_worldedit_data.py +a1_worldedit_data.py +title Ryzom Core: b1_client_dev.py +b1_client_dev.py +title Ryzom Core: b2_shard_data.py +b2_shard_data.py +title Ryzom Core: Ready diff --git a/code/nel/tools/build_gamedata/processes/zone_light/1_export.py b/code/nel/tools/build_gamedata/processes/zone_light/1_export.py index cede7d658..615a4dffa 100755 --- a/code/nel/tools/build_gamedata/processes/zone_light/1_export.py +++ b/code/nel/tools/build_gamedata/processes/zone_light/1_export.py @@ -55,6 +55,7 @@ for dir in WaterMapSourceDirectories: destDir = DatabaseDirectory + "/" + dir mkPath(log, destDir) copyFilesExtNoTreeIfNeeded(log, srcDir, destDir, ".tga") + copyFilesExtNoTreeIfNeeded(log, srcDir, destDir, ".png") printLog(log, "") log.close() From 5bc60987be583e2dce2cdf6b43d5b44af353ee67 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sat, 16 Aug 2014 14:51:29 +0200 Subject: [PATCH 40/51] Maxscript selection clear fix --- .../build_gamedata/generators/max_exporter_scripts/clod.ms | 1 + .../build_gamedata/generators/max_exporter_scripts/cmb.ms | 1 + .../tools/build_gamedata/generators/max_exporter_scripts/ig.ms | 2 ++ .../generators/max_exporter_scripts/pacs_prim.ms | 1 + .../build_gamedata/generators/max_exporter_scripts/shape.ms | 1 + .../build_gamedata/generators/max_exporter_scripts/veget.ms | 1 + .../build_gamedata/generators/max_exporter_scripts/zone.ms | 1 + .../build_gamedata/processes/clodbank/maxscript/clod_export.ms | 1 + .../tools/build_gamedata/processes/ig/maxscript/ig_export.ms | 2 ++ .../build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms | 3 +++ .../processes/pacs_prim/maxscript/pacs_prim_export.ms | 1 + .../build_gamedata/processes/rbank/maxscript/cmb_export.ms | 1 + .../build_gamedata/processes/shape/maxscript/shape_export.ms | 1 + .../build_gamedata/processes/veget/maxscript/veget_export.ms | 1 + .../build_gamedata/processes/zone/maxscript/zone_export.ms | 1 + 15 files changed, 19 insertions(+) diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/clod.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/clod.ms index 29744c7d1..68c8455d6 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/clod.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/clod.ms @@ -56,6 +56,7 @@ fn runNelMaxExport inputMaxFile = -- unselect max select none + clearSelection() -- Exported object count exported = 0 diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/cmb.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/cmb.ms index 2a7492c29..40feab761 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/cmb.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/cmb.ms @@ -36,6 +36,7 @@ fn runNelMaxExport inputMaxFile = -- Select all collision mesh max select none + clearSelection() for m in geometry do ( if (isToBeExported m) == true then diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/ig.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/ig.ms index 7c9563088..df0ecf7fc 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/ig.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/ig.ms @@ -61,6 +61,7 @@ fn runNelMaxExport inputMaxFile = -- unselect max select none + clearSelection() -- Exported object count exported = 0 @@ -109,6 +110,7 @@ fn runNelMaxExport inputMaxFile = ( -- Select none max select none + clearSelection() -- Select all node in this ig for node in geometry do diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/pacs_prim.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/pacs_prim.ms index 93e94de19..ea730c0b4 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/pacs_prim.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/pacs_prim.ms @@ -10,6 +10,7 @@ fn runNelMaxExport inputMaxFile = -- Select none max select none + clearSelection() -- Select all PACS primitives for i in geometry do diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/shape.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/shape.ms index c1f4761ff..d8d6c8d9d 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/shape.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/shape.ms @@ -199,6 +199,7 @@ fn runNelMaxExportSub inputMaxFile retryCount = -- unselect max select none + clearSelection() -- Exported object count exported = 0 diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/veget.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/veget.ms index f0d5cd584..22c49013a 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/veget.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/veget.ms @@ -46,6 +46,7 @@ fn runNelMaxExport inputMaxFile = -- unselect max select none + clearSelection() -- Exported object count exported = 0 diff --git a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/zone.ms b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/zone.ms index d4ecbe275..338d48733 100755 --- a/code/nel/tools/build_gamedata/generators/max_exporter_scripts/zone.ms +++ b/code/nel/tools/build_gamedata/generators/max_exporter_scripts/zone.ms @@ -40,6 +40,7 @@ fn runNelMaxExport inputMaxFile = -- Select none max select none + clearSelection() -- Found it ? find = false diff --git a/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms b/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms index f01a973e4..a8693dc8a 100755 --- a/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms +++ b/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms @@ -122,6 +122,7 @@ fn runNelMaxExport inputMaxFile = -- unselect max select none + clearSelection() -- Exported object count exported = 0 diff --git a/code/nel/tools/build_gamedata/processes/ig/maxscript/ig_export.ms b/code/nel/tools/build_gamedata/processes/ig/maxscript/ig_export.ms index 526d06dc8..65cb38c4a 100755 --- a/code/nel/tools/build_gamedata/processes/ig/maxscript/ig_export.ms +++ b/code/nel/tools/build_gamedata/processes/ig/maxscript/ig_export.ms @@ -127,6 +127,7 @@ fn runNelMaxExport inputMaxFile = -- unselect max select none + clearSelection() -- Exported object count exported = 0 @@ -175,6 +176,7 @@ fn runNelMaxExport inputMaxFile = ( -- Select none max select none + clearSelection() -- Select all node in this ig for node in geometry do diff --git a/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms b/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms index 4b25c1427..933468459 100755 --- a/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms +++ b/code/nel/tools/build_gamedata/processes/ligo/maxscript/nel_ligo_export.ms @@ -228,6 +228,7 @@ fn exportCollisionsFromZone outputNelDir filename = ( -- Select all collision mesh max select none + clearSelection() for m in geometry do ( if (isToBeExportedCollision m) == true then @@ -311,6 +312,7 @@ fn exportInstanceGroupFromZone inputFile outputPath igName transitionZone cellSi -- unselect max select none + clearSelection() -- Exported object count exported = 0 @@ -372,6 +374,7 @@ fn exportInstanceGroupFromZone inputFile outputPath igName transitionZone cellSi ( -- Select none max select none + clearSelection() for node in objects where classOf node == XRefObject do ( diff --git a/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms b/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms index ddfc0014a..750af80d9 100755 --- a/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms +++ b/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms @@ -76,6 +76,7 @@ fn runNelMaxExport inputMaxFile = -- Select none max select none + clearSelection() -- Select all PACS primitives for i in geometry do diff --git a/code/nel/tools/build_gamedata/processes/rbank/maxscript/cmb_export.ms b/code/nel/tools/build_gamedata/processes/rbank/maxscript/cmb_export.ms index 74cf3a8dd..59b444db3 100755 --- a/code/nel/tools/build_gamedata/processes/rbank/maxscript/cmb_export.ms +++ b/code/nel/tools/build_gamedata/processes/rbank/maxscript/cmb_export.ms @@ -102,6 +102,7 @@ fn runNelMaxExport inputMaxFile = -- Select all collision mesh max select none + clearSelection() for m in geometry do ( if (isToBeExported m) == true then diff --git a/code/nel/tools/build_gamedata/processes/shape/maxscript/shape_export.ms b/code/nel/tools/build_gamedata/processes/shape/maxscript/shape_export.ms index e979f6b0d..16c6dcec9 100755 --- a/code/nel/tools/build_gamedata/processes/shape/maxscript/shape_export.ms +++ b/code/nel/tools/build_gamedata/processes/shape/maxscript/shape_export.ms @@ -265,6 +265,7 @@ fn runNelMaxExportSub inputMaxFile retryCount = -- unselect max select none + clearSelection() -- Exported object count exported = 0 diff --git a/code/nel/tools/build_gamedata/processes/veget/maxscript/veget_export.ms b/code/nel/tools/build_gamedata/processes/veget/maxscript/veget_export.ms index 828a78d42..cbc2f2177 100755 --- a/code/nel/tools/build_gamedata/processes/veget/maxscript/veget_export.ms +++ b/code/nel/tools/build_gamedata/processes/veget/maxscript/veget_export.ms @@ -112,6 +112,7 @@ fn runNelMaxExport inputMaxFile = -- unselect max select none + clearSelection() -- Exported object count exported = 0 diff --git a/code/nel/tools/build_gamedata/processes/zone/maxscript/zone_export.ms b/code/nel/tools/build_gamedata/processes/zone/maxscript/zone_export.ms index 71f63e45b..3a0ebf8fe 100755 --- a/code/nel/tools/build_gamedata/processes/zone/maxscript/zone_export.ms +++ b/code/nel/tools/build_gamedata/processes/zone/maxscript/zone_export.ms @@ -103,6 +103,7 @@ fn runNelMaxExport inputMaxFile = -- Select none max select none + clearSelection() -- Found it ? find = false From 41f6e70dc93f6e7a894c0c8ed022f4c7fbd646c3 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 17 Aug 2014 15:39:30 +0200 Subject: [PATCH 41/51] Fixed #172 XML floating point serialization not using neutral culture --- code/nel/include/nel/misc/i_xml.h | 3 +++ code/nel/src/misc/i_xml.cpp | 43 +++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/code/nel/include/nel/misc/i_xml.h b/code/nel/include/nel/misc/i_xml.h index a9452e341..cf2527e21 100644 --- a/code/nel/include/nel/misc/i_xml.h +++ b/code/nel/include/nel/misc/i_xml.h @@ -232,6 +232,9 @@ private: // If not NULL, binary mode detected, use this stream in serials IStream *_BinaryStream; + + // System dependant structure for locale + void* _Locale; }; diff --git a/code/nel/src/misc/i_xml.cpp b/code/nel/src/misc/i_xml.cpp index d8925ddef..3b7f0f9e2 100644 --- a/code/nel/src/misc/i_xml.cpp +++ b/code/nel/src/misc/i_xml.cpp @@ -24,6 +24,11 @@ // Include from libxml2 #include +#if defined(NL_OS_WINDOWS) && defined(NL_COMP_VC_VERSION) && NL_COMP_VC_VERSION >= 80 +#define USE_LOCALE_ATOF +#include +#endif + using namespace std; #define NLMISC_READ_BUFFER_SIZE 1024 @@ -46,6 +51,22 @@ const char SEPARATOR = ' '; serialSeparatedBufferIn( number_as_string ); \ dest = (thetype)convfunc( number_as_string.c_str() ); +#ifdef USE_LOCALE_ATOF + +#define readnumberlocale(dest,thetype,digits,convfunc) \ + string number_as_string; \ + serialSeparatedBufferIn( number_as_string ); \ + dest = (thetype)convfunc( number_as_string.c_str(), (_locale_t)_Locale ); + +#define nl_atof _atof_l + +#else + +#define readnumberlocale(dest,thetype,digits,convfunc) readnumber(dest,thetype,digits,convfunc) +#define nl_atof atof + +#endif + // *************************************************************************** inline void CIXml::flushContentString () @@ -70,6 +91,13 @@ CIXml::CIXml () : IStream (true /* Input mode */) _ErrorString = ""; _TryBinaryMode = false; _BinaryStream = NULL; + +#ifdef USE_LOCALE_ATOF + // create C numeric locale + _Locale = _create_locale(LC_NUMERIC, "C"); +#else + _Locale = NULL; +#endif } // *************************************************************************** @@ -85,6 +113,13 @@ CIXml::CIXml (bool tryBinaryMode) : IStream (true /* Input mode */) _ErrorString = ""; _TryBinaryMode = tryBinaryMode; _BinaryStream = NULL; + +#ifdef USE_LOCALE_ATOF + // create C numeric locale + _Locale = _create_locale(LC_NUMERIC, "C"); +#else + _Locale = NULL; +#endif } // *************************************************************************** @@ -119,6 +154,10 @@ void CIXml::release () _ErrorString = ""; resetPtrTable(); + +#ifdef USE_LOCALE_ATOF + if (_Locale) _free_locale((_locale_t)_Locale); +#endif } // *************************************************************************** @@ -546,7 +585,7 @@ void CIXml::serial(float &b) } else { - readnumber( b, float, 128, atof ); + readnumberlocale( b, float, 128, nl_atof ); } } @@ -560,7 +599,7 @@ void CIXml::serial(double &b) } else { - readnumber( b, double, 128, atof ); + readnumberlocale( b, double, 128, nl_atof ); } } From 75e28415193e7923a18f5bc813107d42f40acbdb Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 17 Aug 2014 15:58:42 +0200 Subject: [PATCH 42/51] Fix continent path bug --- code/nel/tools/3d/zone_lighter/zone_lighter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/nel/tools/3d/zone_lighter/zone_lighter.cpp b/code/nel/tools/3d/zone_lighter/zone_lighter.cpp index 9b6df0900..1add65a9d 100644 --- a/code/nel/tools/3d/zone_lighter/zone_lighter.cpp +++ b/code/nel/tools/3d/zone_lighter/zone_lighter.cpp @@ -202,7 +202,7 @@ static void loadIGFromContinent(NLMISC::CConfigFile ¶meter, std::list Date: Sun, 17 Aug 2014 16:02:51 +0200 Subject: [PATCH 43/51] Additional fix #172 set _Locale to NULL after release --- code/nel/src/misc/i_xml.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/code/nel/src/misc/i_xml.cpp b/code/nel/src/misc/i_xml.cpp index 3b7f0f9e2..8a624dd5f 100644 --- a/code/nel/src/misc/i_xml.cpp +++ b/code/nel/src/misc/i_xml.cpp @@ -157,6 +157,7 @@ void CIXml::release () #ifdef USE_LOCALE_ATOF if (_Locale) _free_locale((_locale_t)_Locale); + _Locale = NULL; #endif } From 31e9934ba7a23d865f1c27c4d02bb3d71b945d01 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 17 Aug 2014 16:05:51 +0200 Subject: [PATCH 44/51] Changed #172 XML floating point serialization not using neutral culture --- code/nel/src/misc/i_xml.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/nel/src/misc/i_xml.cpp b/code/nel/src/misc/i_xml.cpp index 3b7f0f9e2..ee3f39a89 100644 --- a/code/nel/src/misc/i_xml.cpp +++ b/code/nel/src/misc/i_xml.cpp @@ -128,6 +128,10 @@ CIXml::~CIXml () { // Release release (); + +#ifdef USE_LOCALE_ATOF + if (_Locale) _free_locale((_locale_t)_Locale); +#endif } // *************************************************************************** @@ -154,10 +158,6 @@ void CIXml::release () _ErrorString = ""; resetPtrTable(); - -#ifdef USE_LOCALE_ATOF - if (_Locale) _free_locale((_locale_t)_Locale); -#endif } // *************************************************************************** From e0e1953f4144d8b26cb811f6b259159db0328076 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 17 Aug 2014 16:22:56 +0200 Subject: [PATCH 45/51] Crashfix in case pacs_prim are exported into .ig --- code/nel/tools/3d/zone_lighter/zone_lighter.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/nel/tools/3d/zone_lighter/zone_lighter.cpp b/code/nel/tools/3d/zone_lighter/zone_lighter.cpp index 1add65a9d..b3c6807c1 100644 --- a/code/nel/tools/3d/zone_lighter/zone_lighter.cpp +++ b/code/nel/tools/3d/zone_lighter/zone_lighter.cpp @@ -699,6 +699,12 @@ int main(int argc, char* argv[]) if(group->getInstance(instance).DontCastShadow || group->getInstance(instance).DontCastShadowForExterior) continue; + if (toLower (CFile::getExtension (name)) == "pacs_prim") + { + nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str()); + continue; + } + // PS ? if (toLower (CFile::getExtension (name)) == "ps") continue; From 8f7931d6a833acd290ce52548c2b11db6a242fe4 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 17 Aug 2014 16:41:09 +0200 Subject: [PATCH 46/51] Crashfix in case pacs_prim are exported into .ig --- code/nel/tools/3d/zone_ig_lighter/zone_ig_lighter.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/nel/tools/3d/zone_ig_lighter/zone_ig_lighter.cpp b/code/nel/tools/3d/zone_ig_lighter/zone_ig_lighter.cpp index 0010d5179..a6636730f 100644 --- a/code/nel/tools/3d/zone_ig_lighter/zone_ig_lighter.cpp +++ b/code/nel/tools/3d/zone_ig_lighter/zone_ig_lighter.cpp @@ -410,6 +410,12 @@ int main(int argc, char* argv[]) if(group->getInstance(instance).DontCastShadow || group->getInstance(instance).DontCastShadowForExterior) continue; + if (toLower (CFile::getExtension (name)) == "pacs_prim") + { + nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str()); + continue; + } + // Add a .shape at the end ? if (!name.empty()) { From d4b7a3cf8acdff5e756196f563cc13ad9002abfb Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 17 Aug 2014 16:48:51 +0200 Subject: [PATCH 47/51] Crashfix in case pacs_prim are exported into .ig --- code/nel/src/3d/instance_lighter.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/nel/src/3d/instance_lighter.cpp b/code/nel/src/3d/instance_lighter.cpp index f754ebb8b..d21f80e4e 100644 --- a/code/nel/src/3d/instance_lighter.cpp +++ b/code/nel/src/3d/instance_lighter.cpp @@ -408,6 +408,12 @@ void CInstanceLighter::light (const CInstanceGroup &igIn, CInstanceGroup &igOut, string name= _Instances[i].Name; bool shapeFound= true; + if (toLower (CFile::getExtension (name)) == "pacs_prim") + { + nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str()); + continue; + } + // Try to find the shape in the UseShapeMap. std::map::const_iterator iteMap= lightDesc.UserShapeMap.find (name); From 9a19f2041b4d5e83a855374a26ff2ff7481a62b6 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 17 Aug 2014 19:37:20 +0200 Subject: [PATCH 48/51] Crashfix in case pacs_prim are exported into .ig --- code/nel/tools/3d/ig_lighter_lib/ig_lighter_lib.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/nel/tools/3d/ig_lighter_lib/ig_lighter_lib.cpp b/code/nel/tools/3d/ig_lighter_lib/ig_lighter_lib.cpp index 4365eab9b..8286a10e6 100644 --- a/code/nel/tools/3d/ig_lighter_lib/ig_lighter_lib.cpp +++ b/code/nel/tools/3d/ig_lighter_lib/ig_lighter_lib.cpp @@ -167,6 +167,12 @@ void CIgLighterLib::lightIg(CInstanceLighter &instanceLighter, string name= igIn.getShapeName(i); bool shapeFound= true; + if (toLower (CFile::getExtension (name)) == "pacs_prim") + { + nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str()); + continue; + } + // Try to find the shape in the UseShapeMap. std::map::const_iterator iteMap= lightDesc.UserShapeMap.find (name); From 0e0de8ec52698c7aae3bf829bfb88058e596ae5e Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 17 Aug 2014 19:40:43 +0200 Subject: [PATCH 49/51] Fix shape lightmap optimize --- code/nel/tools/build_gamedata/processes/shape/0_setup.py | 1 + code/nel/tools/build_gamedata/processes/shape/2_build.py | 7 +++++-- code/nel/tools/build_gamedata/processes/shape/3_install.py | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/nel/tools/build_gamedata/processes/shape/0_setup.py b/code/nel/tools/build_gamedata/processes/shape/0_setup.py index 71dfd097e..941d07531 100755 --- a/code/nel/tools/build_gamedata/processes/shape/0_setup.py +++ b/code/nel/tools/build_gamedata/processes/shape/0_setup.py @@ -69,6 +69,7 @@ if BuildShadowSkinEnabled: printLog(log, ">>> Setup build directories <<<") mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory) +mkPath(log, ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory) diff --git a/code/nel/tools/build_gamedata/processes/shape/2_build.py b/code/nel/tools/build_gamedata/processes/shape/2_build.py index 48a658378..1a9f668f8 100755 --- a/code/nel/tools/build_gamedata/processes/shape/2_build.py +++ b/code/nel/tools/build_gamedata/processes/shape/2_build.py @@ -77,16 +77,19 @@ else: # copy lightmap_not_optimized to lightmap printLog(log, ">>> Optimize lightmaps <<<") loPathLightmapsOriginal = ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory +loPathShapesOriginal = ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory mkPath(log, loPathLightmapsOriginal) loPathLightmaps = ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory -loPathShapes = ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory +loPathShapes = ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory loPathTags = ExportBuildDirectory + "/" + ShapeTagExportDirectory mkPath(log, loPathLightmaps) mkPath(log, loPathShapes) mkPath(log, loPathTags) -if needUpdateDirByTagLog(log, loPathLightmapsOriginal, ".txt", loPathLightmaps, ".txt") or needUpdateDirNoSubdir(log, loPathLightmapsOriginal, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathShapes, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathTags, loPathLightmaps): +if needUpdateDirByTagLog(log, loPathLightmapsOriginal, ".txt", loPathLightmaps, ".txt") or needUpdateDirNoSubdir(log, loPathLightmapsOriginal, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathShapesOriginal, loPathShapes) or needUpdateDirNoSubdir(log, loPathShapes, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathTags, loPathLightmaps): removeFilesRecursive(log, loPathLightmaps) copyFiles(log, loPathLightmapsOriginal, loPathLightmaps) + removeFilesRecursive(log, loPathShapes) + copyFiles(log, loPathShapesOriginal, loPathShapes) # Optimize lightmaps if any. Additionnaly, output a file indicating which lightmaps are 8 bits # lightmap_optimizer [path_tags] [path_flag8bit] subprocess.call([ LightmapOptimizer, loPathLightmaps, loPathShapes, loPathTags, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt" ]) diff --git a/code/nel/tools/build_gamedata/processes/shape/3_install.py b/code/nel/tools/build_gamedata/processes/shape/3_install.py index cb93a443b..f6265a1a6 100755 --- a/code/nel/tools/build_gamedata/processes/shape/3_install.py +++ b/code/nel/tools/build_gamedata/processes/shape/3_install.py @@ -46,8 +46,8 @@ printLog(log, "") printLog(log, ">>> Install shape <<<") installPath = InstallDirectory + "/" + ShapeInstallDirectory mkPath(log, installPath) -mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory) -copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, installPath, ".shape") +mkPath(log, ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory) +copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory, installPath, ".shape") mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory) copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, installPath, ".shape") copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, installPath, ".dds") From c9f54c38061a6b2a5b0c4679c58387b1c11805b9 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Mon, 18 Aug 2014 07:13:15 +0530 Subject: [PATCH 50/51] Improved documentation with doxygen generated doc --- code/web/private_php/ams/autoload/dblayer.php | 97 ++++++++++++------- .../private_php/ams/autoload/plugincache.php | 26 +++-- .../web/private_php/ams/autoload/rest_api.php | 8 +- .../private_php/ams/autoload/ticket_log.php | 2 +- .../ams/plugins/API_key_management/.info | 2 +- .../public_php/ams/func/activate_plugin.php | 8 +- .../public_php/ams/func/deactivate_plugin.php | 10 +- .../web/public_php/ams/func/delete_plugin.php | 8 +- .../public_php/ams/func/install_plugin.php | 41 ++++++-- .../web/public_php/ams/func/update_plugin.php | 6 +- .../web/public_php/ams/inc/plugins_update.php | 2 +- 11 files changed, 146 insertions(+), 64 deletions(-) diff --git a/code/web/private_php/ams/autoload/dblayer.php b/code/web/private_php/ams/autoload/dblayer.php index 43282789e..7c4c5435c 100644 --- a/code/web/private_php/ams/autoload/dblayer.php +++ b/code/web/private_php/ams/autoload/dblayer.php @@ -3,13 +3,36 @@ * Handles the database connections. It uses PDO to connect to the different databases. It will use the argument of the constructor to setup a connection to the database * with the matching entry in the $cfg global variable. * + * --> First create an object of dblayer --> $db = new DBLayer('short database name used in config') + * + * --> Insert --> $db->insert( $tb_name, $data ) + * $tb_name = table name in which we want to insert data + * $data = array of data that needs to be inserted in format('fieldname' => $value) where fieldname must be a field in that table. + * + * --> select --> $db->select( $tb_name, $data, $where ) + * $tb_name = table name which we want to select + * $data = array of data which is then required in WHERE clause in format array('fieldname'=>$value) fieldname must be a field in that table. + * $where = string in format ('fieldname=:fieldname') where :fieldname takes it's value from $data array. + * + * --> update --> $db->update( $tb_name, $data, $where ) + * $tb_name = table name which we want to update + * $data = array of data which contains the filelds that need to be updated with their values in the format('fieldname' => $value,...) where fieldname must be a field in that table. + * $where = string contains the filename with a value at that field in the format ('fieldname = $value') where fieldname must be a field in that table and $value is value respect to that field. + * + * --> delete --> $db->delete( $tb_name, $data, $where ) + * $tb_name = table name where we want to delete. + * $data = array of data which is then required in WHERE clause in format array('fieldname'=> $value) where fieldname must be a field in that table. + * $where = string in format ('fieldname=:fieldname') where :fieldname takes it's value from $data array. + * + * * @author Daan Janssens, mentored by Matthew Lagoe + * */ class DBLayer { private $PDO; /** - * *< The PDO object, instantiated by the constructor + * The PDO object, instantiated by the constructor */ /** @@ -17,6 +40,7 @@ class DBLayer { * Instantiates the PDO object attribute by connecting to the arguments matching database(the db info is stored in the $cfg global var) * * @param $db String, the name of the databases entry in the $cfg global var. + * @param $dbn String, the name of the databases entry in the $cfg global var if $db referenced to an action(install etc). */ function __construct( $db, $dbn = null ) { @@ -49,10 +73,10 @@ class DBLayer { } /** - * execute a query that doesn't have any parameters + * Execute a query that doesn't have any parameters. * - * @param $query the mysql query - * @return returns a PDOStatement object + * @param $query the mysql query. + * @return returns a PDOStatement object. */ public function executeWithoutParams( $query ) { $statement = $this -> PDO -> prepare( $query ); @@ -61,11 +85,11 @@ class DBLayer { } /** - * execute a query that has parameters + * Execute a query that has parameters. * - * @param $query the mysql query - * @param $params the parameters that are being used by the query - * @return returns a PDOStatement object + * @param $query the mysql query. + * @param $params the parameters that are being used by the query. + * @return returns a PDOStatement object. */ public function execute( $query, $params ) { $statement = $this -> PDO -> prepare( $query ); @@ -74,10 +98,10 @@ class DBLayer { } /** - * execute a query (an insertion query) that has parameters and return the id of it's insertion + * Insert function which returns id of the inserting field. * - * @param $query the mysql query - * @param $params the parameters that are being used by the query + * @param $tb_name table name where we want to insert data. + * @param $data the parameters that are being inserted into table. * @return returns the id of the last inserted element. */ public function executeReturnId( $tb_name, $data ) { @@ -104,12 +128,14 @@ class DBLayer { } /** - * Select function using prepared statement + * Select function using prepared statement. + * For selecting particular fields. * - * @param string $tb_name Table Name to Select - * @param array $data Associative array - * @param string $where where to select - * @return statement object + * @param string $param field to select, can be multiple fields. + * @param string $tb_name Table Name to Select. + * @param array $data array of data to be used in WHERE clause in format('fieldname'=>$value). 'fieldname' must be a field in that table. + * @param string $where where to select. + * @return statement object. */ public function selectWithParameter( $param, $tb_name, $data, $where ) { @@ -129,12 +155,13 @@ class DBLayer { } /** - * Select function using prepared statement + * Select function using prepared statement. + * For selecting all fields in a table. * - * @param string $tb_name Table Name to Select - * @param array $data Associative array - * @param string $where where to select - * @return statement object + * @param string $tb_name Table Name to Select. + * @param array $data array of data to be used with WHERE part in format('fieldname'=>$value,...). 'fieldname' must be a field in that table. + * @param string $where where to select in format('fieldname=:fieldname' AND ...). + * @return statement object. */ public function select( $tb_name, $data , $where ) { @@ -154,12 +181,12 @@ class DBLayer { } /** - * Update function with prepared statement + * Update function with prepared statement. * - * @param string $tb_name name of the table - * @param array $data associative array with values - * @param string $where where part - * @throws Exception error in updating + * @param string $tb_name name of the table on which operation to be performed. + * @param array $data array of data in format('fieldname' => $value,...).Here, only those fields must be stored which needs to be updated. + * @param string $where where part in format ('fieldname'= $value AND ...). 'fieldname' must be a field in that table. + * @throws Exception error in updating. */ public function update( $tb_name, $data, $where ) { @@ -190,10 +217,11 @@ class DBLayer { } /** - * insert function using prepared statements + * insert function using prepared statements. * - * @param string $tb_name Name of the table to insert in - * @param array $data Associative array of data to insert + * @param string $tb_name Name of the table on which operation to be performed. + * @param array $data array of data to insert in format('fieldname' => $value,....). 'fieldname' must be a field in that table. + * @throws error in inserting. */ public function insert( $tb_name, $data ) { @@ -216,16 +244,17 @@ class DBLayer { { // for rolling back the changes during transaction $this -> PDO -> rollBack(); - throw new Exception( "error in inseting" ); + throw new Exception( "error in inserting" ); } } /** - * Delete database entery using prepared statement + * Delete database entery using prepared statement. * - * @param string $tb_name - * @param string $where - * @throws error in deleting + * @param string $tb_name table name on which operations to be performed. + * @param $data array with values in the format('fieldname'=> $value,...). 'fieldname' must be a field in that table. + * @param string $where condition based on $data array in the format('fieldname=:fieldname' AND ...). + * @throws error in deleting. */ public function delete( $tb_name, $data, $where ) { diff --git a/code/web/private_php/ams/autoload/plugincache.php b/code/web/private_php/ams/autoload/plugincache.php index c90665bc1..8ff258513 100644 --- a/code/web/private_php/ams/autoload/plugincache.php +++ b/code/web/private_php/ams/autoload/plugincache.php @@ -2,7 +2,7 @@ /** * API for loading and interacting with plugins - * contains getters and setters + * contains getters and setters. * * @author shubham meena mentored by Matthew Lagoe */ @@ -14,11 +14,11 @@ class Plugincache { private $plugin_status; private $plugin_info = array(); private $update_info = array(); + /** * A constructor. * Empty constructor */ - public function __construct() { } @@ -207,10 +207,12 @@ class Plugincache { } /** - * returns plugin information with respect to the id + * Returns plugin information with respect to the id. * - * @param id $ plugin id - * @return field info for the plugin + * @param $id plugin id. + * @param $fieldName string plugin field to return + * + * @return info field from the db. */ public static function pluginInfoUsingId( $id, $fieldName ) { @@ -221,9 +223,9 @@ class Plugincache { } /** - * function provides list of active plugins + * Function provides list of active plugins * - * @return $ac_plugins list of active plugins + * @return list of active plugins */ public static function activePlugins() { @@ -235,9 +237,15 @@ class Plugincache { /** * function to load hooks for the active plugins - * and return the contents in the hooks in an array + * and return the contents get from them. + * + * -->Get the list of active plugins then call the global + * hooks exists in the plugins hook file ($pluginName.php). + * -->Collect the contents from the hooks and associate within + * array with key referenced plugin name. + * -->return the content to use with smarty template loader * - * @return $content content available in hooks + * @return $content content get from hooks */ public static function loadHooks() { diff --git a/code/web/private_php/ams/autoload/rest_api.php b/code/web/private_php/ams/autoload/rest_api.php index 74281c6f6..e35586042 100644 --- a/code/web/private_php/ams/autoload/rest_api.php +++ b/code/web/private_php/ams/autoload/rest_api.php @@ -5,7 +5,7 @@ * * Request for the given url using cURL * and send the AccessToken for authentication - * to make public access for the user + * to make public access for the user. * * @author Shubham Meena, mentored by Matthew Lagoe */ @@ -13,12 +13,14 @@ class Rest_Api { /** - * Makes a request using cURL with authentication headers and returns the response. + * Makes a request using cURL with authentication headers , data to post and returns the response. * * @param $url where request is to be sent * @param $applicationKey user generated key * @param $host host for the website - * @return URL response. + * @param $data data to send using POST request + * + * @return $response URL response. */ public function request( $url , $applicationKey, $host , $data ) { diff --git a/code/web/private_php/ams/autoload/ticket_log.php b/code/web/private_php/ams/autoload/ticket_log.php index 6693fe3ce..f83d4b29e 100644 --- a/code/web/private_php/ams/autoload/ticket_log.php +++ b/code/web/private_php/ams/autoload/ticket_log.php @@ -143,7 +143,7 @@ class Ticket_Log{ /** * loads the object's attributes. * loads the object's attributes by giving a ticket_log entries ID (TLogId). - * @param id the id of the ticket_log entry that should be loaded + * @param $id the id of the ticket_log entry that should be loaded */ public function load_With_TLogId( $id) { $dbl = new DBLayer("lib"); diff --git a/code/web/private_php/ams/plugins/API_key_management/.info b/code/web/private_php/ams/plugins/API_key_management/.info index b185a31db..1da25516e 100644 --- a/code/web/private_php/ams/plugins/API_key_management/.info +++ b/code/web/private_php/ams/plugins/API_key_management/.info @@ -1,7 +1,7 @@ PluginName = API Key Management Description = Provides public access to the API's by generating access tokens. Version = 1.0.0 -Type = automatic +Type = Manual TemplatePath = ../../../ams_lib/plugins/API_key_management/templates/index.tpl diff --git a/code/web/public_php/ams/func/activate_plugin.php b/code/web/public_php/ams/func/activate_plugin.php index 930ed15f1..0a331f284 100644 --- a/code/web/public_php/ams/func/activate_plugin.php +++ b/code/web/public_php/ams/func/activate_plugin.php @@ -1,6 +1,9 @@ update( "plugins", array( 'Status' => '1' ), "Id = $id" ); if ( $result ) { + // if result is successfull it redirects and shows success message header( "Location: index.php?page=plugins&result=3" ); exit; } else { + //if result is unsuccessfull it redirects and throws error header( "Location: index.php?page=plugins&result=4" ); exit; } } else { + //if $_GET variable is not set it redirects and shows error header( "Location: index.php?page=plugins&result=4" ); exit; } diff --git a/code/web/public_php/ams/func/deactivate_plugin.php b/code/web/public_php/ams/func/deactivate_plugin.php index a4b6120b1..91986bb50 100644 --- a/code/web/public_php/ams/func/deactivate_plugin.php +++ b/code/web/public_php/ams/func/deactivate_plugin.php @@ -1,6 +1,9 @@ update( "plugins", array( 'Status' => '0' ), "Id = $id" ); if ( $result ) - { + { + // if result is successfull it redirects and shows success message header( "Location: index.php?page=plugins&result=5" ); exit; } else { + // if result is unsuccessfull it redirects and shows success message header( "Location: index.php?page=plugins&result=6" ); exit; @@ -30,6 +35,7 @@ function deactivate_plugin() { } else { + //if $_GET variable is not set it redirects and shows error header( "Location: index.php?page=plugins&result=6" ); exit; } diff --git a/code/web/public_php/ams/func/delete_plugin.php b/code/web/public_php/ams/func/delete_plugin.php index f3dc0311a..d85ed34b9 100644 --- a/code/web/public_php/ams/func/delete_plugin.php +++ b/code/web/public_php/ams/func/delete_plugin.php @@ -1,8 +1,9 @@ delete( 'plugins', array( 'id' => $id ), "Id=:id" ); + //if result successfull redirect and show success message header( "Location: index.php?page=plugins&result=2" ); exit; } else { + // if result unsuccessfull redirect and show error message header( "Location: index.php?page=plugins&result=0" ); exit; } @@ -40,6 +43,7 @@ function delete_plugin() { } else { + // if result unsuccessfull redirect and show error message header( "Location: index.php?page=plugins&result=0" ); exit; } diff --git a/code/web/public_php/ams/func/install_plugin.php b/code/web/public_php/ams/func/install_plugin.php index 052d4f14b..1ad7154d2 100644 --- a/code/web/public_php/ams/func/install_plugin.php +++ b/code/web/public_php/ams/func/install_plugin.php @@ -1,10 +1,32 @@ Check if the file type is .zip. + * --> Extract it to a temp folder. + * --> Check for the .info file. If not exists throw error + * --> Extract the information from the .info file. + * --> Check for the plugin name already exists or not. + * --> if Plugin Name exists it compare the version of .info and version of plugin stored in db. + * --> if same throw error and if different it checks for UpdateInfo field in .info file. + * --> if UpdateInfo not found throw error. + * --> if UpdateInfo found add the update to the ryzom_ams_lib.updates table. + * --> if it's not an update and plugin with same name already exists throw error. + * --> if plugin with same name not present provide option to install plugin + * + * @author Shubham Meena, mentored by Matthew Lagoe + * + */ + + /** - * This function is used in installing plugins - * It performs validation check for the compressed plugin - * then extract in plugin folder to get the info + * This function is used in installing plugins or adding updates + * for previously installed plugins. * - * @author Shubham Meena, mentored by Matthew Lagoe */ function install_plugin() { @@ -165,13 +187,14 @@ function zipExtraction( $target_path, $destination ) * PluginName = Name of the plugin * Version = version of the plugin * Type = type of the plugin + * TemplatePath = path to the template * Description = Description of the plugin ,it's functionality * ----------------------------------------------------------- * * reads only files with name .info * * @param $fileName file to read - * @param $targetPath path to the folder containing .info file + * @param $target_path path to the folder containing .info file * @return array containing above information in array(value => key) */ function readPluginFile( $fileName, $target_path ) @@ -190,8 +213,8 @@ function readPluginFile( $fileName, $target_path ) /** * function to check for updates or * if the same plugin already exists - * also, if the update founds ,check for the update info in the .info file. - * Update is saved in the temp direcotry with pluginName_version.zip + * also, if the update founds ,check for the UpdateInfo in the .info file. + * Update is saved in the temp directory with pluginName_version.zip * * @param $fileName file which is uploaded in .zip extension * @param $findPath where we have to look for the installed plugins @@ -286,8 +309,8 @@ function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath ) * * @param $pluginId id of the plugin for which update is available * @param $updatePath path of the new update - * @return boolean if update for a plugin already exists or - * if update of same version is uploading + * @return boolean True if update already exists else False + * */ function PluginUpdateExists( $pluginId, $updatePath ) { diff --git a/code/web/public_php/ams/func/update_plugin.php b/code/web/public_php/ams/func/update_plugin.php index 1420572b1..cacc5f119 100644 --- a/code/web/public_php/ams/func/update_plugin.php +++ b/code/web/public_php/ams/func/update_plugin.php @@ -1,6 +1,9 @@ executeWithoutParams( "SELECT * FROM plugins INNER JOIN updates ON plugins.Id=updates.PluginId Where plugins.Id=$id" ); @@ -26,6 +29,7 @@ function update_plugin() { // deleting the previous update $db -> delete( "updates", array( 'id' => $row['s.no'] ), "s.no=:id" ); + // if update is installed succesffully redirect to show success message header( "Location: index.php?page=plugins&result=8" ); exit; diff --git a/code/web/public_php/ams/inc/plugins_update.php b/code/web/public_php/ams/inc/plugins_update.php index 89d547860..e08869f98 100644 --- a/code/web/public_php/ams/inc/plugins_update.php +++ b/code/web/public_php/ams/inc/plugins_update.php @@ -1,7 +1,7 @@ Date: Mon, 18 Aug 2014 20:23:27 +0200 Subject: [PATCH 51/51] Crashfix in case pacs_prim are exported into .ig --- code/nel/tools/3d/zone_dependencies/zone_dependencies.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/nel/tools/3d/zone_dependencies/zone_dependencies.cpp b/code/nel/tools/3d/zone_dependencies/zone_dependencies.cpp index 7d958d81c..b109c2db2 100644 --- a/code/nel/tools/3d/zone_dependencies/zone_dependencies.cpp +++ b/code/nel/tools/3d/zone_dependencies/zone_dependencies.cpp @@ -607,11 +607,15 @@ static void computeIGBBox(const NL3D::CInstanceGroup &ig, CLightingBBox &result, std::string toLoad = it->Name; if (getExt(toLoad).empty()) toLoad += ".shape"; shapePathName = NLMISC::CPath::lookup(toLoad, false, false); - + if (shapePathName.empty()) { nlwarning("Unable to find shape '%s'", it->Name.c_str()); } + else if (toLower (CFile::getExtension (shapePathName)) == "pacs_prim") + { + nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", shapePathName.c_str()); + } else { CIFile shapeInputFile;