Changeset 17010


Ignore:
Timestamp:
Jul 25, 2012, 2:51:46 PM (8 years ago)
Author:
mistic100
Message:

-add [slider] tag
-parse all tags in page_banner
-allow random order of parameters for [photo], [random] and [slider]

Location:
extensions/ExtendedDescription
Files:
9 added
3 edited

Legend:

Unmodified
Added
Removed
  • extensions/ExtendedDescription/language/en_UK/help.html

    r16172 r17010  
    7676  <li><b>[random album=yy size=M html=yes link=yes]</b></li>
    7777</ul>
    78 <p>Same thin as above, except that the photo is choosed randomly into <code>album</code></p>
     78<p>Same thing as above, except that the photo is choosed randomly into <code>album</code></p>
     79
     80<ul>
     81  <li><b>[slider album=xx nb_images=10 random=no list=aa,bb,cc size=M speed=3 title=no effect=fade arrows=yes control=yes elastic=no]</b></li>
     82</ul>
     83<p>This tag allows to insert a slideshow (NivoSlider), with (you must set <code>album</code> OR <code>list</code>):<br><br>
     84- <code>album</code> (optional) source album<br>
     85- <code>nb_images</code> (optional) max number of photos to display in the slideshow<br>
     86- <code>random</code> (optional) choose photos randomly in the album<br>
     87- <code>list</code> (optional) a list of photos ids separated by a comma<br>
     88- <code>size</code> (optional) the size of the photos, among <i>{SQ, TH, XXS, S, M, L, XL, XXL}</i><br>
     89- <code>speed</code> (optional) the slideshow speed (in seconds)<br>
     90- <code>title</code> (optional) display photo title<br>
     91- <code>effect</code> (optional) transition effect (see <a href="http://nivo.dev7studios.com/support/jquery-plugin-usage/">NivoSlider doc</a>)<br>
     92- <code>arrows</code> (optional) display navigation arrows<br>
     93- <code>control</code> (optional) display navigation controls<br>
     94- <code>elastic</code> (optional) adapt slideshow size to each photo</p>
    7995
    8096
  • extensions/ExtendedDescription/language/fr_FR/help.html

    r16172 r17010  
    7272  <li><b>[photo id=xx album=yy size=M html=yes link=yes]</b></li>
    7373</ul>
    74 <p>Cetet balise permet d'insérer une photo de n'importe quelle taille, avec:<br><br>
     74<p>Cette balise permet d'insérer une photo de n'importe quelle taille, avec:<br><br>
    7575- <code>id</code> le numéro de la photo<br>
    76 - <code>album</code> (optional) le numéro de l'album parent<br>
    77 - <code>size</code> (optional) la taille de la photo, parmi <i>{SQ, TH, XXS, S, M, L, XL, XXL}</i><br>
    78 - <code>html</code> (optional) si <i>no</i>, la balise ne retourne que l'URL de la photo, sans HTML<br>
    79 - <code>link</code> (optional) si <i>yes</i>, la photo est cliquable, vers sa page</p>
     76- <code>album</code> (facultatif) le numéro de l'album parent<br>
     77- <code>size</code> (facultatif) la taille de la photo, parmi <i>{SQ, TH, XXS, S, M, L, XL, XXL}</i><br>
     78- <code>html</code> (facultatif) si <i>no</i>, la balise ne retourne que l'URL de la photo, sans HTML<br>
     79- <code>link</code> (facultatif) si <i>yes</i>, la photo est cliquable, vers sa page</p>
    8080
    8181<ul>
     
    8383</ul>
    8484<p>Même chose, sauf que la photo est prise aléatoirement dans <code>album</code></p>
     85
     86<ul>
     87  <li><b>[slider album=xx nb_images=10 random=no list=aa,bb,cc size=M speed=3 title=no effect=fade arrows=yes control=yes elastic=no]</b></li>
     88</ul>
     89<p>Permet d'insérer un diaporama (NivoSlider), avec (vous devez renseigner <code>album</code> OU <code>list</code>):<br><br>
     90- <code>album</code> (facultatif) album source<br>
     91- <code>nb_images</code> (facultatif) nombre maximal de photos dans le diaporama<br>
     92- <code>random</code> (facultatif) choisir les photos aléatoirement dans l'album<br>
     93- <code>list</code> (facultatif) une liste de photos séparées par une virgule<br>
     94- <code>size</code> (facultatif) la taille des photos, parmi <i>{SQ, TH, XXS, S, M, L, XL, XXL}</i><br>
     95- <code>speed</code> (facultatif) la vitesse du diaporama (en secondes)<br>
     96- <code>title</code> (facultatif) afficher le nom de la photo<br>
     97- <code>effect</code> (facultatif) effet de transition (voir <a href="http://nivo.dev7studios.com/support/jquery-plugin-usage/">la doc de NivoSlider</a>)<br>
     98- <code>arrows</code> (facultatif) afficher les flèches de navigations<br>
     99- <code>control</code> (facultatif) afficher la barre de navigation<br>
     100- <code>elastic</code> (facultatif) adapter la taille du diaporama à chaque photo</p>
     101
    85102
    86103<h3>Masquer un album</h3>
  • extensions/ExtendedDescription/main.inc.php

    r16969 r17010  
    122122  // Balises [img=xx.yy,xx.yy,xx.yy;left|right|;name|titleName|]
    123123  //$patterns[] = '#\[img=(\d*)\.?(\d*|);?(left|right|);?(name|titleName|)\]#ie';
    124   $patterns[] = '#\[img=([\d\s\.]*);?(left|right|);?(name|titleName|)\]#ie';
     124  $patterns[] = '#\[img=([\d\s\.,]*);?(left|right|);?(name|titleName|)\]#ie';
    125125  $replacements[] = ($param == 'subcatify_category_description') ? '' : 'get_img_thumb("$1", "$2", "$3")';
    126126 
    127127  // Balises [photo id=xx album=yy size=SQ|TH|XXS|XS|S|M|L|XL|XXL html=yes|no link=yes|no]
    128   $patterns[] = '#\[photo\s+id=(\d+)(?:\s+album=(\d+))?(?:\s+size=(SQ|TH|XXS|XS|S|M|L|XL|XXL))?(?:\s+html=(yes|no))?(?:\s+link=(yes|no))?\]#ie';
    129   $replacements[] = ($param == 'subcatify_category_description') ? '' : 'get_photo_sized("$1", "$2", "$3", "$4", "$5")';
     128  // $patterns[] = '#\[photo(?:(?:\s+(id)=(\d+))|(?:\s+(album)=(\d+))|(?:\s+(size)=(SQ|TH|XXS|XS|S|M|L|XL|XXL))|(?:\s+(html)=(yes|no))|(?:\s+(link)=(yes|no))){1,5}\s*\]#ie'; //10
     129  $patterns[] = '#\[photo ([^\]]+)\]#ie';
     130  $replacements[] = ($param == 'subcatify_category_description') ? '' : 'get_photo_sized("$1")';
    130131
    131132  // Balises [random album=xx size=SQ|TH|XXS|XS|S|M|L|XL|XXL html=yes|no link=yes|no]
    132   $patterns[] = '#\[random\s+(?:album|cat)=(\d+)(?:\s+size=(SQ|TH|XXS|XS|S|M|L|XL|XXL))?(?:\s+html=(yes|no))?(?:\s+link=(yes|no))?\]#ie';
    133   $replacements[] = 'extdesc_get_random_photo("$1", "$2", "$3", "$4")';
     133  // $patterns[] = '#\[random(?:(?:\s+(album|cat)=(\d+))|(?:\s+(size)=(SQ|TH|XXS|XS|S|M|L|XL|XXL))|(?:\s+(html)=(yes|no))|(?:\s+(link)=(yes|no))){1,4}\s*\]#ie'; //8
     134  $patterns[] = '#\[random ([^\]]+)\]#ie';
     135  $replacements[] = ($param == 'subcatify_category_description') ? '' : 'extdesc_get_random_photo("$1")';
     136 
     137  // Balises [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 elastic=yes|no]
     138  // $patterns[] = '#\[slider(?:(?:\s+(album)=(\d+))|(?:\s+(nb_images)=(\d+))|(?:\s+(random)=(yes|no))|(?:\s+(list)=([\d,]+))|(?:\s+(size)=(SQ|TH|XXS|XS|S|M|L|XL|XXL))|(?:\s+(speed)=(\d+))|(?:\s+(title)=(yes|no))|(?:\s+(effect)=([a-zA-Z]+))|(?:\s+(arrows)=(yes|no))|(?:\s+(control)=(yes|no))|(?:\s+(elastic)=(yes|no))){1,11}\s*\]#ie'; //22
     139  $patterns[] = '#\[slider ([^\]]+)\]#ie';
     140  $replacements[] = ($param == 'subcatify_category_description') ? '' : 'get_slider("$1")';
    134141
    135142  // Balises <!--complete-->, <!--more--> et <!--up-down-->
     
    371378}
    372379
    373 // Return html code for a photo
    374 function get_photo_sized($image_id, $cat_id, $size, $html, $link)
     380/**
     381 * Return html code for a photo
     382 *
     383 * @int    id:    picture id
     384 * @int    album: album to display picture in    (default: null)
     385 * @string size:  picture size                   (default: M)
     386 * @string html:  return complete html structure (default: yes)
     387 * @string link:  add a link to the picture      (default: yes)
     388 */
     389function get_photo_sized($param)
    375390{
    376391  global $template;
    377392 
     393  $default_params = array(
     394    'id' =>    array('\d+', null),
     395    'album' => array('\d+', null),
     396    'size' =>  array('SQ|TH|XXS|XS|S|M|L|XL|XXL', 'M'),
     397    'html' =>  array('yes|no', 'yes'),
     398    'link' =>  array('yes|no', 'yes'),
     399    );
     400   
     401  $params = parse_parameters($param, $default_params);
     402 
     403  // check picture id
     404  if (empty($params['id'])) return 'missing picture id';
     405 
     406  // parameters
     407  $params['link'] = $params['link']=='no' ? false : true;
     408  $params['html'] = $params['html']=='no' ? false : true;
     409  $deriv_type = get_deriv_type($params['size']);
     410
     411  // get picture
     412  $query = 'SELECT * FROM ' . IMAGES_TABLE . ' WHERE id = '.$params['id'].';';
     413  $result = pwg_query($query);
     414
     415  if (pwg_db_num_rows($result))
     416  {
     417    $picture = pwg_db_fetch_assoc($result);
     418   
     419    // url
     420    if ($params['link'])
     421    {
     422      if (!empty($params['album']))
     423      {
     424        $url = make_picture_url(array(
     425          'image_id' => $picture['id'],
     426          'category' => array(
     427            'id' => $params['album'],
     428            'name' => '',
     429            'permalink' => '',
     430            )));
     431      }
     432      else
     433      {
     434        $url = make_picture_url(array('image_id' => $picture['id']));
     435      }
     436    }
     437   
     438    // image
     439    $src_image = new SrcImage($picture);
     440    $derivatives = DerivativeImage::get_all($src_image);
     441    $selected_derivative = $derivatives[$deriv_type];
     442
     443    $template->assign(array(
     444      'current' => array(
     445        'selected_derivative' => $selected_derivative,
     446        ),
     447      'ALT_IMG' => $picture['file'],
     448      ));
     449
     450    // output
     451    if ($params['html'])
     452    {
     453      $template->set_filename('extended_description_content', dirname(__FILE__).'/template/picture_content.tpl');
     454      $content = $template->parse('extended_description_content', true);
     455      if ($params['link']) return '<a href="'.$url.'">'.$content.'</a>';
     456      else                 return $content;
     457    }
     458    else
     459    {
     460      return $selected_derivative->get_url();
     461    }
     462  }
     463 
     464  return 'invalid picture id';
     465}
     466
     467/**
     468 * Return html code for a random photo
     469 *
     470 * @int    album: select picture from this album
     471 * @string size:  picture size                   (default: M)
     472 * @string html:  return complete html structure (default: yes)
     473 * @string link:  add a link to the picture      (default: no)
     474 */
     475function extdesc_get_random_photo($param)
     476{
     477  $default_params = array(
     478    'album' => array('\d+', null),
     479    'cat' =>   array('\d+', null), // historical
     480    'size' =>  array('SQ|TH|XXS|XS|S|M|L|XL|XXL', 'M'),
     481    'html' =>  array('yes|no', 'yes'),
     482    'link' =>  array('yes|no', 'no'),
     483    );
     484   
     485  $params = parse_parameters($param, $default_params);
     486 
     487  // check album id
     488  if (empty($params['album']))
     489  {
     490    if (empty($params['cat'])) return 'missing album id';
     491    $params['album'] = $params['cat'];
     492  }
     493 
     494  // get picture id
     495  $query = '
     496SELECT id
     497  FROM '.IMAGES_TABLE.'
     498    JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
     499  WHERE category_id = '.$params['album'].'
     500  ORDER BY '.DB_RANDOM_FUNCTION.'()
     501  LIMIT 1
     502;';
     503  $result = pwg_query($query);
     504 
     505  if (pwg_db_num_rows($result))
     506  {
     507    list($img_id) = pwg_db_fetch_row($result);
     508    return get_photo_sized('id='.$img_id.' album='.$params['album'].' size='.$params['size'].' html='.$params['html'].' link='.$params['link']);
     509  }
     510
     511  return '';
     512}
     513
     514/**
     515 * Return html code for a nivo slider (album or list is mandatory)
     516 *
     517 * @int    album:     select pictures from this album
     518 * @int    nb_images: display only x pictures           (default: 10)
     519 * @string random:    random sort order                 (default: no)
     520 *
     521 * @string list:      pictures id separated by a comma
     522 *
     523 * @string size:      picture size                      (default: M)
     524 * @int    speed:     slideshow duration                (default: 3)
     525 * @string title:     display picture name              (default: no)
     526 * @string effect:    transition effect                 (default: fade)
     527 * @string arrows:    display navigation arrows         (default: yes)
     528 * @string control:   display navigation bar            (default: yes)
     529 * @string elastic:   adapt slider size to each picture (default: no)
     530 */
     531function get_slider($param)
     532{
     533  global $template, $conf;
     534 
     535  $default_params = array(
     536    'album' =>     array('\d+', null),
     537    'nb_images' => array('\d+', 10),
     538    'random' =>    array('yes|no', 'no'),
     539    'list' =>      array('[\d,]+', null),
     540    'size' =>      array('SQ|TH|XXS|XS|S|M|L|XL|XXL', 'M'),
     541    'speed' =>     array('\d+', 3),
     542    'title' =>     array('yes|no', 'no'),
     543    'effect' =>    array('[a-zA-Z]+', 'fade'),
     544    'arrows' =>    array('yes|no', 'yes'),
     545    'control' =>   array('yes|no', 'yes'),
     546    'elastic' =>   array('yes|no', 'no'),
     547    );
     548   
     549  $params = parse_parameters($param, $default_params);
     550 
     551  // check size
     552  $deriv_type = get_deriv_type($params['size']);
     553  $enabled = ImageStdParams::get_defined_type_map();
     554  if (empty($enabled[ $deriv_type ])) return 'size disabled';
     555 
     556  // parameters
     557  $params['arrows'] = $params['arrows']==='no' ? 'false' : 'true';
     558  $params['control'] = $params['control']==='no' ? 'false' : 'true';
     559  $params['elastic'] = $params['elastic']==='yes' ? true : false;
     560  $params['title'] = $params['title']==='yes' ? true : false;
     561 
     562  // pictures from album...
     563  if (!empty($params['album']))
     564  {
     565    // parameters
     566    $params['random'] = $params['random']==='yes' ? true : false;
     567   
     568    // get image order inside category
     569    if ($params['random'])
     570    {
     571      $order_by = DB_RANDOM_FUNCTION.'()';
     572    }
     573    else
     574    {
     575      $query = '
     576SELECT image_order
     577  FROM '.CATEGORIES_TABLE.'
     578  WHERE id = '.$params['album'].'
     579;';
     580      list($order_by) = pwg_db_fetch_row(pwg_query($query));
     581      if (empty($order_by))
     582      {
     583        $order_by = str_replace('ORDER BY ', null, $conf['order_by_inside_category']);
     584      }
     585    }
     586   
     587    // get pictures ids
     588    $query = '
     589SELECT image_id
     590  FROM '.IMAGE_CATEGORY_TABLE.' as ic
     591    INNER JOIN '.IMAGES_TABLE.' as i
     592    ON i.id = ic.image_id
     593  WHERE category_id = '.$params['album'].'
     594  ORDER BY '.$order_by.'
     595  LIMIT '.$params['nb_images'].'
     596;';
     597    $params['list'] = implode(',', array_from_query($query, 'image_id'));
     598  }
     599  // ...or pictures list
     600  if (empty($params['list']))
     601  {
     602    return 'missing album id or empty picture list';
     603  }
     604 
     605  // get pictures
     606  $query = '
     607SELECT *
     608  FROM '.IMAGES_TABLE.'
     609  WHERE id IN ('.$params['list'].')
     610;';
     611  $pictures = hash_from_query($query, 'id');
     612   
     613  foreach ($pictures as $row)
     614  {
     615    // url
     616    if (!empty($params['album']))
     617    {
     618      $url = make_picture_url(array(
     619        'image_id' => $row['id'],
     620        'category' => array(
     621          'id' => $params['album'],
     622          'name' => '',
     623          'permalink' => '',
     624          )));
     625    }
     626    else
     627    {
     628      $url = make_picture_url(array('image_id' => $row['id']));
     629    }
     630
     631    $name = render_element_name($row);
     632   
     633    $tpl_vars[] = array_merge($row, array(
     634      'TN_ALT' => htmlspecialchars(strip_tags($name)),
     635      'NAME' => $name,
     636      'URL' => $url,
     637      'src_image' => new SrcImage($row),
     638      ));
     639  }
     640 
     641  list($img_size['w'], $img_size['h']) = $enabled[ $deriv_type ]->sizing->ideal_size;
     642 
     643  $template->assign(array(
     644    'EXTENDED_DESC_PATH' => EXTENDED_DESC_PATH,
     645    'slider_id' => crc32(uniqid($params['list'])), // need a unique id if we have multiple sliders
     646    'slider_content' => $tpl_vars,
     647    'derivative_params' => ImageStdParams::get_by_type( $deriv_type ),
     648    'img_size' => $img_size,
     649    'pauseTime' => $params['speed']*1000,
     650    'controlNav' => $params['control'],
     651    'effect' => $params['effect'],
     652    'directionNav' => $params['arrows'],
     653    'elastic_size' => $params['elastic'],
     654    'show_title' => $params['title'],
     655    ));
     656 
     657  $template->set_filename('extended_description_content', dirname(__FILE__).'/template/slider.tpl');
     658  return $template->parse('extended_description_content', true);
     659}
     660
     661
     662function parse_parameters($param, $default_params)
     663{
     664  $params = array();
     665 
     666  foreach ($default_params as $name => $value)
     667  {
     668    if (preg_match('#'.$name.'=('.$value[0].')#', $param, $matches))
     669    {
     670      $params[$name] = $matches[1];
     671    }
     672    else
     673    {
     674      $params[$name] = $value[1];
     675    }
     676  }
     677 
     678  return $params;
     679}
     680
     681function get_deriv_type($size)
     682{
    378683  $size_map = array(
    379684    'SQ' => IMG_SQUARE,
     
    389694   
    390695  if (!array_key_exists($size, $size_map)) $size = 'M';
    391   $link = $link=='no' ? false: true;
    392   $html = $html=='no' ? false: true;
    393    
    394   $deriv_type = $size_map[ strtoupper($size) ];
    395 
    396   $query = 'SELECT * FROM ' . IMAGES_TABLE . ' WHERE id = '.$image_id.';';
    397   $result = pwg_query($query);
    398 
    399   if (pwg_db_num_rows($result))
    400   {
    401     $template->set_filename('extended_description_content', dirname(__FILE__).'/template/picture_content.tpl');
    402    
    403     $picture = pwg_db_fetch_assoc($result);
    404    
    405     // url
    406     if (!empty($cat_id))
    407     {
    408       $url = make_picture_url(array(
    409         'image_id' => $picture['id'],
    410         'category' => array(
    411           'id' => $cat_id,
    412           'name' => '',
    413           'permalink' => '')));
    414     }
    415     else
    416     {
    417       $url = make_picture_url(array('image_id' => $picture['id']));
    418     }
    419    
    420     // image
    421     $src_image = new SrcImage($picture);
    422     $derivatives = DerivativeImage::get_all($src_image);
    423     $selected_derivative = $derivatives[$deriv_type];
    424 
    425     $template->assign(array(
    426       'current' => array(
    427         'selected_derivative' => $selected_derivative,
    428         ),
    429       'ALT_IMG' => $picture['file'],
    430       ));
    431     if (!empty($picture['comment']))
    432     {
    433       $template->assign('COMMENT_IMG', trigger_event('render_element_description', $picture['comment']));
    434     }
    435 
    436    
    437     if ($html)
    438     {
    439       $content = $template->parse('extended_description_content', true);
    440       if ($link) return '<a href="'.$url.'">'.$content.'</a>';
    441       else       return $content;
    442     }
    443     else
    444     {
    445       return $selected_derivative->get_url();
    446     }
    447   }
    448  
    449   return '';
    450 }
    451 
    452 
    453 
    454 function extdesc_get_random_photo($category_id, $size, $html, $link)
    455 {
    456   if ('yes' != $link)
    457   {
    458     $link = 'no';
    459   }
    460 
    461   include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
    462  
    463   $query = '
    464 SELECT id
    465   FROM '.IMAGES_TABLE.'
    466     JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
    467   WHERE category_id = '.$category_id.'
    468   ORDER BY '.DB_RANDOM_FUNCTION.'()
    469   LIMIT 1
    470 ;';
    471   $result = pwg_query($query);
    472  
    473   if (pwg_db_num_rows($result))
    474   {
    475     list($img_id) = pwg_db_fetch_row($result);
    476     return get_photo_sized($img_id, $category_id, $size, $html, $link);
    477   }
    478 
    479   return '';
    480 }
     696 
     697  return $size_map[ strtoupper($size) ];
     698}
     699
    481700
    482701if (script_basename() == 'admin' or script_basename() == 'popuphelp')
     
    485704}
    486705
    487 add_event_handler ('render_page_banner', 'get_user_language_desc');
     706add_event_handler ('render_page_banner', 'get_extended_desc');
    488707add_event_handler ('render_category_name', 'get_user_language_desc');
    489708add_event_handler ('render_category_description', 'get_extended_desc', EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
Note: See TracChangeset for help on using the changeset viewer.