Gino Multimedia  0.1
Modulo di gestione di contenuti multimediali per Gino CMS
 Tutto Strutture dati File Funzioni Variabili Gruppi Pagine
class_multimedia.php
Vai alla documentazione di questo file.
1 <?php
44 require_once('class.multimediaLicense.php');
45 require_once('class.multimediaVideoPlatform.php');
46 require_once('class.multimediaSlider.php');
47 require_once('class.multimediaGallery.php');
48 require_once('class.multimediaItem.php');
49 require_once('class.multimediaAudio.php');
50 require_once('class.multimediaVideo.php');
51 require_once('class.multimediaImage.php');
52 require_once('class.multimediaImageField.php');
53 require_once('class.multimediaTag.php');
54 
55 define('AUDIO_CHOICE', 3);
56 define('VIDEO_CHOICE', 2);
57 define('IMAGE_CHOICE', 1);
58 
78 class multimedia extends AbstractEvtClass {
79 
84 
88  private $_title_map;
89 
93  private $_title_slider;
94 
98  private $_title_box;
99 
104 
109 
114 
118  private $_box_tpl_code;
119 
124 
129 
134 
139 
143  private $_gallery_ifp;
144 
149 
154 
155  /*
156  * @brief Peso campo nome galleria nella ricerca gallerie
157  */
159 
160  /*
161  * @brief Peso campo descrizione galleria nella ricerca gallerie
162  */
164 
165  /*
166  * @brief Peso campo nome media nella ricerca gallerie
167  */
169 
170  /*
171  * @brief Peso campo descrizione media nella ricerca gallerie
172  */
174 
175  /*
176  * @brief Peso campo tags media nella ricerca gallerie
177  */
179 
180  /*
181  * @brief Peso campo nome media nella ricerca media
182  */
184 
185  /*
186  * @brief Peso campo descrizione media nella ricerca media
187  */
189 
190  /*
191  * @brief Peso campo tags media nella ricerca media
192  */
194 
198  private $_tbl_opt;
199 
203  private $_tbl_usr;
204 
209  private $_group_1;
210 
215  private $_group_2;
216 
220  private $_options;
221 
226 
231 
232  /*
233  * Parametro action letto da url
234  */
235  private $_action;
236 
237  /*
238  * Parametro block letto da url
239  */
240  private $_block;
241 
245  private $_view_dir;
246 
253  function __construct($mdlId) {
254 
255  parent::__construct();
256 
257  $this->_instance = $mdlId;
258  $this->_instanceName = $this->_db->getFieldFromId($this->_tbl_module, 'name', 'id', $this->_instance);
259  $this->_instanceLabel = $this->_db->getFieldFromId($this->_tbl_module, 'label', 'id', $this->_instance);
260 
261  $this->_data_dir = $this->_data_dir.$this->_os.$this->_instanceName;
262  $this->_data_www = $this->_data_www."/".$this->_instanceName;
263 
264  $this->_tbl_opt = 'multimedia_opt';
265  $this->_tbl_usr = 'multimedia_usr';
266 
267  $this->setAccess();
268  $this->setGroups();
269 
270  $this->_view_dir = dirname(__FILE__).OS.'view';
271 
272  $box_promoted_code_dft = "<div class=\"thumbitem\">{{ thumb }}<div style=\"font-size: 1.1em; margin-top: 5px;margin-bottom: 8px;\">{{ name|link }}</div></div>";
273  $box_tpl_code_dft = "<div class=\"thumbitem\">{{ thumb }}<div style=\"font-size: 1.1em; margin-top: 5px;margin-bottom: 8px;\">{{ name|link }}</div></div>";
274  $tpl2_cell_dft = "{{ thumb }}<p>{{ name|link }}</p>";
275  $tpl1_row_dft = "<td class=\"thumb\">{{ thumb }}</td><td><span class=\"date\">{{ last_edit_date }}</span><br />{{ name|link }}{{ description|chars:200 }}</td>";
276  $gallery_code_exp = _("Le proprietà della galleria devono essere inserite all'interno di doppie parentesi {{ proprietà }}. Proprietà disponibili:<br/>");
277  $gallery_code_exp .= "<ul>";
278  $gallery_code_exp .= "<li><b>thumb</b>: "._('thumbnail')."</li>";
279  $gallery_code_exp .= "<li><b>thumb_url</b>: "._('thumbnail url')."</li>";
280  $gallery_code_exp .= "<li><b>name</b>: "._('nome')."</li>";
281  $gallery_code_exp .= "<li><b>description</b>: "._('descrizione')."</li>";
282  $gallery_code_exp .= "<li><b>insertion_date</b>: "._('data di creazione della galleria')."</li>";
283  $gallery_code_exp .= "<li><b>last_edit_date</b>: "._('data di ultimo inserimento immagine')."</li>";
284  $gallery_code_exp .= "</ul>";
285  $gallery_code_exp .= _("Inoltre si possono eseguire dei filtri o aggiungere link facendo seguire il nome della proprietà dai caratteri '|filtro'. Disponibili:<br />");
286  $gallery_code_exp .= "<ul>";
287  $gallery_code_exp .= "<li><b><span style='text-style: normal'>|link</span></b>: "._('aggiunge il link che porta alla vista della galleria alla proprietà')."</li>";
288  $gallery_code_exp .= "<li><b><span style='text-style: normal'>|chars:n</span></b>: "._('mostra solo n caratteri della proprietà')."</li>";
289  $gallery_code_exp .= "<li><b><span style='text-style: normal'>thumb|class:name_class</span></b>: "._('aggiunge la classe name_class alla thumb')."</li>";
290  $gallery_code_exp .= "</ul>";
291 
292 
293  $this->_optionsValue = array(
294  'title_box'=>_("Multimedia"),
295  'title_list_galleries'=>_("Galleria multimediale"),
296  'title_map'=>_("Mappa geolocalizzazione media"),
297  'title_slider'=>'',
298  'image_max_width'=>1024,
299  'thumb_dimension'=>160,
300  'box_promoted_code'=>$box_promoted_code_dft,
301  'box_tpl_code'=>$box_tpl_code_dft,
302  'box_num_galleries'=>3,
303  'list_galleries_tpl'=>1,
304  'list_galleries_tpl_ifp'=>'20',
305  'gallery_ifp'=>'40',
306  'list_galleries_tpl1_code'=>$tpl1_row_dft,
307  'list_galleries_tpl2_cols'=>'',
308  'list_galleries_tpl2_code'=>$tpl2_cell_dft,
309  'relevance_gallery_gname'=>50,
310  'relevance_gallery_gdescription'=>10,
311  'relevance_gallery_mname'=>5,
312  'relevance_gallery_mdescription'=>2,
313  'relevance_gallery_mtags'=>5,
314  'relevance_media_mname'=>50,
315  'relevance_media_mdescription'=>10,
316  'relevance_media_mtags'=>25,
317  );
318 
319  $this->_title_box = htmlChars($this->setOption('title_box', array('value'=>$this->_optionsValue['title_box'], 'translation'=>true)));
320  $this->_title_list_galleries = htmlChars($this->setOption('title_list_galleries', array('value'=>$this->_optionsValue['title_list_galleries'], 'translation'=>true)));
321  $this->_title_map = htmlChars($this->setOption('title_map', array('value'=>$this->_optionsValue['title_map'], 'translation'=>true)));
322  $this->_title_slider = htmlChars($this->setOption('title_slider', array('value'=>$this->_optionsValue['title_slider'], 'translation'=>true)));
323  $this->_image_max_width = $this->setOption('image_max_width', array('value'=>$this->_optionsValue['image_max_width']));
324  $this->_thumb_dimension = $this->setOption('thumb_dimension', array('value'=>$this->_optionsValue['thumb_dimension']));
325  $this->_box_promoted_code = $this->setOption('box_promoted_code', array('value'=>$this->_optionsValue['box_promoted_code'], 'translation'=>true));
326  $this->_box_tpl_code = $this->setOption('box_tpl_code', array('value'=>$this->_optionsValue['box_tpl_code'], 'translation'=>true));
327  $this->_box_num_galleries = $this->setOption('box_num_galleries', array('value'=>$this->_optionsValue['box_num_galleries']));
328  $this->_list_galleries_tpl = $this->setOption('list_galleries_tpl', array('value'=>$this->_optionsValue['list_galleries_tpl'], 'translation'=>true));
329  $this->_list_galleries_tpl_ifp = $this->setOption('list_galleries_tpl_ifp', array('value'=>$this->_optionsValue['list_galleries_tpl_ifp']));
330  $this->_gallery_ifp = $this->setOption('gallery_ifp', array('value'=>$this->_optionsValue['gallery_ifp']));
331  $this->_list_galleries_tpl1_code = $this->setOption('list_galleries_tpl1_code', array('value'=>$this->_optionsValue['list_galleries_tpl1_code'], 'translation'=>true));
332  $this->_list_galleries_tpl2_cols = $this->setOption('list_galleries_tpl2_cols', array('value'=>$this->_optionsValue['list_galleries_tpl2_cols']));
333  $this->_list_galleries_tpl2_code = $this->setOption('list_galleries_tpl2_code', array('value'=>$this->_optionsValue['list_galleries_tpl2_code'], 'translation'=>true));
334  $this->_relevance_gallery_gname = $this->setOption('relevance_gallery_gname', array('value'=>$this->_optionsValue['relevance_gallery_gname']));
335  $this->_relevance_gallery_gdescription = $this->setOption('relevance_gallery_gdescription', array('value'=>$this->_optionsValue['relevance_gallery_gdescription']));
336  $this->_relevance_gallery_mname = $this->setOption('relevance_gallery_mname', array('value'=>$this->_optionsValue['relevance_gallery_mname']));
337  $this->_relevance_gallery_mdescription = $this->setOption('relevance_gallery_mdescription', array('value'=>$this->_optionsValue['relevance_gallery_mdescription']));
338  $this->_relevance_gallery_mtags = $this->setOption('relevance_gallery_mtags', array('value'=>$this->_optionsValue['relevance_gallery_mtags']));
339  $this->_relevance_media_mname = $this->setOption('relevance_media_mname', array('value'=>$this->_optionsValue['relevance_media_mname']));
340  $this->_relevance_media_mdescription = $this->setOption('relevance_media_mdescription', array('value'=>$this->_optionsValue['relevance_media_mdescription']));
341  $this->_relevance_media_mtags = $this->setOption('relevance_media_mtags', array('value'=>$this->_optionsValue['relevance_media_mtags']));
342 
343  $this->_options = new options($this->_className, $this->_instance);
344  $this->_optionsLabels = array(
345  "title_box"=>array(
346  'label'=>_("Titolo box"),
347  'value'=>$this->_optionsValue['title_box'],
348  'section'=>true,
349  'section_title'=>_('Titoli delle viste pubbliche')
350  ),
351  "title_list_galleries"=>array(
352  'label'=>_("Titolo lista gallerie"),
353  'value'=>$this->_optionsValue['title_list_galleries']
354  ),
355  "title_map"=>array(
356  'label'=>_("Titolo mappa"),
357  'value'=>$this->_optionsValue['title_map']
358  ),
359  "title_slider"=>array(
360  'label'=>_("Titolo slider"),
361  'value'=>$this->_optionsValue['title_slider']
362  ),
363  "image_max_width"=>array(
364  'label'=>_("Larghezza massima immagini (px)"),
365  'value'=>$this->_optionsValue['image_max_width'],
366  'section'=>true,
367  'section_title'=>_('Opzioni di ridimensionamento')
368  ),
369  "thumb_dimension"=>array(
370  'label'=>_("Dimensione lato lungo della thumbnail (px)"),
371  'value'=>$this->_optionsValue['thumb_dimension']
372  ),
373  "box_promoted_code"=>array(
374  'label'=>array(_("Codice galleria promossa"), $gallery_code_exp),
375  'value'=>$this->_optionsValue['box_promoted_code'],
376  'section'=>true,
377  'section_title'=>_('Opzioni vista box'),
378  'section_description'=>_('La vista box è una lista che mostra le ultime n gallerie modificate. Ciascun elemento viene inserito all\'interno di un elemento <b>li</b>. Se esiste una galleria "promossa" questa viene inserita in testa alla lista.'),
379  "required"=>false
380  ),
381  "box_tpl_code"=>array(
382  'label'=>array(_("Codice singolo elemento"), $gallery_code_exp),
383  'value'=>$this->_optionsValue['box_tpl_code'],
384  "required"=>false
385  ),
386  "box_num_galleries"=>array(
387  'label'=>_("Numero di gallerie mostrate"),
388  'value'=>$this->_optionsValue['box_num_galleries']
389  ),
390  "list_galleries_tpl"=>array(
391  'label'=>_("Template della vista lista gallerie<br />1. tabella 1 galleria per riga<br />2. tabella n thumb per riga"),
392  'value'=>$this->_optionsValue['list_galleries_tpl'],
393  'section'=>true,
394  'section_title'=>_('Template lista gallerie')
395  ),
396  "list_galleries_tpl_ifp"=>array(
397  'label'=>_("Numero massimo di gallerie per pagina"),
398  'value'=>$this->_optionsValue['list_galleries_tpl_ifp'],
399  "required"=>false
400  ),
401  "gallery_ifp"=>array(
402  'label'=>_("Numero massimo di media per pagina"),
403  'value'=>$this->_optionsValue['gallery_ifp'],
404  "required"=>false
405  ),
406  "list_galleries_tpl1_code"=>array(
407  'label'=>array(_("Codice riga"), $gallery_code_exp),
408  'value'=>$this->_optionsValue['list_galleries_tpl1_code'],
409  'section'=>true,
410  'section_title'=>_('Opzioni template 1 galleria per riga'),
411  "required"=>false
412  ),
413  "list_galleries_tpl2_cols"=>array(
414  'label'=>_("Numero di gallerie per riga"),
415  'value'=>$this->_optionsValue['list_galleries_tpl2_cols'],
416  'section'=>true,
417  'section_title'=>_('Opzioni template n gallerie per riga'),
418  "required"=>false
419  ),
420  "list_galleries_tpl2_code"=>array(
421  'label'=>array(_("Codice cella"), $gallery_code_exp),
422  'value'=>$this->_optionsValue['list_galleries_tpl2_code'],
423  "required"=>false
424  ),
425  "relevance_gallery_gname"=>array(
426  'label'=>_("Peso nome galleria nella ricerca gallerie"),
427  'value'=>$this->_optionsValue['relevance_gallery_gname'],
428  'section'=>true,
429  'section_title'=>_('Configurazione parametri di ricerca'),
430  'section_description'=>"<p>"._("La rilevanza di un risultato della ricerca è data dalla somma dei pesi assegnati alla presenza della chiave di ricerca nei campi ed il numero di occorrenze della chiave di ricerca negli stessi. Le occorrenze hanno di default valore 1. Modificare i parametri che seguono a seconda dell'importanza che si vuole attribuire ai vari campi. Esempio: se si considera importante ai fini della ricerca il riscontro di una chiave all'interno dei tags aumentare il valore del 'peso tag media' rispetto agli altri parametri.")."</p>",
431  "required"=>false
432  ),
433  "relevance_gallery_gdescription"=>array(
434  'label'=>_("Peso descrizione galleria nella ricerca gallerie"),
435  'value'=>$this->_optionsValue['relevance_gallery_gdescription'],
436  "required"=>false
437  ),
438  "relevance_gallery_mname"=>array(
439  'label'=>_("Peso nome media nella ricerca gallerie"),
440  'value'=>$this->_optionsValue['relevance_gallery_mname'],
441  "required"=>false
442  ),
443  "relevance_gallery_mdescription"=>array(
444  'label'=>_("Peso descrizione media nella ricerca gallerie"),
445  'value'=>$this->_optionsValue['relevance_gallery_mdescription'],
446  "required"=>false
447  ),
448  "relevance_gallery_mtags"=>array(
449  'label'=>_("Peso tag media nella ricerca gallerie"),
450  'value'=>$this->_optionsValue['relevance_gallery_mtags'],
451  "required"=>false
452  ),
453  "relevance_media_mname"=>array(
454  'label'=>_("Peso nome media nella ricerca media"),
455  'value'=>$this->_optionsValue['relevance_media_mname'],
456  "required"=>false
457  ),
458  "relevance_media_mdescription"=>array(
459  'label'=>_("Peso descrizione media nella ricerca media"),
460  'value'=>$this->_optionsValue['relevance_media_mdescription'],
461  "required"=>false
462  ),
463  "relevance_media_mtags"=>array(
464  'label'=>_("Peso tag media nella ricerca media"),
465  'value'=>$this->_optionsValue['relevance_media_mtags'],
466  "required"=>false
467  ),
468  );
469 
470  $this->_action = cleanVar($_REQUEST, 'action', 'string', '');
471  $this->_block = cleanVar($_REQUEST, 'block', 'string', '');
472 
473  }
474 
481  public static function getClassElements() {
482 
483  return array(
484  "tables"=>array(
485  'multimedia_slider',
486  'multimedia_gallery',
487  'multimedia_grp',
488  'multimedia_item',
489  'multimedia_item_tag',
490  'multimedia_license',
491  'multimedia_opt',
492  'multimedia_tag',
493  'multimedia_usr',
494  'multimedia_video_platform'
495  ),
496  "css"=>array(
497  'multimedia.css',
498  'NivooSlider.css'
499  ),
500  "folderStructure"=>array(
501  CONTENT_DIR.OS.'multimedia'=>array(
502  'image' => null,
503  'audio' => null,
504  'thumb' => null
505  )
506  )
507  );
508 
509  }
510 
519  public function deleteInstance() {
520 
521  $this->accessGroup('');
522 
523  /*
524  * delete records and translations from table multimedia_gallery
525  */
526  $query = "SELECT id FROM ".multimediaGallery::$tbl_gallery." WHERE instance='$this->_instance'";
527  $a = $this->_db->selectquery($query);
528  if(sizeof($a)>0)
529  foreach($a as $b)
530  language::deleteTranslations(multimediaGallery::$tbl_gallery, $b['id']);
531 
532  $query = "DELETE FROM ".multimediaGallery::$tbl_gallery." WHERE instance='$this->_instance'";
533  $result = $this->_db->actionquery($query);
534 
535  /*
536  * delete records and translations from table multimedia_item and tag associations
537  */
538  $query = "SELECT id FROM ".multimediaItem::$tbl_item." WHERE instance='$this->_instance'";
539  $a = $this->_db->selectquery($query);
540  if(sizeof($a)>0)
541  foreach($a as $b) {
542  language::deleteTranslations(multimediaItem::$tbl_item, $b['id']);
543  $item = new multimediaItem($b['id'], $this);
544  $item->delete();
545  }
546 
547  /*
548  * delete records and translations from table multimedia_license
549  */
550  $query = "SELECT id FROM ".multimediaLicense::$tbl_license." WHERE instance='$this->_instance'";
551  $a = $this->_db->selectquery($query);
552  if(sizeof($a)>0)
553  foreach($a as $b)
554  language::deleteTranslations(multimediaLicense::$tbl_license, $b['id']);
555 
556  $query = "DELETE FROM ".multimediaLicense::$tbl_license." WHERE instance='$this->_instance'";
557  $result = $this->_db->actionquery($query);
558 
559  /*
560  * delete records and translations from table multimedia_slider
561  */
562  $query = "SELECT id FROM ".multimediaSlider::$tbl_slider." WHERE instance='$this->_instance'";
563  $a = $this->_db->selectquery($query);
564  if(sizeof($a)>0)
565  foreach($a as $b)
566  language::deleteTranslations(multimediaSLider::$tbl_slider, $b['id']);
567 
568  $query = "DELETE FROM ".multimediaSlider::$tbl_slider." WHERE instance='$this->_instance'";
569  $result = $this->_db->actionquery($query);
570 
571  /*
572  * delete records and translations from table multimedia_video_platform
573  */
574  $query = "SELECT id FROM ".multimediaVideoPlatform::$tbl_video_platform." WHERE instance='$this->_instance'";
575  $a = $this->_db->selectquery($query);
576  if(sizeof($a)>0)
577  foreach($a as $b)
578  language::deleteTranslations(multimediaVideoPlatform::$tbl_video_platform, $b['id']);
579 
580  $query = "DELETE FROM ".multimediaVideoPlatform::$tbl_video_platform." WHERE instance='$this->_instance'";
581  $result = $this->_db->actionquery($query);
582 
583  /*
584  * delete options
585  */
586  $opt_id = $this->_db->getFieldFromId($this->_tbl_opt, "id", "instance", $this->_instance);
587  language::deleteTranslations($this->_tbl_opt, $opt_id);
588 
589  $query = "DELETE FROM ".$this->_tbl_opt." WHERE instance='$this->_instance'";
590  $result = $this->_db->actionquery($query);
591 
592  /*
593  * delete group users association
594  */
595  $query = "DELETE FROM ".$this->_tbl_usr." WHERE instance='$this->_instance'";
596  $result = $this->_db->actionquery($query);
597 
598  /*
599  * delete css files
600  */
601  $classElements = $this->getClassElements();
602  foreach($classElements['css'] as $css) {
603  unlink(APP_DIR.OS.$this->_className.OS.baseFileName($css)."_".$this->_instanceName.".css");
604  }
605 
606  /*
607  * delete folder structure
608  */
609  foreach($classElements['folderStructure'] as $fld=>$fldStructure) {
610  $this->deleteFileDir($fld.OS.$this->_instanceName, true);
611  }
612 
613  return $result;
614  }
615 
623  private function setGroups(){
624 
625  // drafting
626  $this->_group_1 = array($this->_list_group[0], $this->_list_group[1]);
627 
628  // Viewer
629  $this->_group_2 = array($this->_list_group[0], $this->_list_group[1], $this->_list_group[2]);
630 
631  }
632 
642  public static function outputFunctions() {
643 
644  $list = array(
645  "box" => array("label"=>_("Box ultime gallerie modificate"), "role"=>'1'),
646  "galleries" => array("label"=>_("Lista gallerie"), "role"=>'1'),
647  "slider" => array("label"=>_("Slider delle immagini della galleria selezionata"), "role"=>'1'),
648  "map" => array("label"=>_("Mappa media geolocalizzati, impostare le dimesioni della mappa da css. Se in template con la vista galleria mostra i media associati alla galleria in questione."), "role"=>'1'),
649  );
650 
651  return $list;
652  }
653 
659  public function defaultGalleryThumbPath() {
660  return $this->_class_img.'/'.'gallery_thumb.png';
661  }
662 
668  public function defaultImageThumbPath() {
669  return $this->_class_img.'/'.'image_thumb.png';
670  }
671 
677  public function defaultVideoThumbPath() {
678  return $this->_class_img.'/'.'video_thumb.png';
679  }
680 
686  public function defaultAudioThumbPath() {
687  return $this->_class_img.'/'.'audio_thumb.png';
688  }
689 
696  public function getBaseAbsPath($type) {
697 
698  return $this->_data_dir.OS.$type;
699 
700  }
701 
708  public function getBasePath($type) {
709 
710  return $this->_data_www.'/'.$type;
711 
712  }
713 
719  public function getThumbDimension() {
720 
722 
723  }
724 
730  public function getImageMaxWidth() {
731 
733 
734  }
735 
741  public function box() {
742 
743  $this->setAccess($this->_access_base);
744 
745  $registry = registry::instance();
746  $registry->addCss($this->_class_www."/multimedia_".$this->_instanceName.".css");
747 
748  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
749  $private = true;
750  }
751  else {
752  $private = false;
753  }
754 
755  $promoted = multimediaGallery::getLEPromoted($this, array('private'=>$private, 'published'=>true));
756 
757  $where_q = $promoted ? 'id != \'' . $promoted->id . '\'' : '';
758 
759  $limit = array(0, $this->_box_num_galleries);
760  $gobjs = multimediaGallery::get($this, array('private'=>$private, 'published'=>true, 'where'=>$where_q, 'order'=>'last_edit_date DESC', 'limit'=>$limit));
761 
762  preg_match_all("#{{[^}]+}}#", $this->_box_tpl_code, $matches);
763 
764  $lis = array();
765  foreach($gobjs as $g) {
766  $li = $this->parseTemplate($g, $this->_box_tpl_code, $matches);
767  $lis[] = $li;
768  }
769 
770  $promoted_text = '';
771  if($promoted) {
772  preg_match_all("#{{[^}]+}}#", $this->_box_promoted_code, $matches);
773  $promoted_text = $this->parseTemplate($promoted, $this->_box_promoted_code, $matches);
774  }
775 
776  $view = new view($this->_view_dir);
777 
778  $view->setViewTpl('box');
779  $view->assign('section_id', 'box_'.$this->_className.'_'.$this->_instanceName);
780  $view->assign('title', $this->_title_box);
781  $view->assign('promoted', $promoted_text);
782  $view->assign('lis', $lis);
783  $view->assign('all_galleries_url', $this->_plink->aLink($this->_instanceName, 'galleries'));
784 
785  return $view->render();
786 
787  }
788 
794  public function slider() {
795 
796  $this->setAccess($this->_access_base);
797 
798  $slider = multimediaSlider::getFromInstance($this);
799  if(!$slider->id) return '';
800 
801  $registry = registry::instance();
802  $registry->addJs($this->_class_www."/NivooSlider.js");
803  $registry->addJs($this->_class_www."/multimedia.js");
804  $registry->addCss($this->_class_www."/multimedia_".$this->_instanceName.".css");
805  $registry->addCss($this->_class_www."/NivooSlider_".$this->_instanceName.".css");
806 
807  $content = preg_replace("#{{\s*slider\s*}}#", $this->sliderContent($slider), $slider->ml('tpl'));
808 
809  $view = new view($this->_view_dir);
810  $view->setViewTpl('slider');
811  $view->assign('section_id', 'slider_'.$this->_className.'_'.$this->_instanceName);
812  $view->assign('title', $this->_title_slider);
813  $view->assign('content', $content);
814 
815  return $view->render();
816  }
817 
824  private function sliderContent($slider) {
825 
826 
827  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
828  $private = true;
829  }
830  else {
831  $private = false;
832  }
833 
834  $items = $slider->getItems($this, $private);
835 
836  $images = array();
837  foreach($items as $item) {
838  $images[] = $item->show($this);
839  }
840 
841  list($effect, $orientation) = $slider->getEffectOrientation();
842 
843  $view = new view($this->_view_dir);
844  $view->setViewTpl('slider_content');
845  $view->assign('container_id', 'slider_container_multimedia_'.$this->_instanceName);
846  $view->assign('images', $images);
847  $view->assign('animation_effect_duration', $slider->animation_effect_duration);
848  $view->assign('auto_play', $slider->auto_play);
849  $view->assign('show_ctrls', $slider->show_ctrls);
850  $view->assign('mouseout_hide_ctrls', $slider->mouseout_hide_ctrls);
851  $view->assign('effect', $effect);
852  $view->assign('orientation', $orientation);
853  $view->assign('animation_interval', $slider->animation_interval);
854  $view->assign('pause_on_hover', $slider->pause_interval_mouseover);
855  $view->assign('slices', $slider->slices);
856 
857  return $view->render();
858  }
859 
865  public function detail() {
866 
867  $this->setAccess($this->_access_base);
868 
869  $id = cleanVar($_GET, 'id', 'string', '');
870 
871  $item = multimediaItem::getObject($id, $this);
872  if(!$item || !$item->id) {
873  error::raise404();
874  }
875 
876  if($item->private && !$this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
877  error::raise404();
878  }
879 
880  $registry = registry::instance();
881  $registry->addJs("http://maps.googleapis.com/maps/api/js?key=AIzaSyArAE-uBvCZTRaf_eaFn4umUdESmoUvoxM&sensor=true");
882 
883  $license = array();
884  if($item->license) {
885  $l = new multimediaLicense($item->license, $this);
886  $license = array(
887  'name' => htmlChars($l->name),
888  'description' => htmlChars($l->description),
889  'url' => $l->url
890  );
891  }
892 
893  $galleries = array();
894  if($item->galleries) {
895  foreach(explode(',', $item->galleries) as $gid) {
896  if($gid = trim($gid)) {
897  $g = new multimediaGallery($gid, $this);
898  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2) || !$g->private) {
899  $galleries[] = array(
900  'name' => htmlChars($g->name),
901  'url' => $this->_plink->aLink($this->_instanceName, 'gallery', array('id'=>$g->slug)),
902  );
903  }
904  }
905  }
906  }
907 
908  $view = new view($this->_view_dir);
909  $view->setViewTpl('detail');
910  $view->assign('section_id', 'detail_'.$this->_className.'_'.$this->_instanceName);
911  $view->assign('title', htmlChars($item->name));
912  $view->assign('galleries', $galleries);
913  $view->assign('media', $item->show($this));
914  $view->assign('description', htmlChars($item->description));
915  $view->assign('credits', htmlChars($item->credits));
916  $view->assign('license', $license);
917  $view->assign('lat', $item->lat);
918  $view->assign('lng', $item->lng);
919  $view->assign('tags', $item->tags);
920  $view->assign('insertion_date', $item->insertion_date);
921  $view->assign('last_edit_date', date('d/m/Y', strtotime($item->last_edit_date)));
922 
923  return $view->render();
924  }
925 
933  public function map() {
934 
935  $this->setAccess($this->_access_base);
936 
937  $registry = registry::instance();
938  $registry->addJs("http://maps.googleapis.com/maps/api/js?key=AIzaSyArAE-uBvCZTRaf_eaFn4umUdESmoUvoxM&sensor=true");
939  $registry->addJs($this->_class_www."/markerclusterer_packed.js");
940  $registry->addJs($this->_class_www."/multimedia.js");
941  $registry->addCss($this->_class_www."/multimedia_".$this->_instanceName.".css");
942 
943  $session = session::instance();
944 
945  $method = '';
946  $evtKey = isset($_GET[EVT_NAME])? is_array($_GET[EVT_NAME])? key($_GET[EVT_NAME]):false:false;
947  if($evtKey) {
948  $parts = explode('-', $evtKey);
949  $method = $parts[1];
950  }
951 
952  if($method == 'gallery') {
953  $slug = cleanVar($_GET, 'id', 'string', '');
954  $galleryobj = multimediaGallery::getFromSlug($slug, $this);
955  $gallery = $galleryobj->id;
956  }
957  else {
958  $gallery = null;
959  }
960 
961  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
962  $private = true;
963  }
964  else {
965  $private = false;
966  }
967 
968  if($method == 'gallery' && $session->multimedia_media_search) {
969  $results = $session->multimedia_media_search_results;
970  $items = array();
971  foreach($results as $r) {
972  $items[] = multimediaItem::getObject($r, $this);
973  }
974  }
975  else {
976  $items = multimediaItem::get($this, array('published'=>true, 'private'=>true, 'geolocalization'=>true, 'gallery'=>$gallery));
977  }
978 
979  $media = array();
980  foreach($items as $item) {
981  $media[] = array(
982  'id'=>$item->id,
983  'name'=>$item->name,
984  'lat'=>$item->lat,
985  'lng'=>$item->lng,
986  'url'=>$this->_plink->aLink($this->_instanceName, 'detail', array('id'=>$item->id)),
987  'thumb_path'=>$item->thumbPath($this)
988  );
989  }
990 
991  $view = new view($this->_view_dir);
992  $view->setViewTpl('map');
993  $view->assign('section_id', ($method ? $method.'_' : '').'map_'.$this->_className.'_'.$this->_instanceName);
994  $view->assign('title', htmlChars($this->_title_map));
995  $view->assign('media', $media);
996 
997  return $view->render();
998  }
999 
1005  public function gallery() {
1006 
1007  $this->setAccess($this->_access_base);
1008 
1009  $id = cleanVar($_GET, 'id', 'string', '');
1010 
1011  $gallery = multimediaGallery::getFromSlug($id, $this);
1012  if(!$gallery || !$gallery->id) {
1013  error::raise404();
1014  }
1015 
1016  if($gallery->private && !$this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
1017  error::raise404();
1018  }
1019 
1020  $registry = registry::instance();
1021  $registry->addJs($this->_class_www."/moogallery.js");
1022  $registry->addCss($this->_class_www."/moogallery.css");
1023  $session = session::instance();
1024 
1025  if(isset($_POST['submit_search']) || isset($_POST['submit_search_all'])) {
1026  $this->actionSearchMedia($gallery);
1027  }
1028 
1029  if($session->multimedia_media_search) {
1030  $results = $session->multimedia_media_search_results;
1031  $num_items = count($results);
1032 
1033  $pagination = new pagelist($this->_gallery_ifp, $num_items, 'array');
1034 
1035  $end = min($pagination->start() + $this->_gallery_ifp, $num_items);
1036  $items = array();
1037  for($i = $pagination->start(); $i < $end; $i++) {
1038  $items[] = multimediaItem::getObject($results[$i], $this);
1039  }
1040 
1041  $search_text = $session->multimedia_media_search;
1042  }
1043  else {
1044 
1045  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
1046  $private = true;
1047  }
1048  else {
1049  $private = false;
1050  }
1051 
1052  $num_items = $gallery->getItemsCount($this, array('private'=>$private, 'published'=>true));
1053  $pagination = new pagelist($this->_gallery_ifp, $num_items, 'array');
1054 
1055  $limit = array($pagination->start(), $this->_gallery_ifp);
1056  $items = $gallery->getItems($this, array('private'=>$private, 'published'=>true, 'limit'=>$limit));
1057 
1058  $search_text = '';
1059  }
1060 
1061  $js_items_ar = array();
1062  foreach($items as $item) {
1063  $js_items_ar[] = $item->getMoogalleryListJs($this, $this->_plink->aLink($this->_instanceName, 'detail'));
1064  }
1065 
1066  $myform = new form('form_search_media', 'post', false, array('tblLayout'=>false));
1067  $form_search = $myform->form($this->_plink->aLink($this->_instanceName, 'gallery', array('id'=>$gallery->slug)), false, '');
1068  $form_search .= $myform->input('search_text', 'text', htmlInput($search_text), array('hint'=>_('cerca media'), 'size'=>20, 'maxlength'=>40));
1069  $form_search .= '&#160;'.$myform->input('submit_search', 'submit', _('cerca'), array('classField'=>'submit'));
1070  $form_search .= '&#160;'.$myform->input('submit_search_all', 'submit', _('tutti'), array('classField'=>'submit'));
1071  $form_search .= $myform->cform();
1072 
1073  $view = new view($this->_view_dir);
1074  $view->setViewTpl('gallery');
1075  $view->assign('section_id', 'gallery_'.$this->_className.'_'.$this->_instanceName);
1076  $view->assign('form_search', $form_search);
1077  $view->assign('search_text', $search_text);
1078  $view->assign('title', htmlChars($gallery->name));
1079  $view->assign('galleries_url', $this->_plink->aLink($this->_instanceName, 'galleries'));
1080  $view->assign('js_items', $js_items_ar);
1081  $view->assign('pagination_summary', $pagination->reassumedPrint());
1082  $view->assign('pagination_navigation', $pagination->listReferenceGINO($this->_plink->aLink($this->_instanceName, 'gallery', '', 'id='.$id, array("basename"=>false))));
1083 
1084  return $view->render();
1085 
1086  }
1087 
1094  public function galleries() {
1095 
1096  $this->setAccess($this->_access_base);
1097 
1098  if(isset($_POST['submit_search']) || isset($_POST['submit_search_all'])) {
1099  $this->actionSearchGalleries();
1100  }
1101 
1102  $registry = registry::instance();
1103  $registry->addCss($this->_class_www."/".$this->_className."_".$this->_instanceName.".css");
1104 
1105  $session = session::instance();
1106 
1107  if($session->multimedia_galleries_search) {
1108  $results = $session->multimedia_galleries_search_results;
1109  $num_galleries = count($results);
1110 
1111  $pagination = new pagelist($this->_list_galleries_tpl_ifp, $num_galleries, 'array');
1112 
1113  $end = min($pagination->start() + $this->_list_galleries_tpl_ifp, $num_galleries);
1114  $gobjs = array();
1115  for($i = $pagination->start(); $i < $end; $i++) {
1116  $gobjs[] = new multimediaGallery($results[$i], $this);
1117  }
1118 
1119  $search_text = $session->multimedia_galleries_search;
1120  }
1121  else {
1122 
1123  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
1124  $private = true;
1125  }
1126  else {
1127  $private = false;
1128  }
1129 
1130  $num_galleries = multimediaGallery::getCount($this, array('private'=>$private, 'published'=>true));
1131  $pagination = new pagelist($this->_list_galleries_tpl_ifp, $num_galleries, 'array');
1132 
1133  $limit = array($pagination->start(), $this->_list_galleries_tpl_ifp);
1134  $gobjs = multimediaGallery::get($this, array('private'=>$private, 'published'=>true, 'limit'=>$limit));
1135 
1136  $search_text = '';
1137  }
1138 
1139  $rows = array();
1140  $view = new view($this->_view_dir);
1141 
1142  if($this->_list_galleries_tpl == 1) {
1143  $view->setViewTpl('galleries_1');
1144  preg_match_all("#{{[^}]+}}#", $this->_list_galleries_tpl1_code, $matches);
1145 
1146  foreach($gobjs as $g) {
1147  $row = $this->parseTemplate($g, $this->_list_galleries_tpl1_code, $matches);
1148  $rows[] = $row;
1149  }
1150  $view->assign('rows', $rows);
1151  }
1152  elseif($this->_list_galleries_tpl == 2) {
1153  $view->setViewTpl('galleries_2');
1154  preg_match_all("#{{[^}]+}}#", $this->_list_galleries_tpl2_code, $matches);
1155  $i = 0;
1156  $num_gobjs = count($gobjs);
1157  $row = array();
1158  foreach($gobjs as $g) {
1159  $i++;
1160  $row_cell = $this->parseTemplate($g, $this->_list_galleries_tpl2_code, $matches);
1161  $row[] = $row_cell;
1162  if( ($i % $this->_list_galleries_tpl2_cols == 0) || ($num_gobjs == $i) ) {
1163  $rows[] = $row;
1164  $row = array();
1165  }
1166  }
1167  $heads = array();
1168  $view_table = new view();
1169  $view_table->setViewTpl('table');
1170  $view_table->assign('class', 'galleries');
1171  $view_table->assign('caption', '');
1172  $view_table->assign('heads', $heads);
1173  $view_table->assign('rows', $rows);
1174 
1175  $table = $view_table->render();
1176 
1177  $view->assign('table', $table);
1178  }
1179 
1180  $myform = new form('form_search_galleries', 'post', false, array('tblLayout'=>false));
1181  $form_search = $myform->form($this->_plink->aLink($this->_instanceName, 'galleries'), false, '');
1182  $form_search .= $myform->input('search_text', 'text', htmlInput($search_text), array('hint'=>_('cerca nelle gallerie'), 'size'=>20, 'maxlength'=>40));
1183  $form_search .= '&#160;'.$myform->input('submit_search', 'submit', _('cerca'), array('classField'=>'submit'));
1184  $form_search .= '&#160;'.$myform->input('submit_search_all', 'submit', _('tutte'), array('classField'=>'submit'));
1185  $form_search .= $myform->cform();
1186 
1187  $view->assign('title', $this->_title_list_galleries);
1188  $view->assign('form_search', $form_search);
1189  $view->assign('search_text', $search_text);
1190  $view->assign('section_id', 'galleries_'.$this->_className.'_'.$this->_instanceName);
1191  $view->assign('pagination_summary', $pagination->reassumedPrint());
1192  $view->assign('pagination_navigation', $pagination->listReferenceGINO($this->_plink->aLink($this->_instanceName, 'galleries', '', null, array("basename"=>false))));
1193 
1194  return $view->render();
1195 
1196  }
1197 
1205  private function actionSearchMedia($gallery) {
1206 
1207  require_once(CLASSES_DIR.OS.'class.search.php');
1208 
1209  $db = db::instance();
1210  $session = session::instance();
1211 
1212  $search_string = cleanVar($_POST, 'search_text', 'string', '');
1213 
1214  $keywords = $this->getKeywords($search_string);
1215 
1216  if(!count($keywords) || isset($_POST['submit_search_all'])) {
1217  unset($session->multimedia_media_search_results);
1218  unset($session->multimedia_media_search);
1219  return 0;
1220  }
1221 
1222  $relevance_mname = $this->_relevance_media_mname;
1223  $relevance_mdescription = $this->_relevance_media_mdescription;
1224  $relevance_mtags = $this->_relevance_media_mtags;
1225 
1226  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
1227  $private = true;
1228  }
1229  else {
1230  $private = false;
1231  }
1232 
1233  $query = "SELECT DISTINCT(m.id), ";
1234  $relevance = "(";
1235  $i = 0;
1236  foreach($keywords as $search_text) {
1237  if($i) $relevance .= " + ";
1238  $i++;
1239  $relevance .= " + IFNULL(
1240  ((m.name REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_mname.", 0
1241  )";
1242  $relevance .= " + IFNULL(
1243  ((m.description REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_mdescription.", 0
1244  )";
1245  $relevance .= " + IFNULL(
1246  ((m.tags REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_mtags.", 0
1247  )";
1248  }
1249  $relevance .= ")";
1250  $query .= $relevance." AS relevance, ";
1251  $occurences = "(";
1252  $i = 0;
1253  foreach($keywords as $search_text) {
1254  if($i) $occurences .= " + ";
1255  $i++;
1256  $occurences .= "+ IFNULL(
1257  ((LENGTH(m.name) - LENGTH(replace_ci(m.name, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1258  )";
1259  $occurences .= "+ IFNULL(
1260  ((LENGTH(m.description) - LENGTH(replace_ci(m.description, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1261  )";
1262  $occurences .= "+ IFNULL(
1263  ((LENGTH(m.tags) - LENGTH(replace_ci(m.tags, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1264  )";
1265  }
1266  $occurences .= ")";
1267  $query .= $occurences.' AS occurences ';
1268  $query .= "FROM ".multimediaItem::$tbl_item." AS m ";
1269  $query .= "WHERE m.galleries REGEXP '[[:<:]]".$gallery->id."[[:>:]]' AND ";
1270  if(!$private) {
1271  $query .= "m.private = '0' AND ";
1272  }
1273  $query .= "(";
1274  $i = 0;
1275  foreach($keywords as $search_text) {
1276  if($i) $query .= " OR ";
1277  $i++;
1278  $query .= "m.name REGEXP '[[:<:]]".$search_text."[[:>:]]' OR ";
1279  $query .= "m.description REGEXP '[[:<:]]".$search_text."[[:>:]]' OR ";
1280  $query .= "m.tags REGEXP '[[:<:]]".$search_text."[[:>:]]'";
1281  }
1282  $query .= ")";
1283  $query .= " ORDER BY (relevance + occurences) DESC";
1284 
1285  $rows = $db->selectquery($query);
1286 
1287  $results = array();
1288 
1289  if(count($rows)) {
1290  foreach($rows as $row) {
1291  $results[] = $row['id'];
1292  }
1293  }
1294 
1295  $session->multimedia_media_search_results = $results;
1296  $session->multimedia_media_search = $search_string;
1297  }
1298 
1305  private function actionSearchGalleries() {
1306 
1307  require_once(CLASSES_DIR.OS.'class.search.php');
1308 
1309  $db = db::instance();
1310  $session = session::instance();
1311 
1312  $search_string = cleanVar($_POST, 'search_text', 'string', '');
1313 
1314  $keywords = $this->getKeywords($search_string);
1315 
1316  if(!count($keywords) || isset($_POST['submit_search_all'])) {
1317  unset($session->multimedia_galleries_search_results);
1318  unset($session->multimedia_galleries_search);
1319  return 0;
1320  }
1321 
1322  $relevance_gname = $this->_relevance_gallery_gname;
1323  $relevance_gdescription = $this->_relevance_gallery_gdescription;
1324  $relevance_mname = $this->_relevance_gallery_mname;
1325  $relevance_mdescription = $this->_relevance_gallery_mdescription;
1326  $relevance_mtags = $this->_relevance_gallery_mtags;
1327 
1328  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_2)) {
1329  $private = true;
1330  }
1331  else {
1332  $private = false;
1333  }
1334 
1335  $query = "SELECT DISTINCT(g.id), ";
1336  $relevance = "(";
1337  $i = 0;
1338  foreach($keywords as $search_text) {
1339  if($i) $relevance .= " + ";
1340  $i++;
1341  $relevance .= "IFNULL(
1342  ((g.name REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_gname.", 0
1343  )";
1344  $relevance .= " + IFNULL(
1345  ((g.description REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_gdescription.", 0
1346  )";
1347  $relevance .= " + SUM(IFNULL(
1348  ((m.name REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_mname.", 0
1349  ))";
1350  $relevance .= " + SUM(IFNULL(
1351  ((m.description REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_mdescription.", 0
1352  ))";
1353  $relevance .= " + SUM(IFNULL(
1354  ((m.tags REGEXP '[[:<:]]".$search_text."[[:>:]]') > 0) * ".$relevance_mtags.", 0
1355  ))";
1356  }
1357  $relevance .= ")";
1358  $query .= $relevance.' AS relevance, ';
1359  $occurences = "(";
1360  $i = 0;
1361  foreach($keywords as $search_text) {
1362  if($i) $occurences .= " + ";
1363  $i++;
1364  $occurences .= "IFNULL(
1365  ((LENGTH(g.name) - LENGTH(replace_ci(g.name, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1366  )";
1367  $occurences .= "+ IFNULL(
1368  ((LENGTH(g.description) - LENGTH(replace_ci(g.description, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1369  )";
1370  $occurences .= "+ SUM(IFNULL(
1371  ((LENGTH(m.name) - LENGTH(replace_ci(m.name, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1372  ))";
1373  $occurences .= "+ SUM(IFNULL(
1374  ((LENGTH(m.description) - LENGTH(replace_ci(m.description, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1375  ))";
1376  $occurences .= "+ SUM(IFNULL(
1377  ((LENGTH(m.tags) - LENGTH(replace_ci(m.tags, '".$search_text."', '')))/LENGTH('".$search_text."')), 0
1378  ))";
1379  }
1380  $occurences .= ")";
1381  $query .= $occurences.' AS occurences ';
1382  $query .= "FROM ".multimediaGallery::$tbl_gallery." AS g, ".multimediaItem::$tbl_item." AS m ";
1383  $query .= "WHERE m.galleries REGEXP CONCAT('[[:<:]]', g.id, '[[:>:]]') AND ";
1384  if(!$private) {
1385  $query .= "g.private = '0' AND ";
1386  $query .= "m.private = '0' AND ";
1387  }
1388  $query .= "(";
1389  $i = 0;
1390  foreach($keywords as $search_text) {
1391  if($i) $query .= " OR ";
1392  $i++;
1393  $query .= "g.name REGEXP '[[:<:]]".$search_text."[[:>:]]' OR ";
1394  $query .= "g.description REGEXP '[[:<:]]".$search_text."[[:>:]]' OR ";
1395  $query .= "m.name REGEXP '[[:<:]]".$search_text."[[:>:]]' OR ";
1396  $query .= "m.description REGEXP '[[:<:]]".$search_text."[[:>:]]' OR ";
1397  $query .= "m.tags REGEXP '[[:<:]]".$search_text."[[:>:]]'";
1398  }
1399  $query .= ")";
1400  $query .= " GROUP BY g.id ORDER BY (".$relevance." + ".$occurences.") DESC";
1401 
1402  $rows = $db->selectquery($query);
1403 
1404  $results = array();
1405 
1406  if(count($rows)) {
1407  foreach($rows as $row) {
1408  $results[] = $row['id'];
1409  }
1410  }
1411 
1412  $session->multimedia_galleries_search_results = $results;
1413  $session->multimedia_galleries_search = $search_string;
1414  }
1415 
1423  private function getKeywords($search_string) {
1424 
1425  $clean_string = $this->clearSearchString($search_string);
1426 
1427  $empty_array = array(""," ");
1428 
1429  return array_diff(array_unique(explode(" ", $clean_string)), $empty_array);
1430  }
1431 
1439  private function clearSearchString($search_string) {
1440 
1441  $unconsidered = array("lo", "l", "il", "la", "i", "gli", "le", "uno", "un", "una", "un", "su", "sul", "sulla", "sullo", "sull", "in", "nel", "nello", "nella", "nell", "con", "di", "da", "dei", "d", "della", "dello", "del", "dell", "che", "a", "dal", "è", "e", "per", "non", "si", "al", "ai", "allo", "all", "al", "o");
1442 
1443  $clean_string = strtolower($search_string);
1444 
1445  $clean_string = preg_replace("#\b(".implode("|", $unconsidered).")\b#", "", $clean_string);
1446  $clean_string = preg_replace("#\W|(\s+)#", " ", $clean_string);
1447 
1448  $clean_string = preg_quote($clean_string);
1449 
1450  return $clean_string;
1451  }
1452 
1461  private function parseTemplate($gallery, $tpl, $matches) {
1462 
1463  if(isset($matches[0])) {
1464  foreach($matches[0] as $m) {
1465  $code = trim(preg_replace("#{|}#", "", $m));
1466  if($pos = strrpos($code, '|')) {
1467  $property = substr($code, 0, $pos);
1468  $filter = substr($code, $pos + 1);
1469  }
1470  else {
1471  $property = $code;
1472  $filter = null;
1473  }
1474 
1475  $replace = $this->replaceTplVar($property, $filter, $gallery);
1476  $tpl = preg_replace("#".preg_quote($m)."#", $replace, $tpl);
1477  }
1478  }
1479 
1480  return $tpl;
1481  }
1482 
1491  private function replaceTplVar($property, $filter, $obj) {
1492 
1493  $pre_filter = '';
1494 
1495  if($property == 'thumb') {
1496  $pre_filter = "<img src=\"".$obj->thumbPath($this)."\" alt=\"".jsVar($obj->name)."\" />";
1497  }
1498  elseif($property == 'thumb_url') {
1499  $pre_filter = $obj->thumbPath($this);
1500  }
1501  elseif($property == 'last_edit_date' || $property == 'insertion_date') {
1502  $pre_filter = date('d/m/Y', strtotime($obj->{$property}));
1503  }
1504  elseif($property == 'description' || $property == 'name') {
1505  $pre_filter = htmlChars($obj->{$property});
1506  }
1507  else {
1508  return '';
1509  }
1510 
1511  if(is_null($filter)) {
1512  return $pre_filter;
1513  }
1514 
1515  if($filter == 'link') {
1516  return "<a href=\"".$this->_plink->aLink($this->_instanceName, 'gallery', array('id'=>$obj->slug))."\">".$pre_filter."</a>";
1517  }
1518  elseif(preg_match("#chars:(\d+)#", $filter, $matches)) {
1519  return cutHtmlText($pre_filter, $matches[1], '...', false, false, true, array('endingPosition'=>'in'));
1520  }
1521  elseif(preg_match("#class:(.+)#", $filter, $matches)) {
1522  if(isset($matches[1]) && $property == 'thumb') {
1523  return preg_replace("#<img#", "<img class=\"".$matches[1]."\"", $pre_filter);
1524  }
1525  else return $pre_filter;
1526  }
1527 
1528  }
1529 
1535  public function manageDoc() {
1536 
1537  $this->accessGroup('ALL');
1538 
1539  $method = 'manageDoc';
1540 
1541  $htmltab = new htmlTab(array("linkPosition"=>'right', "title"=>$this->_instanceLabel));
1542  $link_admin = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=permissions\">"._("Permessi")."</a>";
1543  $link_css = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=css\">"._("CSS")."</a>";
1544  $link_options = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=options\">"._("Opzioni")."</a>";
1545  $link_license = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=license\">"._("Licenze")."</a>";
1546  $link_video_platform = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=video_platform\">"._("Piattaforme streaming video")."</a>";
1547  $link_gallery = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=gallery\">"._("Gallerie")."</a>";
1548  $link_slider = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=slider\">"._("Slider")."</a>";
1549  $link_audio = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=audio\">"._("Audio")."</a>";
1550  $link_video = "<a href=\"".$this->_home."?evt[$this->_instanceName-$method]&block=video\">"._("Video")."</a>";
1551  $link_dft = "<a href=\"".$this->_home."?evt[".$this->_instanceName."-$method]\">"._("Immagini")."</a>";
1552 
1553  $sel_link = $link_dft;
1554 
1555  // Variables
1556  $id = cleanVar($_GET, 'id', 'int', '');
1557  $start = cleanVar($_GET, 'start', 'int', '');
1558  // end
1559 
1560  $registry = registry::instance();
1561  $registry->addCss($this->_class_www."/classroom.css");
1562 
1563  if($this->_block == 'css') {
1564  $buffer = sysfunc::manageCss($this->_instance, $this->_className);
1565  $sel_link = $link_css;
1566  }
1567  elseif($this->_block == 'permissions' && $this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, '', '')) {
1568  $buffer = sysfunc::managePermissions($this->_instance, $this->_className);
1569  $sel_link = $link_admin;
1570  }
1571  elseif($this->_block == 'options' && $this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, '', '')) {
1572  $buffer = sysfunc::manageOptions($this->_instance, $this->_className);
1573  $sel_link = $link_options;
1574  }
1575  elseif($this->_block == 'license' && $this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, '', '')) {
1576  $buffer = $this->manageLicense();
1577  $sel_link = $link_license;
1578  }
1579  elseif($this->_block == 'video_platform' && $this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, '', '')) {
1580  $buffer = $this->manageVideoPlatform();
1581  $sel_link = $link_video_platform;
1582  }
1583  elseif($this->_block == 'slider') {
1584  $buffer = $this->manageSlider();
1585  $sel_link = $link_slider;
1586  }
1587  elseif($this->_block == 'gallery') {
1588  $buffer = $this->manageGallery();
1589  $sel_link = $link_gallery;
1590  }
1591  elseif($this->_block == 'audio') {
1592  $buffer = $this->manageAudio();
1593  $sel_link = $link_audio;
1594  }
1595  elseif($this->_block == 'video') {
1596  $buffer = $this->manageVideo();
1597  $sel_link = $link_video;
1598  }
1599  else {
1600  $buffer = $this->manageImage();
1601  }
1602 
1603  // groups privileges
1604  if($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, '', '')) {
1605  $links_array = array($link_admin, $link_css, $link_options, $link_license, $link_video_platform, $link_slider, $link_gallery, $link_audio, $link_video, $link_dft);
1606  }
1607  elseif($this->_access->AccessVerifyGroupIf($this->_className, $this->_instance, $this->_user_group, $this->_group_1)) {
1608  $links_array = array($link_gallery, $link_audio, $link_video, $link_dft);
1609  }
1610  else $links_array = array($link_dft);
1611 
1612  $htmltab->navigationLinks = $links_array;
1613  $htmltab->selectedLink = $sel_link;
1614  $htmltab->htmlContent = $buffer;
1615 
1616  return $htmltab->render();
1617  }
1618 
1624  private function manageSlider() {
1625 
1626  $registry = registry::instance();
1627 
1628  $slider = multimediaSlider::getFromInstance($this);
1629  $allow_insertion = $slider->id ? false : true;
1630 
1631  $admin_table = new adminTable($this, array('allow_insertion'=>$allow_insertion, 'delete_deny'=>'all'));
1632 
1633  $buffer = $admin_table->backOffice(
1634  'multimediaSlider',
1635  array(
1636  'list_display' => array('id', 'gallery', 'transition_effect'),
1637  'list_title'=>_("Slider"),
1638  'list_description'=>"<p>"._("E' possibile configurare un solo slider")."</p>",
1639  ),
1640  array(),
1641  array(
1642  'transition_effect' =>array(
1643  'widget' => 'select'
1644  )
1645  )
1646  );
1647 
1648  return $buffer;
1649  }
1650 
1656  private function manageImage() {
1657 
1658  require_once('class.multimediaItemAdminTable.php');
1659 
1660  $registry = registry::instance();
1661  $registry->addJs($this->_class_www.'/MooComplete.js');
1662  $registry->addCss($this->_class_www.'/MooComplete.css');
1663 
1664  $admin_table = new multimediaItemAdminTable($this, array());
1665 
1666  $buffer = javascript::abiMapLib();
1667 
1668  $tags = multimediaTag::getAllList($this->_instance, array('jsescape'=>true));
1669  $js_tags_list = "['".implode("','", $tags)."']";
1670 
1671  $buffer .= "<script type=\"text/javascript\">";
1672  $buffer .= "function convert() {
1673  var addressConverter = new AddressToPointConverter('map_coord', 'lat', 'lng', $('map_address').value, {'canvasPosition':'over'});
1674  addressConverter.showMap();
1675  }\n";
1676  $buffer .= "window.addEvent('load', function() {
1677  var tag_input = new MooComplete('tags', {
1678  list: $js_tags_list, // elements to use to suggest.
1679  mode: 'tag', // suggestion mode (tag | text)
1680  size: 5 // number of elements to suggest
1681  });
1682  })";
1683  $buffer .= "</script>";
1684  $onclick = "onclick=\"Asset.javascript('http://maps.google.com/maps/api/js?sensor=true&callback=convert')\"";
1685  $gform = new Form('', '', '');
1686  $convert_button = $gform->input('map_coord', 'button', _("converti"), array("id"=>"map_coord", "classField"=>"generic", "js"=>$onclick));
1687  $addCell = array(
1688  'lat'=>$gform->cinput('map_address', 'text', '', array(_("Indirizzo localizzazione media"), _("es: torino, via mazzini 37<br />utilizzare 'converti' per calcolare latitudine e longitudine")), array("size"=>40, "maxlength"=>200, "id"=>"map_address", "text_add"=>"<p>".$convert_button."</p>"))
1689  );
1690 
1691  $buffer .= $admin_table->backOffice(
1692  'multimediaImage',
1693  array(
1694  'list_display' => array('id', 'name', 'galleries', 'published', 'private', 'tags'),
1695  'filter_fields'=>array('name', 'galleries', 'published', 'private', 'tags'),
1696  'list_title'=>_("Elenco file immagine"),
1697  'list_description'=>"",
1698  'list_where'=>array("type='".IMAGE_CHOICE."'"),
1699  ),
1700  array(
1701  'removeFields' => array(
1702  'video_code',
1703  'video_platform',
1704  'video_width',
1705  'video_height',
1706  'mpeg_filename',
1707  'ogg_filename',
1708  ),
1709  'addCell' => $addCell
1710  ),
1711  array(
1712  'description' => array(
1713  'widget'=>'editor',
1714  'notes'=>false,
1715  'img_preview'=>false,
1716  ),
1717  'tags' => array(
1718  'id' => 'tags',
1719  'size' => 60,
1720  'max_length' => 255
1721  ),
1722  'thumb' => array(
1723  'preview' => true
1724  ),
1725  'img_filename' => array(
1726  'preview' => true
1727  ),
1728  'lat' => array(
1729  'id' => 'lat'
1730  ),
1731  'lng' => array(
1732  'id' => 'lng'
1733  )
1734  )
1735  );
1736 
1737  return $buffer;
1738  }
1739 
1745  private function manageVideo() {
1746 
1747  require_once('class.multimediaItemAdminTable.php');
1748 
1749  $registry = registry::instance();
1750  $registry->addJs($this->_class_www.'/MooComplete.js');
1751  $registry->addCss($this->_class_www.'/MooComplete.css');
1752 
1753  $admin_table = new multimediaItemAdminTable($this, array());
1754 
1755  $buffer = javascript::abiMapLib();
1756 
1757  $tags = multimediaTag::getAllList($this->_instance, array('jsescape'=>true));
1758  $js_tags_list = "['".implode("','", $tags)."']";
1759 
1760  $buffer .= "<script type=\"text/javascript\">";
1761  $buffer .= "function convert() {
1762  var addressConverter = new AddressToPointConverter('map_coord', 'lat', 'lng', $('map_address').value, {'canvasPosition':'over'});
1763  addressConverter.showMap();
1764  }\n";
1765  $buffer .= "window.addEvent('load', function() {
1766  var tag_input = new MooComplete('tags', {
1767  list: $js_tags_list, // elements to use to suggest.
1768  mode: 'tag', // suggestion mode (tag | text)
1769  size: 5 // number of elements to suggest
1770  });
1771  })";
1772  $buffer .= "</script>";
1773  $onclick = "onclick=\"Asset.javascript('http://maps.google.com/maps/api/js?sensor=true&callback=convert')\"";
1774  $gform = new Form('', '', '');
1775  $convert_button = $gform->input('map_coord', 'button', _("converti"), array("id"=>"map_coord", "classField"=>"generic", "js"=>$onclick));
1776  $addCell = array(
1777  'lat'=>$gform->cinput('map_address', 'text', '', array(_("Indirizzo localizzazione media"), _("es: torino, via mazzini 37<br />utilizzare 'converti' per calcolare latitudine e longitudine")), array("size"=>40, "maxlength"=>200, "id"=>"map_address", "text_add"=>"<p>".$convert_button."</p>"))
1778  );
1779 
1780  $buffer .= $admin_table->backOffice(
1781  'multimediaVideo',
1782  array(
1783  'list_display' => array('id', 'name', 'galleries', 'published', 'private', 'video_code', 'video_platform', 'tags'),
1784  'filter_fields'=>array('name', 'galleries', 'published', 'private', 'tags'),
1785  'list_title'=>_("Elenco file video"),
1786  'list_description'=>"<p>"._('Ricordarsi di inserire la larghezza ed altezza del video per una corretta visualizzazione.')."</p>",
1787  'list_where'=>array("type='".VIDEO_CHOICE."'"),
1788  ),
1789  array(
1790  'removeFields' => array(
1791  'img_filename',
1792  'mpeg_filename',
1793  'ogg_filename',
1794  ),
1795  'addCell' => $addCell
1796  ),
1797  array(
1798  'description' => array(
1799  'widget'=>'editor',
1800  'notes'=>false,
1801  'img_preview'=>false,
1802  ),
1803  'tags' => array(
1804  'id' => 'tags',
1805  'size' => 60,
1806  'max_length' => 255
1807  ),
1808  'thumb' => array(
1809  'preview' => true
1810  ),
1811  'lat' => array(
1812  'id' => 'lat'
1813  ),
1814  'lng' => array(
1815  'id' => 'lng'
1816  )
1817  )
1818  );
1819 
1820  return $buffer;
1821  }
1822 
1828  private function manageAudio() {
1829 
1830  require_once('class.multimediaItemAdminTable.php');
1831 
1832  $registry = registry::instance();
1833  $registry->addJs($this->_class_www.'/MooComplete.js');
1834  $registry->addCss($this->_class_www.'/MooComplete.css');
1835 
1836  $admin_table = new multimediaItemAdminTable($this, array());
1837 
1838  $buffer = javascript::abiMapLib();
1839 
1840  $tags = multimediaTag::getAllList($this->_instance, array('jsescape'=>true));
1841  $js_tags_list = "['".implode("','", $tags)."']";
1842 
1843  $buffer .= "<script type=\"text/javascript\">";
1844  $buffer .= "function convert() {
1845  var addressConverter = new AddressToPointConverter('map_coord', 'lat', 'lng', $('map_address').value, {'canvasPosition':'over'});
1846  addressConverter.showMap();
1847  }\n";
1848  $buffer .= "window.addEvent('load', function() {
1849  var tag_input = new MooComplete('tags', {
1850  list: $js_tags_list, // elements to use to suggest.
1851  mode: 'tag', // suggestion mode (tag | text)
1852  size: 5 // number of elements to suggest
1853  });
1854  })";
1855  $buffer .= "</script>";
1856  $onclick = "onclick=\"Asset.javascript('http://maps.google.com/maps/api/js?sensor=true&callback=convert')\"";
1857  $gform = new Form('', '', '');
1858  $convert_button = $gform->input('map_coord', 'button', _("converti"), array("id"=>"map_coord", "classField"=>"generic", "js"=>$onclick));
1859  $addCell = array(
1860  'lat'=>$gform->cinput('map_address', 'text', '', array(_("Indirizzo localizzazione media"), _("es: torino, via mazzini 37<br />utilizzare 'converti' per calcolare latitudine e longitudine")), array("size"=>40, "maxlength"=>200, "id"=>"map_address", "text_add"=>"<p>".$convert_button."</p>"))
1861  );
1862 
1863  $buffer .= $admin_table->backOffice(
1864  'multimediaAudio',
1865  array(
1866  'list_display' => array('id', 'name', 'galleries', 'published', 'private', 'mpeg_filename', 'ogg_filename', 'tags'),
1867  'filter_fields'=>array('name', 'galleries', 'published', 'private', 'tags'),
1868  'list_title'=>_("Elenco file audio"),
1869  'list_description'=>"<p>"._('Si consgilia di caricare i contenuti audio in due formati, mp3 ed ogg, per garantire la visualizzazione su diversi browser.')."</p>",
1870  'list_where'=>array("type='".AUDIO_CHOICE."'"),
1871  ),
1872  array(
1873  'removeFields' => array(
1874  'img_filename',
1875  'video_code',
1876  'video_platform',
1877  'video_width',
1878  'video_height',
1879  ),
1880  'addCell' => $addCell
1881  ),
1882  array(
1883  'description' => array(
1884  'widget'=>'editor',
1885  'notes'=>false,
1886  'img_preview'=>false,
1887  ),
1888  'tags' => array(
1889  'id' => 'tags',
1890  'size' => 60,
1891  'max_length' => 255
1892  ),
1893  'thumb' => array(
1894  'preview' => true
1895  ),
1896  'lat' => array(
1897  'id' => 'lat'
1898  ),
1899  'lng' => array(
1900  'id' => 'lng'
1901  )
1902  )
1903  );
1904 
1905  return $buffer;
1906  }
1907 
1913  private function manageGallery() {
1914 
1915  $registry = registry::instance();
1916  $registry->addJs($this->_class_www.'/multimedia.js');
1917 
1918  $admin_table = new adminTable($this, array());
1919 
1920  $edit = cleanVar($_GET, 'edit', 'int', '');
1921 
1922  $name_onblur = !$edit
1923  ? "onblur=\"$('slug').value = $(this).value.slugify()\""
1924  : "";
1925 
1926  $buffer = $admin_table->backOffice(
1927  'multimediaGallery',
1928  array(
1929  'list_display' => array('id', 'thumb', 'name', 'slug', 'published', 'private', 'last_edit_date', 'promoted'),
1930  'list_title'=>_("Elenco gallerie multimediali"),
1931  'list_description'=>"<p>"._('Ciascun media inserito potrà essere associato ad una o più gallerie multimediali qui definite.')."</p>",
1932  ),
1933  array(),
1934  array(
1935  'name' => array(
1936  'js' => $name_onblur
1937  ),
1938  'slug' => array(
1939  'id' => 'slug'
1940  ),
1941  'description' => array(
1942  'widget'=>'editor',
1943  'notes'=>false,
1944  'img_preview'=>false,
1945  ),
1946  'thumb' => array(
1947  'preview' => true
1948  ),
1949  )
1950  );
1951 
1952  return $buffer;
1953  }
1954 
1960  private function manageVideoPlatform() {
1961 
1962  $admin_table = new adminTable($this, array());
1963 
1964  $buffer = $admin_table->backOffice(
1965  'multimediaVideoPlatform',
1966  array(
1967  'list_display' => array('id', 'name', 'base_url'),
1968  'filter_fields'=>array('name'),
1969  'list_title'=>_("Elenco piattaform streaming video"),
1970  'list_description'=>"<p>"._('Le seguenti piattaforme possono essere utilizzate per inserire contenuti multimediali video. I video vengono caricati dentro ad un iframe che richiama l\'url base qui definito cui viene concatenato il codice video. Attualmente lo script js moogallery che gestisce la visualizzazione dei media supporta youtube e vimeo (i nomi delle piattaforme video devono essere esattamente questi). In caso di aggiunte modificare lo script moogallery.js.')."</p>",
1971  ),
1972  array(),
1973  array()
1974  );
1975 
1976  return $buffer;
1977  }
1978 
1984  private function manageLicense() {
1985 
1986  $admin_table = new adminTable($this, array());
1987 
1988  $buffer = $admin_table->backOffice(
1989  'multimediaLicense',
1990  array(
1991  'list_display' => array('id', 'name', 'url'),
1992  'filter_fields'=>array('name'),
1993  'list_title'=>_("Elenco licenze"),
1994  'list_description'=>"<p>"._('Le seguenti licenze sono associabili ai media inseriti')."</p>",
1995  ),
1996  array(),
1997  array(
1998  'description' => array(
1999  'widget'=>'editor',
2000  'notes'=>false,
2001  'img_preview'=>false,
2002  )
2003  )
2004  );
2005 
2006  return $buffer;
2007  }
2008 
2009 }
2010 
2011 ?>