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&amp;search_terms=%s&amp;search_fld=%s&amp;search_since=%s&amp;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