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

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

compatibility with r27238

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