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

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

add [login-link] and [logged] blocks
allow "true" and "false" for boolean parameters
fix "title" parameter for [slider]

File size: 8.2 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 * Where clause to find tag by name
75 */
76function ed_name_like_where($where, $str)
77{
78  $where[] = 'name LIKE \''.$str.'[lang=%\'
79  OR name LIKE \'%]'.$str.'[/lang]%\'';
80  return $where;
81}
82
83/**
84 * Parse [logged] tag
85 */
86function get_loggedin_desc($desc)
87{
88  $patterns[] = '#\[logged(?:=true|=yes)?\](.*?)\[/logged\]#is';
89  $patterns[] = '#\[logged(?:=false|=no)\](.*?)\[/logged\]#is';
90 
91  if (is_a_guest())
92  {
93    $replacements[] = '';
94    $replacements[] = '\\1';
95  }
96  else
97  {
98    $replacements[] = '\\1';
99    $replacements[] = '';
100  }
101
102  return preg_replace($patterns, $replacements, $desc);
103}
104
105/**
106 * Parse all ED tags
107 */
108function get_extended_desc($desc, $param='')
109{
110  global $conf, $page;
111
112  // [redirect]
113  // Only parse if category description on category page
114  // or element description on element page
115  // to avoid undesired redirect when parsing other where
116  if (
117    $param != 'subcatify_category_description'
118    and $param != 'main_page_element_description'
119    and ( script_basename() != 'picture' or $param != 'main_page_category_description' )
120    and preg_match('#\[redirect (.*?)\]#i', $desc, $m1)
121  )
122  {
123    if (preg_match('#^(img|cat|search)=(\d*)\.?(\d*|)$#i', $m1[1], $m2))
124    {
125      switch ($m2[1])
126      {
127        case 'img':
128        $url_params = array('image_id' => $m2[2]);
129        if (!empty($m2[3]))
130        {
131          $url_params['category'] = array('id' => $m2[3], 'name' => '', 'permalink' => '');
132        }
133        $url = rtrim(make_picture_url($url_params), '-');
134        break;
135
136        case 'cat':
137        $url_params = array('category' => array('id' => $m2[2], 'name' => '', 'permalink' => ''));
138        $url = rtrim(make_index_url($url_params), '-');
139        break;
140
141        case 'search':
142        $url = make_index_url(array('section' => 'search', 'search' => $m2[2]));
143      }
144    }
145    else
146    {
147      $url = $m1[1];
148    }
149    if (is_admin())
150    {
151      global $header_notes;
152      load_language('plugin.lang', EXTENDED_DESC_PATH);
153      $header_notes[] = sprintf(l10n('This category is redirected to %s'), '<a href="'.$url.'">'.$url.'</a>');
154    }
155    else
156    {
157      redirect($url);
158    }
159  }
160
161  $desc = get_loggedin_desc($desc);
162  $desc = get_user_language_desc($desc);
163
164  // Remove unparsed redirect tag
165  $patterns[] = '#\[redirect .*?\]#i';
166  $replacements[] = '';
167
168  // [cat=xx]
169  // [img=xx.yy,xx.yy,xx.yy;left|right|;name|titleName|]
170  // [photo id=xx album=yy size=SQ|TH|XXS|XS|S|M|L|XL|XXL html=yes|no link=yes|no]
171  // [random album=xx size=SQ|TH|XXS|XS|S|M|L|XL|XXL html=yes|no link=yes|no]
172  // [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]
173  // [login-link html=yes|no text="log in[lang=fr]connectez-vous[/lang]"]
174  $generic_pattern = '#\[(cat=|img|photo|random|slider|login-link)([^\]]*)\]#i';
175
176  // <!--complete-->, <!--more--> et <!--up-down-->
177  switch ($param)
178  {
179    case 'subcatify_category_description' :
180      $patterns[] = '#^(.*?)(' . preg_quote($conf['ExtendedDescription']['complete']) . '|' . preg_quote($conf['ExtendedDescription']['more']) . '|' . preg_quote($conf['ExtendedDescription']['up-down']) . ').*$#is';
181      $replacements[] = '$1';
182      $desc = preg_replace($patterns, $replacements, $desc);
183      $desc = preg_replace($generic_pattern, '', $desc);
184      break;
185
186    case 'main_page_category_description' :
187      $patterns[] = '#^.*' . preg_quote($conf['ExtendedDescription']['complete']) . '|' . preg_quote($conf['ExtendedDescription']['more']) . '#is';
188      $replacements[] = '';
189      $desc = preg_replace($patterns, $replacements, $desc);
190      $desc = preg_replace_callback($generic_pattern, 'extended_desc_generic_callback', $desc);
191
192      if (substr_count($desc, $conf['ExtendedDescription']['up-down']))
193      {
194        list($desc, $conf['ExtendedDescription']['bottom_comment']) = explode($conf['ExtendedDescription']['up-down'], $desc);
195        add_event_handler('loc_end_index', 'add_bottom_description');
196      }
197      break;
198
199    default:
200      $desc = preg_replace_callback($generic_pattern, 'extended_desc_generic_callback', $desc);
201  }
202
203  return $desc;
204}
205
206function extended_desc_generic_callback($matches)
207{
208  switch ($matches[1])
209  {
210    case 'cat=':
211      return extdesc_get_cat_thumb($matches[2]);
212      break;
213     
214    case 'img':
215      return '[img] must be replaced by [photo]';
216      break;
217     
218    case 'photo':
219      return extdesc_get_photo_sized($matches[2]);
220      break;
221     
222    case 'random':
223      return extdesc_get_random_photo($matches[2]);
224      break;
225     
226    case 'slider':
227      return extdesc_get_slider($matches[2]);
228      break;
229   
230    case 'login-link':
231      return extdesc_get_login_link($matches[2]);
232      break;
233  }
234}
235
236/**
237 * Parse ED tags on NBM mail
238 */
239function extended_desc_mail_group_assign_vars($assign_vars)
240{
241  if (isset($assign_vars['CPL_CONTENT']))
242  {
243    $assign_vars['CPL_CONTENT'] = get_extended_desc($assign_vars['CPL_CONTENT']);
244  }
245  return $assign_vars;
246}
247
248/**
249 * Add bottom description when <!--up-down--> found
250 */
251function add_bottom_description()
252{
253  global $template, $conf;
254
255  if (!empty($conf['ExtendedDescription']['bottom_comment']))
256  {
257    $template->concat('PLUGIN_INDEX_CONTENT_END', '
258      <div class="additional_info">
259      ' . $conf['ExtendedDescription']['bottom_comment'] . '
260      </div>'
261      );
262  }
263}
264
265/**
266 * Remove categories with <!--hidden-->
267 */
268function ext_remove_cat($tpl_var)
269{
270  global $conf;
271
272  $i=0;
273  while ($i<count($tpl_var))
274  {
275    if (substr_count($tpl_var[$i]['NAME'], $conf['ExtendedDescription']['not_visible']))
276    {
277      array_splice($tpl_var, $i, 1);
278    }
279    else
280    {
281      $i++;
282    }
283  }
284
285  return $tpl_var;
286}
287
288/**
289 * Remove categories with <!--mb-hidden-->
290 */
291function ext_remove_menubar_cats($where)
292{
293  global $conf;
294
295  $query = 'SELECT id, uppercats
296    FROM '.CATEGORIES_TABLE.'
297    WHERE name LIKE "%'.$conf['ExtendedDescription']['mb_not_visible'].'%"';
298
299  $result = pwg_query($query);
300  while ($row = pwg_db_fetch_assoc($result))
301  {
302    $ids[] = $row['id'];
303    $where .= '
304      AND uppercats NOT LIKE "'.$row['uppercats'].',%"';
305  }
306  if (!empty($ids))
307  {
308    $where .= '
309      AND id NOT IN ('.implode(',', $ids).')';
310  }
311  return $where;
312}
313
314/**
315 * Remove elements with <!--hidden-->
316 */
317function ext_remove_image($tpl_var, $pictures)
318{
319  global $conf;
320
321  $i=0;
322  while ($i<count($tpl_var))
323  {
324    if (substr_count($pictures[$i]['name'], $conf['ExtendedDescription']['not_visible']))
325    {
326      array_splice($tpl_var, $i, 1);
327      array_splice($pictures, $i, 1);
328    }
329    else
330    {
331      $i++;
332    }
333  }
334
335  return $tpl_var;
336}
Note: See TracBrowser for help on using the repository browser.