source: trunk/admin/include/check_integrity.class.php @ 8126

Last change on this file since 8126 was 8126, checked in by patdenice, 13 years ago

feature 2060: Remove adviser mode.
First commit: only php files.

  • Property svn:eol-style set to LF
File size: 9.6 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24class check_integrity
25{
26  var $ignore_list;
27  var $retrieve_list;
28  var $build_ignore_list;
29
30  function check_integrity()
31  {
32    $this->ignore_list = array();
33    $this->retrieve_list = array();
34    $this->build_ignore_list = array();
35  }
36
37  /**
38   * Check integrities
39   *
40   * @param void
41   * @return void
42   */
43  function check()
44  {
45    global $page, $header_notes, $conf;
46
47    // Ignore list
48    $conf_c13y_ignore = unserialize($conf['c13y_ignore']);
49    if (
50          is_array($conf_c13y_ignore) and
51          isset($conf_c13y_ignore['version']) and
52          ($conf_c13y_ignore['version'] == PHPWG_VERSION) and
53          is_array($conf_c13y_ignore['list'])
54        )
55    {
56      $ignore_list_changed = false;
57      $this->ignore_list = $conf_c13y_ignore['list'];
58    }
59    else
60    {
61      $ignore_list_changed = true;
62      $this->ignore_list = array();
63    }
64
65    // Retrieve list
66    $this->retrieve_list = array();
67    $this->build_ignore_list = array();
68
69    trigger_action('list_check_integrity', $this);
70
71    // Information
72    if (count($this->retrieve_list) > 0)
73    {
74      $header_notes[] =
75        l10n_dec('%d anomaly has been detected.', '%d anomalies have been detected.',
76          count($this->retrieve_list));
77    }
78
79    // Treatments
80    if (isset($_POST['c13y_submit_correction']) and isset($_POST['c13y_selection']))
81    {
82      $corrected_count = 0;
83      $not_corrected_count = 0;
84
85      foreach ($this->retrieve_list as $i => $c13y)
86      {
87        if (!empty($c13y['correction_fct']) and
88            $c13y['is_callable'] and
89            in_array($c13y['id'], $_POST['c13y_selection']))
90        {
91          if (is_array($c13y['correction_fct_args']))
92          {
93            $args = $c13y['correction_fct_args'];
94          }
95          else
96          if (!is_null($c13y['correction_fct_args']))
97          {
98            $args = array($c13y['correction_fct_args']);
99          }
100          else
101          {
102            $args = array();
103          }
104          $this->retrieve_list[$i]['corrected'] = call_user_func_array($c13y['correction_fct'], $args);
105
106          if ($this->retrieve_list[$i]['corrected'])
107          {
108            $corrected_count += 1;
109          }
110          else
111          {
112            $not_corrected_count += 1;
113          }
114        }
115      }
116
117      if ($corrected_count > 0)
118      {
119        $page['infos'][] =
120          l10n_dec('%d anomaly has been corrected.', '%d anomalies have been detected corrected.',
121            $corrected_count);
122      }
123      if ($not_corrected_count > 0)
124      {
125        $page['errors'][] =
126          l10n_dec('%d anomaly has not been corrected.', '%d anomalies have not been corrected.',
127            $not_corrected_count);
128      }
129    }
130    else
131    {
132      if (isset($_POST['c13y_submit_ignore']) and isset($_POST['c13y_selection']))
133      {
134        $ignored_count = 0;
135
136        foreach ($this->retrieve_list as $i => $c13y)
137        {
138          if (in_array($c13y['id'], $_POST['c13y_selection']))
139          {
140            $this->build_ignore_list[] = $c13y['id'];
141            $this->retrieve_list[$i]['ignored'] = true;
142            $ignored_count += 1;
143          }
144        }
145
146        if ($ignored_count > 0)
147        {
148          $page['infos'][] =
149            l10n_dec('%d anomaly has been ignored.', '%d anomalies have been ignored.',
150              $ignored_count);
151        }
152      }
153    }
154
155    $ignore_list_changed =
156      (
157        ($ignore_list_changed) or
158        (count(array_diff($this->ignore_list, $this->build_ignore_list)) > 0) or
159        (count(array_diff($this->build_ignore_list, $this->ignore_list)) > 0)
160        );
161
162    if ($ignore_list_changed)
163    {
164      $this->update_conf($this->build_ignore_list);
165    }
166  }
167
168  /**
169   * Display anomalies list
170   *
171   * @param void
172   * @return void
173   */
174  function display()
175  {
176    global $template;
177
178    $check_automatic_correction = false;
179    $submit_automatic_correction = false;
180    $submit_ignore = false;
181
182    if (isset($this->retrieve_list) and count($this->retrieve_list) > 0)
183    {
184      $template->set_filenames(array('check_integrity' => 'check_integrity.tpl'));
185
186      foreach ($this->retrieve_list as $i => $c13y)
187      {
188        $can_select = false;
189        $c13y_display = array(
190           'id' => $c13y['id'],
191           'anomaly' => $c13y['anomaly'],
192           'show_ignore_msg' => false,
193           'show_correction_success_fct' => false,
194           'correction_error_fct' => '',
195           'show_correction_fct' => false,
196           'correction_error_fct' => '',
197           'show_correction_bad_fct' => false,
198           'correction_msg' => ''
199          );
200
201        if (isset($c13y['ignored']))
202        {
203          if ($c13y['ignored'])
204          {
205            $c13y_display['show_ignore_msg'] = true;
206          }
207          else
208          {
209            die('$c13y[\'ignored\'] cannot be false');
210          }
211        }
212        else
213        {
214          if (!empty($c13y['correction_fct']))
215          {
216            if (isset($c13y['corrected']))
217            {
218              if ($c13y['corrected'])
219              {
220                $c13y_display['show_correction_success_fct'] = true;
221              }
222              else
223              {
224                $c13y_display['correction_error_fct'] = $this->get_htlm_links_more_info();
225              }
226            }
227            else if ($c13y['is_callable'])
228            {
229              $c13y_display['show_correction_fct'] = true;
230              $template->append('c13y_do_check', $c13y['id']);
231              $submit_automatic_correction = true;
232              $can_select = true;
233            }
234            else
235            {
236              $c13y_display['show_correction_bad_fct'] = true;
237              $can_select = true;
238            }
239          }
240          else
241          {
242            $can_select = true;
243          }
244
245          if (!empty($c13y['correction_msg']) and !isset($c13y['corrected']))
246          {
247            $c13y_display['correction_msg'] = $c13y['correction_msg'];
248          }
249        }
250
251        $c13y_display['can_select'] = $can_select;
252        if ($can_select)
253        {
254          $submit_ignore = true;
255        }
256
257        $template->append('c13y_list', $c13y_display);
258      }
259
260      $template->assign('c13y_show_submit_automatic_correction', $submit_automatic_correction);
261      $template->assign('c13y_show_submit_ignore', $submit_ignore);
262
263      $template->concat('ADMIN_CONTENT', $template->parse('check_integrity', true));
264
265    }
266  }
267
268  /**
269   * Add anomaly data
270   *
271   * @param anomaly arguments
272   * @return void
273   */
274  function add_anomaly($anomaly, $correction_fct = null, $correction_fct_args = null, $correction_msg = null)
275  {
276    $id = md5($anomaly.$correction_fct.serialize($correction_fct_args).$correction_msg);
277
278    if (in_array($id, $this->ignore_list))
279    {
280      $this->build_ignore_list[] = $id;
281    }
282    else
283    {
284      $this->retrieve_list[] =
285        array(
286          'id' => $id,
287          'anomaly' => $anomaly,
288          'correction_fct' => $correction_fct,
289          'correction_fct_args' => $correction_fct_args,
290          'correction_msg' => $correction_msg,
291          'is_callable' => is_callable($correction_fct));
292    }
293  }
294
295  /**
296   * Update table config
297   *
298   * @param ignore list array
299   * @return void
300   */
301  function update_conf($conf_ignore_list = array())
302  {
303    $conf_c13y_ignore =  array();
304    $conf_c13y_ignore['version'] = PHPWG_VERSION;
305    $conf_c13y_ignore['list'] = $conf_ignore_list;
306    $query = 'update '.CONFIG_TABLE.' set value =\''.serialize($conf_c13y_ignore).'\'where param = \'c13y_ignore\';';
307    pwg_query($query);
308  }
309
310  /**
311   * Apply maintenance
312   *
313   * @param void
314   * @return void
315   */
316  function maintenance()
317  {
318    $this->update_conf();
319  }
320
321  /**
322   * Returns links more informations
323   *
324   * @param void
325   * @return html links
326   */
327  function get_htlm_links_more_info()
328  {
329    $pwg_links = pwg_URL();
330    $link_fmt = '<a href="%s" onclick="window.open(this.href, \'\'); return false;">%s</a>';
331    return
332      sprintf
333      (
334        l10n('Go to %s or %s for more informations'),
335        sprintf($link_fmt, $pwg_links['FORUM'], l10n('the forum')),
336        sprintf($link_fmt, $pwg_links['WIKI'], l10n('the wiki'))
337      );
338  }
339
340}
341
342?>
Note: See TracBrowser for help on using the repository browser.