Changeset 28153 for extensions/rv_autocomplete/admin/functions.inc.php
- Timestamp:
- Apr 10, 2014, 11:26:00 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/rv_autocomplete/admin/functions.inc.php
r27564 r28153 3 3 function rvac_invalidate_cache() 4 4 { 5 6 7 8 9 10 11 5 global $conf; 6 conf_update_param('rvac_version', ++$conf['rvac_version'] ); 7 if (rand()%10==0) 8 { 9 foreach (glob(PHPWG_ROOT_PATH.PWG_COMBINED_DIR.'acds-*.js') as $file) 10 @unlink($file); 11 } 12 12 } 13 13 14 14 function rvac_custom_link(&$suggestion, $roots) 15 15 { 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 16 $url = $suggestion['url']; 17 if (empty($url)) 18 { 19 $q = $suggestion['name']; 20 if ( ($pos=strpos($q,'\\')) !== false ) 21 { 22 $q = substr($q, 0, $pos); 23 } 24 } 25 elseif (strncmp($url,'q=',2)==0) 26 { 27 $q = substr($url,2); 28 } 29 else 30 { 31 foreach( $roots as $k => $root) 32 $url = str_replace('$'.$k.'/', $root, $url); 33 } 34 35 if (isset($q)) 36 { 37 if ( ($pos=strpos($q,' ')) !== false ) 38 { 39 $q = '"'.$q.'"'; 40 } 41 $url = get_root_url().'qsearch.php?q='.rawurlencode($q); 42 } 43 44 $suggestion['U_LINK'] = $url; 45 return $suggestion; 46 46 } 47 47 … … 49 49 { 50 50 global $conf; 51 52 53 54 51 $srv = $srv_arr[0]; 52 include_once( dirname(__FILE__).'/../functions.inc.php' ); 53 $srv->addMethod('rvac.addCustom', 'rv_ac_ws_add_custom_suggestion', 54 array( 55 55 'name' => array(), 56 56 'counter' => array('default'=>0), 57 57 'url' => array('default'=>''), 58 58 'level' => array('default'=>min($conf['available_permission_levels']), 'maxValue'=>max($conf['available_permission_levels']),'type'=>WS_TYPE_INT|WS_TYPE_POSITIVE), 59 60 61 62 63 64 65 66 67 59 ), 60 '','', array('admin_only'=>true, 'post_only'=>true)); 61 62 $srv->addMethod('rvac.modCustom', 'rv_ac_ws_mod_custom_suggestion', 63 array( 64 'id' => array(), 65 'name' => array('flags' => WS_PARAM_OPTIONAL), 66 'counter' => array('flags' => WS_PARAM_OPTIONAL), 67 'url' => array('flags' => WS_PARAM_OPTIONAL), 68 68 'level' => array('flags' => WS_PARAM_OPTIONAL, 'maxValue'=>max($conf['available_permission_levels']),'type'=>WS_TYPE_INT|WS_TYPE_POSITIVE), 69 ), 70 '','', array('admin_only'=>true, 'post_only'=>true)); 71 72 $srv->addMethod('rvac.delCustom', 'rv_ac_ws_del_custom_suggestion', 73 array('id'), 74 '','', array('admin_only'=>true, 'post_only'=>true)); 69 ), 70 '','', array('admin_only'=>true, 'post_only'=>true)); 71 72 $srv->addMethod('rvac.delCustom', 'rv_ac_ws_del_custom_suggestion', 73 array('id'), 74 '','', array('admin_only'=>true, 'post_only'=>true)); 75 76 77 $srv->addMethod('rvac.addVariant', 'rv_ac_ws_add_variant', 78 array( 79 'in' => array(), 80 'type' => array(), 81 'out' => array(), 82 'comment' => array('flags' => WS_PARAM_OPTIONAL), 83 ), 84 '','', array('admin_only'=>true, 'post_only'=>true)); 85 86 $srv->addMethod('rvac.modVariant', 'rv_ac_ws_mod_variant', 87 array( 88 'key' => array(), 89 'in' => array(), 90 'type' => array(), 91 'out' => array(), 92 'comment' => array('flags' => WS_PARAM_OPTIONAL), 93 ), 94 '','', array('admin_only'=>true, 'post_only'=>true)); 95 96 $srv->addMethod('rvac.delVariant', 'rv_ac_ws_del_variant', 97 array( 98 'key' => array(), 99 ), 100 '','', array('admin_only'=>true, 'post_only'=>true)); 101 75 102 } 76 103 77 104 function rv_ac_ws_add_custom_suggestion($params, $service) 78 105 { 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 106 $name = trim($params['name']); 107 if (empty($name)) 108 return new PwgError(400, 'Bad name'); 109 110 $insert = array('name'=>$name); 111 112 if (isset($params['counter'])) 113 $insert['counter'] = intval($params['counter']); 114 if ( !empty($params['url']) ) 115 $insert['url'] = $params['url']; 116 if ( isset($params['level']) ) 117 $insert['level'] = $params['level']; 118 119 mass_inserts(RVAC_SUGGESTIONS, array_keys($insert), array($insert)); 120 $id = pwg_db_insert_id(RVAC_SUGGESTIONS); 121 122 rvac_invalidate_cache(); 123 $row = pwg_db_fetch_assoc( pwg_query('SELECT * FROM '.RVAC_SUGGESTIONS.' WHERE id='.$id) ); 124 rvac_custom_link($row, rvac_get_url_roots()); 125 return $row; 99 126 } 100 127 101 128 function rv_ac_ws_mod_custom_suggestion($params, $service) 102 129 { 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 130 $id = intval($params['id']); 131 $update = array(); 132 133 if (!empty($params['name'])) 134 $update['name'] = $params['name']; 135 if (isset($params['counter'])) 136 $update['counter'] = intval($params['counter']); 137 if (isset($params['url'])) 138 $update['url'] = $params['url']; 139 if ( isset($params['level']) ) 140 $update['level'] = $params['level']; 141 142 single_update(RVAC_SUGGESTIONS, 143 $update, 144 array('id' => $id) 145 ); 146 $changes = pwg_db_changes(); 147 148 if ($changes) 149 rvac_invalidate_cache(); 150 151 $row = pwg_db_fetch_assoc( pwg_query('SELECT * FROM '.RVAC_SUGGESTIONS.' WHERE id='.$id) ); 152 rvac_custom_link($row, rvac_get_url_roots()); 153 return $row; 127 154 } 128 155 129 156 function rv_ac_ws_del_custom_suggestion($params, $service) 130 157 { 131 $id = intval($params['id']); 132 $q = 'DELETE FROM '.RVAC_SUGGESTIONS.' WHERE id='.$id; 133 pwg_query($q); 134 $changes = pwg_db_changes(); 135 if ($changes) 136 rvac_invalidate_cache(); 137 return $changes; 138 } 139 158 $id = intval($params['id']); 159 $q = 'DELETE FROM '.RVAC_SUGGESTIONS.' WHERE id='.$id; 160 pwg_query($q); 161 $changes = pwg_db_changes(); 162 if ($changes) 163 rvac_invalidate_cache(); 164 return $changes; 165 } 166 167 168 169 170 function rvac_load_variant_rules() 171 { 172 global $conf; 173 $file=PHPWG_ROOT_PATH.$conf['data_location'].'plugins/autocomplete_variants.dat'; 174 175 $data = @unserialize( file_get_contents($file)); 176 if ($data === false) 177 return array(); 178 return $data; 179 } 180 181 function rvac_save_variant_rules($rules, $callback = null) 182 { 183 global $conf; 184 $file=PHPWG_ROOT_PATH.$conf['data_location'].'plugins/autocomplete_variants.dat'; 185 $save = serialize($rules); 186 if (@file_put_contents($file, $save)===false) 187 { 188 mkgetdir(dirname($file)); 189 file_put_contents($file, $save); 190 } 191 192 $rmap = $amap = array(); 193 foreach($rules as $rule) 194 { 195 foreach($rule['in'] as $in_word) 196 { 197 $in_word_t = transliterate($in_word); 198 $results = $rule['out']; 199 $processed = array(); 200 for ($i=0; $i<count($results); $i++) 201 { 202 $outkey = $results[$i] == '$i' ? $in_word_t : transliterate($results[$i]); 203 if (isset($processed[$outkey])) 204 { 205 array_splice($results, $i, 1); 206 $i--; 207 continue; 208 } 209 $processed[$outkey] = 1; 210 211 if ('$a' == $results[$i]) 212 { 213 array_splice($results, $i, 1, $rule['in']); 214 $i--; 215 } 216 } 217 218 if ('r' == $rule['type']) 219 { 220 if (isset($rmap[$in_word_t])) 221 { 222 if ($callback) $callback( array( 223 'word' => $in_word, 224 'wordt' => $in_word_t, 225 'msg' => ' defined as input several times in replace rules' 226 )); 227 } 228 else 229 $rmap[$in_word_t] = $results; 230 } 231 else 232 { 233 $results = array_diff($results, array($in_word,$in_word_t, '$i')); 234 if (isset($amap[$in_word_t])) 235 $results = array_unique( array_merge($amap[$in_word_t], $results)); 236 $amap[$in_word_t] = $results; 237 } 238 } 239 } 240 241 $file=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/autocomplete_variants.dat'; 242 $res = array('replace' => $rmap, 'add' => $amap ); 243 $save = serialize($res); 244 if (@file_put_contents($file, $save)===false) 245 { 246 mkgetdir(dirname($file)); 247 file_put_contents($file, $save); 248 } 249 @file_put_contents($file.'.txt', var_export($res,true) ); 250 } 251 252 function rv_ac_ws_add_variant($params, $service) 253 { 254 return rvac_ws_add_or_mod_variant($params, true); 255 } 256 257 function rv_ac_ws_mod_variant($params, $service) 258 { 259 return rvac_ws_add_or_mod_variant($params, false); 260 } 261 262 function rvac_ws_add_or_mod_variant($params, $is_add) 263 { 264 $rules = rvac_load_variant_rules(); 265 266 foreach( array('in', 'out') as $i => $name) 267 { 268 $arr = preg_split("/[\n,]+/", stripslashes($params[$name]) ); 269 $arr = array_map('trim', $arr); 270 $arr = array_values( array_filter($arr, function($word) { 271 return strlen($word)>0; 272 }) ); 273 $arr = array_unique($arr); 274 $$name = $arr; 275 } 276 if (empty($in)) 277 return new PwgError(WS_ERR_INVALID_PARAM, 'input word list empty'); 278 if (empty($out)) 279 return new PwgError(WS_ERR_INVALID_PARAM, 'output word list empty'); 280 281 $in_trans = array_map('transliterate', $in); 282 sort($in_trans); 283 $key = implode(',', $in_trans); 284 if (strlen($key)>16) 285 $key = md5($key); 286 287 $type = $params['type']; 288 if ($type!='r' && $type!='a') 289 return new PwgError(WS_ERR_INVALID_PARAM, 'type'); 290 291 if ($is_add) 292 { 293 if (isset($rules[$key])) 294 return new PwgError(WS_ERR_INVALID_PARAM, 'list already defined'); 295 } 296 else 297 { 298 $okey = $params['key']; 299 if (!isset($rules[$okey])) 300 return new PwgError(WS_ERR_INVALID_PARAM, 'no rule to update'); 301 unset($rules[$okey]); 302 } 303 304 $rule = array( 305 'in' => $in, 306 'type' => $type, 307 'out' => $out, 308 ); 309 if (!empty($params['comment'])) 310 $rule['comment'] = $params['comment']; 311 $rules[$key] = $rule; 312 313 $messages = array(); 314 $callback = function($params) use($in_trans, &$messages) { 315 if (isset($params['word_t'])) 316 { 317 if (in_array($in_trans, $word_t)) 318 $messages[] = $params['word'].' '.$params['msg']; 319 } 320 else 321 $messages[] = $params['msg']; 322 }; 323 324 rvac_save_variant_rules($rules, $callback); 325 $rule['key'] = $key; 326 return array( 327 'messages' => $messages, 328 'rule' => $rule, 329 ); 330 } 331 332 function rv_ac_ws_del_variant($params, $service) 333 { 334 $rules = rvac_load_variant_rules(); 335 336 $key = $params['key']; 337 if (empty($key)) 338 return new PwgError(WS_ERR_INVALID_PARAM, 'empty key'); 339 340 if (!isset($rules[$key])) 341 return true; 342 343 unset($rules[$key]); 344 345 rvac_save_variant_rules($rules); 346 } 140 347 ?>
Note: See TracChangeset
for help on using the changeset viewer.