From f8a92326edc0b3a4c885523c8c2929db367a0511 Mon Sep 17 00:00:00 2001 From: shubham_meena Date: Thu, 14 Aug 2014 22:20:05 +0530 Subject: [PATCH] BugFixes: achievements and API key management plugins --HG-- branch : Gsoc14-ryzomAppImprovements --- .../API_key_management/API_key_management.php | 47 +++--- .../API_key_management/templates/index.tpl | 2 +- .../plugins/Achievements/Achievements.php | 146 ++++++++++++------ .../plugins/Achievements/templates/index.tpl | 8 +- .../ryzom_ams/www/html/installer/libsetup.php | 2 +- 5 files changed, 134 insertions(+), 71 deletions(-) diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php index 1676f243a..27613e18b 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/API_key_management.php @@ -11,11 +11,13 @@ * @author shubham meena mentored by Matthew Lagoe */ - -// Global variables to store the data +// Global variable to store the data which is +// returned to the templates $return_set = array(); -$var_set = array(); +// Local variable to store data during +// functionalities of the hooks +$var_set = array(); /** * Display hook for api key management @@ -28,7 +30,7 @@ function api_key_management_hook_display() } /** - * Hook to validate the posted data + * Local Hook to validate the posted data */ function hook_validate( $var ) { @@ -70,9 +72,9 @@ function hook_variables() /** * Global Hook to create table of the API_key_management - * if not created.Contains the sql code + * if not created. + * Contains the sql code */ - function api_key_management_hook_create_tb() { $dbl = new DBLayer( "lib" ); @@ -157,18 +159,25 @@ function api_key_management_hook_load_db() $db = new DBLayer( 'lib' ); - // returns the regestered keys - $sth = $db -> select( 'ams_api_keys', array( 'user' => $_SESSION['user'] ), 'User = :user' ); - $row = $sth -> fetchAll(); - $return_set['api_keys'] = $row; - - // returns the characters with respect to the user id in the ring_tool->characters - $db = new DBLayer( 'ring' ); - $sth = $db -> selectWithParameter( 'char_name', 'characters' , array(), '1' ); - $row = $sth -> fetchAll(); - $return_set['characters'] = $row; - - } + if ( isset( $_SESSION['user'] ) ) + { + // returns the registered keys + $sth = $db -> select( 'ams_api_keys', array( 'user' => $_SESSION['user'] ), 'User = :user' ); + $row = $sth -> fetchAll(); + $return_set['api_keys'] = $row; + + // fetch the character from the array to compare + $com = array_column( $return_set['api_keys'], 'UserCharacter' ); + + // returns the characters with respect to the user id in the ring_tool->characters + $db = new DBLayer( 'ring' ); + $sth = $db -> selectWithParameter( 'char_name', 'characters' , array(), '1' ); + $row = $sth -> fetch(); + + // loop through the character list and remove the character if already have an api key + $return_set['characters'] = array_diff( $row, $com ); + } + } /** * Global Hook to update or delete the data from db @@ -189,7 +198,6 @@ function api_key_management_hook_update_db() header( "Location: index.php?page=layout_plugin&&name=API_key_management&&success=2" ); exit; } - } /** @@ -202,5 +210,4 @@ function api_key_management_hook_return_global() { global $return_set; return $return_set; - } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl index eac902aae..1f6fea336 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/API_key_management/templates/index.tpl @@ -48,7 +48,7 @@
diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php index 943981680..79c117893 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/Achievements.php @@ -15,10 +15,13 @@ */ -// Global variables to store the data +// Global variable to store the data which is +// returned to the templates $return_set = array(); -$var_set = array(); +// Local variable to store data during +// functionalities of the hooks +$var_set = array(); /** * Display hook for Achievements plugin @@ -28,26 +31,64 @@ function achievements_hook_display() global $return_set; // to display plugin name in menu bar $return_set['menu_display'] = 'Achievements'; - } + } /** * Local Hook to get database content * which is called by the global hook * by passing a parameter * + * This hook returns the api keys registerd with + * the logged in user + * * @param $data array with respective information * @return $row extracted db content wrt $data */ function hook_get_db_content( $data ) { - $db = new DBLayer( 'lib' ); - $sth = $db -> select( 'ams_api_keys', $data , 'User = :User AND UserCharacter = :UserCharacter' ); $row = $sth -> fetchAll(); - return $row; - + } + +/** + * Local Hook to get database content + * which is called by the global hook + * by passing a parameter + * + * This hook returns the id of the character + * whose achivements we have to get + * + * @param $data array with respective information + * @return $row extracted db content wrt $data + */ +function hook_get_char_id( $data ) + { + // returns the character id with respect to the character name in the ring_tool->characters + $db = new DBLayer( 'ring' ); + $sth = $db -> selectWithParameter( 'char_id', 'characters' , array( 'char_name' => $data ), 'char_name=:char_name' ); + $row = $sth -> fetch(); + return $row['char_id']; + } + +/** + * Local Hook to get database content + * which is called by the global hook + * by passing a parameter + * + * Hook to get the player stats of the character + * + * @param $data array with respective information + * @return $row extracted db content wrt $data + */ +function hook_get_player_stat( $data ) + { + // returns the character id with respect to the character name in the ring_tool->characters + $db = new DBLayer( 'webig' ); + $sth = $db -> select( 'players' , array( 'name' => $data ), 'name=:name' ); + $row = $sth -> fetch(); + return $row; } /** @@ -56,27 +97,44 @@ function hook_get_db_content( $data ) */ function hook_variable_set() { - global $var_set; - $var_set['character'] = $_POST['Character']; - - // get db content for variable set - $row = hook_get_db_content( array( 'User' => $_SESSION['user'], 'UserCharacter' => $var_set['character'] ) ); - - // access key automatically taken from the database wrt user and character - @$var_set['app_key'] = $row['AccessToken']; - - // here you can set the host where this plugin is set - $var_set['host'] = 'localhost'; - - // here you can set what you are looking for - // when you are requesting encoded in json - @$var_set['items'] = json_encode( array( 'Task' => 'Achievements', 'Character' => $var_set['character'] ) ); - - // url where we have to make request for achievements - // it sends get parameter search(what to search) and format(in which format data exchange takes place) - $var_set['url'] = 'app.domain.org?search=' . $var_set['items'] . '&&format=json'; - - } + global $return_set; + global $var_set; + if ( isset( $_POST['Character'] ) && !empty( $_POST['Character'] ) ) + { + $var_set['character'] = $_POST['Character']; + + // get char id from ring_open table + if ( $var_set['character'] != 'All Characters' ) + { + $var_set['char_id'] = hook_get_char_id( $var_set['character'] ); + + } + + // get db content for variable set + $row = hook_get_db_content( array( 'User' => $_SESSION['user'], 'UserCharacter' => $var_set['character'] ) ); + + // access key automatically taken from the database wrt user and character + @$var_set['app_key'] = $row['AccessToken']; + + // here you can set the host where this plugin is set + $var_set['host'] = 'localhost'; + + // here we get the stats of the character + $ref_set = hook_get_player_stat( $var_set['character'] ); + + // here we have set items that are required to get the achivements + // these are player stats from webig->players table + @$var_set['items'] = json_encode( array( 'dev_shard' => $ref_set['dev_shard'] , 'name' => $ref_set['name'] , 'cid' => $ref_set['cid'] , 'lang' => 'en' , 'translater_mode' => '', 'last_played_date' => $ref_set['last_login'] ) ); + + // url where we have to make request for achievements + // it sends get parameter search(what to search) and format(in which format data exchange takes place) + $var_set['url'] = 'http://localhost6/?search=achievements&&format=json'; + } + else + { + $return_set['no_char'] = "Please Generate key for a character before requesting for achievements"; + } + } /** * Global Hook to interact with the REST api @@ -99,12 +157,11 @@ function achievements_hook_call_rest() if ( isset( $_POST['get_data'] ) ) { hook_variable_set(); - - $rest_api = new Rest_Api(); - $ach_data = $rest_api -> request( $var_set['url'], $var_set['app_key'], $var_set['host'] ); - print_r( $ach_data ); - - $return_set['char_achievements'] = json_decode( $ach_data ); + // here we make the REST connection + $rest_api = new Rest_Api(); + $ach_data = $rest_api -> request( $var_set['url'], $var_set['app_key'], $var_set['host'], $var_set['items'] ); + // here we store the response we get from the server + $return_set['char_achievements'] = $ach_data ; } } @@ -119,14 +176,16 @@ function achievements_hook_get_db() { global $return_set; - $db = new DBLayer( 'lib' ); - - // getting content for selecting characters - $sth = $db -> selectWithParameter( 'UserCharacter', 'ams_api_keys', array( 'User' => $_SESSION['user'] ) , 'User = :User' ); - $row = $sth -> fetchAll(); - $retur_set['Character'] = $row; - - } + if ( isset( $_SESSION['user'] ) ) + { + $db = new DBLayer( 'lib' ); + + // getting content for selecting characters + $sth = $db -> selectWithParameter( 'UserCharacter', 'ams_api_keys', array( 'User' => $_SESSION['user'] ) , 'User = :User' ); + $row = $sth -> fetch(); + $return_set['Character'] = $row; + } + } /** * Global Hook to return global variables which contains @@ -138,5 +197,4 @@ function achievements_hook_return_global() { global $return_set; return $return_set; - - } + } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl index a83acd359..e33ac3590 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/plugins/Achievements/templates/index.tpl @@ -11,10 +11,8 @@ - - {if isset($smarty.get.success) and $smarty.get.success eq '1'}

