source: extensions/ExtendedDescription/include/events.inc.php @ 27246

Last change on this file since 27246 was 27246, checked in by mistic100, 10 years ago

fix typo in r27027

File size: 7.3 KB
Line 
1<?php
2defined('EXTENDED_DESC_PATH') or die('Hacking attempt!');
3
4/**
5 * Parse [lang] tags
6 */
7function get_user_language_desc($desc, $user_lang=null)
8{
9  global $user;
10
11  if (!is_string($user_lang))
12  {
13    $user_lang = $user['language'];
14  }
15
16  $small_user_lang = substr($user_lang, 0, 2);
17
18  if (!preg_match('#\[lang=('.$user_lang.'|'.$small_user_lang.')\]#i', $desc))
19  {
20    $user_lang = 'default';
21    $small_user_lang = 'default';
22  }
23
24  if (preg_match('#\[lang=('.$user_lang.'|'.$small_user_lang.')\]#i', $desc))
25  {
26    // la balise avec la langue de l'utilisateur a été trouvée
27    $patterns[] = '#(^|\[/lang\])(.*?)(\[lang=(' . $user_lang . '|' . $small_user_lang . '|all)\]|$)#is';
28    $replacements[] = '';
29    $patterns[] = '#\[lang=(' . $user_lang . '|' . $small_user_lang . '|all)\](.*?)\[/lang\]#is';
30    $replacements[] = '\\1';
31  }
32  else
33  {
34    // la balise avec la langue de l'utilisateur n'a pas été trouvée
35    // On prend tout ce qui est hors balise
36    $patterns[] = '#\[lang=all\](.*?)\[/lang\]#is';
37    $replacements[] = '\\1';
38    $patterns[] = '#\[lang=.*\].*\[/lang\]#is';
39    $replacements[] = '';
40  }
41
42  return preg_replace($patterns, $replacements, $desc);
43}
44
45/**
46 * Parse [lang] tags in keywords url
47 */
48function get_user_language_tag_url($tag)
49{
50  return get_user_language_desc($tag, get_default_language());
51}
52
53/**
54 * Get all variations of [lang] tags
55 */
56function ed_get_all_alt_names($arr, $name)
57{
58  if (preg_match_all('#\[lang=(.*?)\](.*?)\[/lang\]#is', $name, $matches, PREG_SET_ORDER))
59  {
60    foreach ($matches as $match)
61    {
62      @$arr[$match[1]] .= $match[2];
63    }
64  }
65  return $arr;
66}
67
68/**
69 * Parse all ED tags
70 */
71function get_extended_desc($desc, $param='')
72{
73  global $conf, $page;
74
75  // [redirect]
76  // Only parse if category description on category page
77  // or element description on element page
78  // to avoid undesired redirect when parsing other where
79  if (
80    $param != 'subcatify_category_description'
81    and $param != 'main_page_element_description'
82    and ( script_basename() != 'picture' or $param != 'main_page_category_description' )
83    and preg_match('#\[redirect (.*?)\]#i', $desc, $m1)
84  )
85  {
86    if (preg_match('#^(img|cat|search)=(\d*)\.?(\d*|)$#i', $m1[1], $m2))
87    {
88      switch ($m2[1])
89      {
90        case 'img':
91        $url_params = array('image_id' => $m2[2]);
92        if (!empty($m2[3]))
93        {
94          $url_params['category'] = array('id' => $m2[3], 'name' => '', 'permalink' => '');
95        }
96        $url = rtrim(make_picture_url($url_params), '-');
97        break;
98
99        case 'cat':
100        $url_params = array('category' => array('id' => $m2[2], 'name' => '', 'permalink' => ''));
101        $url = rtrim(make_index_url($url_params), '-');
102        break;
103
104        case 'search':
105        $url = make_index_url(array('section' => 'search', 'search' => $m2[2]));
106      }
107    }
108    else
109    {
110      $url = $m1[1];
111    }
112    if (is_admin())
113    {
114      global $header_notes;
115      load_language('plugin.lang', EXTENDED_DESC_PATH);
116      $header_notes[] = sprintf(l10n('This category is redirected to %s'), '<a href="'.$url.'">'.$url.'</a>');
117    }
118    else
119    {
120      redirect($url);
121    }
122  }
123
124  $desc = get_user_language_desc($desc);
125
126  // Remove unparsed redirect tag
127  $patterns[] = '#\[redirect .*?\]#i';
128  $replacements[] = '';
129
130  // [cat=xx]
131  // [img=xx.yy,xx.yy,xx.yy;left|right|;name|titleName|]
132  // [photo id=xx album=yy size=SQ|TH|XXS|XS|S|M|L|XL|XXL html=yes|no link=yes|no]
133  // [random album=xx size=SQ|TH|XXS|XS|S|M|L|XL|XXL html=yes|no link=yes|no]
134  // [slider album=xx nb_images=yy random=yes|no list=aa,bb,cc size=SQ|TH|XXS|XS|S|M|L|XL|XXL speed=z title=yes|no effect=... arrows=yes|no control=yes|no|thumb elastic=yes|no thumbs_size=dd]
135  $generic_pattern = '#\[(cat=|img|photo|random|slider)([^\]]*)\]#i';
136
137  // <!--complete-->, <!--more--> et <!--up-down-->
138  switch ($param)
139  {
140    case 'subcatify_category_description' :
141      $patterns[] = '#^(.*?)(' . preg_quote($conf['ExtendedDescription']['complete']) . '|' . preg_quote($conf['ExtendedDescription']['more']) . '|' . preg_quote($conf['ExtendedDescription']['up-down']) . ').*$#is';
142      $replacements[] = '$1';
143      $desc = preg_replace($patterns, $replacements, $desc);
144      $desc = preg_replace($generic_pattern, '', $desc);
145      break;
146
147    case 'main_page_category_description' :
148      $patterns[] = '#^.*' . preg_quote($conf['ExtendedDescription']['complete']) . '|' . preg_quote($conf['ExtendedDescription']['more']) . '#is';
149      $replacements[] = '';
150      $desc = preg_replace($patterns, $replacements, $desc);
151      $desc = preg_replace_callback($generic_pattern, 'extended_desc_generic_callback', $desc);
152
153      if (substr_count($desc, $conf['ExtendedDescription']['up-down']))
154      {
155        list($desc, $conf['ExtendedDescription']['bottom_comment']) = explode($conf['ExtendedDescription']['up-down'], $desc);
156        add_event_handler('loc_end_index', 'add_bottom_description');
157      }
158      break;
159
160    default:
161      $desc = preg_replace_callback($generic_pattern, 'extended_desc_generic_callback', $desc);
162  }
163
164  return $desc;
165}
166
167function extended_desc_generic_callback($matches)
168{
169  switch ($matches[1])
170  {
171    case 'cat=':
172      return get_cat_thumb($matches[2]);
173      break;
174     
175    case 'img':
176      return '[img] must be replaced by [photo]';
177      break;
178     
179    case 'photo':
180      return get_photo_sized($matches[2]);
181      break;
182     
183    case 'random':
184      return extdesc_get_random_photo($matches[2]);
185      break;
186     
187    case 'slider':
188      return get_slider($matches[2]);
189      break;
190  }
191}
192
193/**
194 * Parse ED tags on NBM mail
195 */
196function extended_desc_mail_group_assign_vars($assign_vars)
197{
198  if (isset($assign_vars['CPL_CONTENT']))
199  {
200    $assign_vars['CPL_CONTENT'] = get_extended_desc($assign_vars['CPL_CONTENT']);
201  }
202  return $assign_vars;
203}
204
205/**
206 * Add bottom description when <!--up-down--> found
207 */
208function add_bottom_description()
209{
210  global $template, $conf;
211
212  if (!empty($conf['ExtendedDescription']['bottom_comment']))
213  {
214    $template->concat('PLUGIN_INDEX_CONTENT_END', '
215      <div class="additional_info">
216      ' . $conf['ExtendedDescription']['bottom_comment'] . '
217      </div>'
218      );
219  }
220}
221
222/**
223 * Remove categories with <!--hidden-->
224 */
225function ext_remove_cat($tpl_var)
226{
227  global $conf;
228
229  $i=0;
230  while ($i<count($tpl_var))
231  {
232    if (substr_count($tpl_var[$i]['NAME'], $conf['ExtendedDescription']['not_visible']))
233    {
234      array_splice($tpl_var, $i, 1);
235    }
236    else
237    {
238      $i++;
239    }
240  }
241
242  return $tpl_var;
243}
244
245/**
246 * Remove categories with <!--mb-hidden-->
247 */
248function ext_remove_menubar_cats($where)
249{
250  global $conf;
251
252  $query = 'SELECT id, uppercats
253    FROM '.CATEGORIES_TABLE.'
254    WHERE name LIKE "%'.$conf['ExtendedDescription']['mb_not_visible'].'%"';
255
256  $result = pwg_query($query);
257  while ($row = pwg_db_fetch_assoc($result))
258  {
259    $ids[] = $row['id'];
260    $where .= '
261      AND uppercats NOT LIKE "'.$row['uppercats'].',%"';
262  }
263  if (!empty($ids))
264  {
265    $where .= '
266      AND id NOT IN ('.implode(',', $ids).')';
267  }
268  return $where;
269}
270
271/**
272 * Remove elements with <!--hidden-->
273 */
274function ext_remove_image($tpl_var, $pictures)
275{
276  global $conf;
277
278  $i=0;
279  while ($i<count($tpl_var))
280  {
281    if (substr_count($pictures[$i]['name'], $conf['ExtendedDescription']['not_visible']))
282    {
283      array_splice($tpl_var, $i, 1);
284      array_splice($pictures, $i, 1);
285    }
286    else
287    {
288      $i++;
289    }
290  }
291
292  return $tpl_var;
293}
Note: See TracBrowser for help on using the repository browser.