diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/.plugincache.php.swp b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/.plugincache.php.swp
new file mode 100644
index 000000000..4993b302e
Binary files /dev/null and b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/.plugincache.php.swp differ
diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php
index b82e7ea8f..43282789e 100644
--- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php
+++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/dblayer.php
@@ -1,232 +1,245 @@
PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
- );
- $this->PDO = new PDO($dsn,$cfg['db'][$db]['user'],$cfg['db'][$db]['pass'], $opt);
- } else {
- global $cfg;
- $dsn = "mysql:";
- $dsn .= "host=". $cfg['db'][$dbn]['host'].";";
- $dsn .= "port=". $cfg['db'][$dbn]['port'].";";
-
- $opt = array(
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
- );
- $this->PDO = new PDO($dsn,$_POST['Username'],$_POST['Password'], $opt);
- }
-
- }
-
- /**
- * execute a query that doesn't have any parameters
- * @param $query the mysql query
- * @return returns a PDOStatement object
- */
- public function executeWithoutParams($query){
- $statement = $this->PDO->prepare($query);
- $statement->execute();
- return $statement;
- }
-
- /**
- * execute a query that has parameters
- * @param $query the mysql query
- * @param $params the parameters that are being used by the query
- * @return returns a PDOStatement object
- */
- public function execute($query,$params){
- $statement = $this->PDO->prepare($query);
- $statement->execute($params);
- return $statement;
- }
-
- /**
- * execute a query (an insertion query) that has parameters and return the id of it's insertion
- * @param $query the mysql query
- * @param $params the parameters that are being used by the query
- * @return returns the id of the last inserted element.
- */
- public function executeReturnId($tb_name,$data){
- $field_values =':'. implode(',:', array_keys($data));
- $field_options = implode(',', array_keys($data));
- try{
- $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)");
- foreach ($data as $key => $value )
- {
- $sth->bindValue(":$key", $value);
- }
- $this->PDO->beginTransaction();
- //execution
- $sth->execute();
- $lastId =$this->PDO->lastInsertId();
- $this->PDO->commit();
- }catch (Exception $e)
- {
- //for rolling back the changes during transaction
- $this->PDO->rollBack();
- throw new Exception("error in inseting");
- }
- return $lastId;
- }
-
-
- /**
+ * The constructor.
+ * Instantiates the PDO object attribute by connecting to the arguments matching database(the db info is stored in the $cfg global var)
*
+ * @param $db String, the name of the databases entry in the $cfg global var.
+ */
+ function __construct( $db, $dbn = null )
+ {
+ if ( $db != "install" ) {
+
+ global $cfg;
+ $dsn = "mysql:";
+ $dsn .= "host=" . $cfg['db'][$db]['host'] . ";";
+ $dsn .= "dbname=" . $cfg['db'][$db]['name'] . ";";
+ $dsn .= "port=" . $cfg['db'][$db]['port'] . ";";
+
+ $opt = array(
+ PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION,
+ PDO :: ATTR_DEFAULT_FETCH_MODE => PDO :: FETCH_ASSOC
+ );
+ $this -> PDO = new PDO( $dsn, $cfg['db'][$db]['user'], $cfg['db'][$db]['pass'], $opt );
+ } else {
+ global $cfg;
+ $dsn = "mysql:";
+ $dsn .= "host=" . $cfg['db'][$dbn]['host'] . ";";
+ $dsn .= "port=" . $cfg['db'][$dbn]['port'] . ";";
+
+ $opt = array(
+ PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION,
+ PDO :: ATTR_DEFAULT_FETCH_MODE => PDO :: FETCH_ASSOC
+ );
+ $this -> PDO = new PDO( $dsn, $_POST['Username'], $_POST['Password'], $opt );
+ }
+
+ }
+
+ /**
+ * execute a query that doesn't have any parameters
+ *
+ * @param $query the mysql query
+ * @return returns a PDOStatement object
+ */
+ public function executeWithoutParams( $query ) {
+ $statement = $this -> PDO -> prepare( $query );
+ $statement -> execute();
+ return $statement;
+ }
+
+ /**
+ * execute a query that has parameters
+ *
+ * @param $query the mysql query
+ * @param $params the parameters that are being used by the query
+ * @return returns a PDOStatement object
+ */
+ public function execute( $query, $params ) {
+ $statement = $this -> PDO -> prepare( $query );
+ $statement -> execute( $params );
+ return $statement;
+ }
+
+ /**
+ * execute a query (an insertion query) that has parameters and return the id of it's insertion
+ *
+ * @param $query the mysql query
+ * @param $params the parameters that are being used by the query
+ * @return returns the id of the last inserted element.
+ */
+ public function executeReturnId( $tb_name, $data ) {
+ $field_values = ':' . implode( ',:', array_keys( $data ) );
+ $field_options = implode( ',', array_keys( $data ) );
+ try {
+ $sth = $this -> PDO -> prepare( "INSERT INTO $tb_name ($field_options) VALUE ($field_values)" );
+ foreach ( $data as $key => $value )
+ {
+ $sth -> bindValue( ":$key", $value );
+ }
+ $this -> PDO -> beginTransaction();
+ $sth -> execute();
+ $lastId = $this -> PDO -> lastInsertId();
+ $this -> PDO -> commit();
+ }
+ catch ( Exception $e )
+ {
+ // for rolling back the changes during transaction
+ $this -> PDO -> rollBack();
+ throw new Exception( "error in inseting" );
+ }
+ return $lastId;
+ }
+
+ /**
* Select function using prepared statement
+ *
* @param string $tb_name Table Name to Select
* @param array $data Associative array
* @param string $where where to select
* @return statement object
*/
- public function selectWithParameter($param, $tb_name, $data, $where)
- {
- try{
- $sth = $this->PDO->prepare("SELECT $param FROM $tb_name WHERE $where");
- $this->PDO->beginTransaction();
- $sth->execute($data);
- $this->PDO->commit();
- }catch(Exception $e)
- {
- $this->PDO->rollBack();
- throw new Exception("error selection");
- return false;
- }
+ public function selectWithParameter( $param, $tb_name, $data, $where )
+ {
+ try {
+ $sth = $this -> PDO -> prepare( "SELECT $param FROM $tb_name WHERE $where" );
+ $this -> PDO -> beginTransaction();
+ $sth -> execute( $data );
+ $this -> PDO -> commit();
+ }
+ catch( Exception $e )
+ {
+ $this -> PDO -> rollBack();
+ throw new Exception( "error selection" );
+ return false;
+ }
return $sth;
- }
-
+ }
+
/**
- *
* Select function using prepared statement
+ *
* @param string $tb_name Table Name to Select
* @param array $data Associative array
* @param string $where where to select
* @return statement object
*/
- public function select($tb_name, $data ,$where)
- {
- try{
- $sth = $this->PDO->prepare("SELECT * FROM $tb_name WHERE $where");
- $this->PDO->beginTransaction();
- $sth->execute($data);
- $this->PDO->commit();
- }catch(Exception $e)
- {
- $this->PDO->rollBack();
- throw new Exception("error selection");
- return false;
- }
+ public function select( $tb_name, $data , $where )
+ {
+ try {
+ $sth = $this -> PDO -> prepare( "SELECT * FROM $tb_name WHERE $where" );
+ $this -> PDO -> beginTransaction();
+ $sth -> execute( $data );
+ $this -> PDO -> commit();
+ }
+ catch( Exception $e )
+ {
+ $this -> PDO -> rollBack();
+ throw new Exception( "error selection" );
+ return false;
+ }
return $sth;
- }
-
+ }
+
/**
- *
* Update function with prepared statement
+ *
* @param string $tb_name name of the table
* @param array $data associative array with values
* @param string $where where part
* @throws Exception error in updating
*/
- public function update($tb_name, $data, $where)
- {
- $field_option_values=null;
- foreach ($data as $key => $value)
- {
- $field_option_values.=",$key".'=:'.$value;
- }
- $field_option_values = ltrim($field_option_values,',');
- try {
- $sth = $this->PDO->prepare("UPDATE $tb_name SET $field_option_values WHERE $where ");
-
- foreach ($data as $key => $value)
- {
- $sth->bindValue(":$key", $value);
- }
- $this->PDO->beginTransaction();
- $sth->execute();
- $this->PDO->commit();
- }catch (Exception $e)
- {
- $this->PDO->rollBack();
- throw new Exception('error in updating');
- }
- }
+ public function update( $tb_name, $data, $where )
+ {
+ $field_option_values = null;
+ foreach ( $data as $key => $value )
+ {
+ $field_option_values .= ",$key" . '=:' . $key;
+ }
+ $field_option_values = ltrim( $field_option_values, ',' );
+ try {
+ $sth = $this -> PDO -> prepare( "UPDATE $tb_name SET $field_option_values WHERE $where " );
+
+ foreach ( $data as $key => $value )
+ {
+ $sth -> bindValue( ":$key", $value );
+ }
+ $this -> PDO -> beginTransaction();
+ $sth -> execute();
+ $this -> PDO -> commit();
+ }
+ catch ( Exception $e )
+ {
+ $this -> PDO -> rollBack();
+ throw new Exception( 'error in updating' );
+ return false;
+ }
+ return true;
+ }
+
/**
- *
* insert function using prepared statements
+ *
* @param string $tb_name Name of the table to insert in
* @param array $data Associative array of data to insert
*/
-
- public function insert($tb_name, $data)
- {
- $field_values =':'. implode(',:', array_keys($data));
- $field_options = implode(',', array_keys($data));
- try{
- $sth = $this->PDO->prepare("INSERT INTO $tb_name ($field_options) VALUE ($field_values)");
- foreach ($data as $key => $value )
- {
- $sth->bindValue(":$key", $value);
- }
- $this->PDO->beginTransaction();
- //execution
- $sth->execute();
- $this->PDO->commit();
-
- }catch (Exception $e)
- {
- //for rolling back the changes during transaction
- $this->PDO->rollBack();
- throw new Exception("error in inseting");
- }
- }
-
+ public function insert( $tb_name, $data )
+ {
+ $field_values = ':' . implode( ',:', array_keys( $data ) );
+ $field_options = implode( ',', array_keys( $data ) );
+ try {
+ $sth = $this -> PDO -> prepare( "INSERT INTO $tb_name ($field_options) VALUE ($field_values)" );
+ foreach ( $data as $key => $value )
+ {
+
+ $sth -> bindValue( ":$key", $value );
+ }
+ $this -> PDO -> beginTransaction();
+ // execution
+ $sth -> execute();
+ $this -> PDO -> commit();
+
+ }
+ catch ( Exception $e )
+ {
+ // for rolling back the changes during transaction
+ $this -> PDO -> rollBack();
+ throw new Exception( "error in inseting" );
+ }
+ }
+
/**
- *
* Delete database entery using prepared statement
- * @param string $tb_name
- * @param string $where
+ *
+ * @param string $tb_name
+ * @param string $where
* @throws error in deleting
*/
- public function delete($tb_name, $where)
- {
+ public function delete( $tb_name, $data, $where )
+ {
try {
- $sth = $this->prepare("DELETE FROM $tb_name WHERE $where");
- $this->PDO->beginTransaction();
- $sth->execute();
- $this->PDO->commit();
- }
- catch (Exception $e)
- {
- $this->rollBack();
- throw new Exception("error in deleting");
- }
-
- }
-}
+ $sth = $this -> PDO -> prepare( "DELETE FROM $tb_name WHERE $where" );
+ $this -> PDO -> beginTransaction();
+ $sth -> execute( $data );
+ $this -> PDO -> commit();
+ }
+ catch ( Exception $e )
+ {
+ $this -> PDO -> rollBack();
+ throw new Exception( "error in deleting" );
+ }
+
+ }
+ }
diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php
index 2d26f3c21..3410cf602 100644
--- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php
+++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/helpers.php
@@ -1,224 +1,241 @@
setCompileDir($SITEBASE.'/templates_c/');
- $smarty->setCacheDir($SITEBASE.'/cache/');
- $smarty -> setConfigDir($SITEBASE . '/configs/' );
+ $smarty -> setCompileDir( $SITEBASE . '/templates_c/' );
+ $smarty -> setCacheDir( $SITEBASE . '/cache/' );
+ $smarty -> setConfigDir( $SITEBASE . '/configs/' );
// turn smarty debugging on/off
- $smarty -> debugging = false;
+ $smarty -> debugging = false;
// caching must be disabled for multi-language support
- $smarty -> caching = false;
+ $smarty -> caching = false;
$smarty -> cache_lifetime = 5;
-
- //needed by smarty.
- helpers :: create_folders ();
- global $FORCE_INGAME;
-
- //if ingame, then use the ingame templates
- if ( helpers::check_if_game_client() or $FORCE_INGAME ){
- $smarty -> template_dir = $AMS_LIB . '/ingame_templates/';
+
+ // needed by smarty.
+ helpers :: create_folders ();
+ global $FORCE_INGAME;
+
+ // if ingame, then use the ingame templates
+ if ( helpers :: check_if_game_client() or $FORCE_INGAME ) {
+ $smarty -> template_dir = $AMS_LIB . '/ingame_templates/';
$smarty -> setConfigDir( $AMS_LIB . '/configs' );
$variables = parse_ini_file( $AMS_LIB . '/configs/ingame_layout.ini', true );
- foreach ( $variables[$INGAME_LAYOUT] as $key => $value ){
- $smarty -> assign( $key, $value );
- }
- }else{
- $smarty -> template_dir = $SITEBASE . '/templates/';
+ foreach ( $variables[$INGAME_LAYOUT] as $key => $value ) {
+ $smarty -> assign( $key, $value );
+ }
+ } else {
+ $smarty -> template_dir = $SITEBASE . '/templates/';
$smarty -> setConfigDir( $SITEBASE . '/configs' );
- }
-
- foreach ( $vars as $key => $value ){
- $smarty -> assign( $key, $value );
- }
-
- //load page specific variables that are language dependent
- $variables = Helpers::handle_language();
- foreach ( $variables[$template] as $key => $value ){
- $smarty -> assign( $key, $value );
- }
-
- //smarty inheritance for loading the matching wrapper layout (with the matching menu bar)
- if( isset($vars['permission']) && $vars['permission'] == 3 ){
- $inherited = "extends:layout_admin.tpl|";
- }else if( isset($vars['permission']) && $vars['permission'] == 2){
- $inherited = "extends:layout_mod.tpl|";
- }else if( isset($vars['permission']) && $vars['permission'] == 1){
- $inherited = "extends:layout_user.tpl|";
- }else{
- $inherited ="";
- }
-
- //if $returnHTML is set to true, return the html by fetching the template else display the template.
- if($returnHTML == true){
- return $smarty ->fetch($inherited . $template . '.tpl' );
- }else{
- $smarty -> display( $inherited . $template . '.tpl' );
- }
- }
-
-
- /**
- * creates the folders that are needed for smarty.
- * @todo for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead.
- */
- static public function create_folders(){
- global $AMS_LIB;
+ }
+
+ foreach ( $vars as $key => $value ) {
+ $smarty -> assign( $key, $value );
+ }
+
+ // load page specific variables that are language dependent
+ $variables = Helpers :: handle_language();
+ if ( $template != 'layout_plugin' )
+ {
+ foreach ( $variables[$template] as $key => $value ) {
+ $smarty -> assign( $key, $value );
+ }
+ }
+ // load ams content variables that are language dependent
+ foreach ( $variables['ams_content'] as $key => $value ) {
+ $smarty -> assign( $key, $value );
+ }
+
+ // smarty inheritance for loading the matching wrapper layout (with the matching menu bar)
+ if ( isset( $vars['permission'] ) && $vars['permission'] == 3 ) {
+ $inherited = "extends:layout_admin.tpl|";
+ } else if ( isset( $vars['permission'] ) && $vars['permission'] == 2 ) {
+ $inherited = "extends:layout_mod.tpl|";
+ } else if ( isset( $vars['permission'] ) && $vars['permission'] == 1 ) {
+ $inherited = "extends:layout_user.tpl|";
+ } else {
+ $inherited = "";
+ }
+
+ // if $returnHTML is set to true, return the html by fetching the template else display the template.
+ if ( $returnHTML == true ) {
+ return $smarty -> fetch( $inherited . $template . '.tpl' );
+ } else {
+ $smarty -> display( $inherited . $template . '.tpl' );
+ }
+ }
+
+
+ /**
+ * creates the folders that are needed for smarty.
+ *
+ * @todo for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead.
+ */
+ static public function create_folders() {
+ global $AMS_LIB;
global $SITEBASE;
$arr = array( $AMS_LIB . '/ingame_templates/',
$AMS_LIB . '/configs',
- //$AMS_LIB . '/cache',
- $SITEBASE . '/cache/',
+ // $AMS_LIB . '/cache',
+ $SITEBASE . '/cache/',
$SITEBASE . '/templates/',
$SITEBASE . '/templates_c/',
$SITEBASE . '/configs'
);
- foreach ( $arr as & $value ){
-
- if ( !file_exists( $value ) ){
- print($value);
- mkdir($value);
- }
- }
-
- }
-
-
- /**
+ foreach ( $arr as &$value ) {
+
+ if ( !file_exists( $value ) ) {
+ print( $value );
+ mkdir( $value );
+ }
+ }
+
+ }
+
+
+ /**
* check if the http request is sent ingame or not.
+ *
* @return returns true in case it's sent ingame, else false is returned.
*/
- static public function check_if_game_client()
- {
- // if HTTP_USER_AGENT is not set then its ryzom core
- global $FORCE_INGAME;
- if ( ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'],"Ryzom") === 0)) || $FORCE_INGAME || ! isset($_SERVER['HTTP_USER_AGENT']) ){
- return true;
- }else{
- return false;
- }
- }
-
-
- /**
+ static public function check_if_game_client()
+ {
+ // if HTTP_USER_AGENT is not set then its ryzom core
+ global $FORCE_INGAME;
+ if ( ( isset( $_SERVER['HTTP_USER_AGENT'] ) && ( strpos( $_SERVER['HTTP_USER_AGENT'], "Ryzom" ) === 0 ) ) || $FORCE_INGAME || ! isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
* Handles the language specific aspect.
* The language can be changed by setting the $_GET['Language'] & $_GET['setLang'] together. This will also change the language entry of the user in the db.
* Cookies are also being used in case the user isn't logged in.
+ *
* @return returns the parsed content of the language .ini file related to the users language setting.
*/
- static public function handle_language(){
- global $DEFAULT_LANGUAGE;
- global $AMS_TRANS;
-
- //if user wants to change the language
- if(isset($_GET['Language']) && isset($_GET['setLang'])){
- //The ingame client sometimes sends full words, derive those!
- switch($_GET['Language']){
-
- case "English":
- $lang = "en";
- break;
-
- case "French":
- $lang = "fr";
- break;
-
- default:
- $lang = $_GET['Language'];
- }
- //if the file exists en the setLang = true
- if( file_exists( $AMS_TRANS . '/' . $lang . '.ini' ) && $_GET['setLang'] == "true"){
- //set a cookie & session var and incase logged in write it to the db!
- setcookie( 'Language', $lang , time() + 60*60*24*30 );
- $_SESSION['Language'] = $lang;
- if(WebUsers::isLoggedIn()){
- WebUsers::setLanguage($_SESSION['id'],$lang);
- }
- }else{
- $_SESSION['Language'] = $DEFAULT_LANGUAGE;
- }
- }else{
- //if the session var is not set yet
- if(!isset($_SESSION['Language'])){
- //check if a cookie already exists for it
- if ( isset( $_COOKIE['Language'] ) ) {
- $_SESSION['Language'] = $_COOKIE['Language'];
- //else use the default language
- }else{
- $_SESSION['Language'] = $DEFAULT_LANGUAGE;
- }
- }
- }
-
- if ($_SESSION['Language'] == ""){
- $_SESSION['Language'] = $DEFAULT_LANGUAGE;
- }
- return parse_ini_file( $AMS_TRANS . '/' . $_SESSION['Language'] . '.ini', true );
-
- }
-
+ static public function handle_language() {
+ global $DEFAULT_LANGUAGE;
+ global $AMS_TRANS;
+
+ // if user wants to change the language
+ if ( isset( $_GET['Language'] ) && isset( $_GET['setLang'] ) ) {
+ // The ingame client sometimes sends full words, derive those!
+ switch ( $_GET['Language'] ) {
+
+ case "English":
+ $lang = "en";
+ break;
+
+ case "French":
+ $lang = "fr";
+ break;
+
+ default:
+ $lang = $_GET['Language'];
+ }
+ // if the file exists en the setLang = true
+ if ( file_exists( $AMS_TRANS . '/' . $lang . '.ini' ) && $_GET['setLang'] == "true" ) {
+ // set a cookie & session var and incase logged in write it to the db!
+ setcookie( 'Language', $lang , time() + 60 * 60 * 24 * 30 );
+ $_SESSION['Language'] = $lang;
+ if ( WebUsers :: isLoggedIn() ) {
+ WebUsers :: setLanguage( $_SESSION['id'], $lang );
+ }
+ } else {
+ $_SESSION['Language'] = $DEFAULT_LANGUAGE;
+ }
+ } else {
+ // if the session var is not set yet
+ if ( !isset( $_SESSION['Language'] ) ) {
+ // check if a cookie already exists for it
+ if ( isset( $_COOKIE['Language'] ) ) {
+ $_SESSION['Language'] = $_COOKIE['Language'];
+ // else use the default language
+ } else {
+ $_SESSION['Language'] = $DEFAULT_LANGUAGE;
+ }
+ }
+ }
- /**
- * Time output function for handling the time display.
- * @return returns the time in the format specified in the $TIME_FORMAT global variable.
- */
- static public function outputTime($time, $str = 1){
- global $TIME_FORMAT;
- if($str){
- return date($TIME_FORMAT,strtotime($time));
- }else{
- return date($TIME_FORMAT,$time);
- }
- }
-
- /**
- * Auto login function for ingame use.
- * This function will allow users who access the website ingame, to log in without entering the username and password. It uses the COOKIE entry in the open_ring db.
- * it checks if the cookie sent by the http request matches the one in the db. This cookie in the db is changed everytime the user relogs.
- * @return returns "FALSE" if the cookies didn't match, else it returns an array with the user's id and name.
- */
- static public function check_login_ingame(){
- if ( helpers :: check_if_game_client () or $forcelibrender = false ){
- $dbr = new DBLayer("ring");
- if (isset($_GET['UserId']) && isset($_COOKIE['ryzomId'])){
- $id = $_GET['UserId'];
- $statement = $dbr->select("ring_users", array('id' => $id, 'cookie' => $_COOKIE['ryzomId']), "user_id=:id AND cookie =:cookie");
- if ($statement->rowCount() ){
- $entry = $statement->fetch();
- //print_r($entry);
- return array('id' => $entry['user_id'], 'name' => $entry['user_name']);
- }else{
- return "FALSE";
- }
- }else{
- return "FALSE";
- }
- }else{
- return "FALSE";
- }
- }
+if ( $_SESSION['Language'] == "" ) {
+ $_SESSION['Language'] = $DEFAULT_LANGUAGE;
+ }
+return parse_ini_file( $AMS_TRANS . '/' . $_SESSION['Language'] . '.ini', true );
+
+ }
+
+
+/**
+ * Time output function for handling the time display.
+ *
+ * @return returns the time in the format specified in the $TIME_FORMAT global variable.
+ */
+static public function outputTime( $time, $str = 1 ) {
+global $TIME_FORMAT;
+ if ( $str ) {
+ return date( $TIME_FORMAT, strtotime( $time ) );
+ } else {
+ return date( $TIME_FORMAT, $time );
+ }
+}
+
+/**
+ * Auto login function for ingame use.
+ * This function will allow users who access the website ingame, to log in without entering the username and password. It uses the COOKIE entry in the open_ring db.
+ * it checks if the cookie sent by the http request matches the one in the db. This cookie in the db is changed everytime the user relogs.
+ *
+ * @return returns "FALSE" if the cookies didn't match, else it returns an array with the user's id and name.
+ */
+static public function check_login_ingame() {
+if ( helpers :: check_if_game_client () or $forcelibrender = false ) {
+ $dbr = new DBLayer( "ring" );
+ if ( isset( $_GET['UserId'] ) && isset( $_COOKIE['ryzomId'] ) ) {
+ $id = $_GET['UserId'];
+
+ $statement = $dbr -> select( "ring_users", array( 'id' => $id, 'cookie' => $_COOKIE['ryzomId'] ), "user_id=:id AND cookie =:cookie" );
+
+ // $statement = $dbr->execute("SELECT * FROM ring_users WHERE user_id=:id AND cookie =:cookie", array('id' => $id, 'cookie' => $_COOKIE['ryzomId']));
+
+ if ( $statement -> rowCount() ) {
+ $entry = $statement -> fetch();
+ // print_r($entry);
+ return array( 'id' => $entry['user_id'], 'name' => $entry['user_name'] );
+ } else {
+ return "FALSE";
+ }
+ } else {
+ return "FALSE";
+ }
+ } else {
+ return "FALSE";
+ }
+}
}
diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php
index 2d9e5de06..7c43e1877 100644
--- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php
+++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/plugincache.php
@@ -1,123 +1,270 @@
setId($values['PluginId']);
- $this->setPluginName($values['PluginName']);
- $this->setPluginVersion($values['PluginVersion']);
- $this->setPluginPermission($values['PluginPermission']);
- $this->setIsActive($values['IsActive']);
- }
-
- /**
- * loads the object's attributes.
- */
- public function load_With_SID( ) {
- $dbl = new DBLayer("lib");
- $statement = $dbl->executeWithoutParams("SELECT * FROM plugins");
- $row = $statement->fetch();
- $this->set($row);
- }
-
- /**
- * updates the entry.
- */
- public function update(){
- $dbl = new DBLayer("lib");
- $values = Array('t' => $this->getPluginPermission(), 'q' => $this->getPluginVersion(), 'd' => $this->getIsActive());
- $dbl->update("plugins", $values, "PluginName= $this->getPluginName()");
- }
+ * A constructor.
+ * Empty constructor
+ */
- public function getId(){
- return $this->Id;
- }
-
- /**
- * get plugin permission attribute of the object.
- */
- public function getPluginPermission(){
- return $this->plugin_permission;
- }
-
- /**
- * get plugin version attribute of the object.
- */
- public function getPluginVersion(){
- return $this->plugin_version;
- }
-
- /**
- * get plugin is active attribute of the object.
- */
- public function getIsActive(){
- return $this->plugin_isactive;
- }
-
- /**
- * get plugin name attribute of the object.
- */
- public function getPluginName(){
- return $this->plugin_name;
- }
-
- /**
- * set plugin id attribute of the object.
- * @param $s integer id
- */
-
- public function setId($s){
- $this->Id = $s;
- }
-
- /**
- * set plugin permission attribute of the object.
- * @param $t type of the query, set permission
- */
- public function setPluginPermission($t){
- $this->plugin_permission = $t;
- }
-
- /**
- * set plugin version attribute of the object.
- * @param $q string to set plugin version
- */
- public function setPluginVersion($q){
- $this->plugin_version= $q;
- }
-
- /**
- * set plugin is active attribute of the object.
- * @param $d tinyint to set plugin is active or not .
- */
- public function setIsActive($d){
- $this->plugin_isactive= $d;
- }
+ public function __construct() {
+ }
+
+ public function set( $values ) {
+ $this -> setId( $values['Id'] );
+ $this -> setPluginName( $values['Name'] );
+ $this -> setPluginType( $values['Type'] );
+ $this -> setPluginPermission( $values['Permission'] );
+ $this -> setPluginStatus( $values['Status'] );
+ $this -> setPluginInfo( json_decode( $values['Info'] ) );
+ @$this -> setUpdateInfo( json_decode( $values['UpdateInfo'] ) );
+ }
/**
- * set plugin name attribute of the object.
- * @param $p_n string to set plugin name.
- */
- public function setPluginName($p_n){
- $this->plugin_name= $p_n;
- }
-}
\ No newline at end of file
+ * loads the object's attributes.
+ */
+
+ public function load_With_SID() {
+ $dbl = new DBLayer( "lib" );
+ $statement = $dbl -> executeWithoutParams( "SELECT * FROM plugins" );
+ $row = $statement -> fetch();
+ $this -> set( $row );
+ }
+
+ /**
+ * get plugin id attribute of the object.
+ *
+ * @return integer id
+ */
+ public function getId() {
+ return $this -> Id;
+ }
+
+ /**
+ * get plugin permission attribute of the object.
+ */
+ public function getPluginPermission() {
+ return $this -> plugin_permission;
+ }
+
+ /**
+ * get plugin Type attribute of the object.
+ */
+ public function getPluginType() {
+ return $this -> plugin_version;
+ }
+
+ /**
+ * get plugin status attribute of the object.
+ */
+ public function getPluginStatus() {
+ return $this -> plugin_status;
+ }
+
+ /**
+ * get plugin name attribute of the object.
+ */
+ public function getPluginName() {
+ return $this -> plugin_name;
+ }
+
+ /**
+ * get plugin info array attribute of the object.
+ */
+ public function getPluginInfo() {
+ return $this -> plugin_info;
+ }
+
+ /**
+ * set plugin id attribute of the object.
+ *
+ * @param $s integer id
+ */
+ public function setId( $s ) {
+ $this -> Id = $s;
+ }
+
+ /**
+ * set plugin permission attribute of the object.
+ *
+ * @param $t type of the query, set permission
+ */
+ public function setPluginPermission( $t ) {
+ $this -> plugin_permission = $t;
+ }
+
+ /**
+ * set plugin version attribute of the object.
+ *
+ * @param $q string to set plugin version
+ */
+ public function setPluginType( $q ) {
+ $this -> plugin_version = $q;
+ }
+
+ /**
+ * set plugin status attribute of the object.
+ *
+ * @param $d status code type int
+ */
+ public function setPluginStatus( $d ) {
+ $this -> plugin_status = $d;
+ }
+
+ /**
+ * set plugin name attribute of the object.
+ *
+ * @param $p_n string to set plugin name.
+ */
+ public function setPluginName( $p_n ) {
+ $this -> plugin_name = $p_n;
+ }
+
+ /**
+ * set plugin info attribute array of the object.
+ *
+ * @param $p_n array
+ */
+ public function setPluginInfo( $p_n ) {
+ $this -> plugin_info = $p_n;
+ }
+
+ /**
+ * functionalities for plugin updates
+ */
+
+ /**
+ * set update info attribute array of the object.
+ *
+ * @param $p_n array
+ */
+ public function setUpdateInfo( $p_n ) {
+ $this -> update_info = $p_n;
+ }
+
+ /**
+ * get plugin info array attribute of the object.
+ */
+ public function getUpdateInfo() {
+ return $this -> update_info;
+ }
+
+ /**
+ * some more plugin function that requires during plugin operations
+ *
+ */
+
+ /**
+ * function to remove a non empty directory
+ *
+ * @param $dir directory address
+ * @return boolean
+ */
+ public static function rrmdir( $dir ) {
+ if ( is_dir( $dir ) ) {
+ $objects = scandir( $dir );
+ foreach ( $objects as $object ) {
+ if ( $object != "." && $object != ".." ) {
+ if ( filetype( $dir . "/" . $object ) == "dir" ) rmdir( $dir . "/" . $object );
+ else unlink( $dir . "/" . $object );
+ }
+ }
+ reset( $objects );
+ return rmdir( $dir );
+ }
+ }
+
+ /**
+ * function to unzip the zipped files
+ *
+ * @param $target_path path to the target zipped file
+ * @param $destination path to the destination
+ * @return boolean
+ */
+ public static function zipExtraction( $target_path, $destination )
+ {
+ $zip = new ZipArchive();
+ $x = $zip -> open( $target_path );
+ if ( $x === true ) {
+ if ( $zip -> extractTo( $destination ) )
+ {
+ $zip -> close();
+ return true;
+ }
+ else
+ {
+ $zip -> close();
+ return false;
+ }
+ }
+ }
+
+ /**
+ * returns plugin information with respect to the id
+ *
+ * @param id $ plugin id
+ * @return field info for the plugin
+ */
+ public static function pluginInfoUsingId( $id, $fieldName )
+ {
+ $db = new DBLayer( 'lib' );
+ $sth = $db -> selectWithParameter( $fieldName, 'plugins', array( 'id' => $id ), 'Id=:id' );
+ $row = $sth -> fetch();
+ return $row[$fieldName];
+ }
+
+ /**
+ * function provides list of active plugins
+ *
+ * @return $ac_plugins list of active plugins
+ */
+ public static function activePlugins()
+ {
+ $db = new DBLayer( 'lib' );
+ $sth = $db -> selectWithParameter( 'Id', 'plugins', array( 'status' => 1 ), 'Status=:status' );
+ $row = $sth -> fetchAll();
+ return $row;
+ }
+
+ /**
+ * function to load hooks for the active plugins
+ * and return the contents in the hooks in an array
+ *
+ * @return $content content available in hooks
+ */
+ public static function loadHooks()
+ {
+ $content = array();
+ $ac_arr = Plugincache :: activePlugins();
+ foreach( $ac_arr as $key => $value )
+ {
+ $plugin_path = Plugincache :: pluginInfoUsingId( $value['Id'], 'FileName' );
+ $pluginName = Plugincache :: pluginInfoUsingId( $value['Id'], 'Name' );
+
+ // calling hooks in the $pluginName.php
+ include $plugin_path . '/' . strtolower( $pluginName ) . '.php';
+ $arr = get_defined_functions();
+
+ foreach( $arr['user'] as $key => $value )
+ {
+ if ( stristr( $value, strtolower( $pluginName ) ) == true )
+ {
+ $content['hook_info'][$pluginName] = call_user_func( $value );
+ }
+ }
+ }
+ return $content;
+ }
+ }
\ No newline at end of file
diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini
index 0d1b9cfb6..f2a21d2ab 100644
--- a/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini
+++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/translations/en.ini
@@ -5,6 +5,9 @@
login_info = "Please enter your MySQL Username and Password to install the database.
This is being loaded because the is_installed file is missing.
This process will take about 30 seconds."
login_here = "here"
+[ams_content]
+ams_title="Ryzom Account Mangement System"
+
[dashboard]
home_title = "Introduction"
home_info = "Welcome to the Ryzom Core - Account Management System"
@@ -56,12 +59,39 @@ action = "Action"
[plugins]
plugin_title = "Plugin List"
plugin_info = "Here you can see the entire list of plugins . You can easily remove plugins ,activate them and add permissions"
-plugins= "Plugins"
-plugin_id = "ID"
+plugins = "Plugins"
plugin_name = "Name"
-plugin_version= "Version"
-plugin_permission= "Owner/Access Permission"
-plugin_is_active= "On/Off"
+plugin_version = "Version"
+plugin_description = "Description"
+plugin_type = "Type"
+plugin_permission = "Access Permission"
+plugin_status = "Status"
+ip_success = "Plugin added succesfuly."
+plugin_actions = "Actions"
+dp_success = "Plugin deleted successfuly"
+dp_error = "Error in deleting plugin.Please try again later."
+ac_success = "Plugin Activated successfuly."
+ac_error = "Plugin facing some error in activating. Please try again later."
+dc_success = "Plugin de-Activated successfuly."
+dc_error = "Plugin facing some error in de-activating. Please try again later."
+up_success = "Update added successfully. Go to Updates page for installing updates."
+up_install_success = "Update installed successfully."
+
+[install_plugin]
+ip_title = "Install a new Plugin"
+ip_message = "For example: name.zip from your local computer"
+ip_support = "Upload the plugin archieve to install.The following file extension is supported: zip."
+ip_info_nfound = "Info file not found in the Plugin.Please recheck"
+ip_file_nfnd="Please upload a plugin before clicking on install button"
+
+[plugins_update]
+up_title = "Updates for Plugins"
+up_info = "Here you can see the entire list of available updates for plugins."
+up_description = "Updates Info"
+plugin_name = "Name"
+plugin_version = "Version"
+up_updated_version = "New Version"
+up_actions = "Actions"
[show_ticket]
t_title = "Ticket"
@@ -136,8 +166,8 @@ go_home = "Go Home"
userlist_info = "welcome to the userlist"
[login]
-login_info = "Please login with your Username and Password."
-login_error_message = "The username/password were not correct!"
+login_info = "Please login with your Email/Username and Password."
+login_error_message = "The Email/username/password were not correct!"
login_register_message ="Register If you don't have an account yet, create one"
login_here = "here"
login_forgot_password_message = "In case you forgot your password, click"
@@ -252,4 +282,4 @@ email_body_forgot_password_header = "A request to reset your account's password
email_body_forgot_password_footer = "
----------
If you didn't make this request, please ignore this message."
-;===========================================================================
\ No newline at end of file
+;===========================================================================
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php
new file mode 100644
index 000000000..930ed15f1
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/activate_plugin.php
@@ -0,0 +1,35 @@
+ update( "plugins", array( 'Status' => '1' ), "Id = $id" );
+ if ( $result )
+ {
+ header( "Location: index.php?page=plugins&result=3" );
+ exit;
+ }
+ else
+ {
+ header( "Location: index.php?page=plugins&result=4" );
+ exit;
+ }
+ }
+ else
+ {
+ header( "Location: index.php?page=plugins&result=4" );
+ exit;
+ }
+ }
+ }
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php
new file mode 100644
index 000000000..a4b6120b1
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/deactivate_plugin.php
@@ -0,0 +1,37 @@
+ update( "plugins", array( 'Status' => '0' ), "Id = $id" );
+ if ( $result )
+ {
+ header( "Location: index.php?page=plugins&result=5" );
+ exit;
+ }
+ else
+ {
+ header( "Location: index.php?page=plugins&result=6" );
+ exit;
+
+ }
+ }
+ else
+ {
+ header( "Location: index.php?page=plugins&result=6" );
+ exit;
+ }
+ }
+ }
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php
new file mode 100644
index 000000000..53af36157
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/delete_plugin.php
@@ -0,0 +1,68 @@
+ selectWithParameter( "FileName", "plugins", array( 'id' => $id ), "Id=:id" );
+ $name = $sth -> fetch();
+
+ if ( is_dir( "$name[FileName]" ) )
+ {
+ // removing plugin directory from the code base
+ if ( rrmdir( "$name[FileName]" ) )
+ {
+ $db -> delete( 'plugins', array( 'id' => $id ), "Id=:id" );
+
+ header( "Location: index.php?page=plugins&result=2" );
+ exit;
+
+ }
+ else
+ {
+ header( "Location: index.php?page=plugins&result=0" );
+ exit;
+ }
+ }
+ }
+ else
+ {
+ header( "Location: index.php?page=plugins&result=0" );
+ exit;
+ }
+ }
+ }
+
+/**
+ * function to remove a non empty directory
+ *
+ * @param $dir directory address
+ * @return boolean
+ */
+function rrmdir( $dir ) {
+ if ( is_dir( $dir ) ) {
+ $objects = scandir( $dir );
+ foreach ( $objects as $object ) {
+ if ( $object != "." && $object != ".." ) {
+ if ( filetype( $dir . "/" . $object ) == "dir" ) rmdir( $dir . "/" . $object );
+ else unlink( $dir . "/" . $object );
+ }
+ }
+ reset( $objects );
+ return rmdir( $dir );
+ }
+ }
+
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php
new file mode 100644
index 000000000..1ea950d38
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/install_plugin.php
@@ -0,0 +1,306 @@
+ 0 ) )
+ {
+ $fileName = $_FILES["file"]["name"]; //the files name takes from the HTML form
+ $fileTmpLoc = $_FILES["file"]["tmp_name"]; //file in the PHP tmp folder
+ $dir = trim( $_FILES["file"]["name"], ".zip" );
+ $target_path = "../../ams_lib/plugins/$dir"; //path in which the zip extraction is to be done
+ $destination = "../../ams_lib/plugins/";
+
+ // scanning plugin folder if plugin with same name is already exists or not
+ $x = checkForUpdate( $dir, $destination, $fileTmpLoc, $temp_path );
+ if ( $x == '1' )
+ {
+ echo "update found";
+ exit();
+ }
+ else if ( $x == '2' )
+ {
+ echo "Plugin already exists with same name .";
+ exit();
+ }
+ else if ( $x == '3' )
+ {
+ echo "Update info is not present in the update";
+ exit();
+ }
+
+
+ // checking for the command to install plugin is given or not
+ if ( !isset( $_POST['install_plugin'] ) )
+ {
+ if ( ( $_FILES["file"]["type"] == 'application/zip' ) )
+ {
+ if ( move_uploaded_file( $fileTmpLoc, $temp_path . "/" . $fileName ) ) {
+ echo "$fileName upload is complete." . "";
+ exit();
+ }
+ else
+ {
+ echo "Error in uploading file.";
+ exit();
+ }
+ }
+ else
+ {
+ echo "Please select a file with .zip extension to upload.";
+ exit();
+ }
+ }
+ else
+ {
+
+ // calling function to unzip archives
+ if ( zipExtraction( $temp_path . "/" . $fileName , $destination ) )
+ {
+ if ( file_exists( $target_path . "/.info" ) )
+ {
+ $result = readPluginFile( ".info", $target_path );
+
+ // sending all info to the database
+ $install_result = array();
+ $install_result['FileName'] = $target_path;
+ $install_result['Name'] = $result['PluginName'];
+ $install_result['Type'] = $result['Type'];
+ if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) )
+ {
+ $install_result['Permission'] = 'admin';
+ }
+ else
+ {
+ $install_result['Permission'] = 'user';
+ }
+
+ $install_result['Info'] = json_encode( $result );
+
+ // connection with the database
+ $dbr = new DBLayer( "lib" );
+ $dbr -> insert( "plugins", $install_result );
+
+ // if everything is successfull redirecting to the plugin template
+ header( "Location: index.php?page=plugins&result=1" );
+ exit;
+ }
+ else
+ {
+ // file .info not exists
+ rmdir( $target_path );
+ header( "Location: index.php?page=install_plugin&result=2" );
+ exit;
+ }
+
+ } else
+ {
+ // extraction failed
+ header( "Location: index.php?page=install_plugin&result=0" );
+ exit;
+ }
+ }
+ }
+ else
+ {
+ echo "Please Browse for a file before clicking the upload button";
+ exit();
+ }
+ }
+ }
+
+/**
+ * function to unzip the zipped files
+ *
+ * @param $target_path path to the target zipped file
+ * @param $destination path to the destination
+ * @return boolean
+ */
+function zipExtraction( $target_path, $destination )
+ {
+ $zip = new ZipArchive();
+ $x = $zip -> open( $target_path );
+ if ( $x === true ) {
+ if ( $zip -> extractTo( $destination ) )
+ {
+ $zip -> close();
+ return true;
+ }
+ else
+ {
+ $zip -> close();
+ return false;
+ }
+ }
+ }
+
+/**
+ * function to read text files and extract
+ * the information into an array
+ *
+ * -----------------------------------------------------------
+ * format:
+ * -----------------------------------------------------------
+ * PluginName = Name of the plugin
+ * Version = version of the plugin
+ * Type = type of the plugin
+ * Description = Description of the plugin ,it's functionality
+ * -----------------------------------------------------------
+ *
+ * reads only files with name .info
+ *
+ * @param $fileName file to read
+ * @param $targetPath path to the folder containing .info file
+ * @return array containing above information in array(value => key)
+ */
+function readPluginFile( $fileName, $target_path )
+ {
+ $file_handle = fopen( $target_path . "/" . $fileName, "r" );
+ $result = array();
+ while ( !feof( $file_handle ) ) {
+ $line_of_text = fgets( $file_handle );
+ $parts = array_map( 'trim', explode( '=', $line_of_text, 2 ) );
+ @$result[$parts[0]] = $parts[1];
+ }
+ fclose( $file_handle );
+ return $result;
+ }
+
+/**
+ * function to check for updates or
+ * if the same plugin already exists
+ * also, if the update founds ,check for the update info in the .info file.
+ * Update is saved in the temp direcotry with pluginName_version.zip
+ *
+ * @param $fileName file which is uploaded in .zip extension
+ * @param $findPath where we have to look for the installed plugins
+ * @param $tempFile path for the temporary file
+ * @param $tempPath path where we have to store the update
+ * @return 2 if plugin already exists and update not found
+ * @return 3 if update info tag not found in .info file
+ */
+function checkForUpdate( $fileName, $findPath, $tempFile, $tempPath )
+ {
+ // check for plugin if exists
+ $file = scandir( $findPath );
+ foreach( $file as $key => $value )
+ {
+ if ( strcmp( $value, $fileName ) == 0 )
+ {
+ if ( !file_exists( $tempPath . "/test" ) )
+ {
+ mkdir( $tempPath . "/test" );
+ }
+
+ // extracting the update
+ if ( zipExtraction( $tempFile, $tempPath . "/test/" ) )
+ {
+ $result = readPluginFile( ".info", $tempPath . "/test/" . $fileName );
+
+ // check for the version for the plugin
+ $db = new DBLayer( "lib" );
+ $sth = $db -> select( "plugins", array( ':name' => $result['PluginName'] ), "Name = :name" );
+ $info = $sth -> fetch();
+ $info['Info'] = json_decode( $info['Info'] );
+
+ // the two versions from main plugin and the updated part
+ $new_version = explode( '.', $result['Version'] );
+ $pre_version = explode( '.', $info['Info'] -> Version );
+
+ // For all plugins we have used semantic versioning
+ // Format: X.Y.Z ,X->Major, Y->Minor, Z->Patch
+ // change in the X Y & Z values refer the type of change in the plugin.
+ // for initial development only Minor an Patch MUST be 0.
+ // if there is bug fix then there MUST be an increment in the Z value.
+ // if there is change in the functionality or addition of new functionality
+ // then there MUST be an increment in the Y value.
+ // When there is increment in the X value , Y and Z MUST be 0.
+ // comparing if there is some change
+ if ( !array_intersect( $new_version , $pre_version ) )
+ {
+ // removing the uploaded file
+ Plugincache :: rrmdir( $tempPath . "/test/" . $fileName );
+ return '2';
+ }
+ else
+ {
+ // check for update info if exists
+ if ( !array_key_exists( 'UpdateInfo', $result ) )
+ {
+ return '3'; //update info tag not found
+ }
+ else
+ {
+ // check if update already exists
+ if ( pluginUpdateExists( $info['Id'], $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip" ) )
+ {
+ echo "Update already exists";
+ exit;
+ }
+ else {
+ // removing the preivous update
+ $dbr = new DBLayer( "lib" );
+ $dbr -> delete( "updates", array( 'id' => $info['Id'] ), "PluginId=:id" );
+ // storing update in the temp directory
+ // format of update save
+ if ( move_uploaded_file( $tempFile, $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip" ) ) {
+ // setting update information in the database
+ $update['PluginId'] = $info['Id'];
+ $update['UpdatePath'] = $tempPath . "/" . trim( $fileName, ".zip" ) . "_" . $result['Version'] . ".zip";
+ $update['UpdateInfo'] = json_encode( $result );
+ $dbr -> insert( "updates", $update );
+ header( "Location: index.php?page=plugins&result=7" );
+ exit;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+/**
+ * Function to check for the update of a plugin already exists
+ *
+ * @param $pluginId id of the plugin for which update is available
+ * @param $updatePath path of the new update
+ * @return boolean if update for a plugin already exists or
+ * if update of same version is uploading
+ */
+function PluginUpdateExists( $pluginId, $updatePath )
+ {
+ $db = new DBLayer( 'lib' );
+ $sth = $db -> selectWithParameter( "UpdatePath", "updates", array( 'pluginid' => $pluginId ), "PluginId=:pluginid" );
+ $row = $sth -> fetch();
+ if ( $updatePath == $row['UpdatePath'] )
+ {
+ return true;
+ }
+ else
+ {
+ rmdir( $row['UpdatePath'] );
+ return false;
+ }
+ }
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php
new file mode 100644
index 000000000..1420572b1
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/update_plugin.php
@@ -0,0 +1,34 @@
+ executeWithoutParams( "SELECT * FROM plugins INNER JOIN updates ON plugins.Id=updates.PluginId Where plugins.Id=$id" );
+ $row = $sth -> fetch();
+
+ // replacing update in the database
+ Plugincache :: rrmdir( $row['FileName'] );
+ Plugincache :: zipExtraction( $row['UpdatePath'], rtrim( $row['FileName'], strtolower( $row['Name'] ) ) );
+
+ $db -> update( "plugins", array( 'Info' => $row['UpdateInfo'] ), "Id=$row[Id]" );
+
+ // deleting the previous update
+ $db -> delete( "updates", array( 'id' => $row['s.no'] ), "s.no=:id" );
+
+ header( "Location: index.php?page=plugins&result=8" );
+ exit;
+
+ }
+ }
+ }
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php
index 61bdb0278..1118b556f 100644
--- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins.php
@@ -1,45 +1,39 @@
init();
- print_r(plugin::$plugins);**/
-
- $pagination = new Pagination("SELECT * FROM plugins","lib",5,"Plugincache");
- $pageResult['plug']= Gui_Elements::make_table($pagination->getElements() , Array ("getId","getPluginName","getPluginVersion","getPluginPermission","getIsActive"), Array("id","plugin_name","plugin_version","plugin_permission","plugin_isactive"));
- $pageResult['links'] = $pagination->getLinks(5);
- $pageResult['lastPage'] = $pagination->getLast();
- $pageResult['currentPage'] = $pagination->getCurrent();
+ {
+ if ( Ticket_User :: isMod( unserialize( $_SESSION['ticket_user'] ) ) ) {
- global $INGAME_WEBPATH;
- $pageResult['ingame_webpath'] = $INGAME_WEBPATH;
+ $pagination = new Pagination( "SELECT * FROM plugins", "lib", 5, "Plugincache" );
+ $pageResult['plug'] = Gui_Elements :: make_table( $pagination -> getElements(), Array( "getId", "getPluginName", "getPluginType", "getPluginPermission", "getPluginStatus", "getPluginInfo" ), Array( "id", "plugin_name", "plugin_type", "plugin_permission", "plugin_status", "plugin_info" ) );
+ $pageResult['links'] = $pagination -> getLinks( 5 );
+ $pageResult['lastPage'] = $pagination -> getLast();
+ $pageResult['currentPage'] = $pagination -> getCurrent();
- //check if shard is online
- try{
- $dbs = new DBLayer("shard");
- $pageResult['shard'] = "online";
- }catch(PDOException $e){
+ global $INGAME_WEBPATH;
+ $pageResult['ingame_webpath'] = $INGAME_WEBPATH;
+
+ // check if shard is online
+ try {
+ $dbs = new DBLayer( "shard" );
+ $pageResult['shard'] = "online";
+ }
+ catch( PDOException $e ) {
$pageResult['shard'] = "offline";
- }
- return( $pageResult);
- }else{
- //ERROR: No access!
+ }
+ return( $pageResult );
+ } else {
+ // ERROR: No access!
$_SESSION['error_code'] = "403";
- header("Location: index.php?page=error");
- exit;
+ header( "Location: index.php?page=error" );
+ exit;
+ }
+
}
-
-}
-
-
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php
new file mode 100644
index 000000000..89d547860
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/plugins_update.php
@@ -0,0 +1,36 @@
+ getElements(), Array( "getId", "getPluginName", "getPluginInfo", "getUpdateInfo" ), Array( "id", "plugin_name", "plugin_info", "update_info" ) );
+ $pageResult['links'] = $pagination -> getLinks( 5 );
+ $pageResult['lastPage'] = $pagination -> getLast();
+ $pageResult['currentPage'] = $pagination -> getCurrent();
+
+ global $INGAME_WEBPATH;
+ $pageResult['ingame_webpath'] = $INGAME_WEBPATH;
+
+ // check if shard is online
+ try {
+ $dbs = new DBLayer( "shard" );
+ $pageResult['shard'] = "online";
+ }
+ catch( PDOException $e ) {
+ $pageResult['shard'] = "offline";
+ }
+ return( $pageResult );
+ } else {
+ // ERROR: No access!
+ $_SESSION['error_code'] = "403";
+ header( "Location: index.php?page=error" );
+ exit;
+ }
+ }
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/index.php b/code/ryzom/tools/server/ryzom_ams/www/html/index.php
index faf3488c6..e87c5dcd5 100644
--- a/code/ryzom/tools/server/ryzom_ams/www/html/index.php
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/index.php
@@ -1,126 +1,134 @@
getPermission();
+ } else {
+ // default permission
+ $return['permission'] = 0;
+ }
-//Set permission
-if(isset($_SESSION['ticket_user'])){
- $return['permission'] = unserialize($_SESSION['ticket_user'])->getPermission();
-}else{
- //default permission
- $return['permission'] = 0;
-}
+// hide sidebar + topbar in case of login/register
+if ( $page == 'login' || $page == 'register' || $page == 'logout' || $page == 'forgot_password' || $page == 'reset_password' ) {
+ $return['no_visible_elements'] = 'TRUE';
+ } else {
+ $return['no_visible_elements'] = 'FALSE';
+ }
-
-//hide sidebar + topbar in case of login/register
-if($page == 'login' || $page == 'register' || $page == 'logout' || $page == 'forgot_password' || $page == 'reset_password'){
- $return['no_visible_elements'] = 'TRUE';
-}else{
+// handle error page
+if ( $page == 'error' ) {
+ $return['permission'] = 0;
$return['no_visible_elements'] = 'FALSE';
-}
+ }
-//handle error page
-if($page == 'error'){
- $return['permission'] = 0;
- $return['no_visible_elements'] = 'FALSE';
-}
+// call to load hooks for the active plugins
+$hook_content = Plugincache :: loadHooks();
+foreach( $hook_content as $key => $value )
+ {
+ $return[$key] = $value;
+ }
-//load the template with the variables in the $return array
+// load the template with the variables in the $return array
helpers :: loadTemplate( $page , $return );
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php
index 5aea5c200..e8ca6d57a 100644
--- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php
@@ -160,14 +160,38 @@
DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` ;
CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`plugins` (
- `PluginId` INT(10) NOT NULL AUTO_INCREMENT,
- `PluginName` VARCHAR(11) NOT NULL,
- `PluginPermission` VARCHAR(5) NOT NULL,
- `PluginVersion` INT(11) NOT NULL,
- `IsActive` TINYINT(1) NOT NULL,
- PRIMARY KEY (`PluginId`) )
+ `Id` INT(10) NOT NULL AUTO_INCREMENT,
+ `FileName VARCHAR(255) NOT NULL,
+ `Name` VARCHAR(11) NOT NULL,
+ `Type` VARCHAR(12) NOT NULL,
+ `Owner` VARCHAR(25) NOT NULL,
+ `Permission` VARCHAR(5) NOT NULL,
+ `Status` INT(11) NOT NULL DEFAULT 0,
+ `Weight` INT(11) NOT NULL DEFAULT 0,
+ `Info` TEXT NULL DEFAULT NULL,
+ PRIMARY KEY (`Id`) )
ENGINE = InnoDB;
+ -- -----------------------------------------------------
+ -- Table `" . $cfg['db']['lib']['name'] ."`.`updates`
+ -- -----------------------------------------------------
+ DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`updates` ;
+
+ CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`updates` (
+ `s.no` int(10) NOT NULL AUTO_INCREMENT,
+ `PluginId` int(10) DEFAULT NULL,
+ `UpdatePath` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `UpdateInfo` text COLLATE utf8_unicode_ci,
+ PRIMARY KEY (`s.no`),
+ KEY `PluginId` (`PluginId`))
+ ENGINE=InnoDB;
+
+ -- -----------------------------------------
+ -- Constraints for table `updates`
+ -- -----------------------------------------
+ ALTER TABLE `" . $cfg['db']['lib']['name'] ."`.`updates`
+ ADD CONSTRAINT `updates_ibfk_1` FOREIGN KEY (`PluginId`) REFERENCES `plugins` (`Id`);
+
-- -----------------------------------------------------
-- Table `" . $cfg['db']['lib']['name'] ."`.`ticket`
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl
new file mode 100644
index 000000000..968d6cec4
--- /dev/null
+++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/install_plugin.tpl
@@ -0,0 +1,36 @@
+{block name=content}
+
+
{$ip_support}
+{$ip_success}
{$dp_error}
{$dp_success}
{$ac_success}
{$ac_error}
{$dc_success}
{$dc_error}
{$up_success}
{$up_install_success}
{$plugin_info}