Key added successfully

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

Key deleted successfully

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

{$hook_info.Achievements.no_char}

{/if}
{$hook_info.Achievements.char_achievements}
@@ -49,8 +47,8 @@
diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php index c93310c55..6fb5981d3 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/installer/libsetup.php @@ -198,7 +198,7 @@ INSERT INTO `plugins` (`Id`, `FileName`, `Name`, `Type`, `Owner`, `Permission`, `Status`, `Weight`, `Info`) VALUES (1, '../../ams_lib/plugins/API_key_management', 'API_key_management', 'automatic', '', 'admin', 1, 0, '{\"PluginName\":\"API Key Management\",\"Description\":\"Provides public access to the API''s by generating access tokens.\",\"Version\":\"1.0.0\",\"Type\":\"automatic\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/API_key_management\\/templates\\/index.tpl\",\"\":null}'), -(2, '../../ams_lib/plugins/Achievements', 'Achievements', 'Manual', '', 'admin', 1, 0, '{\"PluginName\":\"Achievements\",\"Description\":\"Returns the achivements of a user with respect to the character =.\",\"Version\":\"1.0.0\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/Achievements\\/templates\\/index.tpl\",\"Type\":\"Manual\",\"\":null}'); +(2, '../../ams_lib/plugins/Achievements', 'Achievements', 'Manual', '', 'admin', 0, 0, '{\"PluginName\":\"Achievements\",\"Description\":\"Returns the achivements of a user with respect to the character =.\",\"Version\":\"1.0.0\",\"TemplatePath\":\"..\\/..\\/..\\/ams_lib\\/plugins\\/Achievements\\/templates\\/index.tpl\",\"Type\":\"Manual\",\"\":null}'); -- -----------------------------------------------------