From 2130875539365eb1147211e0a4c455569d1d141d Mon Sep 17 00:00:00 2001 From: Quitta Date: Tue, 2 Jul 2013 03:36:49 +0200 Subject: [PATCH 01/24] changepassword works --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/users.php | 18 ++++++++++-------- .../ryzom_ams/www/html/autoload/webusers.php | 15 +++++++++++++++ .../www/html/func/change_password.php | 17 ++++++++++++++++- .../server/ryzom_ams/www/html/func/login.php | 1 + .../ryzom_ams/www/html/templates/settings.tpl | 14 ++++++++++++++ 5 files changed, 56 insertions(+), 9 deletions(-) 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 7373bc4a3..640849011 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 @@ -365,25 +365,27 @@ class Users{ } } - protected function setPassword($user, $pass){ + protected function setAmsPassword($user, $pass){ + + global $cfg; + $values = Array('user' => $user, 'pass' => $pass); + try { //make connection with and put into shard db - global $cfg; $dbs = new DBLayer($cfg['db']['shard']); $dbs->execute("UPDATE user SET Password = :pass WHERE Login = :user ",$values); return "ok"; } catch (PDOException $e) { //oh noooz, the shard is offline! Put in query queue at ams_lib db! - /*try { - $dbl = new DBLayer($cfg['db']['lib']); - $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "createUser", - "query" => json_encode(array($values["name"],$values["pass"],$values["mail"])))); + try { + $dbl = new DBLayer($cfg['db']['lib']); + $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "changepass", + "query" => json_encode(array($values["name"],$values["pass"])))); return "shardoffline"; }catch (PDOException $e) { - print_r($e); return "liboffline"; - }*/ + } } } } 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 91c7bc317..4427fa578 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 @@ -74,4 +74,19 @@ class WebUsers extends Users{ return false; } + public function setPassword($user, $pass){ + global $cfg; + $reply = WebUsers::setAmsPassword($user, $pass); + $values = Array('user' => $user, 'pass' => $pass); + try { + //make connection with and put into shard db + $dbw = new DBLayer($cfg['db']['web']); + $dbw->execute("UPDATE ams_user SET Password = :pass WHERE Login = :user ",$values); + } + catch (PDOException $e) { + //ERROR: the web DB is offline + } + return $reply; + } + } \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php index 3603c5144..05da2655b 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php @@ -25,8 +25,23 @@ function change_password(){ $result = $webUser->check_change_password($params); if ($result == "success"){ //edit stuff into db + $hashpass = crypt($_POST["NewPass"], WebUsers::generateSALT()); - print('success!'); + $status = WebUsers::setPassword($target_username, $hashpass); + if($status == 'ok'){ + $succresult['SUCCESS'] = "OK"; + }else if($status == 'shardoffline'){ + $succresult['SUCCESS'] = "SHARDOFF"; + } + $succresult['permission'] = $_SESSION['permission']; + $succresult['no_visible_elements'] = 'FALSE'; + $succresult['target_id'] = $_POST['target_id']; + if(isset($_GET['id'])){ + if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ + $succresult['isAdmin'] = "TRUE"; + } + } + helpers :: loadtemplate( 'settings', $succresult); exit; }else{ diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php index a34203541..3a4d8a489 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php @@ -18,6 +18,7 @@ function login(){ exit; }else{ //handle login failure + $result = Array(); $result['login_error'] = 'TRUE'; $result['no_visible_elements'] = 'TRUE'; helpers :: loadtemplate( 'login', $result); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl index c0e4f7a7b..2606cee35 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl @@ -50,6 +50,20 @@ + + + {if isset($SUCCESS) and $SUCCESS eq "OK"} +
+ Your password has been changed! +
+ {/if} + + {if isset($SUCCESS) and $SUCCESS eq "SHARDOFF"} +
+ Your password has been changed, though the shard seems offline, it may take some time to see the change on the shard. +
+ {/if} +
From a1a052dd72b561a2bb04df0eb7dd7dd848d11411 Mon Sep 17 00:00:00 2001 From: Quitta Date: Tue, 2 Jul 2013 04:42:12 +0200 Subject: [PATCH 02/24] Change email seems to work, also for admin's :) --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/users.php | 28 ++++++- .../ryzom_ams/www/html/autoload/webusers.php | 25 ++++++ .../ryzom_ams/www/html/func/change_mail.php | 80 +++++++++++++++++++ .../www/html/func/change_password.php | 6 +- .../ryzom_ams/www/html/inc/settings.php | 4 +- .../ryzom_ams/www/html/templates/settings.tpl | 36 ++++++--- 6 files changed, 163 insertions(+), 16 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php 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 640849011..7083d6bfa 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 @@ -156,7 +156,7 @@ class Users{ * @takes $email * @return */ - private function checkEmail( $email ) + public function checkEmail( $email ) { if ( isset( $email ) ){ if ( !Users::validEmail( $email ) ){ @@ -381,7 +381,31 @@ class Users{ try { $dbl = new DBLayer($cfg['db']['lib']); $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "changepass", - "query" => json_encode(array($values["name"],$values["pass"])))); + "query" => json_encode(array($values["user"],$values["pass"])))); + return "shardoffline"; + }catch (PDOException $e) { + return "liboffline"; + } + } + } + + protected function setAmsEmail($user, $mail){ + + global $cfg; + $values = Array('user' => $user, 'mail' => $mail); + + try { + //make connection with and put into shard db + $dbs = new DBLayer($cfg['db']['shard']); + $dbs->execute("UPDATE user SET Email = :mail WHERE Login = :user ",$values); + return "ok"; + } + catch (PDOException $e) { + //oh noooz, the shard is offline! Put in query queue at ams_lib db! + try { + $dbl = new DBLayer($cfg['db']['lib']); + $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "changemail", + "query" => json_encode(array($values["user"],$values["mail"])))); return "shardoffline"; }catch (PDOException $e) { return "liboffline"; 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 4427fa578..af851e273 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 @@ -60,6 +60,16 @@ class WebUsers extends Users{ return $row['Login']; } + public function getEmail($id){ + global $cfg; + + $dbw = new DBLayer($cfg['db']['web']); + $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $id)); + $row = $statement->fetch(); + return $row['Email']; + } + + public function isLoggedIn(){ if(isset($_SESSION['user'])){ return true; @@ -89,4 +99,19 @@ class WebUsers extends Users{ return $reply; } + public function setEmail($user, $mail){ + global $cfg; + $reply = WebUsers::setAmsEmail($user, $mail); + $values = Array('user' => $user, 'mail' => $mail); + try { + //make connection with and put into shard db + $dbw = new DBLayer($cfg['db']['web']); + $dbw->execute("UPDATE ams_user SET Email = :mail WHERE Login = :user ",$values); + } + catch (PDOException $e) { + //ERROR: the web DB is offline + } + return $reply; + } + } \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php new file mode 100644 index 000000000..99a173519 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php @@ -0,0 +1,80 @@ +checkEmail($_POST['NewEmail']); + if ( $reply != "success" ){ + $result['EMAIL_ERROR'] = 'TRUE'; + }else{ + $result['EMAIL_ERROR'] = 'FALSE'; + } + $result['prevNewEmail'] = $_POST["NewEmail"]; + + if ($reply== "success"){ + $status = WebUsers::setEmail($target_username, $_POST["NewEmail"] ); + if($status == 'ok'){ + $result['SUCCESS_MAIL'] = "OK"; + }else if($status == 'shardoffline'){ + $result['SUCCESS_MAIL'] = "SHARDOFF"; + } + $result['permission'] = $_SESSION['permission']; + $result['no_visible_elements'] = 'FALSE'; + $result['target_id'] = $_POST['target_id']; + if(isset($_GET['id'])){ + if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ + $result['isAdmin'] = "TRUE"; + } + } + helpers :: loadtemplate( 'settings', $result); + exit; + + }else{ + $result['EMAIL'] = $reply; + $result['permission'] = $_SESSION['permission']; + $result['no_visible_elements'] = 'FALSE'; + $return['username'] = $_SESSION['user']; + $result['target_id'] = $_POST['target_id']; + if(isset($_GET['id'])){ + if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ + $result['isAdmin'] = "TRUE"; + } + } + helpers :: loadtemplate( 'settings', $result); + exit; + } + + }else{ + //ERROR: permission denied! + } + + }else{ + //ERROR: The form was not filled in correclty + } + }else{ + //ERROR: user is not logged in + exit; + } + + }catch (PDOException $e) { + //go to error page or something, because can't access website db + print_r($e); + exit; + } + +} + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php index 05da2655b..cbeb4306a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php @@ -18,7 +18,6 @@ function change_password(){ $adminChangesOther = true; $_POST["CurrentPass"] = "dummypass"; } - $id = $_POST['target_id']; $webUser = new WebUsers(); $params = Array( 'user' => $target_username, 'CurrentPass' => $_POST["CurrentPass"], 'NewPass' => $_POST["NewPass"], 'ConfirmNewPass' => $_POST["ConfirmNewPass"], 'adminChangesOther' => $adminChangesOther); @@ -29,9 +28,9 @@ function change_password(){ $hashpass = crypt($_POST["NewPass"], WebUsers::generateSALT()); $status = WebUsers::setPassword($target_username, $hashpass); if($status == 'ok'){ - $succresult['SUCCESS'] = "OK"; + $succresult['SUCCESS_PASS'] = "OK"; }else if($status == 'shardoffline'){ - $succresult['SUCCESS'] = "SHARDOFF"; + $succresult['SUCCESS_PASS'] = "SHARDOFF"; } $succresult['permission'] = $_SESSION['permission']; $succresult['no_visible_elements'] = 'FALSE'; @@ -51,6 +50,7 @@ function change_password(){ $result['prevConfirmNewPass'] = $_POST["ConfirmNewPass"]; $result['permission'] = $_SESSION['permission']; $result['no_visible_elements'] = 'FALSE'; + $return['username'] = $_SESSION['user']; $result['target_id'] = $_POST['target_id']; if(isset($_GET['id'])){ if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php index 2248b7d70..a85877cda 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php @@ -8,10 +8,12 @@ function settings(){ $result['isAdmin'] = "TRUE"; } $result['target_id'] = $_GET['id']; + $result['current_mail'] = WebUsers::getEmail($_GET['id']); }else{ $result['target_id'] = $_SESSION['id']; + $result['current_mail'] = WebUsers::getEmail($_SESSION['id']); } - + return $result; }else{ //ERROR: not logged in! diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl index 2606cee35..46c3da902 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl @@ -52,15 +52,15 @@ - {if isset($SUCCESS) and $SUCCESS eq "OK"} + {if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "OK"}
- Your password has been changed! + The password has been changed!
{/if} - {if isset($SUCCESS) and $SUCCESS eq "SHARDOFF"} + {if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "SHARDOFF"}
- Your password has been changed, though the shard seems offline, it may take some time to see the change on the shard. + The password has been changed, though the shard seems offline, it may take some time to see the change on the shard.
{/if} @@ -87,18 +87,34 @@
-
+ Change Email -
+
- -
+ + {if isset($EMAIL_ERROR) and $EMAIL_ERROR eq "TRUE"}{$EMAIL}{/if} + +
-
- +
+ + {if isset($SUCCESS_MAIL) and $SUCCESS_MAIL eq "OK"} +
+ The email has been changed! +
+ {/if} + + {if isset($SUCCESS_MAIL) and $SUCCESS_MAIL eq "SHARDOFF"} +
+ The email has been changed, though the shard seems offline, it may take some time to see the change on the shard. +
+ {/if} + + +
From d3b12f74a431d9a63db603b40097b5e0563691b6 Mon Sep 17 00:00:00 2001 From: Quitta Date: Tue, 2 Jul 2013 16:07:55 +0200 Subject: [PATCH 03/24] change info page basics --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/www/html/autoload/webusers.php | 9 +++ .../ryzom_ams/www/html/func/change_info.php | 78 +++++++++++++++++++ .../ryzom_ams/www/html/inc/settings.php | 2 + .../server/ryzom_ams/www/html/sql/install.php | 4 + .../ryzom_ams/www/html/templates/settings.tpl | 7 +- 5 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php 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 af851e273..4e0e25df8 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 @@ -69,6 +69,15 @@ class WebUsers extends Users{ return $row['Email']; } + public function getInfo($id){ + global $cfg; + + $dbw = new DBLayer($cfg['db']['web']); + $statement = $dbw->execute("SELECT * FROM ams_user WHERE UId=:id", array('id' => $id)); + $row = $statement->fetch(); + $result = Array('FirstName' => $row['FirstName'], 'LastName' => $row['LastName'], 'Gender' => $row['Gender'], 'Country' => $row['Country']); + return $result; + } public function isLoggedIn(){ if(isset($_SESSION['user'])){ diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php new file mode 100644 index 000000000..f0b49fff0 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php @@ -0,0 +1,78 @@ +checkEmail($_POST['NewEmail']); + if ( $reply != "success" ){ + $result['EMAIL_ERROR'] = 'TRUE'; + }else{ + $result['EMAIL_ERROR'] = 'FALSE'; + } + $result['prevNewEmail'] = $_POST["NewEmail"]; + + if ($reply== "success"){ + $status = WebUsers::setEmail($target_username, $_POST["NewEmail"] ); + if($status == 'ok'){ + $result['SUCCESS_MAIL'] = "OK"; + }else if($status == 'shardoffline'){ + $result['SUCCESS_MAIL'] = "SHARDOFF"; + } + $result['permission'] = $_SESSION['permission']; + $result['no_visible_elements'] = 'FALSE'; + $result['target_id'] = $_POST['target_id']; + if(isset($_GET['id'])){ + if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ + $result['isAdmin'] = "TRUE"; + } + } + helpers :: loadtemplate( 'settings', $result); + exit; + + }else{ + $result['EMAIL'] = $reply; + $result['permission'] = $_SESSION['permission']; + $result['no_visible_elements'] = 'FALSE'; + $return['username'] = $_SESSION['user']; + $result['target_id'] = $_POST['target_id']; + if(isset($_GET['id'])){ + if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ + $result['isAdmin'] = "TRUE"; + } + } + helpers :: loadtemplate( 'settings', $result); + exit; + } + + }else{ + //ERROR: permission denied! + } + + }else{ + //ERROR: The form was not filled in correclty + } + }else{ + //ERROR: user is not logged in + exit; + } + + }catch (PDOException $e) { + //go to error page or something, because can't access website db + print_r($e); + exit; + } +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php index a85877cda..7fd264aa2 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php @@ -4,12 +4,14 @@ function settings(){ if(WebUsers::isLoggedIn()){ //in case id-GET param set it's value as target_id, if no id-param is given, ue the session id. if(isset($_GET['id'])){ + $result = WebUsers::getInfo($_GET['id']); if(WebUsers::isAdmin() && ($_GET['id']!= $_SESSION['id'])){ $result['isAdmin'] = "TRUE"; } $result['target_id'] = $_GET['id']; $result['current_mail'] = WebUsers::getEmail($_GET['id']); }else{ + $result = WebUsers::getInfo($_SESSION['id']); $result['target_id'] = $_SESSION['id']; $result['current_mail'] = WebUsers::getEmail($_SESSION['id']); } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index e9e3ecac1..e2cf4190f 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -21,6 +21,10 @@ `Password` varchar(13) DEFAULT NULL, `Email` varchar(255) NOT NULL DEFAULT '', `Permission` int(3) NOT NULL DEFAULT 1, + `FirstName` varchar(255) NOT NULL DEFAULT '', + `LastName` varchar(255) NOT NULL DEFAULT '', + `Gender` tinyint(1) unsigned NOT NULL DEFAULT '0', + `Country` char(2) NOT NULL DEFAULT '', PRIMARY KEY (`UId`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='contains all users information for ryzom_ams'; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl index 46c3da902..66bb1c8b3 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl @@ -136,7 +136,7 @@
- + Change Info
@@ -144,7 +144,7 @@
- +
@@ -438,7 +438,8 @@
- + +
From 1b8bf17c8b12fbabe08105e221c8f441c974d939 Mon Sep 17 00:00:00 2001 From: Quitta Date: Tue, 2 Jul 2013 16:36:44 +0200 Subject: [PATCH 04/24] Checking filled in data for change_info has to be updated --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/www/html/func/change_info.php | 18 ++++++++++++++++++ .../ryzom_ams/www/html/templates/settings.tpl | 10 +++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php index f0b49fff0..c19c418c3 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php @@ -17,6 +17,24 @@ function change_info(){ } $webUser = new WebUsers(); + $current_info = $webUser->getInfo($_POST['target_id']); + //TODO: XSS filtering + $query = "UPDATE ams_user SET "; + if(($_POST['FirstName'] != "") && ($_POST['FirstName'] != $current_info['FirstName'])){ + $query = $query . "FirstName = :fName "; + } + if(($_POST['LastName'] != "") && ($_POST['LastName'] != $current_info['LastName'])){ + $query = $query . "LastName = :lName "; + } + //TODO: add the other fields too + $query = $query . "WHERE Login = :user"; + + + print($query); + exit; + + + $reply = $webUser->checkEmail($_POST['NewEmail']); if ( $reply != "success" ){ $result['EMAIL_ERROR'] = 'TRUE'; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl index 66bb1c8b3..4ab3a2697 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl @@ -144,7 +144,7 @@
- +
@@ -154,7 +154,7 @@
- +
@@ -421,17 +421,17 @@
From 0b9ad19e3569e5571cb8c0cd15c3e5cbf2cc22f8 Mon Sep 17 00:00:00 2001 From: Quitta Date: Wed, 3 Jul 2013 03:05:01 +0200 Subject: [PATCH 05/24] Change info works, without whiping the other fiels now! :) --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/www/html/func/change_info.php | 77 ++++++++----------- .../ryzom_ams/www/html/func/change_mail.php | 8 +- .../www/html/func/change_password.php | 22 +++--- .../ryzom_ams/www/html/templates/settings.tpl | 7 +- 4 files changed, 56 insertions(+), 58 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php index c19c418c3..45ee8f929 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php @@ -17,64 +17,53 @@ function change_info(){ } $webUser = new WebUsers(); + //use current info to check for changes $current_info = $webUser->getInfo($_POST['target_id']); //TODO: XSS filtering + + //make the query that will update the data. + $updated = false; + $values = Array(); + $values['user'] = $target_username; $query = "UPDATE ams_user SET "; if(($_POST['FirstName'] != "") && ($_POST['FirstName'] != $current_info['FirstName'])){ $query = $query . "FirstName = :fName "; + $updated = true; + $values['fName'] = $_POST['FirstName']; } if(($_POST['LastName'] != "") && ($_POST['LastName'] != $current_info['LastName'])){ $query = $query . "LastName = :lName "; + $updated = true; + $values['lName'] = $_POST['LastName']; } //TODO: add the other fields too $query = $query . "WHERE Login = :user"; - - print($query); - exit; - - - - $reply = $webUser->checkEmail($_POST['NewEmail']); - if ( $reply != "success" ){ - $result['EMAIL_ERROR'] = 'TRUE'; - }else{ - $result['EMAIL_ERROR'] = 'FALSE'; - } - $result['prevNewEmail'] = $_POST["NewEmail"]; - - if ($reply== "success"){ - $status = WebUsers::setEmail($target_username, $_POST["NewEmail"] ); - if($status == 'ok'){ - $result['SUCCESS_MAIL'] = "OK"; - }else if($status == 'shardoffline'){ - $result['SUCCESS_MAIL'] = "SHARDOFF"; - } - $result['permission'] = $_SESSION['permission']; - $result['no_visible_elements'] = 'FALSE'; - $result['target_id'] = $_POST['target_id']; - if(isset($_GET['id'])){ - if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ - $result['isAdmin'] = "TRUE"; - } - } - helpers :: loadtemplate( 'settings', $result); - exit; - - }else{ - $result['EMAIL'] = $reply; - $result['permission'] = $_SESSION['permission']; - $result['no_visible_elements'] = 'FALSE'; - $return['username'] = $_SESSION['user']; - $result['target_id'] = $_POST['target_id']; - if(isset($_GET['id'])){ - if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ - $result['isAdmin'] = "TRUE"; - } + //if some field is update then: + if($updated){ + global $cfg; + //execute the query in the web DB. + $dbw = new DBLayer($cfg['db']['web']); + $dbw->execute($query,$values); + } + + global $SITEBASE; + require_once($SITEBASE . 'inc/settings.php'); + $result = settings(); + if($updated){ + $result['info_updated'] = "OK"; + } + $result['permission'] = $_SESSION['permission']; + $result['username'] = $_SESSION['user']; + $result['no_visible_elements'] = 'FALSE'; + $result['target_id'] = $_POST['target_id']; + if(isset($_GET['id'])){ + if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ + $result['isAdmin'] = "TRUE"; } - helpers :: loadtemplate( 'settings', $result); - exit; } + helpers :: loadtemplate( 'settings', $result); + exit; }else{ //ERROR: permission denied! diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php index 99a173519..dafcd6975 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php @@ -18,6 +18,11 @@ function change_mail(){ $webUser = new WebUsers(); $reply = $webUser->checkEmail($_POST['NewEmail']); + + global $SITEBASE; + require_once($SITEBASE . 'inc/settings.php'); + $result = settings(); + if ( $reply != "success" ){ $result['EMAIL_ERROR'] = 'TRUE'; }else{ @@ -34,6 +39,7 @@ function change_mail(){ } $result['permission'] = $_SESSION['permission']; $result['no_visible_elements'] = 'FALSE'; + $result['username'] = $_SESSION['user']; $result['target_id'] = $_POST['target_id']; if(isset($_GET['id'])){ if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ @@ -47,7 +53,7 @@ function change_mail(){ $result['EMAIL'] = $reply; $result['permission'] = $_SESSION['permission']; $result['no_visible_elements'] = 'FALSE'; - $return['username'] = $_SESSION['user']; + $result['username'] = $_SESSION['user']; $result['target_id'] = $_POST['target_id']; if(isset($_GET['id'])){ if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php index cbeb4306a..3008849b1 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php @@ -24,7 +24,9 @@ function change_password(){ $result = $webUser->check_change_password($params); if ($result == "success"){ //edit stuff into db - + global $SITEBASE; + require_once($SITEBASE . 'inc/settings.php'); + $succresult = settings(); $hashpass = crypt($_POST["NewPass"], WebUsers::generateSALT()); $status = WebUsers::setPassword($target_username, $hashpass); if($status == 'ok'){ @@ -34,17 +36,12 @@ function change_password(){ } $succresult['permission'] = $_SESSION['permission']; $succresult['no_visible_elements'] = 'FALSE'; + $succresult['username'] = $_SESSION['user']; $succresult['target_id'] = $_POST['target_id']; - if(isset($_GET['id'])){ - if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ - $succresult['isAdmin'] = "TRUE"; - } - } helpers :: loadtemplate( 'settings', $succresult); exit; }else{ - $result['prevCurrentPass'] = $_POST["CurrentPass"]; $result['prevNewPass'] = $_POST["NewPass"]; $result['prevConfirmNewPass'] = $_POST["ConfirmNewPass"]; @@ -52,11 +49,12 @@ function change_password(){ $result['no_visible_elements'] = 'FALSE'; $return['username'] = $_SESSION['user']; $result['target_id'] = $_POST['target_id']; - if(isset($_GET['id'])){ - if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ - $result['isAdmin'] = "TRUE"; - } - } + + global $SITEBASE; + require_once($SITEBASE . 'inc/settings.php'); + $settings = settings(); + + $result = array_merge($result,$settings); helpers :: loadtemplate( 'settings', $result); exit; } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl index 4ab3a2697..ceec3aa76 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl @@ -437,7 +437,12 @@
- + {if isset($info_updated) and $info_updated eq "OK"} +
+ The Info has been updated! +
+ {/if} +
From 25f479f3d090c7627ddc63947c18075b078ea049 Mon Sep 17 00:00:00 2001 From: Quitta Date: Wed, 3 Jul 2013 05:57:50 +0200 Subject: [PATCH 06/24] added a userlist to browse users and edit their settings as admin --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/www/html/autoload/webusers.php | 6 ++ .../ryzom_ams/www/html/func/change_info.php | 8 ++- .../ryzom_ams/www/html/inc/settings.php | 15 +++-- .../ryzom_ams/www/html/inc/userlist.php | 20 ++++++ .../www/html/templates/layout_admin.tpl | 1 + .../ryzom_ams/www/html/templates/userlist.tpl | 61 +++++++++++++------ 6 files changed, 85 insertions(+), 26 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php 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 4e0e25df8..c94d6386e 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 @@ -123,4 +123,10 @@ class WebUsers extends Users{ return $reply; } + public function getUsers(){ + global $cfg; + $dbl = new DBLayer($cfg['db']['web']); + $data = $dbl->executeWithoutParams("SELECT * FROM ams_user"); + return $data; + } } \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php index 45ee8f929..4bbe9ea24 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php @@ -32,13 +32,17 @@ function change_info(){ $values['fName'] = $_POST['FirstName']; } if(($_POST['LastName'] != "") && ($_POST['LastName'] != $current_info['LastName'])){ - $query = $query . "LastName = :lName "; + if($updated){ + $query = $query . ", LastName = :lName "; + }else{ + $query = $query . "LastName = :lName "; + } $updated = true; $values['lName'] = $_POST['LastName']; } //TODO: add the other fields too $query = $query . "WHERE Login = :user"; - + //if some field is update then: if($updated){ global $cfg; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php index 7fd264aa2..9a4cc1ad6 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php @@ -4,12 +4,17 @@ function settings(){ if(WebUsers::isLoggedIn()){ //in case id-GET param set it's value as target_id, if no id-param is given, ue the session id. if(isset($_GET['id'])){ - $result = WebUsers::getInfo($_GET['id']); - if(WebUsers::isAdmin() && ($_GET['id']!= $_SESSION['id'])){ - $result['isAdmin'] = "TRUE"; + if(($_GET['id'] != $_SESSION['id']) && (!WebUsers::isAdmin()) ){ + print('No permission to see this page!'); + exit; + }else{ + $result = WebUsers::getInfo($_GET['id']); + if(WebUsers::isAdmin() && ($_GET['id']!= $_SESSION['id'])){ + $result['isAdmin'] = "TRUE"; + } + $result['target_id'] = $_GET['id']; + $result['current_mail'] = WebUsers::getEmail($_GET['id']); } - $result['target_id'] = $_GET['id']; - $result['current_mail'] = WebUsers::getEmail($_GET['id']); }else{ $result = WebUsers::getInfo($_SESSION['id']); $result['target_id'] = $_SESSION['id']; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php new file mode 100644 index 000000000..c065c6985 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php @@ -0,0 +1,20 @@ +fetch(PDO::FETCH_ASSOC)){ + $pageResult['userlist'][$i]['id'] = $row['UId']; + $pageResult['userlist'][$i]['username'] = $row['Login']; + $pageResult['userlist'][$i]['permission'] = $row['Permission']; + $pageResult['userlist'][$i]['email'] = $row['Email']; + $i++; + } + return $pageResult; + }else{ + print('no permission'); + exit; + } +} \ No newline at end of file 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 b2c79ba00..aaa625a7d 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 @@ -5,6 +5,7 @@
  • Settings
  • Liblist
  • +
  • UserList
  • Logout
  • diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl index 891bbd04b..5b4975c91 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl @@ -1,22 +1,45 @@ {block name=content} - -
    -
    -
    -

    {$userlist_info}

    -
    - - - - -
    -
    -
    -

    The shard/lib/web db user list You are about to see it here!

    - -
    -
    -
    -
    +
    +
    +
    +

    Members

    +
    + + + +
    +
    +
    + + + + + + + + + + + + {foreach from=$userlist item=element} + + + + + {if $element.permission eq 1}{/if} + {if $element.permission eq 2}{/if} + + + + {/foreach} + + +
    IdUsernameEmailPermissionAction
    {$element.id}{$element.username}{$element.email}UserAdmin + Edit User +
    +
    +
    + +
    {/block} From 0275e11e48d3830980faa49dc8d129537cb732c0 Mon Sep 17 00:00:00 2001 From: Quitta Date: Wed, 3 Jul 2013 06:03:01 +0200 Subject: [PATCH 07/24] small update, changed the libuserlist so it only shows id and type of the elements in the query db, also only manual syncing is possible when shard db is back online! --HG-- branch : quitta-gsoc-2013 --- .../tools/server/ryzom_ams/www/html/inc/libuserlist.php | 4 ++-- .../server/ryzom_ams/www/html/templates/libuserlist.tpl | 9 +-------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/libuserlist.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/libuserlist.php index 3bb43d39e..4739c8692 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/libuserlist.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/libuserlist.php @@ -45,8 +45,8 @@ function libuserlist(){ $decode = json_decode($row['query']); $pageResult['liblist'][$i]['id'] = $row['SID']; $pageResult['liblist'][$i]['type'] = $row['type']; - $pageResult['liblist'][$i]['name'] = $decode[0]; - $pageResult['liblist'][$i]['mail'] = $decode[2]; + //$pageResult['liblist'][$i]['name'] = $decode[0]; + //$pageResult['liblist'][$i]['mail'] = $decode[2]; $i++; } } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/libuserlist.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/libuserlist.tpl index e8dee32fd..645de53f2 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/libuserlist.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/libuserlist.tpl @@ -51,9 +51,6 @@ {$id} {$type} - {$name} - {$email} - {$action} @@ -61,11 +58,7 @@ {$element.id} {$element.type} - {$element.name} - {$element.mail} - - Delete - + {/foreach} From 93c1998a607f5986446e653b2f72762db8932c68 Mon Sep 17 00:00:00 2001 From: Quitta Date: Wed, 3 Jul 2013 18:49:23 +0200 Subject: [PATCH 08/24] error template added, fixed some small bugs --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/translations/en.ini | 11 +- .../ryzom_ams/ams_lib/translations/fr.ini | 10 +- .../tools/server/ryzom_ams/www/html/error.php | 2 +- .../server/ryzom_ams/www/html/img/notpage.jpg | Bin 0 -> 39699 bytes .../server/ryzom_ams/www/html/inc/error.php | 12 ++ .../ryzom_ams/www/html/inc/libuserlist.php | 108 +++++++++--------- .../ryzom_ams/www/html/inc/settings.php | 6 +- .../ryzom_ams/www/html/inc/userlist.php | 4 +- .../tools/server/ryzom_ams/www/html/index.php | 6 + .../ryzom_ams/www/html/templates/error.tpl | 87 ++++++++++++++ .../ryzom_ams/www/html/templates/register.tpl | 2 +- .../ryzom_ams/www/html/templates/settings.tpl | 2 +- 12 files changed, 190 insertions(+), 60 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/img/notpage.jpg create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/error.tpl 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 56c07761f..bfb187520 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 @@ -20,6 +20,12 @@ name = "Name" email = "Email" action = "Action" +[error] +title404 = "Not
    Found!" +title403 = "Forbidden!" +error_message404 = "This is not the page you are looking for.." +error_message403 = "You cannot access this page!" +go_home = "Go Home" [userlist] userlist_info = "welcome to the userlist" @@ -27,7 +33,7 @@ userlist_info = "welcome to the userlist" [login] login_info = "Please login with your Username and Password." login_error_message = "The filled in username/password were not correct!" -login_register_message ="RegisterIf you dont have an account yet, create one" +login_register_message ="Register If you dont have an account yet, create one" login_register_message_here = "here" [logout] @@ -67,6 +73,7 @@ email_tooltip = "Email Address to which a confirmation email will be sent." email_message = "Please verify that the e-mail address you enter here is valid and will remain valid in the future. It will only be used to manage your Ryzom Core account." email_default = "Email" -tac_tag = "YES, I agree to the terms of service." +tac_tag1= "YES, I agree to the " +tac_tag2="terms of service" tac_message = "You must accept the Terms of Service." diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini index 56c07b555..ebf862450 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini @@ -20,6 +20,13 @@ name = "Nom" email = "Email" action = "Action" +[error] +title404 = "Pas
    trouvez!" +title403 = "Interdit!" +error_message404 = "Ce page que vous cherchez n'existe pas." +error_message403 = "Vous n'avez pas permission d'access ce page!" +go_home = "Allez au main page" + [userlist] userlist_info = "bienvenue sur le userlist page!" @@ -66,5 +73,6 @@ email_tooltip = "Adresse de courriel (pour qui un email de confirmation vous ser email_message = "Veuillez vérifier que l'adresse e-mail que vous entrez ici est valable et restera valable à l'avenir. Elle ne sera utilisée que pour gérer votre compte de base de Ryzom." email_default = "email" -tac_tag = "OUI, j'accepte les termes de service." +tac_tag1 = "OUI, j'accepte les " +tac_tag2 = "termes de service" tac_message = "Vous devez accepter les Conditions d'utilisation." \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/error.php b/code/ryzom/tools/server/ryzom_ams/www/html/error.php index 4d701a543..b84bd7de7 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/error.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/error.php @@ -73,7 +73,7 @@
    The page your are looking for is not found. -
    Go Home or
    Search
    +
    Go Home
    diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/img/notpage.jpg b/code/ryzom/tools/server/ryzom_ams/www/html/img/notpage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76c434b6e036141131fff5825d4cf4bd94294703 GIT binary patch literal 39699 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

    |mb=tc>0&Yj1W;v~#lj+GmmbjP}eS*_6~CUs_z z>o;_Sp=&m9-`@opQ!qD9Whr)$q@^I;U3l~9*AXW)by1FRB+WT4ok+{-t5e-}Gt6{T zX4}5Fi)PoV6I?2nQCp=+ASK6CcKd=)7@PB*VkTnCGU@b)Pc71)0zv|AZPMou4NbWb z=N|oqp+zMoI?-hgdg8I??2GDUC?u4H(iK-{FCe0(@>20O+WEE{>8^qI&pO`yoE^PL z=L*u~X*npNGJgI$;z!^=wxZ=3LNby{noRb=!30MbOt)tQp%O&L({ zx1z^Cyy0SwN6y+?~lqe5Ml5b!$OIUmoAhOdmnFX zY0;;|cQj@@_~4bK%Wcw^49A_5y-PblOKLVABX2)1z+>Dz%J;$rhf;;ur=^Ym0KJCD z%74I?h%JTroNVl+x*I)#DqmiQQM3E*ET$WPgy z{qBwb05BiJ66`PhwSWG5BmV$!<1v`|v+Vjkf5e7d-TwfdF#iDMN&f)Th4VgFKg_IV zGXtMNBiQkjzui{<0Q{5uaqBC8=Cw!uPQT!Bn9K+ydn8>y{{YLy{{YO#{@}q?Tm9Fo z{{Y7r%w{+>f3Zz({rQFe0Q#~20M(6|cl%VI`D(G4%y2_p3;o}B{$$_&*~1=e{=+By zivAePW;m>cvHt+wSU>YNzm6Bz`bGZ$@R$DpxN(@waY=L{jsELD{{Sdg{^D?grT)Xq zzvWl(ILu}*AE*J7Gk;QH0FV5!n9LF%P!{w9R6pDD{{YT#Az1xO{{ZGV%w`y@O3$dvPX5x@`S5>B{{UsT z^jGm1%w`$=p;SG>{>0b$akcO4qy8`YV=KgcVmfBlcB{utiR%74y3hBFz2 z*F#USe2?tO{{Su<-v0n+J@q)uW+V{Cf7#D}llfo^Fn*Z06_=6Gdw12guf566LF;&@3UuYJmf3qh3ANqz7Qopw+{MgK98jsbBF3^7` z{oY^vJV#^o!~Qli8Gwv3L&{&-2l>C22;couKjHrXJZ3W-7C%!;e^x%Y#Qf<005&rj zjxM_%n*Pc^%rQJa{{WQ~Pp|VB%w`X!{$wSq`Z2NZ?b5#w{W$rT{{Xi&{{R$YF_`pm z{v*#4Y+sqb@}J?2a(~(9{J6|!7hiGte;NYkbzk|h;h*e@{{S)mCmD>xvHFQGx&PS# C9yRg+ literal 0 HcmV?d00001 diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php new file mode 100644 index 000000000..eca129ff6 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/error.php @@ -0,0 +1,12 @@ +executeWithoutParams("SELECT * FROM ams_querycache")->rowCount(); - - //the array hat will contain all users - $pageResult['liblist'] = Array(); - if($rows > 0){ - //This is the number of results displayed per page - $page_rows = 2; - - //This tells us the page number of our last page - $last = ceil($rows/$page_rows); - - //this makes sure the page number isn't below one, or more than our maximum pages - if ($pagenum < 1) - { + if(WebUsers::isAdmin()){ + //This checks to see if there is a page number. If not, it will set it to page 1 + if (!(isset($_GET['pagenum']))){ $pagenum = 1; - }else if ($pagenum > $last) { - $pagenum = $last; - } - - //This sets the range to display in our query - $max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; + }else{ + $pagenum = $_GET['pagenum']; + } - //This is your query again, the same one... the only difference is we add $max into it - $data = $dbl->executeWithoutParams("SELECT * FROM ams_querycache $max"); + //Here we count the number of results + global $cfg; + $dbl = new DBLayer($cfg['db']['lib']); + $rows = $dbl->executeWithoutParams("SELECT * FROM ams_querycache")->rowCount(); - //This is where we put the results in a resultArray to be sent to smarty + //the array hat will contain all users + $pageResult['liblist'] = Array(); + if($rows > 0){ + //This is the number of results displayed per page + $page_rows = 2; + + //This tells us the page number of our last page + $last = ceil($rows/$page_rows); + + //this makes sure the page number isn't below one, or more than our maximum pages + if ($pagenum < 1) + { + $pagenum = 1; + }else if ($pagenum > $last) { + $pagenum = $last; + } + + //This sets the range to display in our query + $max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; + + //This is your query again, the same one... the only difference is we add $max into it + $data = $dbl->executeWithoutParams("SELECT * FROM ams_querycache $max"); + + //This is where we put the results in a resultArray to be sent to smarty + + $i = 0; + while($row = $data->fetch(PDO::FETCH_ASSOC)){ + $decode = json_decode($row['query']); + $pageResult['liblist'][$i]['id'] = $row['SID']; + $pageResult['liblist'][$i]['type'] = $row['type']; + //$pageResult['liblist'][$i]['name'] = $decode[0]; + //$pageResult['liblist'][$i]['mail'] = $decode[2]; + $i++; + } + } - $i = 0; - while($row = $data->fetch(PDO::FETCH_ASSOC)){ - $decode = json_decode($row['query']); - $pageResult['liblist'][$i]['id'] = $row['SID']; - $pageResult['liblist'][$i]['type'] = $row['type']; - //$pageResult['liblist'][$i]['name'] = $decode[0]; - //$pageResult['liblist'][$i]['mail'] = $decode[2]; - $i++; + //check if shard is online + try{ + $dbs = new DBLayer($cfg['db']['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; } - - //check if shard is online - try{ - $dbs = new DBLayer($cfg['db']['shard']); - $pageResult['shard'] = "online"; - }catch(PDOException $e) { - $pageResult['shard'] = "offline"; - } - return $pageResult; } \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php index 9a4cc1ad6..aebfeb186 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php @@ -5,7 +5,9 @@ function settings(){ //in case id-GET param set it's value as target_id, if no id-param is given, ue the session id. if(isset($_GET['id'])){ if(($_GET['id'] != $_SESSION['id']) && (!WebUsers::isAdmin()) ){ - print('No permission to see this page!'); + //ERROR: No access! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); exit; }else{ $result = WebUsers::getInfo($_GET['id']); @@ -24,7 +26,7 @@ function settings(){ return $result; }else{ //ERROR: not logged in! - print("not logged in!"); + header("Location: index.php"); exit; } } \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php index c065c6985..e2c2cbfcb 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/userlist.php @@ -14,7 +14,9 @@ function userlist(){ } return $pageResult; }else{ - print('no permission'); + //ERROR: No access! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); exit; } } \ No newline at end of file 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 d7f234d0d..040989bbb 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/index.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/index.php @@ -50,5 +50,11 @@ if($page == 'login' || $page == 'register' || $page == 'logout'){ }else{ $return['no_visible_elements'] = 'FALSE'; } + +//handle error page +if($page == 'error'){ + $return['permission'] = 0; + $return['no_visible_elements'] = 'FALSE'; +} //print_r($return); helpers :: loadTemplate( $page , $return ); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/error.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/error.tpl new file mode 100644 index 000000000..a8e3ddd83 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/error.tpl @@ -0,0 +1,87 @@ + + + + + + + Error + + + +

    + {$error_code} +

    + {if $error_code eq "404"} +

    {$title404}

    +
    +
    +
    + {$error_message404} + {else if $error_code eq "403"} +

    {$title403}

    +
    +
    + + + \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/register.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/register.tpl index 5a154bb92..c97323520 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/register.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/register.tpl @@ -64,7 +64,7 @@ isset($TAC) and $TAC eq "success"}success{else}{/if}">
    - {$tac_tag} + {$tac_tag1}{$tac_tag2}
    diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl index ceec3aa76..3ef4e0b50 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/settings.tpl @@ -163,7 +163,7 @@
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    @@ -421,17 +174,17 @@
    From 3184941710ecd75932d325235359f1f8efc4613a Mon Sep 17 00:00:00 2001 From: Quitta Date: Fri, 5 Jul 2013 00:37:48 +0200 Subject: [PATCH 11/24] Added functionality to update country + gender + added some xss security --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/www/html/func/change_info.php | 48 ++++++++++++++----- .../ryzom_ams/www/html/func/change_mail.php | 12 +++-- .../www/html/func/change_password.php | 16 +++++-- .../ryzom_ams/www/html/inc/settings.php | 8 ++++ 4 files changed, 65 insertions(+), 19 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php index 4bbe9ea24..860b207ea 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php @@ -3,7 +3,7 @@ function change_info(){ try{ - //if logged in + //if logged in if(WebUsers::isLoggedIn()){ if(isset($_POST['target_id'])){ @@ -19,17 +19,24 @@ function change_info(){ $webUser = new WebUsers(); //use current info to check for changes $current_info = $webUser->getInfo($_POST['target_id']); + //TODO: XSS filtering + $current_info['FirstName'] = filter_var($current_info['FirstName'], FILTER_SANITIZE_STRING); + $current_info['LastName'] = filter_var($current_info['LastName'], FILTER_SANITIZE_STRING); + $current_info['Country'] = filter_var($current_info['Country'], FILTER_SANITIZE_STRING); + $current_info['Gender'] = filter_var($current_info['Gender'], FILTER_SANITIZE_NUMBER_INT); + - //make the query that will update the data. $updated = false; $values = Array(); $values['user'] = $target_username; + + //make the query that will update the data. $query = "UPDATE ams_user SET "; if(($_POST['FirstName'] != "") && ($_POST['FirstName'] != $current_info['FirstName'])){ $query = $query . "FirstName = :fName "; $updated = true; - $values['fName'] = $_POST['FirstName']; + $values['fName'] = filter_var($_POST['FirstName'], FILTER_SANITIZE_STRING); } if(($_POST['LastName'] != "") && ($_POST['LastName'] != $current_info['LastName'])){ if($updated){ @@ -38,9 +45,27 @@ function change_info(){ $query = $query . "LastName = :lName "; } $updated = true; - $values['lName'] = $_POST['LastName']; + $values['lName'] = filter_var($_POST['LastName'], FILTER_SANITIZE_STRING); } - //TODO: add the other fields too + if(($_POST['Country'] != "AA") && ($_POST['Country'] != $current_info['Country'])){ + if($updated){ + $query = $query . ", Country = :country "; + }else{ + $query = $query . "Country = :country "; + } + $updated = true; + $values['country'] = filter_var($_POST['Country'], FILTER_SANITIZE_STRING); + } + if($_POST['Gender'] != $current_info['Gender']){ + if($updated){ + $query = $query . ", Gender = :gender "; + }else{ + $query = $query . "Gender = :gender "; + } + $updated = true; + $values['gender'] = filter_var($_POST['Gender'], FILTER_SANITIZE_NUMBER_INT); + } + //finish the query! $query = $query . "WHERE Login = :user"; //if some field is update then: @@ -61,24 +86,25 @@ function change_info(){ $result['username'] = $_SESSION['user']; $result['no_visible_elements'] = 'FALSE'; $result['target_id'] = $_POST['target_id']; - if(isset($_GET['id'])){ - if(WebUsers::isAdmin() && ($_POST['target_id'] != $_SESSION['id'])){ - $result['isAdmin'] = "TRUE"; - } - } helpers :: loadtemplate( 'settings', $result); exit; }else{ //ERROR: permission denied! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); + exit; } }else{ //ERROR: The form was not filled in correclty + header("Location: index.php?page=settings"); + exit; } }else{ //ERROR: user is not logged in - exit; + header("Location: index.php"); + exit; } }catch (PDOException $e) { diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php index dafcd6975..6905febae 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_mail.php @@ -28,10 +28,10 @@ function change_mail(){ }else{ $result['EMAIL_ERROR'] = 'FALSE'; } - $result['prevNewEmail'] = $_POST["NewEmail"]; + $result['prevNewEmail'] = filter_var($_POST["NewEmail"], FILTER_SANITIZE_EMAIL); if ($reply== "success"){ - $status = WebUsers::setEmail($target_username, $_POST["NewEmail"] ); + $status = WebUsers::setEmail($target_username, filter_var($_POST["NewEmail"], FILTER_SANITIZE_EMAIL) ); if($status == 'ok'){ $result['SUCCESS_MAIL'] = "OK"; }else if($status == 'shardoffline'){ @@ -66,14 +66,20 @@ function change_mail(){ }else{ //ERROR: permission denied! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); + exit; } }else{ //ERROR: The form was not filled in correclty + header("Location: index.php?page=settings"); + exit; } }else{ //ERROR: user is not logged in - exit; + header("Location: index.php"); + exit; } }catch (PDOException $e) { diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php index 3008849b1..e13e859c3 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php @@ -42,12 +42,12 @@ function change_password(){ exit; }else{ - $result['prevCurrentPass'] = $_POST["CurrentPass"]; - $result['prevNewPass'] = $_POST["NewPass"]; - $result['prevConfirmNewPass'] = $_POST["ConfirmNewPass"]; + $result['prevCurrentPass'] = filter_var($_POST["CurrentPass"], FILTER_SANITIZE_STRING); + $result['prevNewPass'] = filter_var($_POST["NewPass"], FILTER_SANITIZE_STRING); + $result['prevConfirmNewPass'] = filter_var($_POST["ConfirmNewPass"], FILTER_SANITIZE_STRING); $result['permission'] = $_SESSION['permission']; $result['no_visible_elements'] = 'FALSE'; - $return['username'] = $_SESSION['user']; + $result['username'] = $_SESSION['user']; $result['target_id'] = $_POST['target_id']; global $SITEBASE; @@ -61,14 +61,20 @@ function change_password(){ }else{ //ERROR: permission denied! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); + exit; } }else{ //ERROR: The form was not filled in correclty + header("Location: index.php?page=settings"); + exit; } }else{ //ERROR: user is not logged in - exit; + header("Location: index.php"); + exit; } }catch (PDOException $e) { diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php index 259ce258f..52c7b445d 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php @@ -21,6 +21,14 @@ function settings(){ $result = WebUsers::getInfo($_SESSION['id']); $result['target_id'] = $_SESSION['id']; $result['current_mail'] = WebUsers::getEmail($_SESSION['id']); + + //Sanitize Data + $result['current_mail'] = filter_var($result['current_mail'], FILTER_SANITIZE_EMAIL); + $result['Login'] = filter_var($result['Login'], FILTER_SANITIZE_STRING); + $result['FirstName'] = filter_var($result['FirstName'], FILTER_SANITIZE_STRING); + $result['LastName'] = filter_var($result['LastName'], FILTER_SANITIZE_STRING); + $result['Country'] = filter_var($result['Country'], FILTER_SANITIZE_STRING); + $result['Gender'] = filter_var($result['Gender'], FILTER_SANITIZE_NUMBER_INT); } $result['country_array'] = getCountryArray(); return $result; From 4ee0c0699183f4fbec6481f89e054d4a7850c9bf Mon Sep 17 00:00:00 2001 From: Quitta Date: Fri, 5 Jul 2013 00:51:26 +0200 Subject: [PATCH 12/24] Added the DB scheme + png image as reference --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/www/html/sql/DBScheme.png | Bin 0 -> 112567 bytes .../ryzom_ams/www/html/sql/ticketsql.sql | 213 ++++++++++++++++++ .../www/html/sql/ticketsystemmodel.mwb | Bin 0 -> 12339 bytes 3 files changed, 213 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/sql/DBScheme.png create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/DBScheme.png b/code/ryzom/tools/server/ryzom_ams/www/html/sql/DBScheme.png new file mode 100644 index 0000000000000000000000000000000000000000..38d318ad8881fd1e35e36efb3474699f01d5fe89 GIT binary patch literal 112567 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�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 Nq{S7)%0vu4{|~y&$JYP= literal 0 HcmV?d00001 diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql new file mode 100644 index 000000000..7e71786e7 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql @@ -0,0 +1,213 @@ +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; + +CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; +USE `mydb` ; + +-- ----------------------------------------------------- +-- Table `mydb`.`ticket_category` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`ticket_category` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`ticket_category` ( + `TCategoryId` INT NOT NULL AUTO_INCREMENT , + `Name` VARCHAR(45) NOT NULL , + PRIMARY KEY (`TCategoryId`) , + UNIQUE INDEX `Name_UNIQUE` (`Name` ASC) ) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`ams_user` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`ams_user` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`ams_user` ( + `UId` INT(10) NOT NULL AUTO_INCREMENT , + `Login` VARCHAR(64) NOT NULL , + `Password` VARCHAR(13) NULL DEFAULT NULL , + `Email` VARCHAR(255) NOT NULL , + `Permission` INT(3) NOT NULL DEFAULT 1 , + `FirstName` VARCHAR(80) NOT NULL , + `LastName` VARCHAR(80) NOT NULL , + `Gender` TINYINT(1) NOT NULL DEFAULT 0 , + `Country` CHAR(2) NOT NULL DEFAULT 'AA' , + PRIMARY KEY (`UId`) ) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`ticket` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`ticket` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`ticket` ( + `TId` INT NOT NULL AUTO_INCREMENT , + `Date` TIMESTAMP NOT NULL , + `Title` VARCHAR(120) NOT NULL , + `Status` INT NULL DEFAULT 0 , + `Queue` INT NULL DEFAULT 0 , + `Ticket_Category` INT NOT NULL , + `Author` INT NOT NULL , + PRIMARY KEY (`TId`) , + INDEX `fk_ticket_ticket_category_idx` (`Ticket_Category` ASC) , + INDEX `fk_ticket_ams_user_idx` (`Author` ASC) , + CONSTRAINT `fk_ticket_ticket_category` + FOREIGN KEY (`Ticket_Category` ) + REFERENCES `mydb`.`ticket_category` (`TCategoryId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_ticket_ams_user` + FOREIGN KEY (`Author` ) + REFERENCES `mydb`.`ams_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`assigned` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`assigned` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`assigned` ( + `Ticket` INT NOT NULL , + `User` INT NOT NULL , + INDEX `fk_assigned_ticket_idx` (`Ticket` ASC) , + PRIMARY KEY (`Ticket`, `User`) , + INDEX `fk_assigned_ams_user_idx` (`User` ASC) , + CONSTRAINT `fk_assigned_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `mydb`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_assigned_ams_user` + FOREIGN KEY (`User` ) + REFERENCES `mydb`.`ams_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`tag` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`tag` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`tag` ( + `TagId` INT NOT NULL AUTO_INCREMENT , + `Value` VARCHAR(60) NOT NULL , + PRIMARY KEY (`TagId`) , + UNIQUE INDEX `Value_UNIQUE` (`Value` ASC) ) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`tagged` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`tagged` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`tagged` ( + `Ticket` INT NOT NULL , + `Tag` INT NOT NULL , + PRIMARY KEY (`Ticket`, `Tag`) , + INDEX `fk_tagged_tag_idx` (`Tag` ASC) , + CONSTRAINT `fk_tagged_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `mydb`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_tagged_tag` + FOREIGN KEY (`Tag` ) + REFERENCES `mydb`.`tag` (`TagId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`ticket_content` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`ticket_content` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`ticket_content` ( + `TContentId` INT NOT NULL AUTO_INCREMENT , + `Content` TEXT NULL , + PRIMARY KEY (`TContentId`) ) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`ticket_reply` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`ticket_reply` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`ticket_reply` ( + `TReplyId` INT NOT NULL AUTO_INCREMENT , + `Ticket` INT NOT NULL , + `Author` INT NOT NULL , + `Content` INT NOT NULL , + PRIMARY KEY (`TReplyId`) , + INDEX `fk_ticket_reply_ticket_idx` (`Ticket` ASC) , + INDEX `fk_ticket_reply_ams_user_idx` (`Author` ASC) , + INDEX `fk_ticket_reply_content_idx` (`Content` ASC) , + CONSTRAINT `fk_ticket_reply_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `mydb`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_ticket_reply_ams_user` + FOREIGN KEY (`Author` ) + REFERENCES `mydb`.`ams_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_ticket_reply_ticket_content` + FOREIGN KEY (`Content` ) + REFERENCES `mydb`.`ticket_content` (`TContentId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`ticket_group` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`ticket_group` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`ticket_group` ( + `TGroupId` INT NOT NULL AUTO_INCREMENT , + `Title` VARCHAR(80) NOT NULL , + PRIMARY KEY (`TGroupId`) , + UNIQUE INDEX `Title_UNIQUE` (`Title` ASC) ) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`in_group` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`in_group` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`in_group` ( + `Ticket_Group` INT NOT NULL , + `Ticket` INT NOT NULL , + PRIMARY KEY (`Ticket_Group`, `Ticket`) , + INDEX `fk_in_group_ticket_group_idx` (`Ticket_Group` ASC) , + INDEX `fk_in_group_ticket_idx` (`Ticket` ASC) , + CONSTRAINT `fk_in_group_ticket_group` + FOREIGN KEY (`Ticket_Group` ) + REFERENCES `mydb`.`ticket_group` (`TGroupId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_in_group_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `mydb`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb new file mode 100644 index 0000000000000000000000000000000000000000..cc6d5b4d4a5913cf758450a74030ffc3484307e9 GIT binary patch literal 12339 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 literal 0 HcmV?d00001 From 10cbc0b63b8659ea703b59eadbc1b20d618b3c46 Mon Sep 17 00:00:00 2001 From: Quitta Date: Fri, 5 Jul 2013 03:50:43 +0200 Subject: [PATCH 13/24] updated the sync and added some new db tabels in the install --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/sync.php | 20 +++++++++-- .../ryzom_ams/ams_lib/autoload/users.php | 4 +-- .../ryzom_ams/www/html/sql/DBScheme.png | Bin 112567 -> 114396 bytes .../server/ryzom_ams/www/html/sql/install.php | 33 ++++++++++++++++++ .../www/html/sql/ticketsystemmodel.mwb | Bin 12339 -> 12657 bytes 5 files changed, 52 insertions(+), 5 deletions(-) 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 170a1c4bf..1c68b822b 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 @@ -25,13 +25,27 @@ class Sync{ switch($record['type']) { case 'createPermissions': - case 'user_edit': + case 'change_pass': + $decode = json_decode($record['query']); + $values = array('user' => $decode[0], 'pass' => $decode[1]); + //make connection with and put into shard db & delete from the lib + $dbs->execute("SET Password = :pass WHERE Login = :user",$values); + $dbl->execute("DELETE FROM ams_querycache WHERE SID=:SID",array('SID' => $record['SID'])); + break; + case 'change_mail': + $decode = json_decode($record['query']); + $values = array('user' => $decode[0], 'mail' => $decode[1]); + //make connection with and put into shard db & delete from the lib + $dbs->execute("SET Email = :mail WHERE Login = :user",$values); + $dbl->execute("DELETE FROM ams_querycache WHERE SID=:SID",array('SID' => $record['SID'])); + break; case 'createUser': $decode = json_decode($record['query']); - $query = array('login' => $decode[0], 'pass' => $decode[1], 'mail' => $decode[2] ); + $values = array('login' => $decode[0], 'pass' => $decode[1], 'mail' => $decode[2] ); //make connection with and put into shard db & delete from the lib - $dbs->execute("INSERT INTO user (Login, Password, Email) VALUES (:login, :pass, :mail)",$query); + $dbs->execute("INSERT INTO user (Login, Password, Email) VALUES (:login, :pass, :mail)",$values); $dbl->execute("DELETE FROM ams_querycache WHERE SID=:SID",array('SID' => $record['SID'])); + break; } } print('Syncing completed'); 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 7083d6bfa..4de9ac6fe 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 @@ -380,7 +380,7 @@ class Users{ //oh noooz, the shard is offline! Put in query queue at ams_lib db! try { $dbl = new DBLayer($cfg['db']['lib']); - $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "changepass", + $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "change_pass", "query" => json_encode(array($values["user"],$values["pass"])))); return "shardoffline"; }catch (PDOException $e) { @@ -404,7 +404,7 @@ class Users{ //oh noooz, the shard is offline! Put in query queue at ams_lib db! try { $dbl = new DBLayer($cfg['db']['lib']); - $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "changemail", + $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "change_mail", "query" => json_encode(array($values["user"],$values["mail"])))); return "shardoffline"; }catch (PDOException $e) { diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/DBScheme.png b/code/ryzom/tools/server/ryzom_ams/www/html/sql/DBScheme.png index 38d318ad8881fd1e35e36efb3474699f01d5fe89..340e67c5c6f832c1b159f85c0535c1e6ab755a6f 100644 GIT binary patch literal 114396 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
    +
    + +
    +
    +
    + New ticket + +
    + +
    +
    + +
    +
    +
    + +
    + +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    + + + +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +{/block} + From 56fa0bf238b8f1d2802fb2cea030cc042e8d22d9 Mon Sep 17 00:00:00 2001 From: Quitta Date: Sat, 6 Jul 2013 22:38:57 +0200 Subject: [PATCH 19/24] Creation of a ticket (not the content yet though) seems to work --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/ticket.php | 7 ++- .../www/html/func/change_password.php | 1 + .../ryzom_ams/www/html/func/create_ticket.php | 51 +++++++++++++++++++ .../ryzom_ams/www/html/inc/createticket.php | 47 ++++++++++++++--- .../www/html/templates/createticket.tpl | 2 +- 5 files changed, 95 insertions(+), 13 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php 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 62461e33f..ac91bbc39 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 @@ -16,8 +16,7 @@ class Ticket{ //Set ticket object - public function setTicket($ts,$t,$s,$q,$t_c,$a){ - $this->timestamp = $ts; + public function setTicket($t,$s,$q,$t_c,$a){ $this->title = $t; $this->status = $s; $this->queue = $q; @@ -28,8 +27,8 @@ class Ticket{ //create ticket by writing private data to DB. public function create(){ $dbl = new DBLayer($this->db); - $query = "INSERT INTO ticket (Timestamp, Title, Status, Queue, Ticket_Category, Author) VALUES (:timestamp, :title, :status, :queue, :tcat, :author)"; - $values = Array('timestamp' => $this->timestamp, 'title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author); + $query = "INSERT INTO ticket (Timestamp, Title, Status, Queue, Ticket_Category, Author) VALUES (now(), :title, :status, :queue, :tcat, :author)"; + $values = Array('title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author); $dbl->execute($query, $values); } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php index e13e859c3..57e675123 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_password.php @@ -42,6 +42,7 @@ function change_password(){ exit; }else{ + $result['prevCurrentPass'] = filter_var($_POST["CurrentPass"], FILTER_SANITIZE_STRING); $result['prevNewPass'] = filter_var($_POST["NewPass"], FILTER_SANITIZE_STRING); $result['prevConfirmNewPass'] = filter_var($_POST["ConfirmNewPass"], FILTER_SANITIZE_STRING); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php new file mode 100644 index 000000000..628bb9ca8 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php @@ -0,0 +1,51 @@ +getTUserId(); + }else{ + $author= Ticket_User::constr_ExternId($_POST['target_id'], $cfg['db']['lib'])->getTUserId(); + } + $ticket = new Ticket($cfg['db']['lib']); + $ticket->setTicket($title,0,0,$category,$author); + $ticket->create(); + + }else{ + //ERROR: permission denied! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); + exit; + } + + }else{ + //ERROR: The form was not filled in correclty + header("Location: index.php?page=settings"); + exit; + } + }else{ + //ERROR: user is not logged in + header("Location: index.php"); + exit; + } + + }catch (PDOException $e) { + //go to error page or something, because can't access website db + print_r($e); + exit; + } + +} + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php index 4f83b4631..4647bbfaf 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php @@ -1,14 +1,45 @@ getTCategoryId()] = $catObj->getName(); + } + + return $result; - //create array of category id & names - global $cfg; - $catArray = Ticket_Category::getAllCategories($cfg['db']['lib']); - $result['category'] = Array(); - foreach($catArray as $catObj){ - $result['category'][$catObj->getTCategoryId()] = $catObj->getName(); + }else{ + //ERROR: not logged in! + header("Location: index.php"); + exit; } - //print_r($result); - return $result; + } \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl index eb0fb45f1..fac2edb81 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl @@ -42,7 +42,7 @@

    -hiS09>%#|~z28ktk ztS|8Xn$NWmu=RNzsDGOEwIdh`T@VEgGI!Q+o@4v5GB_Ab)zyFop+#B z2){e$Zfb+^Ouc8Ms%D$N<2UN+hWNA`nqsz26&(XT%(*IlLfYAjy5Bh%t>z@CqAo7( zojt%5A?0+X(jx2gPY{2OyAIIfbU()BXR9I%SK^i$LSp0PkB?&~O`52tN)^w*U^QLz z8#KAM)4kly2KoghHrAP(_7pVa+V41F@+^7Vh{xQF8vX{iIa}p558G>D0E~o6R@Yx2 z>}NvL(#2F%)r;(JOE~S!I!e+XlI3HWq{1ASHrM~YEjODI z-%8EHWw|%HEG9u^(Y~>Hw(Dy7LUA!Wu>Qy}`&G$!YeD)*hBsQxcVnIvUYygpfWOhR z^Gnp9sXa@7aksa!IiTZ9i5D_WC-^WAwy-#3hQ1FiU1p+KgyMG0d<{OwMMU*w-OKzu z1{15^CBE}MwzI~q{Z#kpA{IocO*%^T#@LM$Muuctr0q2yCB#it51Lb4cTf zWT#F#UW5h@_!1r+$<47=+-y-EQkpWlKa`X|$g&#NJKr>Oi_iFbn+zE`YR-`JSXJ?R z#0=^i;$9#2Ahql1&t;G(HCI;m2^m$@o0hOy-2}j_A&|+3U6&7j&-uHt+xdkxl1g4~ zQO%-@iiHtvRd#~CJa!d$b-WR!Kk9*|L1ed0l_Vn-9X1^m9Tllw+pBDcx+ky-hi!ec zuphh@>*Crkm51@m4+Mkn*3zDsnJ#Z*WcZ2g>3zaN0-?HD>3@MLLi@_&)9DSYux>PW zZ<05Dmx}Y|2g}bEeHDR7?g2U$3}Qmsx+9Uwi%}`C%$zdXQ+A*5CBak#i7;*CX!q({W)%M z`+Y6hBVYUBB=2JEvqV<^2hmfj`Q#f4ESl!JYn4Qqr@O8Lb@lq#I`~~Y6>rt^Df-d+ zL}G*x4Nf-4oh?mOcuy_Q#~fL5d<9N8NnVSf@q^cbON}(%lxzynnI)_3%vgVQ;HcX3{?qpQ4H_sCT_6h zK3%J)^uq3{%X#L}!ptOXr@ATXRe7P6)qDs1GL!VhxsM~JxOzQnnM+pw0?E|sp&$l z6nk_+P*7GHVN1gwGrpo~CAUrxkXeihbO!s~CW|A`>#L#?{oxtn-*-dPYAJJBP|tTQ znJJX3@}cwHpDHFDG5K;$`Y2Rfd8b#evKeX05|_cRYxFvwSlwn@`_nNkxHnlY)I;zd z?7DLu-DAAuC$qBI#p#X*rj3I+oLGrL83QbzlX=>otXoe5Z`(rC_vG)r1^wVR_E*Xu z#;}xDH@?DfN6hTsc}&d66)C})#_6+7s8M8@2JFCO`st{A65;7pT1hlp($m_yLD_fZ zqLP;Wu)g`r<%Y^D%Q=J zc*~gSd{QLYl7c&gA3<`K2JEXb*7^RG!wgo&n6gIrUP^NB*Sy8EUX`IwN0Rk6SBJ(3 zGn!-vbCj0Ws?n1JRk@REf<1(2RCp%hAVE7X!8-O1k%)fSX9c zOFx|g9!GM=9_H6Iws5HMO%zvrUJ4;G+b5~0~l$S3fahet#T(@t*M<7CW z5rnUPF`PbMdJ&-VFr>7u4kRse0ATgKR6@r3_b`^ZR%1C2W<-_WjI0zrQ{x4&-Q5G- z+QZ{e+%C=Lj42oxP;V8Oe$GCOY`(~qt9!Z!9;$Qo`JBaf$ROgfoyi>N?@^42+sTkz zAI(pW$!1{d%##0wpt&9D%Du(*5&EsTB>*uIWA2c`F~DCG9l2%U0qLDPU{L#GUEZ=T2X?m<3Z++Fxks(Lm&eoM&#DzV9mxnlju7y{hOZ|q z-1^STOGrvm#eC%8@Ec41(TRl2e@b~&=t(D$$dLPV4#1mKF`xWa2!8$gl`u=>w<0OMhg@dufNAC0Ve?5@|<3C94u}civ#(uC)uWbwOj+L01}Bhg?y3uMbs;TXcm6Q zSd1CcD8-^zP@C`lM0N`So)f;Vs#8xWmi_Jsl+XTT{$@V#lCh9W8-@xIWfU;FH-A1& zUktS?P)<*xCj=fQ&0ldUJ=`^JY(a;249b~Oggp1r>quqY6gDlW+b1)r+ue$Kp8^wI z{IKx-x+^?gBY4ggD4*KfQ#TmJXTf%IWnA7=$iGkr@JR2GW z_(#VJwS!|Qgnna>A)lM2M00X{gukfapAA&q_HAFxjxY1UDsYl}U@G1z48~l}ZO+>@ za`Ad;Wem=}+HKjnYAp@%5!yfr6FD>E&d!8_>e## zrE0ISo8dpd9-dauX!2Apve7AN?Gh4SF?=cX)UKe$!NR)lMB?2`A4y@i2PS>bsR9co z;7|0sLp1i^CP7v1*rf-$LFGc(h0A`>%bfy~&8#*~7l=5mFL6~xNDi5&UEQftQVC8~ z4Lx;i+pe^rws_ zVxU}b2&R>#R>bUs(Zd`(hsKLGzvs0(UEr_rT=e44QV7n64b69k5Jd-8;@hk;at_j~ z{^N#t>5HAqU0o}a%R)vwyj!zy{t}Ls{Oj$OBEEF7+(zRr2ix%oEp6^i$rvD@fD1|m z*hvGv7+HbR8FaRAr5G-XI=Ksupl?LJpR^jlcGk7Cg$dqkp?jYm1k}|dkrfsfi6qsg zw^t3X+g6YC6-%2pZooC$W7k*hf`QH~79*Z_k|WgBdBw~e*;(x+z?Z{dLCDQ4b$!ig zg;1I1>Z385%Gzu|G(ol+NiDF9RZ`XLA7qt^MIVgon+|(3d&)moh$+}XY=2JKSc<9p zfdpMHPTMEZ7$5C?O&+4C+5D1HP}nA`de}a(9f968isXgx9Y@RGN{#!d1Rzg3v${I? zWUx!g1eQm~`{l`^e{F@lYSIQhZU(74|F)l!&-khjp2{?3SkMSyu0?sM62Z-Y~>q6kWCSZLqNaU3NL zd9DxBL@O`hC^dAX#3S8MTv3%soD&~p5C@p(CK7pF1M5E!pIrE(l-hpR5?w7!8%fZt z*1mq6ZK%zE&o)N#+AKb)ub@vneVscQ!KC4J{_?|*ISlc&;$$Q`TsH6SW?Q|R2?Ual za=2HbFKuG69>X2Z$rkO;_i|Wdw>v6JS#U&Ea)uC0b)%dw62^?rZ_~zR-dhX~ZI4tu z-ta!?nqKvKm?zezYkyj@39i@9U9NEhuCK92qnQ%b07NjwZy*}fAV~19z-K$rRs8*n z?kLnVf>_<&L>U`V#`o?`&1e|aA2)Hc_33mQpeg4FT+vCM*$YOB=9j@8PRo=Q=IjAl z((keHjYOpt7qj<>rRwJ+_zk6yV|jR-dGN5#=-^|5`;_9h3mUZi<>IAe!RIM%5tnT( zEF99Y7pJtErxDnqe7G$XFH7}ONP4#xi=Oo55@ls%+!IUp#=>p&!lFkbc*2t<*zf6% zn-v%7oE2C3)>Q(CUAL;W=|u7SE2oh@Wl6LOBynRL7|RYXC)X zuqHM&41Wj1dqCJ5^Az~)+gKV3mheP1E78Q{S~)1VcU`p1(ir1;YYWCWgU>T-hq-Jl z4}=|1dwG@fB=p2>EPZ!n%I9_jt;tUeFuD zP<(GrFl{*fUYgv_ay_N>LE`2LWQ-5Wr==wPh9zsv>?L4v@0WGJa({CS9r4jbtGIrB z`*Z97940MVzqsgISYdG*GBPf%$J+1jO&q7dj*E!TrSjqc7!BKDqlt|9H8nMeql(;d zn<|KGh(i(v!^y10HsuJwEt`tVG_uGgVIqM6J^8|A^i?pggoBRfRcByX-T4yM97)@m z3IzJR!%Y3{Af+0Q6?9?ii^))gOrq1l@z6X7W*zQ%a%wjeJI z+YG6iTyt{!i}U3;SPU)-0!+U7Yi$;9`>}>nLoNHX z@RHss{8gk^2hG9u9_C22l)I+osl|iGuD!i4Sdj|omTmKzu$vnj4Au4~-zz8jWW|H9 zvf`{?nteA+z_POxNrl4&+2`g10s^o(fW8EVkKd;Dcz8pQRoz+YZb}YZ z+6vXPBb(p?PuVZ1ngJQ%>iJLegbmF1MqwFO;Yg12Q2{V{7B*Q&Ob|a^d7Ue|E*4Ll zq3o$&#LLwOFrVM0>cX1sKUYK%?p+1VEN_;zog=W$3yQkRtv3(#7abP&1u(1XlsrCJ zK0KWc@-{IcETfW$HD(>RTl%_^W)p;}jjVpD*p-ncDDN4GL`k=}8J~H!3|-$x;o*8) z?A900B)dSTHD@_j+g7n|X)2~GT( zy3}tAj^`ppp%R$Ta6v4Q7B;hxvf?aG2E7JbwiVg$j_z(@Zeul8otmFoD2jyFQHs~r z*I6vo6lUrdibKkFzLv0-0HrrPj5ikiHq=X6)&rckhqb@*XeG=qOFl;RXZ_iX3}dZq zgA>UlZuL|&Rd;B02#^np<0CLt34@EVR$_~l>|*j$Hug!KLZI={$FU*V*E!?0Z|V8q zp8G7?L2`vd!^2cvp>+(@9aK?lALa|qYO#BP!z*xF&&6UGMr}X{e{!q$E&kroW8WVRbD_@Cd{5==9DY^zr>%3g zETiF@>6Sv~7-wG$$@;j{&j-%$kf7T=?YK=g#GJgT;gEa?esxv$hL-(|)e?p_SjDH` zW3q4D%pOgE=&`vlieEUYGDYY|>*d9CXb?3teDQ0%zDfpr23Cful(>LHl-*&}&`x+MoYQnCH^`gW3}OX!IBOGyRUN)>^1LG;EtK z0HQX0+5`(f0u|PU5}`Pgy)c|+vO+DaOd)r|lxlTwLwBiL57fu&eJr$TgfKL98=n45 zM=RXHXbWdPlUwVh3oT{)c=7$&6uUmdroLpaS|VH55?d8H7M=fmIz%`;f5%sFQ%hHu z=b^h<^*&4-8gWIL{o&nA#j&1Z7ek2qzUV?#)cb94;t$Qg4r;YRePglGWX+hKLn|hwtxJF6nqw!N9d9@GSdivY|xKGIqricvJV}P#dE}|kuz4b>S zxjV)8Z#9@>Nx+q_ZX=ie=&jRfF~@pF!4@r7XT`(U8hAL!a}!*eVV`iYBq-n)SW=mX z`^k)aTl+`ObE&nfbArdoT|_{}U9epW-N6uT7QW_nB4&|ZjAgsLJZGxFsdYZE*$q5= zqmuIrQel zZ(H&Q2I*~+Y06?4#s4GOYLzhqPZ%cCOra`wcJgERCgTC?hXHs0T+;xk00`jswgav( zubA;50Z3e#KJNy0fbFgmqwQ*&pxJA_^tI9g6b?1ErP(O?!`uc(8ccU3wLPc}*6Ojs`plKy^fo+o9Gj|THdu6No&k=sQ~9n!kNhW#($6rQm257ZV4 z|7j6+lMao9q>5os61gYicnhyezzltcK40$_Txcc)wRa`~(-YLg6-=G`fRx8xIBod+ zd>$M&zd|tde8d^=&WpGd3k~8sqX2~o^@4-)X{NzsVlku8pg?WMWM2Du+Jf=O2@N3% zL_9ufg}PuAO2o6^EmvhLLUA`_;ac5T&Y<5@{fm7QFNW&;Fw+Q2#F&IvWks3!EKE!> z#njGu0`Qj zEG8@j`nOqTly-{XqlznMk*C2W8JUJ*J_krwqVLGJoWtZwr9`Ah*Bb0UfA;V09;zmIT*$dcNaYDGHJs%)odOPUk5shWm++E*BnXnf z28IyOac8$Zw8nS#?a6^amK(U%z7?-mEmbXU{ohBxeaU0{4Hya|KN+_Dh|^TG0f81m zpXC=8u+*Den-hXc{6PCwajX@oXw zi0i2&2Por53%ilVzY~z}6qMj{ANezToEIjBc~>i2f)gqT|8sDF^%PR4MoZ%0Aj{7| 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�eDOO7-i8A(2VcxPkT7k0sN+2~frd%7>as6VA3VQ>$HBu62^Yz?le5d2 zA7tb{B>#2#mj0^%1pQUacCh^|2X1m8xRmhk% zW5)4^XKnwle#ujR*segaGfUB3fJ4Ga&#;+37uIZ6b z@S2j-{bM}mX+ky%ThaP_RhIunqB)>hk@pLm00aouTX0P}6AL2=3j3HpBm5KS^3{!x z^jxoI`u7T0TM81icYiF?qFT?^z6xZsLxX((1M9ob#hSAke4Z93p`OwMGKd8oZqn7v z%sVEO`!+aSJ{1!as#|NOGHzYAI33O|S7*ac7UU&^R(%pU64qY%R#0C9$NvPUJL6|PIS70Z$4j$Homj;YHa7IC_e9jI9CL$E%QyMQ~fI7j7W>Mk? z34c0l+FFIFi+D`~4GVMxLb5L^7S%kw_vdWQnF0tPLPZ>$Z`ykHN4@zX6$NE!6j>nk z)RfqQ^;8}nZXWdurE$f~gsRapuFaHBJju3*u?7YhS#15zk=Q)U65T5?KEW%T6s_%t6DF34YO*0gXWtn+qad8%jn_wv~M z)YyTUBcSeK3qPxOb9bktq#QD21-*lZ&dkglB|@LFQY{1SX~lh0fAbq?)s?AX$jImv z`Ncvy63`L4{)8ob$d+UU+vAFAcsN8#Nkf5XYV4}9sV^^04UlkJmy4%kbInIhb22nE z_!q!i^H%`Te5|7X!4s4rWzPLSTN!`ZT|P6wBpP+5Vk?wIESc|x7Or_gkzR3Ha7Zwa zjY~*yT~|3B7$V1OA_%cwgy&1y@qRfyi3EkyKiY++Gk!BGX=}laU=_ zFJ6{XAENW)Y&iD%1p@8G7VXFG5U-Ru*x7}Ig@Kn%PgK=oFKUjcXw39Acri3Ahmz<`aP9ydQB)S zFHsql()vn>h@?Kb4OTDIRsX2X$P?49v&OET-a0tpHQqXl-t-yzCnr|1-@9EZ(=zqPHMIs=*LPJ1k&#nb*q-Ey74$zzPG5s?x>Q z>L^tz97eAVrMY#%cZ)))D1`C%@b`q-TTDD)320#;YMBjLbUl`3rsQpAQb>hp6JQL} z8ZE$>b6S}$j(t^3)RF`mh}muQyrLEPZ?iGkRXxR@miH#)^C%}9FdIjx>4qsUF0%OB z(&*&bZ*>VG3YB>&DGN8?XU)lg3I@TEro;-QPQxItEYKx~XlD0}AU0}TC#jqp%VF<2 z+S}h>*eq(AQ$_zcqg&1i^ck?fx~K>W728b$cz9LBFR5!+cVniZ8b8`Wsc*yd`mUa+ zTJ`iAWA(PxY#)>;#AZ?_MR>VX=)5Q6=8IdSE@|E!9B!4`)=y5GTUZN z8Uo&f;-Bx42;}WvVRzRY_50T^zO4y-AfK@mdANq4RBXmPPW)tLkpO!jnE#LB+(Pt! zkQ!#53xIL3;r>UOBM1E3sF)AF1vb_bHZFkSNYg7_75c+auJi72f<=Yq%nREm!=d0d00OEd2=54}Et&c%jS!;nvI2Agb#F&_M&d2IfR_G!&s1JYBkoS8Zt;d=GtduPJ4-9Stxxvqw;z*-7LlKRd48O$(6TTy zYqnfq1@f}HX3zit7!kO6Pb`5NXG{%I*1YoUc>u$`UlIVBsCaT;O1fN7qDl<7D(n2g zP=6SEVN*hg#eix~{h^N@r5myov4pGC1Hf=;)|=HIm1&|LhB802agr-pvV3=UNTd+H zy5rYykpIc*97rduI@-=q{wZQsU_bW|i4f%hwy2mrBH6zdT+TrC{FrXNI0qsPaFqJ` z_2GwAswusf=G2MD zwCAg*#{+;hevKiF_$aj(>MJ3;anMbORt!Z#ref{5rF`W!FJ(TxmMeK2r0>*ElHIHe z?bpk9Y%6Zpz&6Tl2{;@86=Cw&$ADB{)IuXmq%~p2={QV@ZF5e4i<6ng_H1%lb&8U0 zo^ad}0avNG830Dnw&Cp?FSZ=12__9L4zW;?#!6qr)Bd&nIpKjE`B?=94fXZOXZK<| z>c{SJt#-3nIu>KyPawe;I6cd(cv(QIK=KG z?gllQiIQ|ab>>5%0X&BIz1EnR7#9-qLV-bfd$G0yl@0smjDtm(6bh7&?92=N#{PhS#Nd6tQ+6~9n{Pb?C8wRx9YeeJ$r!(Z` z@=MLiEA&7u41NE-wA#%OCc^gJhOQdIbqOC0$_7sG@Nmtp&wdXL)39>9l}9Db@M^2% z-DENVKes<$mt_?zWPK)hRqFo1JNC5J46#IbJF;Zbe!&TxsIbe*K+3QjM>$mqOoN@q z%jTxbMgMi#4d@>zgo^OZfIESOf}*%R!(GjOJQkyo7_?^6dEAH(f`mys8iOPYt1^I@+3qgb=nx z=3(rtva*NMHY+U*P?!D8{Cz);ihJm$KHkX3mE7&`Q`-aqDi}M3aEfp)-iS$}-7$p4 zN&ck)m=Ld|;?SV!MJh9vjifB+`n2??1^#~y4So^;D8aWg3J1Gs+(@&QrPf`n2;A9$ z*}q`}Zo>_Zr`6Z1E?!WjoPT-3iIL(^2kr#g|9)}`MEDjrZ9Y`<+ykhwQNz0e1#mn$ ze9qu8avKE1K-)$OF{+8c6$ze$6F5g`|2gfVPkJQf1BMckip*w) zYN)=`40qsp3KaD#S{!4%t&0c*6Z6R>$l)5GN1daLYyw0Jw@9Hk+Wo9Otdiyugw)V?kX_|_)=e$Bc*U0XL;bS{4%yNGMArGtvektW*Og9MmB)Mth?eOE z$h-NyfRU3y)Z;Ptr}692UsR+A_1lY?zWCqXaZ&QTZq$f9DkfBVR{+0e?oaw5K<=CG zTN^t#a7@RYe}94s?2j>|z@zjK6G&!qA{}jEQ9g8cy7X83#%g4#3D(p3ssu4P_m2*h zQ*|SI;|*@dg}Q*!H6zLgpStT|CwW%d+o4i!T<% zLB4$qPbO}2m$jzXje5gH&7`PCPjK&MUOO+9MpFM5zCXk5XZMdDM6-buD`-U6^|t-p z$kLQg`lg)cO0te3e0gnfyjCg_a{w)-#~o;De)WQugFB9HpYf$_h)kr;r>G=&Nzl&a zOW0p3|4)~HlQ-zud(La{MVpea$8hSk|K-f=IgdJG(W83&_$*0^f5Tkl)V1?<(fbwv$y>^TB+z_Vb697M7wMh??*ehd`4e9! ze7Q8$DdiE7?*T$wMM+#OOja=udwn9t%u?CSSNO_bF@xjq5$sPj4Z1jrr>Gpq78fp$EDndMFKFKE#*G=MwJasd%-8c)l>QDEn zt!Xip9`3`F<|9=-fk>xA-@$s*HQsrQsySbthzr_XqeQ{oszl(wT6=yOyM%0JrQ4r- zEtKVIWi9=Z#h)=B@^?JgYH8iaY2;^U>ypRM;mkeG-K0qfjFy{Ar~FWanB?IS?%Kf` z+;gx=C!F&k{zji{TN$C3ZUYOF>dB=K9v*XdnTd;u8@`cVdHDp6>c2P-&sU9#?LCmi*4l?w@d+c39`Qnhu!D#FinNcy|i38KE{ZbKU4p9 z=pD^@$va3UJ^)gI&k3_rw!$IVExGba?+mPcJ+Mvsm-Ta)#Emv zo>yRFwjDF1WlGpc*#7%nZ@5C~Z1KNQd&hf-1oC6R&!g!G=gR@Nd<3vz3&x5Ey~3i4 zNK0@To4Z^!K7EuzJlN33JNx{g=|5*Z*%!Bx4l&YRt$h}D zZX6rcB27-ccE^;AGGFcb2LyGJ(o*EOVJJltPw%ZNDuokoP;qbx4-I%u66HGEk|Q_S zZ;wW21pK)!MMwkK<7wc0?zYuujzjK`P3W@@xBps{G+Uf*!+=2jW2^ibboh3qtH2lj z46P5Ne~dB}SDj+gSIF>47R6*A)zmy4R7ft(;kbiPGg_u`lm@J40YIy-A+w{w3Ayqi zL{;Q4QhVr!ApOLmn_FGNM?gC<`-Lm^{}9aKL0w-PH7_UThF=X9a_@AW+coj`HOW<+ zU2itbyjvk7>M;q~C>lEsc>msb1iz1jORg0@-`d;#0f!R1(!|$%L)_Q?`n7{+wkc*q z6rKY#r`L0#L&dIa19_S-SBWOzz#(j1vvbhGIQyjXl-gmJXFfCr)GpiLzes&sQ4QYB zH@|JR%OZTnoHr)iNb6G1v*=dRBzq=(Wc{rNaxkw z{UJb|U1Yvtu9yZ)g}VPRgvS7!{alj4aq5!qNzT81D)5}KTe=t~t7GtcVf_!DGzSx0 zVv(iSoha4yg>qj|R3Bf&DkX04aeVkzR64d2l` zD7;NbS4tgJa_CbN=n_Sv)d_hsjOn%h=4F5c*n+OARo;CM`wH8n?V zBD<^g5$iL`t$!Z}!FrFh-#KDGvO5vNo`rSG&{NOyzvH{bNIAC_pwb@2K@&r~P z1o*78e47u#g-6bOT3uK!I#D8mU}?>8*@(C7z%m_LEFOzye8uZ*|5;bo_#9HIUlvZ^ z05yZJEOP&H?;Bcx`*f$WmWGe3Hfm}_9y(df3K$GuB&rI2_|DRN*DdB`-vf2QETcd$ zH^bA|Tpd|z9Zi?k`N%RR*pKgKn@94OLAlGQ(s(WoA5*;8&g4*!c( z(Z4HN4Z)ZMRohr-hK#xuGdp1OO;28pRj(dUazUD`b$W!#5nJ=d5Zd?6C+>*vWV`9T z;t>ni&Y4By`Zj5(x{^KNq2d=q&wA1Q_@E0`I`(||%sz`?Z}v6mRJoA^O?m`u!SHu2 zQls;c*)=K$rso&F5HpaLblE7s@REHf2pcqbEJ}{6O>=8-ZbD!?p7a+%wPnA(`I#i& zQynedn~|AV&Aj1c7#Zxc@ZWIN-3ieoq+K5Bx17~bWzk9Vd#rdsTC?rBeQL#-RcsS0 zGvG#O+Mxo>3F?C-vtD1KcuJw)-Tm~T+tvBE8D(pO5@kbuYqhIWxyYxuhfXZsH#d4A zu7=Vm(GYQ_bVpXvquE;{T>x4!3@L`1C!h>8uN6z1B!8pPegc5{=6!Ig%%3Kv#>|VA zvbRekfO-E%bWg*FevbN6962OViO2Wy{FXl>=8W~D)ykeF%Tycmi6xiA{BFKJ^#_?j z>Yv}?ys1bm(CZJ-=tj-o!N!6|pS|Dx4avWT{B5+C_#uP%&5D#mEH^Ml#bdoRS1&$5WHV~CSjkw$)EGXsA4G6SD zo5Jd&e6+Z0|2Fc22W>L3-nnvss$gHfWSQwmiV4PyW^^83%l6yXT3be8acD8Lx=s30 z=%9iO@D+DmjV6Ji^2D-Ex*hgbXukKb{?gnC*SWh`M?rwZVY6)0FT88l?RfgtrcX_N zn08i|VVMebZ)7_)e?2smH`UzCT84l?uF9UN-R;8~KOfXmeJGW(F}H4K=G(Gh@Lfv= zj=x!XXniNeryA^>eThg}v#bU6C5uw z@`C=H5uB)p1t>V&mKh9(N!MKjQSvQj&X^wjAMDe1de5XJ;?<`GF0kz>$q< z5;#6jAUi0#cpKGqNf2Jlt(FMoGM&1RGpzb;>Kyv~@fH~UJY%1*A*0PU@@rpv)Y`ftt*jzr`_!=x5;)P$NS9$jZ zM(s24v#<0Aa+z3mM;|GAlta1ia{wMGD<>xI!V@Ht*KtM6SrS zL=i5T?DyMTY)l!5XnFnjmHg1({51b)JKYiwAZ&bH;a-=p>5kI>POhEuFz8}E2Ba%` zfcu*+)uU`*?kN*@r^XkP3A3KsQdFQ)c>XZf<$lU&jPm*io(77ahP~w)J8DX%x;MtS zw*A?;L?{LFVIXfp*r`oH%LihZ<#B(*q@*f7<0tjM`nl7`euXrJi4yw)gBcDb;RF$r z*mI6LD}wDpM=wf!?xj4qscF2@Q9Pl0p6Ebj8PyoeWFfK;Iee{%6f zE7=q3e4@EG_cj^T6{ZIu823Ie5xVI58qWTC(lVy@r>HK%T4IO=&-ov&fY?L$n7 zC6P?*wp2m)KrCgQObQTaEV~axu-)&LUR%~548#kpnz*cp<#7`O3qo6u^{PM;wOIx0rxdu*fKLSt{lmg!JjY;so zDcCN(xykKTS`HEr$aCN40uLxi+ARS%w}!F_&0_NsZ^<`dAOox6P?-;o^U&~k3%jW) zS`es$lwiT<0xk*=^~YP`_3*VJMb)9}O`5KPovo(i(A!X6;gshp@) zU%3MaL!Bjozzkf|q;)a}B^g?MV6=sL+zxm534@XLt8GV809UbK-^Ia)-=W8zV_AxM7_{3zfx_h!*CaFTK zrYIsvTz{y*hCY}xKTdn&1l^;vyIZsKziSrH&4hAJYhf@+!Y25~E>t6T({VV!3{Ud= zL3Ib1Uy38m>ul&Vd>GkJuS(Kgg_E(ZIdhH_hSNN!kLsJlmPx?T*A;?SjWXcl|CfW< zls3#;tw6Qg3IF!eYjy~N>w*eEABVV(iIuZN( zu37|1E`lyv6P-ku9GvPHEWM`Bp;mK`dOmX?u{7JQS+fhPy9x79p72?mAH2Q86XWTM;YJYzy(4%fSC`zgVrNw z=)Ff!GBfp&E%MJ%9C_}W@ge}pS*a^CnNq|QIp^H7SKas_f`?)RK-L^a0ONMAJV-YG z)QMB6hpffo42eK5ZJ6V_7R)sDUN$I^8j&f1z?zSj< zv1oa}ug_;2*|^=E_tH{xCB{5Jr8lw?5aRv8k9{5b*}s2Y=@|!0ST>k*e!5Q^o?jcT zb7`}w9d~Y#Jc;RO+bj@W`mDJu@#B9==zmWwY&3|I-@QmwQ6en^cMx-Lu*tJ`W@#spGRJj0C)$4zEUg5_$~TWjS()_{c2 z1Ufa4Om}3K7Q#A=_lrc=AbK|ra6hhYHC{@UK>7%J1&XIjNFXaDYiL#>hCXEkp?-qk z8c@~g38P-qWomrg6x&R{v~piPc}vGr*LU8P&`AR%*mACW8BqtTAq>S~nw(8F-X~@@ z)$)-{OQKXEy=}S)jt!M^yD1(aZVGKU-4}#23@SX{I}bTb{-jAP$aeAP^b3raVlpe2 zZnK!UHVLK<>6gVPd5#dg-l-nB^8H*?7LbU|BvBEfOhtfGx>&XUUNT2OS>07zR%{Dm zO1&RFUu8V38O>5&+gt(^i!@MLl03U7BxroEuiP8*+V;2XA{jk-dBY@~6tZ936eXXU z{Ep4MA?piLGgN%N`rGGOa(bQPj)?S@K{ho%sV0lQ&l~RqgSzr6AA?8TK z^>a#8iaspfe)x7N`q<#pR34}F_?umyM8Ajl#P(4KdYcmt0rNvhS=xAk6N zjXEJzIafC)i?%W!QM(cMgb$AA;s~r!rD+aBZrDIc%I}0xU4O9M^ItM(BqSv@9pUIo zu9j)9h4R$N^Vn>(HJUj58WF*tdbV4AjU^6DsWOAA> ze<6;vOqlY+ok)Y^z23rL8g;F)0;v!N7TwjnLJSriFLZR>oBXMzB`fepItc{WMh6^Q2t!#S1=~@s5HoQS14K zyg~LA;ftBgyRogsxX^F2P(_Q4X;;6o)F4T>VVs?9DR^&UBlen(b!O!A6G=n#fd%;` z5m8t=Maq^p;RR%MR&?S1id4$ndU1P8)w{%r;(U5D#0SknFMHTLEMcDt@vR2!`xp{0MhdYkmSR})pEjo&i6r@DzVMMO?q3>kh^$E=RB zwvejY{qFoB1H!^W4H6;;q6=t$iC;rB6?w7T>K7%Tc_h77hpyQKpG@bc?^SAEo_w5{ zE~ls3YO1GObG|+ong)Hnn`fhC>ijl(2CJna-h5d^U4kMm|He!rB2(YQ$>?|*gTsi* z_vwJN@cUe0V$*t&KEk0PMyuP=x{19}JWT7c^gibXmB%3ev>*Q(9kPAE;MTX6U~{&9 zIJ$%UZA8IkVz#E}l|%)G-*hH4{8qpY3`D@>M1o-(Z9|L2gc4cU#_92pm-K~ zUrY?At3m`#R17CpzGMF7X?FtB&~+luSaa9J`RW<*iUDi4GpPMXFz(j?*kFJEbfs}f ze(`}Npmjob=Tf~ATbUK#?2&atK>2!TdPT--YO_y%N8`3}YL{Hu4alI!=4D+Wp^{LQ zw)IR!=2>6+F*vTqZc_}rwQ<=2(G?%&D?gL+j#p~tpyx)TOK!IMvPVt|-(Dg8_PDDa z`#o+6^Gx@RM*sb}pVcW`rlIR%>XVkckUC7b#+pBH>)85iCi+)g-Dc%`5xBKLI=PQGD?7)Bp&kKMLItVfy>_dpJqoV81}I1+m@LM;Iu zeoiBJ4i}?Qc>w~&5Ut0KJI4b}yw2vNvM<4nWm9_ZD{qd1utiZniISm?5fz*5iJkSZ zmuidp6RqdN4QZsQs|k;vbG2-gkJw~bk-2v~vyL}69I7j_rN;JZ;&)V&*vJr>eZa>+;ar;+a?_TFgi;P7O-B=kSkPB_RhU&TR84gOs3;!qqYkL_NZS*<1PtD zz-+eLu_>IWM>-YM4>J}A>ov394MpI3NzO1$zHALc2%X&n;ZVsL1;8F*J>sOF9i8y} zs_RC{Q!o;XQD1~04FAphH1AhR4JQS~qbNlvN1GRI>>AC}r)(nXCsi{~RJr6z&{^at zZ&J;FhZlL8=^2ioYnyv(=_k*tfWs)4!Tgw@Gn}6jpJ6KWiOrvGQAPX`v=yi_mWKH0 zAH-v>X7B_rs<<2Ic}B|ZYJ#~O9SP)!c3xyKIJ#4g37FX3m2m?m%Z6FH)<-WrN}e)U zW8w{MhP+L)4}a(;DY^Y7FCmg&F&V%hA37;p+tb$8*JXOLN6W@3Aid+YXOCi)N#Pzc zG{~Xh;ZqkTK${}U>Vu(Yx0T?vwY9Y|M%T(CM5ktfp~8>bL3%%3&qhhw)s_Nmu4W>p zp^=o&a1R7p{0!Y&x~{6OPLx>#tV|fB2*O}PA|s-bupLE-C=RD?N8K0^wz77nZ3|!) zuevaMK>p@2g&mYZK|vYJXdrJ4Gb=QIbG+gX>KG0CImswuu4qR@c;YTUNm~ zdiMZ5#~$S0cNezEIC`vVTwPvkbbVnQ97Kk9CHpzYrc0knln!L0Ku^ofH*fPn^q Nq{S7)%0vu4{|~y&$JYP= diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index 268d4c8df..3e36ca6c8 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -45,6 +45,39 @@ `query` VARCHAR( 512 ) NOT NULL ); + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_category` ; + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_category` ( + `TCategoryId` INT NOT NULL AUTO_INCREMENT , + `Name` VARCHAR(45) NOT NULL , + PRIMARY KEY (`TCategoryId`) , + UNIQUE INDEX `Name_UNIQUE` (`Name` ASC) ) + ENGINE = InnoDB; + + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket` ( + `TId` INT NOT NULL AUTO_INCREMENT , + `Timestamp` TIMESTAMP NOT NULL , + `Title` VARCHAR(120) NOT NULL , + `Status` INT NULL DEFAULT 0 , + `Queue` INT NULL DEFAULT 0 , + `Ticket_Category` INT NOT NULL , + `Author` INT NOT NULL , + PRIMARY KEY (`TId`) , + INDEX `fk_ticket_ticket_category_idx` (`Ticket_Category` ASC) , + INDEX `fk_ticket_ams_user_idx` (`Author` ASC) , + CONSTRAINT `fk_ticket_ticket_category` + FOREIGN KEY (`Ticket_Category` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_category` (`TCategoryId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_ticket_ams_user` + FOREIGN KEY (`Author` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ams_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + "; $dbl->executeWithoutParams($sql); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb index cc6d5b4d4a5913cf758450a74030ffc3484307e9..c9fedd676dc185c2729a0605a32c74ad955d9d3a 100644 GIT binary patch delta 11065 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 delta 10744 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 From c045617e98d1db1acc9dbf5411cfe82a22b08672 Mon Sep 17 00:00:00 2001 From: Quitta Date: Fri, 5 Jul 2013 22:28:31 +0200 Subject: [PATCH 14/24] Added database setup into install --HG-- branch : quitta-gsoc-2013 --- .../server/ryzom_ams/www/html/sql/install.php | 169 +++++++++++++++++- .../ryzom_ams/www/html/sql/ticketsql.sql | 26 ++- .../www/html/sql/ticketsystemmodel.mwb | Bin 12657 -> 12386 bytes 3 files changed, 178 insertions(+), 17 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index 3e36ca6c8..0f64a4924 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -45,7 +45,11 @@ `query` VARCHAR( 512 ) NOT NULL ); + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_category` + -- ----------------------------------------------------- DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_category` ; + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_category` ( `TCategoryId` INT NOT NULL AUTO_INCREMENT , `Name` VARCHAR(45) NOT NULL , @@ -53,8 +57,25 @@ UNIQUE INDEX `Name_UNIQUE` (`Name` ASC) ) ENGINE = InnoDB; + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_user` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_user` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_user` ( + `UId` INT(10) NOT NULL AUTO_INCREMENT , + `Permission` INT(3) NOT NULL DEFAULT 1 , + `Extern_Id` INT(10) NOT NULL , + PRIMARY KEY (`UId`) ) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket` + -- ----------------------------------------------------- DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket` ; - + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket` ( `TId` INT NOT NULL AUTO_INCREMENT , `Timestamp` TIMESTAMP NOT NULL , @@ -73,12 +94,156 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ams_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`assigned` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`assigned` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`assigned` ( + `Ticket` INT NOT NULL , + `User` INT NOT NULL , + INDEX `fk_assigned_ticket_idx` (`Ticket` ASC) , + PRIMARY KEY (`Ticket`, `User`) , + INDEX `fk_assigned_ams_user_idx` (`User` ASC) , + CONSTRAINT `fk_assigned_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_assigned_ams_user` + FOREIGN KEY (`User` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`tag` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`tag` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`tag` ( + `TagId` INT NOT NULL AUTO_INCREMENT , + `Value` VARCHAR(60) NOT NULL , + PRIMARY KEY (`TagId`) , + UNIQUE INDEX `Value_UNIQUE` (`Value` ASC) ) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`tagged` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`tagged` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`tagged` ( + `Ticket` INT NOT NULL , + `Tag` INT NOT NULL , + PRIMARY KEY (`Ticket`, `Tag`) , + INDEX `fk_tagged_tag_idx` (`Tag` ASC) , + CONSTRAINT `fk_tagged_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_tagged_tag` + FOREIGN KEY (`Tag` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`tag` (`TagId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_content` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_content` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_content` ( + `TContentId` INT NOT NULL AUTO_INCREMENT , + `Content` TEXT NULL , + PRIMARY KEY (`TContentId`) ) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_reply` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_reply` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_reply` ( + `TReplyId` INT NOT NULL AUTO_INCREMENT , + `Ticket` INT NOT NULL , + `Author` INT NOT NULL , + `Content` INT NOT NULL , + `Timestamp` TIMESTAMP NULL , + PRIMARY KEY (`TReplyId`) , + INDEX `fk_ticket_reply_ticket_idx` (`Ticket` ASC) , + INDEX `fk_ticket_reply_ams_user_idx` (`Author` ASC) , + INDEX `fk_ticket_reply_content_idx` (`Content` ASC) , + CONSTRAINT `fk_ticket_reply_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket` (`TId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_ticket_reply_ams_user` + FOREIGN KEY (`Author` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_ticket_reply_ticket_content` + FOREIGN KEY (`Content` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_content` (`TContentId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_group` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_group` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_group` ( + `TGroupId` INT NOT NULL AUTO_INCREMENT , + `Title` VARCHAR(80) NOT NULL , + PRIMARY KEY (`TGroupId`) , + UNIQUE INDEX `Title_UNIQUE` (`Title` ASC) ) + ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`in_group` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`in_group` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`in_group` ( + `Ticket_Group` INT NOT NULL , + `Ticket` INT NOT NULL , + PRIMARY KEY (`Ticket_Group`, `Ticket`) , + INDEX `fk_in_group_ticket_group_idx` (`Ticket_Group` ASC) , + INDEX `fk_in_group_ticket_idx` (`Ticket` ASC) , + CONSTRAINT `fk_in_group_ticket_group` + FOREIGN KEY (`Ticket_Group` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_group` (`TGroupId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_in_group_ticket` + FOREIGN KEY (`Ticket` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket` (`TId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; + "; $dbl->executeWithoutParams($sql); print "The Lib & Web database were correctly installed!
    "; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql index 7e71786e7..67b5112ec 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql @@ -19,20 +19,14 @@ ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `mydb`.`ams_user` +-- Table `mydb`.`ticket_user` -- ----------------------------------------------------- -DROP TABLE IF EXISTS `mydb`.`ams_user` ; +DROP TABLE IF EXISTS `mydb`.`ticket_user` ; -CREATE TABLE IF NOT EXISTS `mydb`.`ams_user` ( +CREATE TABLE IF NOT EXISTS `mydb`.`ticket_user` ( `UId` INT(10) NOT NULL AUTO_INCREMENT , - `Login` VARCHAR(64) NOT NULL , - `Password` VARCHAR(13) NULL DEFAULT NULL , - `Email` VARCHAR(255) NOT NULL , `Permission` INT(3) NOT NULL DEFAULT 1 , - `FirstName` VARCHAR(80) NOT NULL , - `LastName` VARCHAR(80) NOT NULL , - `Gender` TINYINT(1) NOT NULL DEFAULT 0 , - `Country` CHAR(2) NOT NULL DEFAULT 'AA' , + `Extern_Id` INT(10) NOT NULL, PRIMARY KEY (`UId`) ) ENGINE = InnoDB; @@ -44,7 +38,7 @@ DROP TABLE IF EXISTS `mydb`.`ticket` ; CREATE TABLE IF NOT EXISTS `mydb`.`ticket` ( `TId` INT NOT NULL AUTO_INCREMENT , - `Date` TIMESTAMP NOT NULL , + `Timestamp` TIMESTAMP NOT NULL , `Title` VARCHAR(120) NOT NULL , `Status` INT NULL DEFAULT 0 , `Queue` INT NULL DEFAULT 0 , @@ -60,7 +54,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket` ( ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `mydb`.`ams_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`UId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -84,7 +78,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`assigned` ( ON UPDATE NO ACTION, CONSTRAINT `fk_assigned_ams_user` FOREIGN KEY (`User` ) - REFERENCES `mydb`.`ams_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`UId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -135,7 +129,8 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket_content` ( `TContentId` INT NOT NULL AUTO_INCREMENT , `Content` TEXT NULL , PRIMARY KEY (`TContentId`) ) -ENGINE = InnoDB; +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; -- ----------------------------------------------------- @@ -148,6 +143,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket_reply` ( `Ticket` INT NOT NULL , `Author` INT NOT NULL , `Content` INT NOT NULL , + `Timestamp` TIMESTAMP NULL , PRIMARY KEY (`TReplyId`) , INDEX `fk_ticket_reply_ticket_idx` (`Ticket` ASC) , INDEX `fk_ticket_reply_ams_user_idx` (`Author` ASC) , @@ -159,7 +155,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket_reply` ( ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `mydb`.`ams_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`UId` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ticket_content` diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb index c9fedd676dc185c2729a0605a32c74ad955d9d3a..ba70ad4b2b5cbb526948168fb985efbcdda97782 100644 GIT binary patch delta 10897 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Ĥ|uwEplv9?WM54hWOLHAQ=12Ax5d z;@f(~x)77-9hD+NoQJvM2{K1e+{hp)ul(f!{fQl;T!f@Z%5H6P?>G}ca3_J6h|Wx2 zoonD*I-;D-lZPNu$r=~W2l+R3~|f2I0pp_kl^K$o_jENSKW#J zxmfiZ>t7J>Q^WIEIdl9+K6@gtawAj%#9yQ;*t@brbN(ybq2OW#i8I)n!h~=-wwY~& zm=A%Gnvyx}Jap8y3QPZ|1;GsC7y?}u4VErk?Ia{%s3dDAp$1wDuVPJ|F;a;(LSC@Z6RCk)bswX_a-9^5UPFYBTjd(95%DN_#G;id`H9}f3;4b? zZbQL{OnkRoKj@IGcmD z3mJi6UI{u1)lJobSM9FRlL6FvrGnFce$#g`Eq~sj)^I(W{){)4PNoKEspOT*yNRKA`;|{tJJntt@+_v%Wdv&MFOe|vlyg!;sTztX4m7J zv0HuM)1VKks8~tRkLT3pE%=jT&t9++ObPVjHH4t6NeUtrF%hhrEI=A3f=N+@3jK9> ziJ7FbaB>f0%L8r7Tv#-4%Wmyhi3RfDG$Frv}~zJ+*$~ z%tLz1p<1y1ALaI;@H>6ZeCeP4yAkD7^*;e-p$`Rada){hzYP|!p{kJxJ7Xc6VSbc# zx;t{l{?!z$#YNp+=fKOB29H0<9L(A@3@?Pu->+X(6nd`;XBZ&={!8^r*0(BLquzX^ z_D93eFWh?lY58wc#{q(svzUwUtCziJ8<83q`v5Hc6+6vX=I^jF#J@pBbBh) z*%*GxnW&UN*@x{wZ1gtkY4s3!Ss9tn02P;aiA?>8d#m!Ch-n)5zNqh(bpGrlL^^d? z@b5@;>Mqg$I~_j6-)~3Dj`}PR4*F39?O<@78Jd^F(Oz&;h)@QdezYooLwcy?(Fq9X zC?KOb>S;bE9#o{ep14VKbl{v>3bJ+-4JA5?QR>u-D@ry7r)Gl@-?nyr;WEL#L{Xs! z10ADefj6)Hr#DWk25(m4cbfCEK2rxn4-#A-*SA9&!ppQx>9^t5GG-rj=pJ> z-K`iJxJ+1WFnyoEfj-_>@mitS=wmq9qFsG^QPJ$lLOZ_bOJVeuh{4a6#kAG=LiL z!ixtE8uRxnvdMfxMSYk&^k+>!NS{%&%(-D&e-))?E?tzrLj~QYhb_VI!gY5x#Ukx! z6L!D9rH}A2TVHa{&ll`PzGuJ(wtaM?Z;@O#r}apo^D*?3JLApUnD zY~60d3VjnS>i;X8O~_znv`{^y7jR@*5LjnmK N2~;dwf)Lx+{{ur9J_rB+ From b163ab796071c8fb1e70f3608e7fe3635097bc09 Mon Sep 17 00:00:00 2001 From: Quitta Date: Fri, 5 Jul 2013 23:00:19 +0200 Subject: [PATCH 15/24] Add some default categories --HG-- branch : quitta-gsoc-2013 --- code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index 0f64a4924..a20bdc20a 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -57,6 +57,7 @@ UNIQUE INDEX `Name_UNIQUE` (`Name` ASC) ) ENGINE = InnoDB; + INSERT IGNORE INTO `" . $cfg['db']['lib']['name'] ."`.`ticket_category` (`Name`) VALUES ('Hacking'),('Ingame-Bug'),('Website-Bug'),('Installation'); -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_user` @@ -243,7 +244,6 @@ ENGINE = InnoDB; - "; $dbl->executeWithoutParams($sql); print "The Lib & Web database were correctly installed!
    "; From ff96e6db5eaf6f643dc0ca8a1a63e418008cf1f9 Mon Sep 17 00:00:00 2001 From: Quitta Date: Sat, 6 Jul 2013 06:09:47 +0200 Subject: [PATCH 16/24] Added ticket class | added ticket_user class| added ticket_category class. These aren't tested yet, so expect errors and changes! :D --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/ticket.php | 89 ++++++++++++++++ .../ams_lib/autoload/ticket_category.php | 70 ++++++++++++ .../ams_lib/autoload/ticket_user.php | 100 ++++++++++++++++++ .../server/ryzom_ams/www/html/sql/install.php | 15 +-- .../ryzom_ams/www/html/sql/ticketsql.sql | 12 +-- .../www/html/sql/ticketsystemmodel.mwb | Bin 12386 -> 12381 bytes 6 files changed, 273 insertions(+), 13 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php 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 new file mode 100644 index 000000000..ff2412b16 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php @@ -0,0 +1,89 @@ +db = $db_data; + } + + + //Set ticket object + public function setTicket($ts,$t,$s,$q,$t_c,$a){ + $this->timestamp = $ts; + $this->title = $t; + $this->status = $s; + $this->queue = $q; + $this->ticket_category = $t_c; + $this->author = $a; + } + + //create ticket by writing private data to DB. + public function create(){ + $dbl = new DBLayer($this->db); + $query = "INSERT INTO ticket (Timestamp, Title, Status, Queue, Ticket_Category, Author) VALUES (:timestamp, :title, :status, :queue, :tcat, :author)"; + $values = Array('timestamp' => $this->timestamp, 'title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author); + $dbl->execute($query, $values); + } + + //return constructed element based on TId + public function load_With_TId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket WHERE TId=:id", array('id' => $id)); + $row = $statement->fetch(); + $this->tId = $row['TId']; + $this->timestamp = $row['Timestamp']; + $this->title = $row['Title']; + $this->status = $row['Status']; + $this->queue = $row['Queue']; + $this->ticket_category = $row['Ticket_Category']; + $this->author = $row['Author']; + } + + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket SET Timestamp = :timestamp, Title = :title, Status = :status, Queue = :queue, Ticket_Category = :tcat, Author = :author 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); + $statement = $dbl->execute($query, $values); + } + + //Getters + public function getPermission(){ + return $this->permission; + } + + + public function getExternId(){ + return $this->externId; + } + + + public function getTUserId(){ + return $this->tUserId; + } + + //setters + public function setPermission($perm){ + $this->permission = $perm; + } + + + public function setExternId($id){ + $this->externId = $id; + } + + + public function setTUserId($id){ + $this->tUserId = $id; + } +} \ 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 new file mode 100644 index 000000000..2de93a867 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_category.php @@ -0,0 +1,70 @@ +db = $db_data; + } + + + //Creates a ticket_Catergory in the DB + public static function createTicketCategory( $name ,$db ) { + $dbl = new DBLayer($db); + $query = "INSERT INTO ticket_category (Name) VALUES (:name)"; + $values = Array('name' => $name); + $dbl->execute($query, $values); + + } + + + //return constructed element based on TCategoryId + public static function constr_TCategoryId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTCategoryId($id); + return $instance; + + } + + //return constructed element based on TCategoryId + public function load_With_TCategoryId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_category WHERE TCategoryId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tCategoryId = $row['TCategoryId']; + $instance->name = $row['Name']; + return $instance; + } + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket_category SET Name = :name WHERE TCategoryId=:id"; + $values = Array('id' => $this->tCategoryId, 'name' => $this->name); + $statement = $dbl->execute($query, $values); + } + + //Getters + public function getName(){ + if ($this->name == ""){ + $this->load_With_TCategoryId($this->tCategoryId); + } + return $this->name; + } + + + public function getTCategoryId(){ + return $this->tCategoryId; + } + + + //setters + public function setName($n){ + $this->name = $n; + } + + +} \ 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 new file mode 100644 index 000000000..544f047b9 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php @@ -0,0 +1,100 @@ +db = $db_data; + } + + + //Creates a ticket_user in the DB + public static function createTicketUser( $extern_id, $permission,$db ) { + $dbl = new DBLayer($db); + $query = "INSERT INTO ticket_user (Permission, ExternId) VALUES (:perm, :ext_id)"; + $values = Array('perm' => $permission, 'ext_id' => $extern_id); + $dbl->execute($query, $values); + + } + + + //return constructed element based on TUserId + public static function constr_TUserId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTUserId($id); + return $instance; + + } + + //return constructed element based on TUserId + public function load_With_TUserId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_user WHERE TUserId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tUserId = $row['TUserId']; + $instance->permission = $row['Permission']; + $instance->externId = $row['ExternId']; + return $instance; + } + + + //return constructed element based on ExternId + public static function constr_ExternId( $id, $db_data ) { + $instance = new self($db_data); + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_user WHERE ExternId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tUserId = $row['TUserId']; + $instance->permission = $row['Permission']; + $instance->externId = $row['ExternId']; + return $instance; + + } + + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $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); + } + + //Getters + public function getPermission(){ + if ($this->permission == ""){ + $this->load_With_TUserId($this->tUserId); + } + return $this->permission; + } + + + public function getExternId(){ + if ($this->ExternId == ""){ + $this->load_With_TUserId($this->tUserId); + } + return $this->externId; + } + + + public function getTUserId(){ + return $this->tUserId; + } + + + //setters + public function setPermission($perm){ + $this->permission = $perm; + } + + + public function setExternId($id){ + $this->externId = $id; + } + +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index a20bdc20a..e233bb322 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -58,17 +58,17 @@ ENGINE = InnoDB; INSERT IGNORE INTO `" . $cfg['db']['lib']['name'] ."`.`ticket_category` (`Name`) VALUES ('Hacking'),('Ingame-Bug'),('Website-Bug'),('Installation'); - + -- ----------------------------------------------------- -- Table `" . $cfg['db']['lib']['name'] ."`.`ticket_user` -- ----------------------------------------------------- DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_user` ; CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`ticket_user` ( - `UId` INT(10) NOT NULL AUTO_INCREMENT , + `TUserId` INT(10) NOT NULL AUTO_INCREMENT , `Permission` INT(3) NOT NULL DEFAULT 1 , - `Extern_Id` INT(10) NOT NULL , - PRIMARY KEY (`UId`) ) + `ExternId` INT(10) NOT NULL , + PRIMARY KEY (`TUserId`) ) ENGINE = InnoDB; @@ -95,7 +95,7 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -119,7 +119,7 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_assigned_ams_user` FOREIGN KEY (`User` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -196,7 +196,7 @@ ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`UId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ticket_content` @@ -244,6 +244,7 @@ ENGINE = InnoDB; + "; $dbl->executeWithoutParams($sql); print "The Lib & Web database were correctly installed!
    "; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql index 67b5112ec..0f22a9741 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql @@ -24,10 +24,10 @@ ENGINE = InnoDB; DROP TABLE IF EXISTS `mydb`.`ticket_user` ; CREATE TABLE IF NOT EXISTS `mydb`.`ticket_user` ( - `UId` INT(10) NOT NULL AUTO_INCREMENT , + `TUserId` INT(10) NOT NULL AUTO_INCREMENT , `Permission` INT(3) NOT NULL DEFAULT 1 , - `Extern_Id` INT(10) NOT NULL, - PRIMARY KEY (`UId`) ) + `ExternId` INT(10) NOT NULL , + PRIMARY KEY (`TUserId`) ) ENGINE = InnoDB; @@ -54,7 +54,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket` ( ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `mydb`.`ticket_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -78,7 +78,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`assigned` ( ON UPDATE NO ACTION, CONSTRAINT `fk_assigned_ams_user` FOREIGN KEY (`User` ) - REFERENCES `mydb`.`ticket_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -155,7 +155,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`ticket_reply` ( ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ams_user` FOREIGN KEY (`Author` ) - REFERENCES `mydb`.`ticket_user` (`UId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ticket_reply_ticket_content` diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb index ba70ad4b2b5cbb526948168fb985efbcdda97782..53f58f0371074bb0e1fc828a87e13229d3ac9720 100644 GIT binary patch delta 10721 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%0ABY@g{>S~j6>q$1e`D_ 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 Tlj<)q0mhRYFdhMXlRGdcDF*D& delta 10707 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 Date: Sat, 6 Jul 2013 18:27:25 +0200 Subject: [PATCH 17/24] createticket template done + when registering: create ticket_user + when login make session object ticket_user --HG-- branch : quitta-gsoc-2013 --- .../tools/server/ryzom_ams/ams_lib/autoload/ticket.php | 1 - .../ryzom_ams/ams_lib/autoload/ticket_category.php | 6 ++---- .../server/ryzom_ams/ams_lib/autoload/ticket_user.php | 4 +--- .../tools/server/ryzom_ams/ams_lib/translations/en.ini | 3 +++ .../tools/server/ryzom_ams/ams_lib/translations/fr.ini | 3 +++ .../server/ryzom_ams/www/html/autoload/webusers.php | 10 +++++++++- .../tools/server/ryzom_ams/www/html/func/add_user.php | 6 ++++-- .../tools/server/ryzom_ams/www/html/func/login.php | 4 ++-- .../tools/server/ryzom_ams/www/html/inc/settings.php | 2 +- 9 files changed, 25 insertions(+), 14 deletions(-) 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 ff2412b16..62461e33f 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 @@ -1,5 +1,4 @@ db); $statement = $dbl->execute("SELECT * FROM ticket_category WHERE TCategoryId=:id", array('id' => $id)); $row = $statement->fetch(); - $instance->tCategoryId = $row['TCategoryId']; - $instance->name = $row['Name']; - return $instance; + $this->tCategoryId = $row['TCategoryId']; + $this->name = $row['Name']; } //update private data to DB. 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 544f047b9..7e1e95c5c 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 @@ -1,6 +1,4 @@ db); + $dbl = new DBLayer($instance->db); $statement = $dbl->execute("SELECT * FROM ticket_user WHERE ExternId=:id", array('id' => $id)); $row = $statement->fetch(); $instance->tUserId = $row['TUserId']; 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 1006594c3..3a6fb4b7a 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 @@ -20,6 +20,9 @@ name = "Name" email = "Email" action = "Action" + +[createticket] + [error] title404 = "Not
    Found!" title403 = "Forbidden!" diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini index ebf862450..fc42425b8 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini @@ -20,6 +20,9 @@ name = "Nom" email = "Email" action = "Action" +[createticket] + + [error] title404 = "Pas
    trouvez!" title403 = "Interdit!" 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 c94d6386e..6c22c57f8 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 @@ -50,7 +50,15 @@ class WebUsers extends Users{ } } - + public function getId($username){ + global $cfg; + + $dbw = new DBLayer($cfg['db']['web']); + $statement = $dbw->execute("SELECT * FROM ams_user WHERE Login=:username", array('username' => $username)); + $row = $statement->fetch(); + return $row['UId']; + } + public function getUsername($id){ global $cfg; 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 1f8d5ce22..e4b43da45 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 @@ -36,7 +36,7 @@ function add_user(){ function write_user($newUser){ - + //create salt here, because we want it to be the same on the web/server $hashpass = crypt($newUser["pass"], WebUsers::generateSALT()); @@ -49,12 +49,14 @@ function write_user($newUser){ //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); + try{ - //make connection with web db and put it in there global $cfg; + //make connection with web db and put it in there $dbw = new DBLayer($cfg['db']['web']); $dbw->execute("INSERT INTO ams_user (Login, Password, Email) VALUES (:name, :pass, :mail)",$params); + ticket_user::createTicketUser( WebUsers::getId($newUser["name"]), 1, $cfg['db']['lib'] ); }catch (PDOException $e) { //go to error page or something, because can't access website db diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php index 3a4d8a489..eb9be221f 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/login.php @@ -11,8 +11,8 @@ function login(){ $_SESSION['user'] = $_POST["Username"]; $_SESSION['permission'] = $result['Permission']; $_SESSION['id'] = $result['UId']; - print('id='); - print($_SESSION['id']); + $_SESSION['ticket_user'] = Ticket_User::constr_ExternId($result['UId'],$cfg['db']['lib']); + //go back to the index page. header( 'Location: index.php' ); exit; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php index 52c7b445d..90bafbefc 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/settings.php @@ -24,7 +24,7 @@ function settings(){ //Sanitize Data $result['current_mail'] = filter_var($result['current_mail'], FILTER_SANITIZE_EMAIL); - $result['Login'] = filter_var($result['Login'], FILTER_SANITIZE_STRING); + //$result['Login'] = filter_var($result['Login'], FILTER_SANITIZE_STRING); $result['FirstName'] = filter_var($result['FirstName'], FILTER_SANITIZE_STRING); $result['LastName'] = filter_var($result['LastName'], FILTER_SANITIZE_STRING); $result['Country'] = filter_var($result['Country'], FILTER_SANITIZE_STRING); From a81b2dc9b3414a23c3f8ec04626df4c01c052287 Mon Sep 17 00:00:00 2001 From: Quitta Date: Sat, 6 Jul 2013 19:12:55 +0200 Subject: [PATCH 18/24] woops forgot to add those in last update, also loading all categories from the db works now --HG-- branch : quitta-gsoc-2013 --- .../ams_lib/autoload/ticket_category.php | 16 +++++ .../ryzom_ams/www/html/inc/createticket.php | 14 +++++ .../www/html/templates/createticket.tpl | 59 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl 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 0736282c9..ec4956097 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 @@ -25,9 +25,24 @@ class Ticket_Category{ $instance = new self($db_data); $instance->setTCategoryId($id); return $instance; + } + //returns list of all category objects + public static function getAllCategories($db_data) { + $dbl = new DBLayer($db_data); + $statement = $dbl->executeWithoutParams("SELECT * FROM ticket_category"); + $row = $statement->fetchAll(); + $result = Array(); + foreach($row as $category){ + $instance = new self($db_data); + $instance->tCategoryId = $category['TCategoryId']; + $instance->name = $category['Name']; + $result[] = $instance; + } + return $result; } + //return constructed element based on TCategoryId public function load_With_TCategoryId( $id) { $dbl = new DBLayer($this->db); @@ -37,6 +52,7 @@ class Ticket_Category{ $this->name = $row['Name']; } + //update private data to DB. public function update(){ $dbl = new DBLayer($this->db); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php new file mode 100644 index 000000000..4f83b4631 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/createticket.php @@ -0,0 +1,14 @@ +getTCategoryId()] = $catObj->getName(); + } + //print_r($result); + return $result; +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl new file mode 100644 index 000000000..eb0fb45f1 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl @@ -0,0 +1,59 @@ +{block name=content} +

    - +
    From 21d3bf363baa524f7bcd6ee37efc64db505a22bc Mon Sep 17 00:00:00 2001 From: Quitta Date: Mon, 8 Jul 2013 09:40:48 +0200 Subject: [PATCH 20/24] create ticket works, also admins can create other people's tickets --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/dblayer.php | 13 +++ .../ryzom_ams/ams_lib/autoload/ticket.php | 32 +----- .../ams_lib/autoload/ticket_content.php | 68 +++++++++++ .../ams_lib/autoload/ticket_reply.php | 107 ++++++++++++++++++ .../ryzom_ams/www/html/func/change_info.php | 2 +- .../ryzom_ams/www/html/func/create_ticket.php | 15 ++- .../www/html/templates/createticket.tpl | 2 +- 7 files changed, 210 insertions(+), 29 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php 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 240eda426..a96fd98ea 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 @@ -41,4 +41,17 @@ class DBLayer{ } } + public function executeReturnId($query,$params){ + try{ + $statement = $this->PDO->prepare($query); + $this->PDO->beginTransaction(); + $statement->execute($params); + $lastId =$this->PDO->lastInsertId(); + $this->PDO->commit(); + return $lastId; + }catch (PDOException $e) { + throw $e; + } + } + } \ No newline at end of file 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 ac91bbc39..c483c3e80 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 @@ -16,7 +16,7 @@ class Ticket{ //Set ticket object - public function setTicket($t,$s,$q,$t_c,$a){ + public function set($t,$s,$q,$t_c,$a){ $this->title = $t; $this->status = $s; $this->queue = $q; @@ -29,7 +29,7 @@ class Ticket{ $dbl = new DBLayer($this->db); $query = "INSERT INTO ticket (Timestamp, Title, Status, Queue, Ticket_Category, Author) VALUES (now(), :title, :status, :queue, :tcat, :author)"; $values = Array('title' => $this->title, 'status' => $this->status, 'queue' => $this->queue, 'tcat' => $this->ticket_category, 'author' => $this->author); - $dbl->execute($query, $values); + $this->tId = $dbl->executeReturnId($query, $values); ; } //return constructed element based on TId @@ -56,32 +56,12 @@ class Ticket{ } //Getters - public function getPermission(){ - return $this->permission; - } - - - public function getExternId(){ - return $this->externId; - } - - - public function getTUserId(){ - return $this->tUserId; + public function getTId(){ + return $this->tId; } //setters - public function setPermission($perm){ - $this->permission = $perm; - } - - - public function setExternId($id){ - $this->externId = $id; - } - - - public function setTUserId($id){ - $this->tUserId = $id; + public function setTId($id){ + $this->tId = $id; } } \ 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 new file mode 100644 index 000000000..dcb86bbd1 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_content.php @@ -0,0 +1,68 @@ +db = $db_data; + } + + + //Creates a ticket_content entry in the DB + public function create() { + $dbl = new DBLayer($this->db); + $query = "INSERT INTO ticket_content (Content) VALUES (:content)"; + $values = Array('content' => $this->content); + $this->tContentId = $dbl->executeReturnId($query, $values); ; + } + + //return constructed element based on TCategoryId + public static function constr_TContentId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTContentId($id); + return $instance; + } + + //return constructed element based on TContentId + public function load_With_TContentId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_content WHERE TContentId=:id", array('id' => $id)); + $row = $statement->fetch(); + $this->tContentId = $row['TContentId']; + $this->content = $row['Content']; + } + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket_content SET Content = :content WHERE TContentId=:id"; + $values = Array('id' => $this->tContentId, 'content' => $this->content); + $statement = $dbl->execute($query, $values); + } + + //Getters + public function getContent(){ + if ($this->content == ""){ + $this->load_With_TContentId($this->tContentId); + } + return $this->content; + } + + + public function getTContentId(){ + return $this->tContentId; + } + + + //setters + public function setContent($c){ + $this->content = $c; + } + + public function setTContentId($c){ + $this->tContentId = $c; + } + +} \ 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 new file mode 100644 index 000000000..efbf08295 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php @@ -0,0 +1,107 @@ +db = $db_data; + } + + + //Set ticket_reply object + public function set($t,$c,$a){ + $this->ticket = $t; + $this->content = $c; + $this->author = $a; + } + + //create ticket by writing private data to DB. + public function create(){ + $dbl = new DBLayer($this->db); + $query = "INSERT INTO ticket_reply (Ticket, Content, Author, Timestamp) VALUES (:ticket, :content, :author, now())"; + $values = Array('ticket' => $this->ticket, 'content' => $this->content, 'author' => $this->author); + $dbl->execute($query, $values); + } + + //return constructed element based on TCategoryId + public static function constr_TReplyId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTReplyId($id); + return $instance; + } + + //return constructed element based on TId + public function load_With_TReplyId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_reply WHERE TReplyId=:id", array('id' => $id)); + $row = $statement->fetch(); + $this->tReplyId = $row['TReplyId']; + $this->ticket = $row['Ticket']; + $this->content = $row['Content']; + $this->author = $row['Author']; + $this->timestamp = $row['Timestamp']; + } + + //update private data to DB. + public function update(){ + $dbl = new DBLayer($this->db); + $query = "UPDATE ticket SET Ticket = :ticket, Content = :content, Author = :author, Timestamp = :timestamp WHERE TReplyId=:id"; + $values = Array('id' => $this->tReplyId, 'timestamp' => $this->timestamp, 'ticket' => $this->ticket, 'content' => $this->content, 'author' => $this->author); + $statement = $dbl->execute($query, $values); + } + + + //////////////////////////////////Getters///////////////////////////////// + public function getTicket(){ + return $this->ticket; + } + + + public function getContent(){ + return $this->content; + } + + public function getAuthor(){ + return $this->author; + } + + public function getTimestamp(){ + return $this->timestamp; + } + + + public function getTReplyId(){ + return $this->tReplyId; + } + + + ///////////////////////////////////setters//////////////////////////////// + public function setTicket($t){ + $this->ticket = $t; + } + + + public function setContent($c){ + $this->content = $c; + } + + public function setAuthor($a){ + $this->author = $a; + } + + public function setTimestamp($t){ + $this->timestamp = $t; + } + + + public function setTReplyId($i){ + $this->tReplyId = $i; + } +} \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php index 860b207ea..baf28afc2 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/change_info.php @@ -20,7 +20,7 @@ function change_info(){ //use current info to check for changes $current_info = $webUser->getInfo($_POST['target_id']); - //TODO: XSS filtering + $current_info['FirstName'] = filter_var($current_info['FirstName'], FILTER_SANITIZE_STRING); $current_info['LastName'] = filter_var($current_info['LastName'], FILTER_SANITIZE_STRING); $current_info['Country'] = filter_var($current_info['Country'], FILTER_SANITIZE_STRING); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php index 628bb9ca8..7a2e54bd6 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php @@ -19,9 +19,22 @@ function create_ticket(){ }else{ $author= Ticket_User::constr_ExternId($_POST['target_id'], $cfg['db']['lib'])->getTUserId(); } + $ticket = new Ticket($cfg['db']['lib']); - $ticket->setTicket($title,0,0,$category,$author); + $ticket->set($title,0,0,$category,$author); $ticket->create(); + $ticket_id = $ticket->getTId(); + + + $ticket_content = new Ticket_Content($cfg['db']['lib']); + $ticket_content->setContent($content); + $ticket_content->create(); + $content_id = $ticket_content->getTContentId(); + + + $ticket_reply = new Ticket_Reply($cfg['db']['lib']); + $ticket_reply->set($ticket_id, $content_id, $author); + $ticket_reply->create(); }else{ //ERROR: permission denied! diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl index fac2edb81..0b2ad2813 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/createticket.tpl @@ -10,7 +10,7 @@
    -
    + New ticket
    From fa07e3cd16e26b8ed18f00d71692708b3e17b54c Mon Sep 17 00:00:00 2001 From: Quitta Date: Mon, 8 Jul 2013 09:58:29 +0200 Subject: [PATCH 21/24] added mennu item for createticket --HG-- branch : quitta-gsoc-2013 --- code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/users.php | 2 ++ code/ryzom/tools/server/ryzom_ams/www/html/func/add_user.php | 2 +- .../tools/server/ryzom_ams/www/html/templates/layout_user.tpl | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) 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 4de9ac6fe..b82f365a0 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 @@ -290,6 +290,7 @@ class Users{ global $cfg; $dbs = new DBLayer($cfg['db']['shard']); $dbs->execute("INSERT INTO user (Login, Password, Email) VALUES (:name, :pass, :mail)",$values); + ticket_user::createTicketUser( WebUsers::getId($values["name"]), 1, $cfg['db']['lib'] ); return "ok"; } catch (PDOException $e) { @@ -298,6 +299,7 @@ class Users{ $dbl = new DBLayer($cfg['db']['lib']); $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "createUser", "query" => json_encode(array($values["name"],$values["pass"],$values["mail"])))); + ticket_user::createTicketUser( WebUsers::getId($values["name"]), 1, $cfg['db']['lib'] ); return "shardoffline"; }catch (PDOException $e) { print_r($e); 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 e4b43da45..06dc8bc85 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 @@ -56,7 +56,7 @@ function write_user($newUser){ //make connection with web db and put it in there $dbw = new DBLayer($cfg['db']['web']); $dbw->execute("INSERT INTO ams_user (Login, Password, Email) VALUES (:name, :pass, :mail)",$params); - ticket_user::createTicketUser( WebUsers::getId($newUser["name"]), 1, $cfg['db']['lib'] ); + //ticket_user::createTicketUser( WebUsers::getId($newUser["name"]), 1, $cfg['db']['lib'] ); }catch (PDOException $e) { //go to error page or something, because can't access website db 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 460a9b10b..8195658d0 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,8 +3,8 @@
  • Dashboard
  • Settings
  • -
  • Demo Userlist
  • +
  • Create New Ticket
  • Logout
  • {/block} From 1e4daba4aea84309d1f78c0d7d828bebf9b2b5c2 Mon Sep 17 00:00:00 2001 From: Quitta Date: Mon, 8 Jul 2013 14:49:03 +0200 Subject: [PATCH 22/24] updated install, added create_Ticket function as wrapper! --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/ticket.php | 83 ++++++++++++++++++- .../ams_lib/autoload/ticket_category.php | 24 ++++-- .../ams_lib/autoload/ticket_content.php | 27 +++--- .../ams_lib/autoload/ticket_reply.php | 25 +++--- .../ams_lib/autoload/ticket_user.php | 41 ++++----- .../ryzom_ams/ams_lib/autoload/users.php | 6 +- .../ryzom_ams/www/html/func/add_user.php | 13 ++- .../ryzom_ams/www/html/func/create_ticket.php | 78 +++++++---------- .../server/ryzom_ams/www/html/sql/install.php | 2 +- 9 files changed, 192 insertions(+), 107 deletions(-) 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 c483c3e80..ec34ceaa3 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 @@ -10,6 +10,33 @@ class Ticket{ private $author; private $db; + ////////////////////////////////////////////Functions//////////////////////////////////////////////////// + + /*FUNCTION: create_Ticket() + * creates a ticket + first initial reply and fills in the content of it! + * + */ + public static function create_Ticket( $title, $content, $category, $author, $db_data) { + + $ticket = new Ticket($db_data); + $ticket->set($title,0,0,$category,$author); + $ticket->create(); + $ticket_id = $ticket->getTId(); + + + $ticket_content = new Ticket_Content($db_data); + $ticket_content->setContent($content); + $ticket_content->create(); + $content_id = $ticket_content->getTContentId(); + + + $ticket_reply = new Ticket_Reply($db_data); + $ticket_reply->set($ticket_id, $content_id, $author); + $ticket_reply->create(); + + } + + ////////////////////////////////////////////Methods//////////////////////////////////////////////////// public function __construct($db_data) { $this->db = $db_data; } @@ -55,13 +82,65 @@ class Ticket{ $statement = $dbl->execute($query, $values); } - //Getters + + ////////////////////////////////////////////Getters//////////////////////////////////////////////////// + public function getTId(){ return $this->tId; } - //setters + public function getTimestamp(){ + return $this->timestamp; + } + + public function getTitle(){ + return $this->title; + } + + public function getStatus(){ + return $this->status; + } + + public function getQueue(){ + return $this->queue; + } + + public function getTicket_Category(){ + return $this->ticket_category; + } + + public function getAuthor(){ + return $this->author; + } + + ////////////////////////////////////////////Setters//////////////////////////////////////////////////// + public function setTId($id){ $this->tId = $id; } + + public function setTimestamp($ts){ + $this->timestamp = $ts; + } + + public function setTitle($t){ + $this->title = $t; + } + + public function setStatus($s){ + $this->status = $s; + } + + public function setQueue($q){ + $this->queue = $q; + } + + public function setTicket_Category($tc){ + $this->ticket_category = $tc; + } + + public function setAuthor($a){ + $this->author = $a; + } + } \ 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 ec4956097..1fe7227b7 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 @@ -5,11 +5,9 @@ class Ticket_Category{ private $tCategoryId; private $name; - public function __construct($db_data) { - $this->db = $db_data; - } - - + ////////////////////////////////////////////Functions//////////////////////////////////////////////////// + + //Creates a ticket_Catergory in the DB public static function createTicketCategory( $name ,$db ) { $dbl = new DBLayer($db); @@ -41,7 +39,13 @@ class Ticket_Category{ } return $result; } + + ////////////////////////////////////////////Methods//////////////////////////////////////////////////// + + public function __construct($db_data) { + $this->db = $db_data; + } //return constructed element based on TCategoryId public function load_With_TCategoryId( $id) { @@ -61,7 +65,8 @@ class Ticket_Category{ $statement = $dbl->execute($query, $values); } - //Getters + ////////////////////////////////////////////Getters//////////////////////////////////////////////////// + public function getName(){ if ($this->name == ""){ $this->load_With_TCategoryId($this->tCategoryId); @@ -75,10 +80,15 @@ class Ticket_Category{ } - //setters + ////////////////////////////////////////////Setters//////////////////////////////////////////////////// + public function setName($n){ $this->name = $n; } + + public function setTCategoryId($id){ + $this->tCategoryId = $id; + } } \ 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 dcb86bbd1..62130d1d9 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 @@ -5,11 +5,23 @@ class Ticket_Content{ private $tContentId; private $content; + + ////////////////////////////////////////////Functions//////////////////////////////////////////////////// + + //return constructed element based on TCategoryId + public static function constr_TContentId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTContentId($id); + return $instance; + } + + + ////////////////////////////////////////////Methods//////////////////////////////////////////////////// + public function __construct($db_data) { $this->db = $db_data; } - //Creates a ticket_content entry in the DB public function create() { $dbl = new DBLayer($this->db); @@ -18,13 +30,6 @@ class Ticket_Content{ $this->tContentId = $dbl->executeReturnId($query, $values); ; } - //return constructed element based on TCategoryId - public static function constr_TContentId( $id, $db_data) { - $instance = new self($db_data); - $instance->setTContentId($id); - return $instance; - } - //return constructed element based on TContentId public function load_With_TContentId( $id) { $dbl = new DBLayer($this->db); @@ -42,7 +47,8 @@ class Ticket_Content{ $statement = $dbl->execute($query, $values); } - //Getters + ////////////////////////////////////////////Getters//////////////////////////////////////////////////// + public function getContent(){ if ($this->content == ""){ $this->load_With_TContentId($this->tContentId); @@ -56,7 +62,8 @@ class Ticket_Content{ } - //setters + ////////////////////////////////////////////Setters//////////////////////////////////////////////////// + public function setContent($c){ $this->content = $c; } 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 efbf08295..8f14a9f5f 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 @@ -8,7 +8,16 @@ class Ticket_Reply{ private $timestamp; private $db; - //////////////////////////////////Methods///////////////////////////////// + ////////////////////////////////////////////Functions//////////////////////////////////////////////////// + + //return constructed element based on TCategoryId + public static function constr_TReplyId( $id, $db_data) { + $instance = new self($db_data); + $instance->setTReplyId($id); + return $instance; + } + + ////////////////////////////////////////////Methods//////////////////////////////////////////////////// public function __construct($db_data) { $this->db = $db_data; @@ -29,13 +38,6 @@ class Ticket_Reply{ $values = Array('ticket' => $this->ticket, 'content' => $this->content, 'author' => $this->author); $dbl->execute($query, $values); } - - //return constructed element based on TCategoryId - public static function constr_TReplyId( $id, $db_data) { - $instance = new self($db_data); - $instance->setTReplyId($id); - return $instance; - } //return constructed element based on TId public function load_With_TReplyId( $id) { @@ -57,8 +59,8 @@ class Ticket_Reply{ $statement = $dbl->execute($query, $values); } - - //////////////////////////////////Getters///////////////////////////////// + ////////////////////////////////////////////Getters//////////////////////////////////////////////////// + public function getTicket(){ return $this->ticket; } @@ -82,7 +84,8 @@ class Ticket_Reply{ } - ///////////////////////////////////setters//////////////////////////////// + ////////////////////////////////////////////Setters//////////////////////////////////////////////////// + public function setTicket($t){ $this->ticket = $t; } 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 7e1e95c5c..b61c99f68 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 @@ -6,11 +6,8 @@ class Ticket_User{ private $externId; private $db; - public function __construct($db_data) { - $this->db = $db_data; - } - - + ////////////////////////////////////////////Functions//////////////////////////////////////////////////// + //Creates a ticket_user in the DB public static function createTicketUser( $extern_id, $permission,$db ) { $dbl = new DBLayer($db); @@ -29,18 +26,6 @@ class Ticket_User{ } - //return constructed element based on TUserId - public function load_With_TUserId( $id) { - $dbl = new DBLayer($this->db); - $statement = $dbl->execute("SELECT * FROM ticket_user WHERE TUserId=:id", array('id' => $id)); - $row = $statement->fetch(); - $instance->tUserId = $row['TUserId']; - $instance->permission = $row['Permission']; - $instance->externId = $row['ExternId']; - return $instance; - } - - //return constructed element based on ExternId public static function constr_ExternId( $id, $db_data ) { $instance = new self($db_data); @@ -55,6 +40,22 @@ class Ticket_User{ } + ////////////////////////////////////////////Methods//////////////////////////////////////////////////// + public function __construct($db_data) { + $this->db = $db_data; + } + + //return constructed element based on TUserId + public function load_With_TUserId( $id) { + $dbl = new DBLayer($this->db); + $statement = $dbl->execute("SELECT * FROM ticket_user WHERE TUserId=:id", array('id' => $id)); + $row = $statement->fetch(); + $instance->tUserId = $row['TUserId']; + $instance->permission = $row['Permission']; + $instance->externId = $row['ExternId']; + return $instance; + } + //update private data to DB. public function update(){ $dbl = new DBLayer($this->db); @@ -63,7 +64,8 @@ class Ticket_User{ $statement = $dbl->execute($query, $values); } - //Getters + ////////////////////////////////////////////Getters//////////////////////////////////////////////////// + public function getPermission(){ if ($this->permission == ""){ $this->load_With_TUserId($this->tUserId); @@ -85,7 +87,8 @@ class Ticket_User{ } - //setters + ////////////////////////////////////////////Setters//////////////////////////////////////////////////// + public function setPermission($perm){ $this->permission = $perm; } 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 b82f365a0..9ce16aa37 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 @@ -284,13 +284,13 @@ class Users{ * @takes $array with name,pass and mail * @return 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. */ - public function createUser($values){ + public function createUser($values, $user_id){ try { //make connection with and put into shard db global $cfg; $dbs = new DBLayer($cfg['db']['shard']); $dbs->execute("INSERT INTO user (Login, Password, Email) VALUES (:name, :pass, :mail)",$values); - ticket_user::createTicketUser( WebUsers::getId($values["name"]), 1, $cfg['db']['lib'] ); + ticket_user::createTicketUser( $user_id , 1, $cfg['db']['lib'] ); return "ok"; } catch (PDOException $e) { @@ -299,7 +299,7 @@ class Users{ $dbl = new DBLayer($cfg['db']['lib']); $dbl->execute("INSERT INTO ams_querycache (type, query) VALUES (:type, :query)",array("type" => "createUser", "query" => json_encode(array($values["name"],$values["pass"],$values["mail"])))); - ticket_user::createTicketUser( WebUsers::getId($values["name"]), 1, $cfg['db']['lib'] ); + ticket_user::createTicketUser( $user_id , 1, $cfg['db']['lib'] ); return "shardoffline"; }catch (PDOException $e) { print_r($e); 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 06dc8bc85..e21e32d6a 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 @@ -45,18 +45,17 @@ function write_user($newUser){ 'pass' => $hashpass, 'mail' => $newUser["mail"] ); - - //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); - try{ global $cfg; //make connection with web db and put it in there $dbw = new DBLayer($cfg['db']['web']); - $dbw->execute("INSERT INTO ams_user (Login, Password, Email) VALUES (:name, :pass, :mail)",$params); - //ticket_user::createTicketUser( WebUsers::getId($newUser["name"]), 1, $cfg['db']['lib'] ); + $user_id = $dbw->executeReturnId("INSERT INTO ams_user (Login, Password, Email) VALUES (:name, :pass, :mail)",$params); + + //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); + }catch (PDOException $e) { //go to error page or something, because can't access website db diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php index 7a2e54bd6..8f8010889 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php @@ -1,64 +1,48 @@ getTUserId(); }else{ $author= Ticket_User::constr_ExternId($_POST['target_id'], $cfg['db']['lib'])->getTUserId(); } - - $ticket = new Ticket($cfg['db']['lib']); - $ticket->set($title,0,0,$category,$author); - $ticket->create(); - $ticket_id = $ticket->getTId(); - - - $ticket_content = new Ticket_Content($cfg['db']['lib']); - $ticket_content->setContent($content); - $ticket_content->create(); - $content_id = $ticket_content->getTContentId(); - - - $ticket_reply = new Ticket_Reply($cfg['db']['lib']); - $ticket_reply->set($ticket_id, $content_id, $author); - $ticket_reply->create(); - - }else{ - //ERROR: permission denied! - $_SESSION['error_code'] = "403"; - header("Location: index.php?page=error"); + Ticket::create_Ticket($title, $content, $category, $author, $cfg['db']['lib'] ); + }catch (PDOException $e) { + //ERROR: LIB DB is not online! + header("Location: index.php"); exit; } - + }else{ - //ERROR: The form was not filled in correclty - header("Location: index.php?page=settings"); - exit; - } + //ERROR: permission denied! + $_SESSION['error_code'] = "403"; + header("Location: index.php?page=error"); + exit; + } + }else{ - //ERROR: user is not logged in - header("Location: index.php"); - exit; - } - - }catch (PDOException $e) { - //go to error page or something, because can't access website db - print_r($e); - exit; - } + //ERROR: The form was not filled in correclty + header("Location: index.php?page=settings"); + exit; + } + }else{ + //ERROR: user is not logged in + header("Location: index.php"); + exit; + } } diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index e233bb322..2101f80da 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -256,7 +256,7 @@ 'pass' => $hashpass, 'mail' => "admin@admin.com", ); - Users::createUser($params); + Users::createUser($params, 1); try{ $params['permission'] = 2; $dbw = new DBLayer($cfg['db']['web']); From 61aebf6b3b236c2d590dcc1679318dbce6039a2b Mon Sep 17 00:00:00 2001 From: Quitta Date: Mon, 8 Jul 2013 17:14:03 +0200 Subject: [PATCH 23/24] show user added, where admins can create a ticket from another user --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/translations/en.ini | 1 + .../ryzom_ams/ams_lib/translations/fr.ini | 1 + .../ryzom_ams/www/html/inc/show_user.php | 35 +++++++++ .../ryzom_ams/www/html/templates/layout.tpl | 2 - .../www/html/templates/show_user.tpl | 78 +++++++++++++++++++ .../ryzom_ams/www/html/templates/userlist.tpl | 3 +- 6 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php create mode 100644 code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl 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 3a6fb4b7a..858c3020f 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 @@ -20,6 +20,7 @@ name = "Name" email = "Email" action = "Action" +[show_user] [createticket] diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini index fc42425b8..150a62c6b 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/fr.ini @@ -22,6 +22,7 @@ action = "Action" [createticket] +[show_user] [error] title404 = "Pas
    trouvez!" diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php new file mode 100644 index 000000000..7e802cee8 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php @@ -0,0 +1,35 @@ +
    diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl new file mode 100644 index 000000000..2e07ec91d --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl @@ -0,0 +1,78 @@ +{block name=content} +
    +
    +
    +

    Profile of {$target_name}

    +
    + + +
    +
    +
    +
    + Info + + + + + + + {if $firstName neq ""} + + + + + {/if} + {if $lastName neq ""} + + + + + {/if} + {if $country neq ""} + + + + + {/if} + {if $gender neq 0} + + + {if $gender eq 1} + + {else if $gender eq 2} + + {/if} + + {/if} + +
    Email:{$mail}
    Firstname:{$firstName}
    LastName:{$lastName}
    Country:{$country}
    Gender:♂♀
    +
    +
    +
    + +
    +
    +

    Actions

    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +{/block} + diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl index 5b4975c91..d09c46abe 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/userlist.tpl @@ -24,11 +24,12 @@ {foreach from=$userlist item=element} {$element.id} - {$element.username} + {$element.username} {$element.email} {if $element.permission eq 1}User{/if} {if $element.permission eq 2}Admin{/if} + Show User Edit User From 9d3317eb0c3811fc0783f2fe1dede798031b66c9 Mon Sep 17 00:00:00 2001 From: Quitta Date: Tue, 9 Jul 2013 01:03:49 +0200 Subject: [PATCH 24/24] Show the user his tickets in the user profile screen --HG-- branch : quitta-gsoc-2013 --- .../ryzom_ams/ams_lib/autoload/ticket.php | 23 +++++++++++ .../ryzom_ams/www/html/inc/show_user.php | 30 +++++++++++++- .../ryzom_ams/www/html/templates/layout.tpl | 1 + .../www/html/templates/layout_admin.tpl | 1 + .../www/html/templates/layout_user.tpl | 1 + .../www/html/templates/show_user.tpl | 39 +++++++++++++++++++ 6 files changed, 94 insertions(+), 1 deletion(-) 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 ec34ceaa3..f8f9f10e3 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 @@ -12,6 +12,29 @@ class Ticket{ ////////////////////////////////////////////Functions//////////////////////////////////////////////////// + /*FUNCTION: getTicketTitlesOf() + * return all ticket of the given author's id. + * + */ + public static function getTicketsOf($author, $db_data) { + $dbl = new DBLayer($db_data); + $statement = $dbl->execute("SELECT * FROM ticket INNER JOIN ticket_user ON ticket.Author = ticket_user.TUserId and ticket_user.ExternId=:id", array('id' => $author)); + $row = $statement->fetchAll(); + $result = Array(); + foreach($row as $ticket){ + $instance = new self($db_data); + $instance->setTimestamp($ticket['Timestamp']); + $instance->setTitle($ticket['Title']); + $instance->setStatus($ticket['Status']); + $instance->setQueue($ticket['Queue']); + $instance->setTicket_Category($ticket['Ticket_Category']); + $instance->setAuthor($ticket['Author']); + $result[] = $instance; + } + return $result; + } + + /*FUNCTION: create_Ticket() * creates a ticket + first initial reply and fills in the content of it! * diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php index 7e802cee8..a0d9c9132 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_user.php @@ -4,7 +4,7 @@ function show_user(){ //if logged in if(WebUsers::isLoggedIn()){ - if(WebUsers::isAdmin()){ + if( !isset($_GET['id']) || WebUsers::isAdmin() || $_GET['id'] == $_SESSION['id'] ){ if(isset($_GET['id'])){ $result['target_id'] = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); @@ -19,6 +19,34 @@ function show_user(){ $result['country'] = $info['Country']; $result['gender'] = $info['Gender']; + global $cfg; + $ticket_user = Ticket_User::constr_ExternId($result['target_id'],$cfg['db']['lib']); + $ticketlist = Ticket::getTicketsOf($ticket_user->getTUserId(),$cfg['db']['lib']); + $i = 0; + $result['ticketlist'] = Array(); + foreach($ticketlist as $ticket){ + $result['ticketlist'][$i]['tId'] = $ticket->getTId(); + $result['ticketlist'][$i]['timestamp'] = $ticket->getTimestamp(); + $result['ticketlist'][$i]['title'] = $ticket->getTitle(); + + //get the status + $statusId = $ticket->getStatus(); + if ($statusId == 0){ + $status = "Waiting on support.."; + }else if($statusId == 1){ + $status = "Being handled.."; + }else if($statusId == 2){ + $status = "Closed"; + } + + $result['ticketlist'][$i]['statusText'] = $status; + $result['ticketlist'][$i]['status'] = $statusId; + //get the category + $category = Ticket_Category::constr_TCategoryId($ticket->getTicket_Category(), $cfg['db']['lib']); + $result['ticketlist'][$i]['category'] = $category->getName(); + $i++; + } + return $result; }else{ 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 1316aca7d..32088c7b8 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 @@ -96,6 +96,7 @@
    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 aaa625a7d..cd7bc60ad 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 @@ -2,6 +2,7 @@ {block name=menu}
  • Dashboard
  • +
  • Profile
  • Settings
  • Liblist
  • 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 8195658d0..8da6ca313 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 @@ -2,6 +2,7 @@ {block name=menu}
  • Dashboard
  • +
  • Profile
  • Settings
  • Create New Ticket
  • diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl index 2e07ec91d..0b2a57c2b 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_user.tpl @@ -74,5 +74,44 @@
    + +
    +
    +
    +

    Tickets of {$target_name}

    +
    + + +
    +
    +
    +
    + Tickets + + + + + + + + + + + {foreach from=$ticketlist item=ticket} + + + + + + + + {/foreach} + + +
    TitleTimestampCategoryStatus
    {$ticket.title}{$ticket.timestamp}{$ticket.category}{$ticket.statusText}
    +
    +
    +
    +
    {/block}