1<?php 2 3/** 4 * Saved search modules 5 * @package modules 6 * @subpackage savedsearches 7 */ 8 9if (!defined('DEBUG_MODE')) { die(); } 10 11 /** 12 * @subpackage savedsearches/handler 13 */ 14class Hm_Handler_save_searches_data extends Hm_Handler_Module { 15 public function process() { 16 $name = array_key_exists('search_name', $this->request->get) ? $this->request->get['search_name'] : ''; 17 $searches = new Hm_Saved_Searches($this->user_config->get('saved_searches', array())); 18 $params = $name ? $searches->get($name, array()) : array(); 19 $url_search = get_search_from_url($this->request); 20 $diff = array_diff_assoc($params, $url_search); 21 if (count($diff) > 0) { 22 $this->out('search_param_update', true); 23 } 24 $this->out('search_name', $name); 25 $this->out('search_params', $params); 26 } 27} 28 29 /** 30 * @subpackage savedsearches/handler 31 */ 32class Hm_Handler_saved_search_folder_data extends Hm_Handler_Module { 33 public function process() { 34 $this->out('saved_searches', $this->user_config->get('saved_searches', array())); 35 } 36} 37 38 /** 39 * @subpackage savedsearches/handler 40 */ 41class Hm_Handler_update_search extends Hm_Handler_Module { 42 public function process() { 43 list($success, $form) = $this->process_form(array('search_name')); 44 if ($success) { 45 $data = get_search_from_post($this->request); 46 $searches = new Hm_Saved_Searches($this->user_config->get('saved_searches', array())); 47 if ($searches->update($form['search_name'], $data)) { 48 $this->session->record_unsaved('Updated a search'); 49 $this->user_config->set('saved_searches', $searches->dump()); 50 $this->session->set('user_data', $this->user_config->dump()); 51 $this->out('updated_search', true); 52 Hm_Msgs::add('Saved search updated'); 53 } 54 else { 55 Hm_Msgs::add('ERRUnable to update the search paramaters'); 56 } 57 } 58 } 59} 60 61 /** 62 * @subpackage savedsearches/handler 63 */ 64class Hm_Handler_delete_search extends Hm_Handler_Module { 65 public function process() { 66 list($success, $form) = $this->process_form(array('search_name')); 67 if ($success) { 68 $searches = new Hm_Saved_Searches($this->user_config->get('saved_searches', array())); 69 if ($searches->delete($form['search_name'])) { 70 $this->session->record_unsaved('Deleted a search'); 71 $this->user_config->set('saved_searches', $searches->dump()); 72 $this->session->set('user_data', $this->user_config->dump()); 73 $this->out('deleted_search', true); 74 } 75 } 76 } 77} 78 79 /** 80 * @subpackage savedsearches/handler 81 */ 82class Hm_Handler_save_search extends Hm_Handler_Module { 83 public function process() { 84 list($success, $form) = $this->process_form(array('search_name')); 85 if ($success) { 86 $data = get_search_from_post($this->request); 87 $searches = new Hm_Saved_Searches($this->user_config->get('saved_searches', array())); 88 if ($searches->add($form['search_name'], $data)) { 89 $this->session->record_unsaved('Saved a search'); 90 $this->user_config->set('saved_searches', $searches->dump()); 91 $this->session->set('user_data', $this->user_config->dump()); 92 $this->out('saved_search', true); 93 } 94 else { 95 Hm_Msgs::add('ERRYou already have a search by that name'); 96 } 97 } 98 } 99} 100 101/** 102 * @subpackage savedsearches/output 103 */ 104class Hm_Output_search_name_fld extends Hm_Output_Module { 105 protected function output() { 106 $name = $this->get('search_name', ''); 107 return '<input type="hidden" class="search_name" name="search_name" value="'.$this->html_safe($name).'" />'; 108 } 109} 110 111/** 112 * @subpackage savedsearches/output 113 */ 114class Hm_Output_filter_saved_search_result extends Hm_Output_Module { 115 protected function output() { 116 if ($this->get('saved_search') || $this->get('updated_search') || $this->get('deleted_search')) { 117 $this->out('saved_search_result', 1); 118 } 119 else { 120 $this->out('saved_search_result', 0); 121 } 122 } 123} 124 125/** 126 * @subpackage savedsearches/output 127 */ 128class Hm_Output_update_search_icon extends Hm_Output_Module { 129 protected function output() { 130 if ($this->get('search_param_update')) { 131 return '<a href="" class="update_search" title="'.$this->trans('Update saved search').'"><img width="20" height="20" alt="'. 132 $this->trans('Update search').'" src="'.Hm_Image_Sources::$circle_check.'" /></a>'; 133 } 134 } 135} 136 137/** 138 * @subpackage savedsearches/output 139 */ 140class Hm_Output_delete_search_icon extends Hm_Output_Module { 141 protected function output() { 142 $style = ''; 143 if (!$this->get('search_name')) { 144 $style = 'style="display: none;"'; 145 } 146 return '<a href="" '.$style.' class="delete_search" title="'.$this->trans('Delete saved search').'"><img width="20" height="20" alt="'. 147 $this->trans('Delete search').'" src="'.Hm_Image_Sources::$circle_x.'" /></a>'; 148 } 149} 150 151/** 152 * @subpackage savedsearches/output 153 */ 154class Hm_Output_save_search_icon extends Hm_Output_Module { 155 protected function output() { 156 $name = $this->get('search_name', ''); 157 if (!$name) { 158 return '<a style="display: none;" href="" class="save_search" title="'.$this->trans('Save search').'"><img width="20" height="20" alt="'. 159 $this->trans('Save search').'" src="'.Hm_Image_Sources::$circle_check.'" /></a>'; 160 } 161 } 162} 163 164/** 165 * @subpackage savedsearches/output 166 */ 167class Hm_Output_save_searches_form extends Hm_Output_Module { 168 protected function output() { 169 $name = $this->get('search_name', ''); 170 if (!$name) { 171 return '<form style="display: none;" class="saved_searches_form"><input type="text" placeholder="'.$this->trans('Search Name'). 172 '" class="new_search_name" name="search_name" value="" />'. 173 '<input type="submit" class="save_search" value="'.$this->trans('Save').'" /></form>'; 174 } 175 } 176} 177 178/** 179 * @subpackage savedsearches/output 180 */ 181class Hm_Output_search_folders extends Hm_Output_Module { 182 protected function output() { 183 $res = ''; 184 $details = $this->get('saved_searches', array()); 185 if (!empty($details)) { 186 foreach ($details as $name => $args) { 187 $url = sprintf('?page=search&search_terms=%s&search_fld=%s&search_since=%s&search_name=%s', 188 $this->html_safe(urlencode($args[0])), 189 $this->html_safe(urlencode($args[2])), 190 $this->html_safe(urlencode($args[1])), 191 $this->html_safe(urlencode($name)) 192 ); 193 $res .= '<li class="menu_search_'.$this->html_safe($name).'"><a class="unread_link" href="'.$url.'">'; 194 if (!$this->get('hide_folder_icons')) { 195 $res .= '<img class="account_icon" src="'.$this->html_safe(Hm_Image_Sources::$search).'" alt="" width="16" height="16" /> '; 196 } 197 $res .= $this->html_safe($name).'</a></li>'; 198 } 199 $this->append('folder_sources', array('search_folders', $res)); 200 } 201 } 202} 203 204/** 205 * @subpackage savedsearches/lib 206 */ 207class Hm_Saved_Searches { 208 209 private $searches; 210 211 public function __construct($data) { 212 $this->searches = $data; 213 } 214 public function dump() { 215 ksort($this->searches); 216 return $this->searches; 217 } 218 public function update($name, $search) { 219 if (array_key_exists($name, $this->searches)) { 220 $this->searches[$name] = $search; 221 return true; 222 } 223 return false; 224 } 225 public function add($name, $search) { 226 if (!array_key_exists($name, $this->searches)) { 227 $this->searches[$name] = $search; 228 return true; 229 } 230 return false; 231 } 232 public function get($name, $default=false) { 233 if (array_key_exists($name, $this->searches)) { 234 return $this->searches[$name]; 235 } 236 return $default; 237 } 238 public function delete($del_name) { 239 $new_searches = array(); 240 $old_searches = $this->searches; 241 foreach ($old_searches as $name => $vals) { 242 if ($name !== $del_name) { 243 $new_searches[$name] = $vals; 244 } 245 } 246 $this->searches = $new_searches; 247 return count($new_searches) !== count($old_searches); 248 } 249} 250 251/** 252 * @subpackage savedsearches/functions 253 */ 254if (!hm_exists('get_search_from_post')) { 255function get_search_from_post($request) { 256 return array( 257 array_key_exists('search_terms', $request->post) ? $request->post['search_terms'] : '', 258 array_key_exists('search_since', $request->post) ? $request->post['search_since'] : DEFAULT_SINCE, 259 array_key_exists('search_fld', $request->post) ? $request->post['search_fld'] : DEFAULT_SEARCH_FLD, 260 array_key_exists('search_name', $request->post) ? $request->post['search_name'] : '', 261 ); 262}} 263 264/** 265 * @subpackage savedsearches/functions 266 */ 267if (!hm_exists('get_search_from_url')) { 268function get_search_from_url($request) { 269 return array( 270 array_key_exists('search_terms', $request->get) ? $request->get['search_terms'] : '', 271 array_key_exists('search_since', $request->get) ? $request->get['search_since'] : DEFAULT_SINCE, 272 array_key_exists('search_fld', $request->get) ? $request->get['search_fld'] : DEFAULT_SEARCH_FLD, 273 array_key_exists('search_name', $request->get) ? $request->get['search_name'] : '', 274 ); 275}} 276 277