diff --git a/admin/ws_checker.php b/admin/ws_checker.php new file mode 100644 index 000000000..a95f4c8b8 --- /dev/null +++ b/admin/ws_checker.php @@ -0,0 +1,459 @@ + 0 and hit desc order */ + , 'recent' /* recent = Date_available desc order */ + , 'highrated' /* avg_rate > 0 and desc order */ + , 'oldest' /* Date_available asc order */ + , 'lessviewed' /* hit asc order */ + , 'lowrated' /* avg_rate asc order */ + , 'undescribed' /* description missing */ + , 'unnamed' /* new name missing */ + , 'portraits' /* width < height (portrait oriented) */ + , 'landscapes' /* width > height (landscape oriented) */ + , 'squares' /* width ~ height (square form) */ +); +} + +function expand_id_list($ids) +{ + $tid = array(); + foreach ( $ids as $id ) + { + if ( is_numeric($id) ) + { + $tid[] = (int) $id; + } + else + { + $range = explode( '-', $id ); + if ( is_numeric($range[0]) and is_numeric($range[1]) ) + { + $from = min($range[0],$range[1]); + $to = max($range[0],$range[1]); + for ($i = $from; $i <= $to; $i++) + { + $tid[] = (int) $i; + } + } + } + } + $result = array_unique ($tid); // remove duplicates... + sort ($result); + return $result; +} + +function check_target($list) +{ + if ( $list !== '' ) + { + $type = explode('/',$list); // Find type list + if ( !in_array($type[0],array('list','cat','tag') ) ) + { + $type[0] = 'list'; // Assume an id list + } + $ids = explode( ',',$type[1] ); + $list = $type[0] . '/'; + + // 1,2,21,3,22,4,5,9-12,6,11,12,13,2,4,6, + + $result = expand_id_list( $ids ); + + // 1,2,3,4,5,6,9,10,11,12,13,21,22, + // I would like + // 1-6,9-13,21-22 + $serial[] = $result[0]; // To be shifted + foreach ($result as $k => $id) + { + $next_less_1 = (isset($result[$k + 1]))? $result[$k + 1] - 1:-1; + if ( $id == $next_less_1 and end($serial)=='-' ) + { // nothing to do + } + elseif ( $id == $next_less_1 ) + { + $serial[]=$id; + $serial[]='-'; + } + else + { + $serial[]=$id; // end serie or non serie + } + } + $null = array_shift($serial); // remove first value + $list .= array_shift($serial); // add the real first one + $separ = ','; + foreach ($serial as $id) + { + $list .= ($id=='-') ? '' : $separ . $id; + $separ = ($id=='-') ? '-':','; // add comma except if hyphen + } + } + return $list; +} + +// Next evolution... +// Out of parameter WS management +// The remainer objective is to check +// - Does Web Service working properly? +// - Does any access return something really? +// Give a way to check to the webmaster... +// These questions are one of module name explainations (checker). + +if((!defined("PHPWG_ROOT_PATH")) or (!$conf['allow_web_services'])) +{ + die('Hacking attempt!'); +} +include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); + +// +-----------------------------------------------------------------------+ +// | Check Access and exit when user status is not ok | +// +-----------------------------------------------------------------------+ +check_status(ACCESS_ADMINISTRATOR); + + +// FIXME would be in migration process but could stay here +// Config parameters +if (!isset($conf['ws_status'])) +{ + $conf['ws_status'] = false; + + $query = ' + INSERT INTO '.CONFIG_TABLE.' + (param,value,comment) + VALUES + (\'ws_status\', \'false\', \'Web Service status\' ) + ;'; + pwg_query($query); +} + +// accepted queries +$req_type_list = official_req(); + + +//--------------------------------------------------------- update informations + +// Is status temporary changed? +if (isset($_POST['wss_submit'])) +{ + $ws_status = get_boolean( $_POST['ws_status'] ); // Requested status + $ws_update = $lang['ws_success_upd']; // Normal update + if ($conf['allow_web_services'] == false and $ws_status == true ) + { /* Set true is disallowed */ + $ws_status = false; + $ws_update = $lang['ws_disallowed']; + } + if ( $ws_status !== true and $ws_status !== false ) + { /* Avoiding SQL injection by no change */ + $ws_status = $conf['ws_status']; + } + if ($conf['ws_status'] == $ws_status) + { + $ws_update = $lang['ws_disallowed']; + } + else + { + $query = ' +UPDATE '.CONFIG_TABLE.' SET + value = \''.boolean_to_string($ws_status).'\' +WHERE param = \'ws_status\' + AND value <> \''.boolean_to_string($ws_status).'\' +;'; + pwg_query($query); + $conf['ws_status'] = $ws_status; + } + $template->assign_block_vars( + 'update_result', + array( + 'UPD_ELEMENT'=> $lang['ws_set_status'].': '.$ws_update, + ) + ); +} + +// Next, is a new access required? + +if (isset($_POST['wsa_submit'])) +{ +// Check $_post +$add_partner = htmlspecialchars( $_POST['add_partner'], ENT_QUOTES); +$add_access = check_target( $_POST['add_access']) ; +$add_start = ( is_numeric($_POST['add_start']) ) ? $_POST['add_start']:0; +$add_end = ( is_numeric($_POST['add_end']) ) ? $_POST['add_end']:0; +$add_request = ( ctype_alpha($_POST['add_request']) ) ? + $_POST['add_request']:''; +$add_high = ( $_POST['add_high'] == 'true' ) ? 'true':'false'; +$add_normal = ( $_POST['add_normal'] == 'true' ) ? 'true':'false'; +$add_limit = ( is_numeric($_POST['add_limit']) ) ? $_POST['add_limit']:1; +$add_comment = htmlspecialchars( $_POST['add_comment'], ENT_QUOTES); +if ( strlen($add_partner) < 8 ) +{ +} + $query = ' +INSERT INTO '.WEB_SERVICES_ACCESS_TABLE.' +( `name` , `access` , `start` , `end` , `request` , + `high` , `normal` , `limit` , `comment` ) +VALUES (' . " + '$add_partner', '$add_access', + ADDDATE( NOW(), INTERVAL $add_start DAY), + ADDDATE( NOW(), INTERVAL $add_end DAY), + '$add_request', '$add_high', '$add_normal', '$add_limit', '$add_comment' );"; + + pwg_query($query); + + $template->assign_block_vars( + 'update_result', + array( + 'UPD_ELEMENT'=> $lang['ws_adding_legend'].$lang['ws_success_upd'], + ) + ); +} + +// Next, Update selected access +if (isset($_POST['wsu_submit'])) +{ + $upd_end = ( is_numeric($_POST['upd_end']) ) ? $_POST['upd_end']:0; + $settxt = ' end = ADDDATE(NOW(), INTERVAL '. $upd_end .' DAY)'; + + if ((isset($_POST['selection'])) and (trim($settxt) != '')) + { + $uid = (int) $_POST['selection']; + $query = ' + UPDATE '.WEB_SERVICES_ACCESS_TABLE.' + SET '.$settxt.' + WHERE id = '.$uid.'; '; + pwg_query($query); + $template->assign_block_vars( + 'update_result', + array( + 'UPD_ELEMENT'=> $lang['ws_update_legend'].$lang['ws_success_upd'], + ) + ); + } else { + $template->assign_block_vars( + 'update_result', + array( + 'UPD_ELEMENT'=> $lang['ws_update_legend'].$lang['ws_failed_upd'], + ) + ); + } +} +// Next, Delete selected access + +if (isset($_POST['wsX_submit'])) +{ + if ((isset($_POST['delete_confirmation'])) + and (isset($_POST['selection']))) + { + $uid = (int) $_POST['selection']; + $query = 'DELETE FROM '.WEB_SERVICES_ACCESS_TABLE.' + WHERE id = '.$uid.'; '; + pwg_query($query); + $template->assign_block_vars( + 'update_result', + array( + 'UPD_ELEMENT'=> $lang['ws_delete_legend'].$lang['ws_success_upd'], + ) + ); + } else { + $template->assign_block_vars( + 'update_result', + array( + 'UPD_ELEMENT'=> $lang['Not selected / Not confirmed'] + .$lang['ws_failed_upd'], + ) + ); + } +} + + +$ws_status = $conf['ws_status']; +$template->assign_vars( + array( + 'L_CURRENT_STATUS' => ( $ws_status == true ) ? + $lang['ws_enable']:$lang['ws_disable'], + 'STATUS_YES' => ( $ws_status == true ) ? '':'checked', + 'STATUS_NO' => ( $ws_status == true ) ? 'checked':'', + 'DEFLT_HIGH_YES' => '', + 'DEFLT_HIGH_NO' => 'checked', + 'DEFLT_NORMAL_YES' => '', + 'DEFLT_NORMAL_NO' => 'checked', + 'U_HELP' => PHPWG_ROOT_PATH.'popuphelp.php?page=web_service', + ) + ); + +// Build where +$where = ''; +$order = ' ORDER BY `id` DESC' ; + +$query = ' +SELECT * + FROM '.WEB_SERVICES_ACCESS_TABLE.' +WHERE 1=1 ' +.$where. +' ' +.$order. +';'; +$result = pwg_query($query); +$acc_list = mysql_num_rows($result); +$result = pwg_query($query); +// +-----------------------------------------------------------------------+ +// | template init | +// +-----------------------------------------------------------------------+ + +$template->set_filenames( + array( + 'ws_checker' => 'admin/ws_checker.tpl' + ) + ); + +$checked = 'checked="checked"'; +$selected = 'selected="selected"'; +$num=0; +if ( $acc_list > 0 ) +{ + $template->assign_block_vars( + 'acc_list', array() ); +} + +// Access List +while ($row = mysql_fetch_array($result)) +{ + $num++; + $template->assign_block_vars( + 'acc_list.access', + array( + 'CLASS' => ($num % 2 == 1) ? 'row1' : 'row2', + 'ID' => $row['id'], + 'NAME' => + (is_adviser()) ? '*********' : $row['name'], + 'ACCESS' => $row['access'], + 'START' => $row['start'], + 'END' => $row['end'], + 'FORCE' => $row['request'], + 'HIGH' => $row['high'], + 'NORMAL' => $row['normal'], + 'LIMIT' => $row['limit'], + 'COMMENT' => $row['comment'], + 'SELECTED' => '', + ) + ); +} + +$template->assign_block_vars( + 'add_request', + array( + 'VALUE'=> '', + 'CONTENT' => '', + 'SELECTED' => $selected, + ) +); +foreach ($req_type_list as $value) { + + $template->assign_block_vars( + 'add_request', + array( + 'VALUE'=> $value, + 'CONTENT' => $lang['ws_'.$value], + 'SELECTED' => '', + ) + ); +} + +$columns = array ( + 'ID' => 'id', + 'ws_KeyName' => 'name', + 'ws_Access' => 'ws_access', + 'ws_Start' => 'ws_start', + 'ws_End' => 'ws_end', + 'ws_Request' => 'ws_request', + 'ws_High' => 'ws_high', + 'ws_Normal' => 'ws_normal', + 'ws_Limit' => 'ws_limit', + 'ws_Comment' => 'ws_comment', +); + +foreach ($conf['ws_allowed_limit'] as $value) { + $template->assign_block_vars( + 'add_limit', + array( + 'VALUE'=> $value, + 'CONTENT' => $value, + 'SELECTED' => ($conf['ws_allowed_limit'][0] == $value) ? $selected:'', + ) + ); +} + +// Postponed Start Date +// By default 0, 1, 2, 3, 5, 7, 14 or 30 days +foreach ($conf['ws_postponed_start'] as $value) { + $template->assign_block_vars( + 'add_start', + array( + 'VALUE'=> $value, + 'CONTENT' => $value, + 'SELECTED' => ($conf['ws_postponed_start'][0] == $value) ? $selected:'', + ) + ); +} + +// Durations (Allowed Web Services Period) +// By default 10, 5, 2, 1 year(s) or 6, 3, 1 month(s) or 15, 10, 7, 5, 1, 0 day(s) +foreach ($conf['ws_durations'] as $value) { + $template->assign_block_vars( + 'add_end', + array( + 'VALUE'=> $value, + 'CONTENT' => $value, + 'SELECTED' => ($conf['ws_durations'][3] == $value) ? $selected:'', + ) + ); + if ( $acc_list > 0 ) + { + $template->assign_block_vars( + 'acc_list.upd_end', + array( + 'VALUE'=> $value, + 'CONTENT' => $value, + 'SELECTED' => ($conf['ws_durations'][3] == $value) ? $selected:'', + ) + ); + } +} + +//----------------------------------------------------------- sending html code + +$template->assign_var_from_handle('ADMIN_CONTENT', 'ws_checker'); +?> diff --git a/language/en_UK.iso-8859-1/help/web_service.html b/language/en_UK.iso-8859-1/help/web_service.html new file mode 100644 index 000000000..63bd9522f --- /dev/null +++ b/language/en_UK.iso-8859-1/help/web_service.html @@ -0,0 +1,56 @@ +

Web Service Checker

+ +

This page let you define all parameters for your web service.

+ +
+ +
Environment temporary setting
+ +
If Web Service are available (Advanced configuration => $conf['allow_web_services']) + then you are able to set it by administration interface as enable or disable when you want.
+ +
Confidential partner key (Mandatory)
+ +
Unique key to share with your partner. Keep that one long enough (e.g. 8 characters). + Keep it as complex enough (mixed figures, upper and lower case characters, special characters). + For example: "P!e2r!k Le G@2l". + + Hidden to anyone in adviser mode. + +
Target (Optional)
+ +
Can be an image id list like that: + all id list will be reduced to the min list as: +
+ +
Restrict access (Optional)
+ +
If you want to limit your partner to a specific request.
+ +
Returned images limit
+ +
Images limit count: to return to your partner for each request.
+ +
Postponed availability
+ +
Can start in few days from now. Remember Web Service would be available and enable.
+ +
Duration
+ +
From now, set availability in days. If you postpone over the duration, the service would never be available.
+ +
High / Normal
+ +
Result contains description for high resolution picture (pwg_high). Normal size picture as well. + If both are set to No. Only thumbnail information will be sent to your partner.
+ +
Comment
+ +
Let you describe who's behind this Web Service, be clear enough. + Don't forget that if someone is Admin and Adviser on your website. He can read this comment zone.
+ +
diff --git a/language/fr_FR.iso-8859-1/help/web_service.html b/language/fr_FR.iso-8859-1/help/web_service.html new file mode 100644 index 000000000..aa9e7128b --- /dev/null +++ b/language/fr_FR.iso-8859-1/help/web_service.html @@ -0,0 +1,57 @@ +

Web Service Checker

+ +

Cette page permet de définir les paramètres de votre web service.

+ +
+ +
Modification temporaire de l'Environnement
+ +
Si le Service Web est autorisé (Configuration avancée => $conf['allow_web_services']) + alors vous avez la possibilité de modifier par l'interface d'Administration, l'environnement en Actif ou Inactif quand vous le souhaitez.
+ +
Clé confidentielle (Obligatoire)
+ +
Clé unique à partager avec votre partenaire. Doit être assez longue ( 8 caractères par exemple), + doit être assez complexe (avec des chiffres, des majuscules et minuscules, et des caractères spéciaux). + Par exemple: "P!e2r!k Le G@2l". + + Ce champ est masqué en mode conseillé. + +
Cible (Facultatif)
+ +
Soit une liste d'identifiants d'images ceci: + Tout liste d'identifiants sera réduite a sa plus simple expression: + +
+ +
Accès restreint (Facultatif)
+ +
Si vous souhaitez limiter votre partenaire à un type de requête particulier.
+ +
Limite de transmision
+ +
Nombre d'images maximum adressées à votre partenaire à chacune de ses requêtes.
+ +
Report de disponibilité
+ +
La disponibilité peut être décalée de quelques jours à compter de cet instant. N'oubliez pas que les Services doivent être autorisés et actifs le jour venu.
+ +
Durée
+ +
A partir de maintenant, indiquez la disponibilité en jours. Si vous reportez la disponibilité au delà de sa durée, le service ne devrait jamais être rendu.
+ +
High / Normal
+ +
Résultat containdra les informations relatives aux images en haute résolution (pwg_high). Les images Normal(es) suivent le même principe. + Si les deux sont à "Non", seulement les informations des miniatures seront adressées à votre partenaire.
+ +
Commentaire
+ +
Vous permet de décrire qui se trouve derrière ce Service Web, de façon plus claire pour vous. + N'oubliez pas qu'un Administrateur en mode conseiller peut lire le contenu de ce commentaire.
+ +
diff --git a/template/yoga/admin/ws_checker.tpl b/template/yoga/admin/ws_checker.tpl new file mode 100644 index 000000000..8bc336d85 --- /dev/null +++ b/template/yoga/admin/ws_checker.tpl @@ -0,0 +1,298 @@ + + +
+ +

{lang:title_wscheck} - {lang:web_services}

+
+ + + + + + + +
+ +
+ {lang:ws_set_status} : {L_CURRENT_STATUS} + + + + + + +
+ {lang:ws set to}       +       + + +   + + +
+
+
+ + + +
+ +
+ {lang:ws_adding_legend} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + ({lang:Access: see help text for more}) + +
+ + + + ({lang:ws_Request}) +
+ + + +
+ + + +
+ + + +
+ +
+
+       + +
+ +
+
+       + +
+ +
+
+ +
+ + +
+
+
+ + + +
+ + + + + + + +
+ {lang:ws_update_legend} + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 {lang:ws_KeyName}{lang:ws_Access}{lang:ws_Start}{lang:ws_End}{lang:ws_Request}{lang:ws_High}{lang:ws_Normal}{lang:ws_Limit}{lang:ws_Comment}
+ + {acc_list.access.ACCESS}{acc_list.access.START}{acc_list.access.END}{acc_list.access.FORCE}{acc_list.access.HIGH}{acc_list.access.NORMAL}{acc_list.access.LIMIT}{acc_list.access.COMMENT}
+ + + + + + +
+ {lang:ws_delete_legend} + + + +
+
+ + + + + +
+ + + + + + + ({lang:Web Services availability duration in days}) +
+ +
+
+