/class.xmodmedia.inc
PHP | 2046 lines | 1704 code | 116 blank | 226 comment | 298 complexity | 1b7889a79805ba6dbd506f4bea36cb7e MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
- <?php
- /// Module de gestion d'une médiathèque
- class XModMedia extends XModTable {
- public $submodmax=0;
- public $collectionmod;
- public $imgresize='800x600>';
- public $searchtemplate='xmodmedia/searchResult.html';
- function __construct($ar=NULL){
- parent::__construct($ar);
- XLabels::loadLabels('xmodmedia');
- if(!empty($this->collection))
- $this->collectionmod=XModule::objectFactory($this->collection);
- }
- /// Liste des groupes de droits valides pour ce module
- static function getRoList(){
- return array('ro1','ro2','ro3','ro');
- }
- /// Securite des fonctions accessibles par le web
- function secGroups($function, $group=NULL) {
- $list=static::secListList();
- $ro=static::secRoList();
- $g=array();
- $g['browse']=$list;
- $g['browseFiles']=$list;
- $g['display']=$ro;
- $g['displayMedia']=$ro;
- $g['displayInfos']=$ro;
- $g['insert']=array('rw','rwv','admin');
- $g['procInsert']=array('rw','rwv','admin');
- $g['edit']=array('rw','rwv','admin');
- $g['editSelection']=array('rw','rwv','admin');
- $g['editAll']=array('rw','rwv','admin');
- $g['procEdit']=array('rw','rwv','admin');
- $g['procEditAllLang']=array('rw','rwv','admin');
- $g['procEditSelection']=array('rw','rwv','admin');
- $g['del']=array('rw','rwv','admin');
- $g['delAll']=array('rw','rwv','admin');
- $g['query']=$list;
- $g['quickquery']=$list;
- $g['procQuery']=$list;
- $g['procQueryFiles']=$list;
- $g['delStoredQuery']=array('rw','rwv','admin');
- $g['preExportFiles']=$list;
- $g['exportFiles']=$list;
- $g['exportFilesBatch']=$list;
- $g['importOnFly']=array('rw','rwv','admin');
- $g['procImportOnFly']=array('rw','rwv','admin');
- $g['chooseDownloadFormat']=$list;
- $g['downloadMedias']=$ro;
- $g['prePrintContactSheet']=$list;
- $g['printContactSheet']=$list;
- $g['importBrowse']=array('admin');
- $g['importDisplay']=array('admin');
- $g['importInput']=array('admin');
- $g['importProcInput']=array('admin');
- $g['importEdit']=array('admin');
- $g['importProcEdit']=array('admin');
- $g['importDel']=array('admin');
- $g['runImports']=array('admin');
- $g['exportBrowse']=array('admin');
- $g['exportDisplay']=array('admin');
- $g['exportInput']=array('admin');
- $g['exportProcInput']=array('admin');
- $g['exportEdit']=array('admin');
- $g['exportProcEdit']=array('admin');
- $g['exportDel']=array('admin');
- $g['runExports']=array('admin');
- if(isset($g[$function])) {
- if(!empty($group)) return in_array($group, $g[$function]);
- return $g[$function];
- }
- return parent::secGroups($function,$group);
- }
- /// Rend la liste des fonctions utilisables dans le gestionnaire de rubriques en mode fonction (tableau de paires fonction=>label)
- function getUIFunctionList() {
- return array('procQuery'=>XLabels::getSysLabel('xmodtable','uiquery','text'));
- }
- /// Options du module
- public function initOptions() {
- parent::initOptions();
- $this->_options->delOpt('object_sec');
- $this->_options->delOpt('multipleedit');
- $this->_options->delOpt('owner_sec');
- $this->_options->delOpt('btemplates');
- $this->_options->delOpt('captcha');
- $this->_options->delOpt('submodmax');
- $this->_options->delOpt('submodsearch');
- $alabel=XLabels::getSysLabel('xmodmedia.modulename');
- $this->_options->setOpt(XLabels::getSysLabel('xmodmedia','collectionmod'),'collection','module',array('validate'=>true,'emptyok'=>false,'toid'=>XMODMEDIACOLLECTION_TOID),NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodmedia','imports'),'imports','table',array('validate'=>true),NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodmedia.imgresize'),'imgresize','text',NULL,'800x600>',$alabel);
- }
- /// Cette fonction est appliquee pour afficher l'ensemble des methodes de ce module
- protected function _actionlist(&$my) {
- XModule::_actionlist($my);
- $f=XShell::_function();
- @$myoid=$_REQUEST['oid'];
- $uniqid='v'.XShell::uniqid();
- // Stack
- if($this->interactive){
- $o1=new XModuleAction($this,'browse',$this->modulename,
- '&moid='.$this->_moid.'&_function=browse&template=xmodmedia/browse.html&tplentry=br','display');
- $my['stack'][]=$o1;
- if(strpos($f,'import')===0 && $f!='importOnFly'){
- $o1=new XModuleAction($this,'importBrowse',XLabels::getSysLabel('xmodmedia','imports','text'),
- '&moid='.$this->_moid.'&function=importBrowse&template=xmodmedia/importBrowse.html&tplentry=br');
- $my['stack'][]=$o1;
- }
- if(strpos($f,'export')===0){
- $o1=new XModuleAction($this,'exportBrowse',XLabels::getSysLabel('xmodmedia','exports','text'),
- '&moid='.$this->_moid.'&function=exportBrowse&template=xmodmedia/exportBrowse.html&tplentry=br');
- $my['stack'][]=$o1;
- }
- }
- if($this->secure('','browse')){
- // Parcourir
- $o1=new XModuleAction($this,'browse',XLabels::getSysLabel('general','browse','text'),
- '&moid='.$this->_moid.'&_function=browse&template=xmodmedia/browse.html&tplentry=br','display');
- $o1->containable=true;
- $o1->setToolbar('general','browse');
- $my['browse']=$o1;
- }
- // Recherche
- if($this->secure('','query')){
- $o1=new XModuleAction($this,'query',XLabels::getSysLabel('general','query','text'),
- '&moid='.$this->_moid.'&_function=query&template=xmodmedia/query.html&tplentry=br&querymode=query2','display');
- $o1->containable=true;
- $o1->setToolbar('general','query');
- $my['query']=$o1;
- }
- // Recherche en cours
- if($this->isThereAQueryActive()) {
- $o1=new XModuleAction($this,'procQuery',XLabels::getSysLabel('general','currentquery','text'),
- '&moid='.$this->_moid.'&_function=procQuery&template=xmodmedia/browse.html&tplentry=br','display');
- $o1->setToolbar('general','currentquery');
- $my['procquery']=$o1;
- }
- // Insert
- $lang_data=XShell::getLangData();
- $foo=NULL;
- if($this->xset->getTranslatable()==3) $sec=$this->secure($myoid,'insert',$foo,$lang_data);
- else $sec=$this->secure($myoid,'insert');
- if($sec) {
- $o1=new XModuleAction($this,'insert',XLabels::getSysLabel('general','new','text'),
- '&moid='.$this->_moid.'&_function=insert&template=xmodmedia/new.html&tplentry=br','edit');
- $o1->setToolbar('general','new');
- $o1->order=1;
- $my['insert']=$o1;
- }
- // Avertir
- if ($this->secure('', 'sendACopyTo')){
- if(!empty($myoid)) {
- $o1=new XModuleAction($this,'sendACopy',XLabels::getSysLabel('xmodule','sendacopyto','text'),
- '&moid='.$this->_moid.'&tplentry=br&oid='.$myoid.'&_function=sendACopyTo&template=xmodule/sendacopyto.html&tplentry=br');
- }else{
- $o1=new XModuleAction($this,'sendACopy',XLabels::getSysLabel('xmodule','sendacopyto','text'),
- 'javascript:'.$uniqid.'.applyfunction("sendACopyTo","",{template:"xmodule/sendacopyto.html"},true,true);');
- }
- $o1->menuable=true;
- $o1->group='more';
- $my['sendacopy']=$o1;
- }
- // Imports
- if($this->secure(NULL,'importOnFly')){
- $o1=new XModuleAction($this,'import',XLabels::getSysLabel('xmodmedia','importonfly','text'),
- '&moid='.$this->_moid.'&function=importOnFly&template=xmodmedia/importOnFly.html&tplentry=br','more');
- $o1->menuable=true;
- $my['importonfly']=$o1;
- }
- if($this->secure(NULL,'importBrowse')){
- $o1=new XModuleAction($this,'import',XLabels::getSysLabel('xmodmedia','imports','text'),'#','more');
- $o1->menuable=true;
- $o1->newgroup='impgrp';
- $my['import']=$o1;
- $o1=new XModuleAction($this,'importbrowse',XLabels::getSysLabel('general','browse','text'),
- '&moid='.$this->_moid.'&function=importBrowse&template=xmodmedia/importBrowse.html&tplentry=br','impgrp');
- $o1->menuable=true;
- $my['importBrowse']=$o1;
- if($this->secure($myoid,'importInput')){
- $o1=new XModuleAction($this,'importinput',XLabels::getSysLabel('general','new','text'),
- '&moid='.$this->_moid.'&function=importInput&template=xmodmedia/importNew.html&tplentry=br','impgrp');
- $o1->menuable=true;
- $my['importNew']=$o1;
- }
- }
- // Exports
- if($this->secure(NULL,'exportBrowse')){
- $o1=new XModuleAction($this,'import',XLabels::getSysLabel('xmodmedia','exports','text'),'#','more');
- $o1->menuable=true;
- $o1->newgroup='expgrp';
- $my['exports']=$o1;
- $o1=new XModuleAction($this,'exportbrowse',XLabels::getSysLabel('general','browse','text'),
- '&moid='.$this->_moid.'&function=exportBrowse&template=xmodmedia/exportBrowse.html&tplentry=br','expgrp');
- $o1->menuable=true;
- $my['exportBrowse']=$o1;
- if($this->secure($myoid,'exportInput')){
- $o1=new XModuleAction($this,'exportinput',XLabels::getSysLabel('general','new','text'),
- '&moid='.$this->_moid.'&function=exportInput&template=xmodmedia/exportNew.html&tplentry=br','expgrp');
- $o1->menuable=true;
- $my['exportNew']=$o1;
- }
- }
- // Regles workflow
- if($this->stored_query){
- $modrulemoid=XModule::getMoid(XMODRULE_TOID);
- if(!empty($modrulemoid)){
- $o1=new XModuleAction($this,'rule',XLabels::getSysLabel('xmodrule','addrule','text'),
- '&amoid='.$this->_moid.'&moid='.$modrulemoid.
- '&_function=insertRule&tplentry=br&template=xmodrule/newRule.html&atemplate=xmodmedia/editSelection.html');
- $o1->menuable=true;
- $o1->group='more';
- $my['rule']=$o1;
- }
- }
- // Mode conception et administration
- if($this->secure(NULL,':admin')){
- $o1=new XModuleAction($this, 'administration', XLabels::getSysLabel('general', 'administration', 'text'),
- '&moid='.$this->_moid.'&function=adminBrowseFields&template=xmodule/admin/browseFields.html&boid='.$this->boid,
- 'admin');
- $o1->setToolBar('general','administration');
- $my['administration']=$o1;
- }
- }
- /// Actions du browse
- function al_browse(&$my){
- $uniqid='v'.XShell::uniqid();
- $moid=$this->_moid;
- // Changement taille page
- $o1=new XModuleAction($this,'pgmore',XLabels::getSysLabel('xmodtable','page_size','text').' * 2',
- 'javascript:'.$uniqid.'.go_browse("start","*2");','display');
- $o1->menuable=true;
- $my['pgmore']=$o1;
- $o1=new XModuleAction($this,'pgless',XLabels::getSysLabel('xmodtable','page_size','text').' / 2',
- 'javascript:'.$uniqid.'.go_browse("start","/2");','display');
- $o1->menuable=true;
- $my['pgless']=$o1;
- if($this->secure('','del')){
- $o1=new XModuleAction($this,'del',XLabels::getSysLabel('general','delete','text'),
- 'javascript:'.$uniqid.'.applyfunction("del","'.XLabels::getSysLabel('general','confirm_delete_object','text').'","",true);',
- 'edit');
- $o1->setToolbar('general','delete');
- $o1->order=3;
- $my['del']=$o1;
- }
- // Export
- if($this->secure($myoid,'exportFiles')) {
- $o1=new XModuleAction($this,'export',XLabels::getSysLabel('xmodmedia','export','text'),
- 'javascript:'.$uniqid.'.applyfunction("preExportFiles","",{fromfunction:"'.XShell::_function().'",'.
- 'template:"xmodmedia/preExportFiles.html"},false,true,true);','edit');
- $o1->menuable=true;
- $my['export']=$o1;
- }
- // Impression contact
- if($this->secure($myoid,'prePrintContactSheet')) {
- $o1=new XModuleAction($this,'sheet',XLabels::getSysLabel('xmodmedia','printsheet','text'),
- 'javascript:'.$uniqid.'.applyfunction("prePrintContactSheet","",{fromfunction:"'.XShell::_function().'",'.
- 'template:"xmodmedia/prePrintContactSheet.html"},false,true,true);','edit');
- $o1->menuable=true;
- $my['sheet']=$o1;
- }
- // Edition par lot
- if($this->secure('','editSelection')){
- $o1=new XModuleAction($this,'editselection',XLabels::getSysLabel('xmodmedia','editselection','text'),
- 'javascript:'.$uniqid.'.applyfunction("editSelection","",{template:"xmodmedia/editSelection.html"},true,true);','edit');
- $o1->order=2;
- $o1->setToolbar('general','edit');
- $my['editselection']=$o1;
- }
- // Edition/suppression sur le resultat d'une recherche
- if($this->isThereAQueryActive()){
- if($this->secure('','editAll')){
- $o1=new XModuleAction($this,'editall',XLabels::getSysLabel('general','editall','text'),
- 'javascript:'.$uniqid.'.applyfunction("editAll","",{template:"xmodmedia/editSelection.html"},false,true);','edit');
- $o1->order=2;
- $o1->menuable=true;
- $my['editall']=$o1;
- }
- if($this->secure('','delAll')){
- $o1=new XModuleAction($this,'delall',XLabels::getSysLabel('general','delall','text'),
- 'javascript:'.$uniqid.'.applyfunction("delAll","'.XLabels::getSysLabel('general','confirm_delete_object','text').'","");','edit');
- $o1->order=3;
- $o1->menuable=true;
- $my['delall']=$o1;
- }
- }
- }
- function al_procQuery(&$my){
- $this->al_browse($my);
- }
- function al_display(&$my){
- $uniqid='v'.XShell::uniqid();
- if($this->secure('','edit')){
- $o1=new XModuleAction($this,'edit',XLabels::getSysLabel('general','edit','text'),
- '&function=edit&moid='.$this->_moid.'&template=xmodmedia/edit.html&tplentry=br&oid='.@$_REQUEST['oid'],'edit');
- $o1->order=2;
- $o1->setToolbar('general','edit');
- $my['edit']=$o1;
- }
- }
- function al_input(&$my){
- $uniqid='v'.XShell::uniqid();
- $o1=new XModuleAction($this,'save',XLabels::getSysLabel('general','save','text'),'javascript:'.$uniqid.'.saverecord();','edit');
- $o1->order=1;
- $o1->setToolbar('general','save');
- $my['save']=$o1;
- }
- function al_edit(&$my){
- $uniqid='v'.XShell::uniqid();
- $o1=new XModuleAction($this,'save',XLabels::getSysLabel('general','save','text'),'javascript:'.$uniqid.'.saverecord();','edit');
- $o1->order=1;
- $o1->setToolbar('general','save');
- $my['save']=$o1;
- }
- /// Action principale du menu
- public function getMainAction(){
- return $GLOBALS['TZR_SESSION_MANAGER']::complete_self().'moid='.$this->_moid.'&function=browse&tplentry=br&template=xmodmedia/browse.html&_persistent=1';
- }
- /// Fonction daemon
- public function _daemon($period='any'){
- $this->runExports();
- $this->runImports();
- }
- /// Liste des tables utilisées par le module
- public function usedTables(){
- $ret=array($this->table,$this->collectionmod->table,$this->imports);
- return $ret;
- }
- /// Affichage du media uniquement
- function &displayMedia($ar=NULL){
- $p=new XParam($ar,array('selectedfields'=>array()));
- $selectedfields=$p->get('selectedfields');
- $selectedfields[]='media';
- $ar['selectedfields']=$selectedfields;
- $this->xset->desc['media']->autoplay=true;
- $template=XShell::getTemplate();
- if (!file_exists($GLOBALS['TEMPLATES_DIR'].$template)){
- $file= TZR_SHARE_DIR.'xmodmedia/viewMedia.html';
- $xt = new XTemplate('file:/'.$file);
- $r3=array();
- $ret=$this->xset->display($ar);
- $tpldata['br']=$ret;
- $content=$xt->parse($tpldata,$r3,NULL);
- echo($content);
- exit(0);
- }
- return $this->xset->display($ar);
- }
- /// Affichage des infos d'un media
- function &displayInfos($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $d=$this->xset->display($ar);
- return XShell::toScreen1($tplentry,$d);
- }
- /// Mode parcourir
- function &browse($ar=NULL){
- $p=new XParam($ar,NULL);
- $order=$p->get('order');
- $select=$p->get('select');
- $tplentry=$p->get('tplentry');
- $persistent=$p->get('_persistent');
- $this->checkOrderFields($order);
- $pagesize=$p->get('pagesize');
- if(empty($pagesize)) $pagesize=$this->pagesize;
- if($this->persistentquery && $persistent) clearSessionVar('filterquery'.$this->_moid);
- if($this->interactive){
- $this->_setSession('lastorder',$order);
- if($this->isThereAQueryActive()) $this->_clearSession('query');
- }
- $ar['pagesize']=$pagesize;
- $filter=$this->getFilter(true,$ar);
- if($filter===NULL) return NULL;
- $ar['_filter']=$filter;
- $ar['order']=$order;
- $lang_data=XShell::getLangData();
- $ar['tplentry']=TZR_RETURN_DATA;
- if(empty($ar['fmoid'])) $ar['fmoid']=$this->_moid;
- $ar['fieldssec']=$this->fieldssec;
- // on ne recherche que les champs affichés
- $selectedfields = $p->get('selectedfields');
- if(!empty($selectedfields))
- $ar['selectedfields']=$selectedfields;
- else $ar['selectedfields']=$this->xset->getPublished();
- if(!in_array('media',$ar['selectedfields'])) $ar['selectedfields'][]='media';
- if(!in_array('PUBLISH',$ar['selectedfields'])) $ar['selectedfields'][]='PUBLISH';
- if($this->xset->fieldExists('mediahd') && !in_array('mediahd',$ar['selectedfields'])) $ar['selectedfields'][]='mediahd';
- $r = &$this->xset->browse($ar);
- $r['function']='browse';
- $this->applyObjectsSec($r);
- unset($ar['selectedfields']);
- if(XShell::admini_mode()) {
- if (!$p->get('without_actions')) $this->browse_actions($r);
- // Recherche rapide
- if ($this->quickquery) {
- $ar['tplentry']=TZR_RETURN_DATA;
- $r['_qq']=$this->quickquery($ar);
- }
- }
- return XShell::toScreen1($tplentry, $r);
- }
- /// Parcours le module pour la selection d'un fichier
- public function &browseFiles($ar) {
- // pas d'edition ni suppression depuis l'écran de parcours
- $fields = array();
- //cinq champ publié max et les champ fichier
- foreach($this->xset->desc as $fname=>$fdef){
- if( (count($fields) < 5 && $fdef->get_published()) || ($fdef->get_ftype() == 'XFileDef' || $fdef->get_ftype() == 'XImageDef')){
- $fields[]=$fname;
- }
- }
- $ar['selectedfields']=$fields;
- $ar['without_actions'] = true;
- $browse = $this->browse($ar);
- // si pas de titre aux images, ajout depuis le champ title
- // permet la récupération d'un titre dans "parcourir les modules"
- foreach ($browse['lines_oid'] as $i => $oid) {
- if (preg_match('/title=""/', $browse['lines_omedia'][$i]->html)) {
- $browse['lines_omedia'][$i]->html = preg_replace('/(title|alt)=""/', '$1="'.$browse['lines_otitle'][$i]->html.'"', $browse['lines_omedia'][$i]->html);
- }
- }
- return $browse;
- }
- /// Initialise les champs sélectionnés par défaut
- public function &UIEdit_procQuery($ar=NULL) {
- if (empty($ar['__selectedfields'])) {
- $ar['__selectedfields'] = $this->xset->fieldExists('mediahd') ? array('media','mediahd') : array('media');
- }
- return parent::UIEdit_procQuery($ar);
- }
- /* /// Fonctions d'affichage du resultat d'une requete dans une section
- public function &UIEdit_procQuery($ar=NULL){
- $ret=$this->query($ar);
- $grp=XLabels::getSysLabel('general','result','text');
- $fs['___storedquery']=XFieldDef::objectFactory((object)array('FIELD'=>'___storedquery','FTYPE'=>'XLinkDef','MULTIVALUED'=>0,
- 'COMPULSORY'=>false,'TARGET'=>'QUERIES',
- 'LABEL'=>XLabels::getSysLabel('xmodtable','stored_query','text')));
- $fs['___storedquery']->filter='modid="'.$this->_moid.'"';
- $fs['___storedquery']->fgroup=$grp;
- $fs['__selectedfields']=XFieldDef::objectFactory((object)array('FIELD'=>'__selectedfields','FTYPE'=>'XTableFieldDef','MULTIVALUED'=>1,
- 'COMPULSORY'=>false,'TARGET'=>$this->table,
- 'LABEL'=>XLabels::getSysLabel('general','fields','text')));
- $fs['__selectedfields']->fgroup=$grp;
- $fs['__selectedfields']->doublebox=true;
- $options['__selectedfields']=array('except'=>($this->xset->fieldExists('mediahd'))?array('media','mediahd'):array('media'));
- $fs['__order']=XFieldDef::objectFactory((object)array('FIELD'=>'__order','FTYPE'=>'XTableFieldDef','MULTIVALUED'=>1,
- 'COMPULSORY'=>false,'TARGET'=>$this->table,
- 'LABEL'=>XLabels::getSysLabel('general','order','text')));
- $fs['__order']->doublebox=$fs['__order']->withorder=true;
- $fs['__order']->fgroup=$grp;
- $fs['__pagesize']=XFieldDef::objectFactory((object)array('FIELD'=>'__pagesize','FTYPE'=>'XRealDef','COMPULSORY'=>true,
- 'LABEL'=>XLabels::getSysLabel('xmodinfotree','max_nb','text')));
- $fs['__pagesize']->default=999;
- $fs['__pagesize']->fgroup=$grp;
- $fs['__viewpagination']=XFieldDef::objectFactory((object)array('FIELD'=>'__viewpagination','FTYPE'=>'XBoolDef','MULTIVALUED'=>0,
- 'COMPULSORY'=>false,
- 'LABEL'=>XLabels::getSysLabel('xmodtable','viewpagination','text')));
- $fs['__viewpagination']->default=2;
- $fs['__viewpagination']->fgroup=$grp;
- foreach($fs as $fn=>&$f){
- $value=(is_array($ar[$fn])?implode('||',$ar[$fn]):$ar[$fn]);
- if(empty($options[$fn])) $options[$fn]=array();
- $o=$f->edit($ar[$fn],$options[$fn]);
- $ret['o'.$fn]=$ret['fields_object'][]=$o;
- }
- return $ret;
- }
- public function &UIProcEdit_procQuery($ar=NULL){
- $p=new XParam($ar,NULL);
- $params=$this->xset->captureQuery($ar);
- $params['___storedquery']=$p->get('___storedquery');
- $selectedfields=$p->get('__selectedfields');
- $selectedfields[]='media';
- $params['__selectedfields']=implode('||',$selectedfields);
- $params['__order']=implode('||',$p->get('__order'));
- $params['__pagesize']=$p->get('__pagesize');
- $xbool=new XBoolDef();
- $xbool->field='__viewpagination';
- $tmp=$xbool->post_edit($p->get('__viewpagination'),$opt=array('__viewpagination_HID'=>$p->get('__viewpagination_HID')));
- $params['__viewpagination']=$tmp->raw;
- return $params;
- }
- public function &UIView_procQuery($ar=NULL){
- $params=$_REQUEST['sectionopts'];
- $ar['_storedquery']=$ar['___storedquery'];
- if($ar['__selectedfields'] == 'media') {
- $ar['selectedfields'] = $this->xset->browsableFields();
- $ar['selectedfields'][] = 'media';
- } else
- $ar['selectedfields'] = explode('||',$ar['__selectedfields']);
- if($params[$ar['itoid']]['order']) $ar['order']=$params[$ar['itoid']]['order'];
- else{
- $order=explode('||',$ar['__order']);
- $ar['order']=array();
- foreach($order as $o){
- if(!empty($o)) $ar['order'][]=$o;
- }
- $ar['order']=implode(',',$ar['order']);
- }
- $ar['pagesize']=$ar['__pagesize'];
- $ar['first']=$params[$ar['itoid']]['first'];
- return $this->procQuery($ar);
- }*/
- /// Mode recherche
- function &procQuery($ar) {
- $p=new XParam($ar,array('first'=>0));
- $tplentry=$p->get('tplentry');
- $clearrequest=$p->get('clearrequest');
- $storedquery=$p->get('_storedquery');
- if(!empty($storedquery)) $clearrequest=1;
- $first=$p->get('first');
- $getselectonly=$p->get('getselectonly');
- $persistent=$p->get('_persistent');
- $pagesize=$p->get('pagesize');
- if(empty($pagesize)) $pagesize=$this->pagesize;
- $order=$p->get('order');
- $this->checkOrderFields($order);
- if($this->persistentquery && $persistent) clearSessionVar('filterquery'.$this->_moid);
- if($this->interactive) $this->_setSession('lastorder',$p->get('order'));
- $ar['pagesize']=$pagesize;
- $ar['table']=$this->table;
- $filter=$this->getFilter(true,$ar);
- if($filter===NULL) return NULL;
- $ar['_filter']=$filter;
- $ar['order']=$order;
- $ar['tplentry']=TZR_RETURN_DATA;
- // Patch de stockage des requêtes nommées
- if(XDataSource::sourceExists('QUERIES')) {
- $storename=$p->get('_storename');
- $storegroup=$p->get('_storegroup');
- if(!empty($storename)) {
- $fields=$p->get('_FIELDS');
- $st=$this->xset->captureQuery($ar);
- $queries=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=QUERIES');
- $queries->procInput(array('title'=>$storename,'rtype'=>'table','modid'=>$this->_moid,'grp'=>$storegroup,
- 'query'=>addslashes(serialize($st))));
- }
- }
- if($this->isThereAQueryActive() && empty($clearrequest) && $this->interactive) {
- // recuperation de la requete active s'il y en a une
- $_storedquery=$this->_getSession('query');
- $ar=array_merge($_storedquery,$ar);
- }elseif(!empty($storedquery)){
- $_storedquery=$this->xset->prepareQuery($ar,$storedquery);
- $_storedquery=$this->xset->captureQuery($ar);
- $this->_setSession('query',$_storedquery);
- $ar=array_merge($_storedquery,$ar);
- $ar['_storedquery']='';
- } elseif($this->interactive && sessionActive()) {
- $fields=$p->get('_FIELDS');
- $_storedquery=$this->xset->captureQuery($ar);
- // Mode affinage
- if((int)$clearrequest==2){
- $_storedquery2=$this->_getSession('query');
- $_storedquery['_FIELDS']=array_merge($_storedquery2['_FIELDS'],$_storedquery['_FIELDS']);
- $_storedquery=array_merge($_storedquery2,$_storedquery);
- }
- $this->_setSession('query',$_storedquery);
- $ar=array_merge($_storedquery,$ar);
- }
- if(empty($ar['fmoid'])) $ar['fmoid']=$this->_moid;
- $ar['fieldssec']=$this->fieldssec;
- if($spesource){
- $ar['fields']=$this->table.'.*';
- list($select,$query)=$this->xset->getSelectQuery($ar);
- $ar['select']=str_ireplace('from '.$this->table,
- 'from '.$this->table.' left outer join '.$spesource.' on '.$this->table.'.KOID='.$spesource.'.mediaobj AND '.
- $this->table.'.LANG='.$spesource.'.LANG',$query);
- }
- $ar['selectedfields']=$p->get('selectedfields');
- if(empty($ar['selectedfields'])) $ar['selectedfields']=$this->xset->getPublished();
- $ar['selectedfields'][]='media';
- if($this->xset->fieldExists('mediahd')) $ar['selectedfields'][]='mediahd';
- $ar['selectedfields'][]='PUBLISH';
- $r=$this->xset->procQuery($ar);
- unset($ar['selectedfields']);
- if(!empty($getselectonly)) return $r;
- elseif($this->persistentquery && $persistent) setSessionVar('filterquery'.$this->_moid,$r['select']);
- $r['function']='procQuery';
- $this->applyObjectsSec($r);
- $this->browse_actions($r);
- if(XShell::admini_mode() && $this->quickquery) {
- $ar['tplentry']=TZR_RETURN_DATA;
- $r['_qq']=$this->quickquery($ar);
- }
- return XShell::toScreen1($tplentry, $r);
- }
- /// Parcours le module pour la selection d'un fichier
- public function &procQueryFiles($ar) {
- $browse = $this->procQuery($ar);
- // si pas de titre aux images, ajout depuis le champ title
- // permet la récupération d'un titre dans "parcourir les modules"
- foreach ($browse['lines_oid'] as $i => $oid) {
- if (preg_match('/title=""/', $browse['lines_omedia'][$i]->html)) {
- $browse['lines_omedia'][$i]->html = preg_replace('/(title|alt)=""/', '$1="'.$browse['lines_otitle'][$i]->html.'"', $browse['lines_omedia'][$i]->html);
- }
- if ($this->xset->fieldExists('mediahd') && preg_match('/title=""/', $browse['lines_omediahd'][$i]->html))
- $browse['lines_omediahd'][$i]->html = preg_replace('/(title|alt)=""/', '$1="'.$browse['lines_otitle'][$i]->html.'"', $browse['lines_omediahd'][$i]->html);
- }
- return $browse;
- }
- /// Affiche toutes les infos d'un media
- function &display($ar=NULL){
- $p=new XParam($ar,array());
- $tplentry=$p->get('tplentry');
- $ar['table']=$this->table;
- $ar['tplentry']=TZR_RETURN_DATA;
- if(empty($ar['fmoid'])) $ar['fmoid']=$this->_moid;
- $ar['fieldssec']=$this->fieldssec;
- $r2=$this->xset->display($ar);
- // Choix du templates d'édition s'il existe
- if(!empty($this->_templates) && !empty($this->templates) && $tplentry!=TZR_RETURN_DATA) {
- $r=$this->_templates->display(array('oid'=>$this->templates,
- '_options'=>array('error'=>'return'),
- 'tplentry'=>TZR_RETURN_DATA));
- XShell::toScreen1($tplentry.'t',$r);
- }
- return XShell::toScreen1($tplentry,$r2);
- }
- /// Supression de média
- function del($ar) {
- $p=new XParam($ar,NULL);
- $oids=$p->get('_selected');
- $selectedok=$p->get('_selectedok');
- $oids=array_keys($oids);
- if($selectedok!='ok' || empty($oids)) $oids=array($p->get('oid'));
- $ar['table']=$this->table;
- $ar['action']='OK';
- $this->xset->del($ar);
- }
- /// Insere une nouvelle fiche
- function &procInsert($ar) {
- $p=new XParam($ar,array('applyrules'=>true));
- $tplentry=$p->get('tplentry');
- $applyrules=$p->get('applyrules');
- if($this->procInsertCtrl($ar)) {
- $ar['table']=$this->table;
- $ar['tplentry']=TZR_RETURN_DATA;
- $ar['fieldssec']=$this->fieldssec;
- if(empty($ar['fmoid'])) $ar['fmoid']=$this->_moid;
- if(!$p->is_set('PUBLISH')) $ar['PUBLISH']=($this->defaultispublished?1:2);
- if($this->xset->fieldExists('mediahd') && empty($_FILES['media']['tmp_name']) && !empty($_FILES['mediahd']['tmp_name'])){
- $ld=$this->generateLDFromHD($_FILES['mediahd']['tmp_name'],$_FILES['mediahd']['name'],$_FILES['mediahd']['mime']);
- $ar['media']=$_FILES['mediahd'];
- $ar['media']['tmp_name']=$ld;
- $ar['media']['size']=NULL;
- }
- $r=$this->xset->procInput($ar);
- if($applyrules) XModRule::applyRules($this,$r['oid']);
- if($this->savenext=='display' && $tplentry!=TZR_RETURN_DATA){
- XShell::setnext($GLOBALS['TZR_SESSION_MANAGER']::complete_self(true,true).'&moid='.$this->_moid.'&function=display&'.
- 'template=xmodtable/view.html&tplentry=br&oid='.$r['oid']);
- }elseif($p->is_set('save_and_edit')){
- XShell::setnext($GLOBALS['TZR_SESSION_MANAGER']::complete_self(true,true).'&moid='.$this->_moid.'&function=edit&'.
- 'template=xmodtable/edit.html&tplentry=br&oid='.$r['oid']);
- }
- }elseif($tplentry!=TZR_RETURN_DATA){
- $options=&$this->xset->prepareReInput($ar);
- $t='xmodmedia/new.html';
- XShell::changeTemplate($t);
- XShell::setnext();
- $ar['options']=$options;
- $ar['tplentry']='br';
- $this->insert($ar);
- return;
- }
- return XShell::toScreen1($tplentry, $r);
- }
- /// Enregistre les modifications d'une fiche
- function &procEdit($ar=NULL){
- $p=new XParam($ar,array('applyrules'=>true));
- $ar['table']=$this->table;
- $ar['_track']=$this->trackchanges;
- $ar['_archive']=$this->archive;
- $ar['fieldssec']=$this->fieldssec;
- if(empty($ar['fmoid'])) $ar['fmoid']=$this->_moid;
- $oid=$p->get('oid');
- $tplentry=$p->get('tplentry');
- $editbatch=$p->get('editbatch');
- $mediadel=$p->get('media_del');
- $applyrules=$p->get('applyrules');
- // Edition d'une selection
- if(is_array($oid) && $editbatch) {
- $reeditone=$p->get('reeditone');
- unset($ar['reeditone']);
- foreach($oid as $oid1){
- $ar['oid']=$oid1;
- $this->procEdit($ar);
- }
- if($reeditone){
- $_storedquery=$this->xset->captureQuery(array('_options'=>array('local'=>true),'oids'=>$oid,'order'=>'KOID'));
- $this->_setSession('query',$_storedquery);
- $this->_setSession('lastorder','KOID');
- list($p,$n,$a)=$this->mkNavParms(array('_options'=>array('local'=>true)));
- XShell::setNext('moid='.$this->_moid.'&function=edit&template=xmodmedia/edit.html&tplentry=br&oid='.$a.'&usenav=1');
- }
- return;
- }
- if($this->procEditCtrl($ar)) {
- if($this->xset->fieldExists('mediahd') && empty($_FILES['media']['tmp_name']) && !empty($_FILES['mediahd']['tmp_name']) && $mediadel){
- $ld=$this->generateLDFromHD($_FILES['mediahd']['tmp_name'],$_FILES['mediahd']['name'],$_FILES['mediahd']['mime']);
- $ar['media']=$_FILES['mediahd'];
- $ar['media']['tmp_name']=$ld;
- $ar['media']['size']=NULL;
- }
- $ar['media_title'] = $p->get('media_title');
- $r=$this->xset->procEdit($ar);
- // Traitement des champs spécifiques
- if($applyrules) XModRule::applyRules($this,$oid);
- if($this->savenext && $this->savenext=='display' && $tplentry!=TZR_RETURN_DATA){
- XShell::setNext($GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).
- '&moid='.$this->_moid.'&function=display&template=xmodtable/view.html&tplentry=br&oid='.$oid);
- }
- }else{
- $options=&$this->xset->prepareReEdit($ar);
- $t='xmodmedia/edit.html';
- XShell::changeTemplate($t);
- XShell::setNext();
- $ar['options']=$options;
- $ar['tplentry']= 'br';
- $this->edit($ar);
- return;
- }
- return $r;
- }
- /// Retourne la liste des formats de téléchargement disponibles sous forme de tableau
- function getAllDLFormats(){
- $formats=array();
- // vignette
- $formats['ro1']['image/*']['425x282']=array('label'=>'425 x 282','command'=>'-resize 425x282>');
- // web
- $formats['ro2']=$formats['ro1'];
- $formats['ro2']['image/*']['850x565']=array('label'=>'850 x 565','command'=>'-resize 850x565>');
- // basse Def
- $formats['ro3']=$formats['ro2'];
- $formats['ro3']['image/*']['1691x1123']=array('label'=>'1691 x 1123','command'=>'-resize 1691x1123>');
- $formats['ro3']['image/*']['2360x1568']=array('label'=>'2360 x 1568','command'=>'-resize 2360x1568>');
- // haute def (tous)
- $formats['ro']=$formats['ro3'];
- $formats['ro']['image/*']['4288x2848']=array('label'=>'4288 x 2848','command'=>'-resize 4288x2848>');
- $formats['ro']['image/*']['original']=array('label'=>'Original','command'=>'');
- $formats['rw']=$formats['rwv']=$formats['admin']=$formats['ro'];
-
- // Format par defaut si aucun autre n'est défini, a laisser en derniere position
- $formats['ro1']['*']['original']=$formats['ro2']['*']['original']=$formats['ro3']['*']['original']=$formats['ro']['*']['original']=
- $formats['rw']['*']['original']=$formats['admin']['*']['original']=array('label'=>'Original','command'=>null);
-
- return $formats;
- }
- /// Retourne la liste des formats de téléchargement disponibles en fonction des droits de l'utilisateur sur le module
- function &getSecDLFormats($objs=NULL){
- static $formats,$rw,$user,$lang_data,$colmodlvl,$file;
- // Cache en cas d'appel multiple de la méthode
- if(!$formats){
- $formats=$this->getAllDLFormats();
- $user=&XUser::get_user();
- $lang_data=XShell::getLangData();
- $rw=$this->secure('',':rw');
- $colmodlvl=XUser::secure8maxlevel($this->collectionmod,'',null,$lang_data);
- }
- // Si le parametre passé n'est pas un tableau d'oid ou un tableau de display
- if(!is_array($objs) || $objs['oid']) $objs=array($objs);
- $main=$files=array();
- foreach($objs as $i=>&$d){
- if(!is_array($d)){
- $d=$this->xset->display(array('tplentry'=>TZR_RETURN_DATA,'oid'=>$d,'selectedfields'=>$this->xset->fieldExists('mediahd')?array('collection','media','mediahd'):array('collection','media')));
- }
- $oid=$d['oid'];
- if(!$this->collectionmod->object_sec || $rw || !$d['ocollection']->oidcollection){
- $ri=$colmodlvl;
- }else{
- $oidsrights=$GLOBALS['XUSER']->getObjectsAccess($this->collectionmod,$lang_data,$d['ocollection']->oidcollection);
- $lvl0=$lvl1=array_shift($oidsrights);
- while($lvl2=array_shift($oidsrights)){
- $lvl1=array_diff_key($lvl1,$lvl2);
- }
- if(empty($lvl1)) $lvl1=$lvl0;
- $ri=array_pop(array_keys($lvl1));
- }
- if($this->xset->fieldExists('mediahd') && ($d['omediahd']->filename || @$d['omediahd']->isExternal)) $file=$d['omediahd'];
- elseif($d['omedia']->filename || @$d['omedia']->isExternal) $file=$d['omedia'];
- if($file->isExternal){
- continue;
- }elseif($file->mime && $formats[$ri]){
- foreach($formats[$ri] as $fmtmime=>$fmts){
- if(preg_match('#'.str_replace('*','.*',$fmtmime).'#',$file->mime)){
- break;
- }
- }
- }else{
- $fmts=$formats[$ri];
- }
- $file->formats=$fmts;
- $files[]=$file;
- if(!empty($main) && $main!==$fmts){
- $main=array('min'=>array('label'=>XLabels::getSysLabel('xmodmedia','downloadminsize'),'command'=>''),
- 'max'=>array('label'=>XLabels::getSysLabel('xmodmedia','downloadmaxsize'),'command'=>''));
- break;
- }else{
- $main=$fmts;
- }
- }
- return array('formats'=>$main,'files'=>$files);
- }
- /// Liste les formats possible pour le téléchargement. Si un seul format possible, on lance le téléchargement directement
- function chooseDownloadFormat($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- if(!is_array($oid)) $oid=array($oid);
- $fmts=$this->getSecDLFormats($oid);
- $fmts=$fmts['formats'];
- if(count($fmts)>1){
- $content=$this->getTemplateContent('xmodmedia/chooseDownloadFormat.html',array('br'=>array('fmts'=>$fmts,'oid'=>$oid)));
- echo json_encode(array('content'=>$content,'url'=>''));
- die();
- }elseif(count($fmts)==1){
- $fmts=array_keys($fmts);
- echo json_encode(array('content'=>'','url'=>$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'moid='.$this->_moid.'&function=downloadMedias&'.http_build_query(array('oid'=>$oid)).'&dlfmt='.$fmts[0]));
- die();
- }
- }
-
- /// Telecharge des medias à un certain format
- function downloadMedias($ar=NULL){
- $p=new XParam($ar,NULL);
- $mimeClasse=XMimeTypes::getInstance();
- $dlfmt=$p->get('dlfmt');
- $oid=$p->get('oid');
- $dir=TZR_TMP_DIR.uniqid('dl');
- $fmts=$this->getSecDLFormats($oid);
- $files=$fmts['files'];
- $fmts=$fmts['formats'];
- if(!$fmts[$dlfmt]){
- die('Unauthorized format');
- }
- mkdir($dir);
- //compteur de fichier du meme nom
- $cnt = array();
- foreach($files as $file){
- $fileoriginalname = $file->originalname;
- if(strpos($fileoriginalname,'.') === false){
- //pas d'extension on tente de l'ajouter
- $mime=$mimeClasse->getValidMime($file->mime,$dir.'/'.$fileoriginalname,NULL);
- $fileoriginalname .= '.'.$mimeClasse->get_extension($mime);
- }
- if(file_exists($dir.'/'.$fileoriginalname)){
- $cnt[$fileoriginalname]++;
- //on ajoute un increment pour éviter d'écraser
- $fileoriginalname = addFileSuffix($fileoriginalname,$cnt[$fileoriginalname]);
- }
- if($dlfmt=='min'){
- $fmt=array_shift($file->formats);
- $command=$fmt['command'];
- }elseif($dlfmt=='max'){
- $fmt=array_pop($file->formats);
- $command=$fmt['command'];
- }else{
- $command=$fmts[$dlfmt]['command'];
- }
- if($file->isImage){
- if($command) {
- $cmdline
- = TZR_MOGRIFY_RESIZER
- . ' '
- . escapeshellcmd ($command)
- . ' '
- . single_quote_into_sh_arg ($file->filename)
- . ' '
- . single_quote_into_sh_arg ($dir . '/' . $fileoriginalname)
- ;
- system ($cmdline);
- }
- else copy($file->filename,$dir.'/'.$fileoriginalname);
- }else{
- copy($file->filename,$dir.'/'.$fileoriginalname);
- }
- }
- if(count($files)>1){
- exec('(cd '.$dir.'; zip -r '.$dir.'.zip .)2>&1 > '.TZR_TMP_DIR.'errorlog');
- $size=filesize($dir.'.zip');
- header('Content-type: application/zip');
- header('Content-disposition: attachment; filename=export_'.date('Y-m-d-H-i-s').'.zip');
- header('Accept-Ranges: bytes');
- header('Content-Length: '.$size);
- @readfile($dir.'.zip');
- register_shutdown_function('unlink',$dir.'.zip');
- }else{
- $downloadedFile = $dir.'/'.$fileoriginalname;
- $size=filesize($downloadedFile);
- $mime=$mimeClasse->getValidMime(NULL,$downloadedFile,NULL);
- header('Content-type: '.$mime);
- header('Content-disposition: attachment; filename='.$fileoriginalname);
- header('Accept-Ranges: bytes');
- header('Content-Length: '.$size);
- @readfile($downloadedFile);
- register_shutdown_function('unlink',$downloadedFile);
- }
- register_shutdown_function('XDir::unlink',$dir);
- die();
- }
- /// Prepare l'impression d'une planche contact
- function prePrintContactSheet($ar=NULL){
- $p=new XParam($ar,array());
- $tplentry=$p->get('tplentry');
- $ar['table']=$this->table;
- $ar['_filter']=$this->getFilter(true,$ar);
- $ar['tplentry']=TZR_RETURN_DATA;
- $ar['selectedfields']='all';
- $ar['pagesize']=1;
- // Recherche des templates d'impression
- if(empty($this->_templates)) $this->_templates=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=TEMPLATES');
- if(!empty($this->_templates)) {
- $q1=$this->_templates->select_query(array('cond'=>array('modid'=>array('=',$this->_moid),
- 'gtype'=>array('=','xmodmedia_sheet_print'))));
- $r=&$this->_templates->browse(array('select'=>$q1,'pagesize'=>100,'tplentry'=>TZR_RETURN_DATA));
- XShell::toScreen1($tplentry.'t',$r);
- }
- // Calcul du nombre d'enregistrements impactes (passage d'oid, browseSelection ou browse/query classique)
- $r=&$this->xset->browse($ar);
- $r['_selected']=$p->get('_selected');
- if(is_array($r['_selected'])) {
- $r['record_count']=count($r['_selected']);
- }elseif($p->get('fromfunction')=='browseSelection') {
- $r['_selected']=$this->getSelectionFromSession();
- $r['record_count']=count($r['_selected']);
- }else{
- $context=$this->getContextQuery($ar,false);
- $ar['select']=$context['query'];
- $q=$this->xset->getSelectQuery($ar);
- $r['record_count']=countSelectQuery($q[1],true);
- $r['queryfields']=$context['all']['queryfields'];
- }
- return XShell::toScreen1($tplentry,$r);
- }
- /// Impression d'une planche contact
- function printContactSheet($ar=NULL){
- $p=new XParam($ar,array('pdfname'=>'contact_sheet.pdf'));
- $pdfname=$p->get('pdfname');
- $tplentry=$p->get('tplentry');
- $email=$p->get('dest');
- $fmt=$p->get('fmt');
- $dpi=$p->get('dpi');
- $mmsize=$p->get('mmsize');
- $q=$this->getContextQuery($ar);
- $ar['selected']='0';
- $ar['pagesize']='100000';
- $ar['select']=$q;
- $ar['norow']=1;
- $ar['nodef']=1;
- $ar['selectedfield']=($this->xset->fieldExists('mediahd'))?array('ref','title','media','mediahd'):array('ref','title','media');
- $ar['_options']=array('genpublishtag'=>false);
- $ar['tplentry']=TZR_RETURN_DATA;
- $ar['_format']='application/prince';
- $oldinteractive=$this->interactive;
- $this->interactive=false;
- $imgsize=round($mmsize['w']/10*0.3937*$dpi).'x'.round($mmsize['h']/10*0.3937*$dpi).'%3E';
- $tpldata['']=array('mmsize'=>$mmsize,'imgsize'=>$imgsize,'margin'=>$p->get('margin'),'imargin'=>$p->get('imargin'),
- 'pformat'=>$p->get('pformat'),'title'=>$p->get('title'),'descr'=>$p->get('descr'));
- if(Kernel::isAKoid($fmt)){
- // Impression via un template d'impressions
- $t=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$fmt);
- $dispfmt=$t->display(array('oid'=>$fmt,'tplentry'=>TZR_RETURN_DATA));
- $displayformats=explode(',',$dispfmt['odfmt']->raw);
- if(in_array('application/prince',$displayformats)) $content=$this->_printGetContent($ar,$dispfmt['oprint']->filename,'browse',$tpldata);
- }else{
- $content=$this->_printGetContent($ar,'xmodmedia/printContactSheet.xml','browse',$tpldata);
- }
- $this->interactive=$oldinteractive;
- $tmpname=princeTidyXML2PDF(NULL,$content);
- if(!empty($email) && !empty($tmpname)) {
- $content=file_get_contents($tmpname);
- $this->sendMail2User('print','',$email,NULL,false,NULL,$pdfname,$content,'application/pdf');
- }
- header('Content-type: application/pdf');
- header('Content-disposition: attachment; filename='.$pdfname);
- $size=filesize($tmpname);
- header('Accept-Ranges: bytes');
- header('Content-Length: '.$size);
- readfile($tmpname);
- unlink($tmpname);
- exit(0);
- }
- /// Recupere le contenu pour une impression
- function &_printGetContent($ar,$filename,$f,$tpldata=array()){
- $p=new XParam($ar,NULL);
- $title=$p->get('title');
- $res=&$this->$f($ar);
- $xt=new XTemplate('file:'.$filename);
- $labels=&$GLOBALS['XSHELL']->labels->get_labels(array('selectors'=>array('global'),'local'=>true));
- $xt->set_glob(array('labels'=>&$labels));
- $r3=array();
- $tpldata['']['moid']=$this->_moid;
- $tpldata['param']=array('title'=>$title);
- $tpldata['br']=$res;
- $tpldata['imod']=&XShell::from_screen('imod');
- $content=$xt->parse($tpldata,$r3,NULL);
- return $content;
- }
- /// Prepare l'exportation des media avec leurs meta
- function preExportFiles($ar=NULL){
- $p=new XParam($ar,array('fname'=>'Export'));
- $tplentry=$p->get('tplentry');
- $q=$this->getContextQuery($ar);
- $ar['selected']='0';
- $ar['pagesize']='100000';
- $ar['select']=$q;
- $ar['norow']=1;
- $ar['nodef']=1;
- $ar['selectedfield']=($this->xset->fieldExists('mediahd'))?array('ref','title','media','mediahd'):array('ref','title','media');
- $ar['_options']=array('genpublishtag'=>false);
- $ar['tplentry']=TZR_RETURN_DATA;
- $oldinteractive=$this->interactive;
- $this->interactive=false;
- $br=$this->browse($ar);
- $this->interactive=$oldinteractive;
- $size=0;
- foreach($br['lines_oid'] as $i=>$oid){
- $size+=(($this->xset->fieldExists('mediahd') && $br['lines_omediahd'][$i]->filename)?filesize($br['lines_omediahd'][$i]->filename):filesize($br['lines_omedia'][$i]->filename));
- }
- $br['size']=$size;
- return XShell::toScreen1($tplentry,$br);
- }
- /// Exporte les medias avec leurs metas
- function exportFiles($ar=NULL){
- $p=new XParam($ar,array('fname'=>'Export','zip'=>true));
- $fname=$p->get('fname');
- $fmt=$p->get('fmt');
- $zip=$p->get('zip');
- $tplentry=$p->get('tplentry');
- $q=$p->get('select','local');
- if(empty($q)) $q=$this->getContextQuery($ar);
- if($fmt!='ftp'){
- $ar['selected']='0';
- $ar['pagesize']='100000';
- $ar['select']=$q;
- $ar['norow']=1;
- $ar['nodef']=1;
- $ar['selectedfield']=array('KOID','media','mediahd');
- $ar['_options']=array('genpublishtag'=>false);
- $ar['tplentry']=TZR_RETURN_DATA;
- $oldinteractive=$this->interactive;
- $this->interactive=false;
- $br=$this->browse($ar);
- $dir=TZR_TMP_DIR.uniqid('exportmedia');
- mkdir($dir);
- foreach($br['lines_oid'] as $i=>$oid){
- if($this->xset->fieldExists('mediahd') && !empty($br['lines_omediahd'][$i]->filename)){
- $media=$br['lines_omediahd'][$i];
- }else{
- $media=$br['lines_omedia'][$i];
- }
- $fname=$media->originalname;
- // Pour éviter qu'un fichier en ecrase un autre s'ils ont le même nom
- if(file_exists($dir.'/'.$fname)){
- $fname=substr(strrchr($oid,':'),1).'_'.$fname;
- }
- copy($media->filename,$dir.'/'.$fname);
- }
- $this->interactive=$oldinteractive;
- }
- // Mode : direct download, envoi mail, envoi ftp en asynchrone
- if($fmt=='dl'){
- exec('(cd '.$dir.'; zip -r '.$dir.'.zip .)2>&1 > '.TZR_TMP_DIR.'errorlog');
- $size=filesize($dir.'.zip');
- header('Content-type: application/zip');
- header('Content-disposition: attachment; filename='.str_replace(' ','_',removeaccents($fname)).'.zip');
- header('Accept-Ranges: bytes');
- header('Content-Length: '.$size);
- @readfile($dir.'.zip');
- XDir::unlink($dir);
- unlink($dir.'.zip');
- die();
- }elseif($fmt=='ftp'){
- $scheduler=new XModScheduler();
- $o=array();
- $o['function']='exportFilesBatch';
- $o['uid']=getSessionVar('UID');
- $o['ftpserver']=$p->get('ftpserver');
- $o['ftplogin']=$p->get('ftplogin');
- $o['ftppassword']=$p->get('ftppassword');
- $o['ftpdir']=$p->get('ftpdir');
- $o['zip']=$p->get('zip');
- $o['select']=$q;
- $o['fname']=$fname.'.zip';
- $scheduler->createJob($this->_moid,date('Y-m-d H:i:s'),'Export media',$o,'');
- $message=XLabels::getSysLabel('xmodmedia','exportftpok');
- XShell::toScreen2('','message',$message);
- }elseif($fmt=='ftpbatch'){
- $ftpserver=$ar['ftpserver'];
- $ftpserver=str_replace('ftp://','',$ftpserver);
- if(substr($ftpserver,-1)=='/') $ftpserver=substr($ftpserver,0,-1);
- $ftplogin=$ar['ftplogin'];
- $ftppass=$ar['ftppassword'];
- $ftpdir=$ar['ftpdir'];
- $reportto=$ar['reportto'];
- if(empty($reportto)) $reportto=$GLOBALS['XUSER']->email();
- $zipname=basename($dir.'.zip');
- $msg=$msglist='';
- $files=XDir::scan($dir);
- if(empty($files)) return;
- $ftp=ftp_connect($ftpserver);
- if(!$ftp) $msg='Unable to connect to '.$ftpserver;
- else{
- $ftpl=ftp_login($ftp,$ftplogin,$ftppass);
- if(!$ftpl) $msg='Error logging into '.$ftpserver;
- else{
- if(!empty($ftpdir) && !ftp_chdir($ftp,$ftpdir)) $msg='Unable to change dir to '.$ftpdir;
- else{
- if($zip){
- exec('(cd '.$dir.'; zip -r '.$dir.'.zip .)2>&1 > '.TZR_TMP_DIR.'errorlog');
- $ftpp=ftp_put($ftp,$zipname,$dir.'.zip',FTP_BINARY);
- if(!$ftpp) $msg='Unable to send file on the ftp server '.$ftpserver;
- }else{
- foreach($files as $file){
- $ftpp=ftp_put($ftp,basename($file),$file,FTP_BINARY);
- if(!$ftpp) $msglist="\n".basename($file).' => transfert error';
- else $msglist="\n".basename($file).' => ok';
- }
- }
- }
- }
- ftp_close($ftp);
- }
- if($reportto){
- if(!empty($msg)) $msg=sprintf(XLabels::getSysLabel('xmodmedia','exportftpbatcherror'),$msg);
- elseif($zip) $msg=sprintf(XLabels::getSysLabel('xmodmedia','exportftpbatchok'),$zipname);
- else $msg=sprintf(XLabels::getSysLabel('xmodmedia','exportftpbatchok'),$ftpdir).$msglist;
- $this->sendMail2User(sprintf(XLabels::getSysLabel('xmodmedia','exportftpbatchsub'),$this->modulename),$msg,$reportto);
- }
- XDir::unlink($dir);
- @unlink($dir.'.zip');
- }
- }
- /// Exporte les media avec leurs meta via tache planifiée
- function exportFilesBatch(XModScheduler &$scheduler,&$o,&$more){
- $ar=(array)$more;
- $ar['fmt']='ftpbatch';
- $this->exportFiles($ar);
- }
- /// Prépare une importation à la volée
- function importOnFly($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds = XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $r = $xds->input(array('tplentry'=>TZR_RETURN_DATA));
- $o=new XFolderDef((object)(array('FIELD'=>'medias','FTYPE'=>'XFolderDef')));
- $o->table=$this->table;
- $o->multifilesupload=true;
- $r['omedias']=$o->edit();
- $r['hashd']=$this->xset->fieldExists('mediahd');
- return XShell::toScreen1($tplentry,$r);
- }
- /// Importe des medias à la volée
- function procImportOnFly($ar=NULL){
- $p=new XParam($ar,NULL);
- $hd=$p->get('hdmedia');
- $uniqname=$p->get('uniqname');
- $publishauto=$p->get('publishauto');
- $uniqid=$p->get('medias_HID');
- $tmpdir=TZR_TMP_DIR.'upload'.$uniqid.'/'.$this->table.'/medias';
- $flist=unserialize(file_get_contents($tmpdir.'/'.$uniqid.'_catalog.txt'));
- $ari=array('tplentry'=>TZR_RETURN_DATA,'_options'=>array('local'=>true),'_allfields'=>true);
- if($publishauto) $ari['PUBLISH']=1;
- foreach($flist['tmp_name'] as $i=>$fname){
- $infos=pathinfo($flist['name'][$i]);
- $ar2=$ari;
- $ar2['ref']=$infos['filename'];
- if(!$hd){
- $ar2['media']=array('tmp_name'=>$fname,'name'=>$flist['name'][$i]);
- }else{
- $ld=$this->generateLDFromHD($fname,$flist['name'][$i],$flist['type'][$i]);
- if($ld){
- $ar2['mediahd']=array('tmp_name'=>$fname,'name'=>$flist['name'][$i]);
- $ar2['media']=array('tmp_name'=>$ld,'name'=>$flist['name'][$i]);
- }else{
- $ar2['media']=array('tmp_name'=>$fname,'name'=>$flist['name'][$i]);
- }
- }
- $ret=$this->importAMedia($ar2,array('uniq'=>$uniqname));
- }
-
- }
- /// Liste les actions disponible sur chaque objet d'un browse
- function browse_actions(&$r,$usersel=false) {
- $self=$GLOBALS['TZR_SESSION_MANAGER']::complete_self().($usersel?'&_bdxnewstack=1':'').'&moid='.$this->_moid.'&oid=<oid>&tplentry=br&function=';
- if(!is_array($r['lines_oid'])) return;
- $uniqid='v'.XShell::uniqid();
- $infosico=XLabels::getSysLabel('xmodmedia','informations');
- $infostxt=XLabels::getSysLabel('xmodmedia','informations','text');
- $dlico=XLabels::getSysLabel('xmodmedia','download');
- $dltxt=XLabels::getSysLabel('xmodmedia','download','text');
- $editico=XLabels::getSysLabel('general','edit');
- $edittxt=XLabels::getSysLabel('general','edit','text');
- $delico=XLabels::getSysLabel('general','delete');
- $deltxt=XLabels::getSysLabel('general','delete','text');
- $editlvl=$this->secGroups('edit');
- $dellvl=$this->secGroups('del');
- foreach($r['lines_oid'] as $i=>$oid) {
- $oidlvl=array_keys($r['objects_sec'][$i]);
- $self1=str_replace('<oid>',$oid,$self);
- $url=$self1.'displayInfos&template=xmodmedia/viewInfos.html&skip=1&_raw=2&_ajax=1';
- $open="window.open('$url&big=1','ph', 'scrollbars=no,status=no,toolbar=no,menubar=no,height=850,width=850');return false;";
- $r['actions'][$i][0]='<a class="cv8-mediahottipi" ondblclick="'.$open.'" bt-xtitle="'.$url.'" title="'.$infostxt.'">'.$infosico.'</a>';
- $r['actions_url'][$i][0]=$url;
- $r['actions_label'][$i][0]=$infosico;
- // download
- $external = isset($r['lines_omedia'][$i]) ? @$r['lines_omedia'][$i]->isExternal : @$r['lines'][$i]['omedia']->isExternal;
- if (!$external) {
- $r['actions'][$i][1]='<a href="#" onclick="return TZR.downloadMedia('.$this->_moid.',\''.$oid.'\');" title="'.$dltxt.'">'.$dlico.'</a>';
- $r['actions_url'][$i][1]='#';
- $r['actions_label'][$i][1]=$dlico;
- }
- // Edition
- $inter=array_intersect($editlvl,$oidlvl);
- if(!empty($inter)){
- $url=$self1.'edit&template=xmodmedia/edit.html';
- $r['actions'][$i][2]='<a class="cv8-ajaxlink cv8-editaction" href="'.$url.'" title="'.$edittxt.'">'.$editico.'</a>';
- $r['actions_url'][$i][2]=$url;
- $r['actions_label'][$i][2]=$editico;
- }
- // Suppression
- if(!$usersel){
- $inter=array_intersect($dellvl,$oidlvl);
- if(!empty($inter)){
- $url=$self1.'del&template=basic/message.html';
- $r['actions'][$i][3]='<a class="cv8-ajaxlink cv8-delaction" href="'.$url.'" title="'.$deltxt.'">'.$delico.'</a>';
- $r['actions_url'][$i][3]=$url;
- $r['actions_label'][$i][3]=$deltxt;
- }
- }
- }
- }
- /// Retourne le filtre du module
- public function getFilter($instanciate=true,$ar=array()) {
- $cfilter=$this->getCollectionFilter($ar);
- if($cfilter===NULL) return NULL;
-
- $filter=parent::getFilter($instanciate,$ar);
- if(!empty($cfilter)){
- $q=getSessionVar('filterquery'.$this->_moid);
- if(empty($q)){
- if(empty($filter)) $filter='('.$cfilter.')';
- else $filter=$filter.' AND ('.$cfilter.')';
- }
- }
- if(empty($filter)) return '';
- else {
- return '('.$filter.')';
- }
- }
- /// Parcours la selection utilisateur pour ce module
- function browseUserSelection($ar=NULL){
- $result=parent::browseUserSelection($ar);
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $result['_template']='xmodmedia/browseSelection.html';
- return XShell::toScreen1($tplentry,$result);
- }
- /// Sous fonctions de parcours de la selection
- function &_browseUserSelection($oid,&$data){
- if(!$this->collectionmod->object_sec || $this->secure($oid,'display')){
- $selectedfields = $this->xset->getFieldsList(NULL,true);
- if(!in_array('media',$selectedfields )) $selectedfields []='media';
- if($this->xset->fieldExists('mediahd') && !in_array('mediahd',$selectedfields)) $selectedfields[]='mediahd';
- return $this->xset->rDisplay($oid,array(),false,'','',array('selectedfields'=>$selectedfields));
- }
- return false;
- }
- /// Liste des actions sur les fiches de la selection
- function browseActionsUserSelection(&$r){
- $this->browse_actions($r,true);
- }
- /// Ajoute les droits sur les objets de la selection
- function applyObjectsSecUserSelection(&$r){
- $this->applyObjectsSec($r);
- }
- /// Liste des fonctions utilisable sur la selection du module
- function userSelectionActions(){
- $actions=array();
- $diapotxt=XLabels::getSysLabel('xmodmedia','diaporama','text');
- $actions['diaporama']='<a href="#" onclick="jQuery(\'#imagelistsel'.$this->_moid.' li span.imagelist_img a.nyro:first\').nm().nmCall();return false;">'.$diapotxt.'</a>';
- if($this->secure('','procQuery')){
- $viewtxt=XLabels::getSysLabel('general','view','text');
- $actions['view']='<a href="#" onclick="TZR.SELECTION.viewselected'.$this->_moid.'(); return false;">'.$viewtxt.'</a>';
- }
- if($this->secure('','editSelection')) {
- $editalltxt=XLabels::getSysLabel('xmodmedia','editselection','text');
- $actions['editselection']='<a href="#" onclick="TZR.SELECTION.applyToInContentDiv('.$this->_moid.',\'editSelection\',false,{template:\'xmodmedia/editSelection.html\',tplentry:\'br\'}); return false;">'.$editalltxt.'</a>';
- }
- if($this->secure('','del')) {
- $deltxt=XLabels::getSysLabel('general','delete','text');
- $actions['del']='<a href="#" onclick="TZR.SELECTION.applyTo('.$this->_moid.',\'del\',null,null,TZR.confirmDelete); return false;">'.$deltxt.'</a>';
- }
- if($this->secure('','exportFiles')) {
- $exptxt=XLabels::getSysLabel('xmodmedia','export','text');
- $actions['export']='<a href="#" onclick="TZR.SELECTION.exportselected'.$this->_moid.'(); return false;">'.$exptxt.'</a>';
- }
- if($this->secure('','sendACopyTo')){
- $sendtxt=XLabels::getSysLabel('xmodule','sendacopyto','text');
- $actions['sendacopy']='<a href="#" onclick="TZR.SELECTION.applyToInContentDiv('.$this->_moid.',\'sendACopyTo\',false,{template:\'xmodule/sendacopyto.html\'}); return false;">'.$sendtxt.'</a>';
- }
- if($this->secure('','printContactSheet')) {
- $exptxt=XLabels::getSysLabel('xmodmedia','printsheet','text');
- $actions['printcontactsheet']='<a href="#" onclick="TZR.SELECTION.printsheetselected'.$this->_moid.'(); return false;">'.$exptxt.'</a>';
- }
- // Telecharger
- if($this->secure('','chooseDownloadFormat')) {
- $dltxt=XLabels::getSysLabel('general','download','text');
- $actions['download']='<a href="#" onclick="TZR.SELECTION.downloadselected'.$this->_moid.'(); return false;">'.$dltxt.'</a>';
- }
- return $actions;
- }
- /// Rend l'accessibilite du module avec l'oid donné
- function secure($oid, $func, $user=NULL, $lang=TZR_DEFAULT_LANG) {
- if(!XShell::isRoot()){
- // On va verifier les droits sur les collections si activé
- if($this->collectionmod->object_sec){
- $sec=parent::secure($oid,$func,$user,$lang);
- if($sec) return $sec;
- $levels=$this->getObjectCollectionsAccess($oid,$user,$lang);
- $secs=$this->secGroups($func,NULL);
- if(!is_array($secs)) return false;
- if(array_intersect($secs,array_keys($levels))) return true;
- else return false;
- }
- }
- return parent::secure($oid,$func,$user,$lang);
- }
- /// Calcule les droits sur les collections d'un objet (ors peut etre un oid ou l'ors correspondant à un oid)
- /// L'acces sur l'oid ainsi que les acces sur les collections visitées sont mis en cache
- function getObjectCollectionsAccess($ors,&$user=NULL,$lang=NULL){
- $oid=$ors;
- if(is_array($oid)) $oid=$ors['KOID'];
- // Si les parametres ne sont pas ceux du contexte courant, on ne doit pas se servir du cache
- if(!empty($user) && $user!==$GLOBALS['XUSER'] || !empty($lang) && $lang!=XShell::getLangData()){
- $cache=false;
- $oldcache=$this->cache->colsrights;
- $this->cache->colsrights=array();
- }else{
- $cache=true;
- if(array_key_exists($oid,$this->cache->oidsrights)) return $this->cache->oidsrights[$oid];
- }
- // Recupere le contexte si pas passé en parametre
- if(empty($user)) $user=$GLOBALS['XUSER'];
- if(empty($lang)) $lang=XShell::getLangData();
- // Recupere l'ors si besoin
- if(!is_array($ors)){
- $lang_data=XShell::getLangData();
- $rs=selectQuery('select collection from '.$this->table.' where KOID="'.$ors.'" and LANG="'.$lang.'"');;
- $ors=$rs->fetch();
- }
- // Recupere le niveau max selon les collections de l'objet
- $maxlevel=array();
- $cols=explode('||',$ors['collection']);
- foreach($cols as $coid){
- if(empty($coid)) continue;
- if(empty($this->cache->colsrights[$coid])){
- $right=$user->getObjectAccess($this->collectionmod,$lang,$coid);
- $this->cache->colsrights[$coid]=array_flip($right[0]);
- }
- if(empty($maxlevel) || count($maxlevel)<count($this->cache->colsrights[$coid])) $maxlevel=$this->cache->colsrights[$coid];
- }
- // Mise en cache ou restitution du cache d'origine
- if(!$cache) $this->cache->colsrights=$oldcache;
- else $this->cache->oidsrights[$oid]=$maxlevel;
- return $maxlevel;
- }
- /// Recupere le filtre à appliquer à une requete en fonction des collections
- /// Le filtre ainsi que les acces de toutes les collections sont mis en cache
- function getCollectionFilter(){
- $filter=XUser::getDbCacheData('collectionFilter'.$this->_moid);
- if($filter===NULL){
- $filter='';
- // Si les droits sont géré sur les collections et que le droit de lecture minimum n'est pas actif
- if($this->collectionmod->object_sec && !$this->secure('',':ro')){
- $lang_data=XShell::getLangData();
- $rs=&selectQuery('select DISTINCT KOID from '.$this->collectionmod->table);
- $oids=array();
- while($rs && $ors=$rs->fetch()) $oids[]=$ors['KOID'];
- $oidsrights=$GLOBALS['XUSER']->getObjectsAccess($this->collectionmod,$lang_data,$oids);
- if(empty($oidsrights)) return NULL;
- $this->cache->colsrights=$filter=array();
- $colsok=0;
- foreach($oidsrights as $i=>$rights) {
- $this->cache->colsrights[$oids[$i]]=$rights;
- // On teste que le niveau de lecture le plus bas est autorisé
- if(array_key_exists('ro1',$rights)){
- $filter[]='(collection="'.$oids[$i].'" or INSTR(collection,"||'.$oids[$i].'||"))';
- $colsok++;
- }
- }
- if($colsok==0) $filter=NULL;
- if($colsok!=count($oids)) $filter='('.implode('OR',$filter).')';
- else $filter='(collection is not null or collection!="")';
- }
- XUser::setDbCacheData('collectionFilter'.$this->_moid,$filter);
- }
- return $filter;
- }
- /// Applique la sécurité en fonction des collections sur un browse/procQuery
- function applyObjectsSec(&$r){
- $lang_data=XShell::getLangData();
- // Recupere pour chaque objet les droits max en fct de ses collections
- if($this->collectionmod->object_sec && !XShell::isRoot()){
- $colsmaxlevel=array();
- $oidlist='"'.implode('","',$r['lines_oid']).'"';
- $rs=selectQuery('select KOID,collection from '.$this->table.' where KOID in('.$oidlist.') and LANG="'.$lang_data.'" order by field(KOID,'.$oidlist.')');
- $i=0;
- while($rs && $ors=$rs->fetch()){
- $colsmaxlevel[$i]=$this->getObjectCollectionsAccess($ors);
- $i++;
- }
- }
- $right=$GLOBALS['XUSER']->getObjectAccess($this, $lang_data, $r['lines_oid'][0]);
- $right=array_flip($right[0]);
- if($this->collectionmod->object_sec && !XShell::isRoot()){
- foreach($r['lines_oid'] as $i=>$oid) $r['objects_sec'][$i]=array_intersect_assoc($right,$colsmaxlevel[$i]);
- }else{
- foreach($r['lines_oid'] as $i=>$oid) $r['objects_sec'][$i]=$right;
- }
- }
- /***********************/
- /* Gestion des imports */
- /***********************/
- /// Parcours les procédures d'import
- public function importBrowse($ar=NULL){
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $ar['order']='title';
- return $xds->browse($ar);
- }
- /// Affiche une procédure
- public function importDisplay($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $ar['tplentry']=TZR_RETURN_DATA;
- $xds->desc['more']->sys=true;
- $ar['oid'] = $p->get('oidimport');
- $ret=$xds->display($ar);
- $legend=XSystem::xml2array($ret['omore']->raw);
- $legend=$legend['legend'];
- $values=$options=array();
- parse_str($legend,$values);
- foreach($this->xset->desc as $fn=>&$f){
- if($values[$fn] || $values[$fn.'_HID']){
- $v=$values[$fn];
- $foo=$f->post_edit($v,$values);
- $options[$fn]['value']=(is_array($foo->raw)?implode('||',$foo->raw):$foo->raw);
- if($foo->raw){
- $ret['__fields'][]=$f->display($foo->raw);
- }
- }
- }
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Prepare l'ajout d'une nouvelle procédure
- public function importInput($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $xds->desc['more']->sys=true;
- if(!$this->xset->fieldExists('mediahd')){
- $ar['fieldssec']['mediahddir']='none';
- }
- $ret=$xds->input($ar);
- $editParams = $p->get('editParams');
- $editParams['tplentry'] = TZR_RETURN_DATA;
- $ret['__edit']=$this->insert($editParams);
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Ajoute une nouvelle procédure
- public function importProcInput($ar=NULL){
- $p=new XParam($ar,NULL);
- $legend=$p->get('legend');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- XSystem::array2xml(array('legend'=>$legend),$ar['more']);
- if(!$this->xset->fieldExists('mediahd')){
- $ar['mediahddir']='';
- }
- $ret=$xds->procInput($ar);
- $this->FTPRecursiveMkdir($ret['inputs']['ftph']->raw,$ret['inputs']['ftpu']->raw,$ret['inputs']['ftpp']->raw,array($ret['inputs']['mediadir']->raw,$ret['inputs']['mediahddir']->raw));
- return $ret;
- }
- /// Prepare l'édition d'une procédure
- public function importEdit($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $xds->desc['more']->sys=true;
- if(!$this->xset->fieldExists('mediahd')){
- $ar['fieldssec']['mediahddir']='none';
- }
- $ar['oid'] = $p->get('oidimport');
- $ret=$xds->edit($ar);
- $legend=XSystem::xml2array($ret['omore']->raw);
- $legend=$legend['legend'];
- $values=$options=array();
- parse_str($legend,$values);
- foreach($this->xset->desc as $fn=>&$f){
- if($values[$fn] || $values[$fn.'_HID']){
- $v=$values[$fn];
- $foo=$f->post_edit($v,$values);
- $options[$fn]['value']=(is_array($foo->raw)?implode('||',$foo->raw):$foo->raw);
- }
- }
- $ret['__edit']=$this->insert(array('tplentry'=>TZR_RETURN_DATA,'options'=>$options));
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Edite une procédure
- public function importProcEdit($ar=NULL){
- $p=new XParam($ar=NULL);
- $legend=$p->get('legend');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- XSystem::array2xml(array('legend'=>$legend),$ar['more']);
- if(!$this->xset->fieldExists('mediahd')){
- $ar['mediahddir']='';
- }
- $ar['oid'] = $p->get('oidimport');
- return $xds->procEdit($ar);
- }
- /// Efface une procédure
- public function importDel($ar=NULL){
- $p=new XParam($ar=NULL);
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $ar['oid'] = $p->get('oidimport');
- return $xds->del($ar);
- }
- /// Execute les procédures
- public function runImports($ar=NULL){
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->imports);
- $ar['tplentry']=TZR_RETURN_DATA;
- if($this->xset->fieldExists('dateb') && $this->xset->fieldExists('datee')) {
- $ar['_filter']='PUBLISH=1 AND (dateb < NOW() OR dateb="0000-00-00") AND (datee > NOW() OR dateb="0000-00-00")';
- }else{
- $ar['_filter']='PUBLISH=1';
- }
- $ar['selectedfields']='all';
- $ar['pagesize'] = 99999;
- $br=$xds->browse($ar);
- $tmpdir=TZR_TMP_DIR.uniqid('importmedia').'/';
- @mkdir($tmpdir);
- foreach($br['lines_oid'] as $i=>$oid){
- if(empty($br['lines_omediadir'][$i]->raw) && empty($br['lines_omediahddir'][$i]->raw)) continue;
- if(!empty($br['lines_oOWN'][$i]->raw)){
- $olduser=$GLOBALS['XUSER'];
- $GLOBALS['XUSER']=new XUser(array("UID"=>$br['lines_oOWN'][$i]->raw));
- setSessionVar("UID",$br['lines_oOWN'][$i]->raw);
- }
- $message='';
- $tot=$add=$update=0;
- // Recupere tout les parametres
- $ari=array('tplentry'=>TZR_RETURN_DATA,'_options'=>array('local'=>true),'_allfields'=>true,'options'=>array());
- $more=XSystem::xml2array($br['lines_omore'][$i]->raw);
- if(!empty($more['values'])){
- foreach($more['values'] as $f=>$v) $ari[$f]=$v;
- }elseif($more['legend']){
- $foo=array();
- parse_str($more['legend'],$foo);
- foreach($foo as $f=>$v) $ari[$f]=$v;
- }
- if($br['lines_opublishauto'][$i]->raw==1) $ari['PUBLISH']=1;
- $ftph=str_replace('ftp://','',$br['lines_oftph'][$i]->raw);
- if(substr($ftph,-1)=='/') $ftph=substr($ftph,0,-1);
- $dir=$br['lines_omediadir'][$i]->raw;
- if(!empty($dir) && substr($dir,-1)!='/') $dir.='/';
- $dirhd=$br['lines_omediahddir'][$i]->raw;
- if(!empty($dirhd) && substr($dirhd,-1)!='/') $dirhd.='/';
- if(!$this->xset->fieldExists('mediahd')){
- $dirhd='';
- }
- // Connexion au ftp et récupération des media et mediahd
- $ftp=ftp_connect($ftph);
- if(!$ftp){
- if(!empty($br['lines_oemail'][$i]->raw)){
- $this->sendMail2User($this->modulename.' : import '.$br['lines_otitle'][$i]->raw,'Bad FTP Hostname',
- $br['lines_oemail'][$i]->raw);
- }
- continue;
- }
- $login=ftp_login($ftp,$br['lines_oftpu'][$i]->raw,$br['lines_oftpp'][$i]->raw);
- if(!$login){
- if(!empty($br['lines_oemail'][$i]->raw)){
- $this->sendMail2User($this->modulename.' : import '.$br['lines_otitle'][$i]->raw,'Bad FTP User/FTP Pass',
- $br['lines_oemail'][$i]->raw);
- }
- continue;
- }
- $dirhome=ftp_pwd($ftp);
- // Teste l'acces au repertoire LD
- if(!empty($dir) && !ftp_chdir($ftp,$dir)){
- if(!empty($br['lines_oemail'][$i]->raw)){
- $this->sendMail2User($this->modulename.' : import '.$br['lines_otitle'][$i]->raw,'Directory not exist',
- $br['lines_oemail'][$i]->raw);
- }
- continue;
- }
- ftp_chdir($ftp,$dirhome);
- // Teste l'acces au repertoire HD
- if(!empty($dirhd) && !ftp_chdir($ftp,$dirhd)){
- if(!empty($br['lines_oemail'][$i]->raw)){
- $this->sendMail2User($this->modulename.' : import '.$br['lines_otitle'][$i]->raw,'Directory HD not exist',
- $br['lines_oemail'][$i]->raw);
- }
- continue;
- }
- ftp_chdir($ftp,$dirhome);
- $files=array();
- // Recupere la liste des fichiers LD
- if(ftp_chdir($ftp,$dir)) {
- $files=$this->FTPRecursiveList($ftp,'./');
- }
- // Recupere la liste des fichiers HD
- ftp_chdir($ftp,$dirhome);
- $fileshd=array();
- if(!empty($dirhd) && ftp_chdir($ftp,$dirhd)) {
- $fileshd=$this->FTPRecursiveList($ftp,'./');
- }
- ftp_chdir($ftp,$dirhome);
- // Importe les medias LD et leur equivalent HD si présent
- foreach($files as $file) {
- $infos=pathinfo($tmpdir.$file);
- @@mkdir($infos['dirname'],0777,true);
- // Controle que le transfert est fini
- if(!waitForFileCompletion($ftp,$dir.$file,100000)) continue;
- $get=ftp_get($ftp,$tmpdir.$file,$dir.$file,FTP_BINARY);
- if(!$get) continue;
- $ar2=$ari;
- $tot++;
- $message.=$file.' (LD';
- $ar2['media']=array('tmp_name'=>$tmpdir.$file,'name'=>$file);
- if(!empty($fileshd) && in_array($file,$fileshd)){
- $get=ftp_get($ftp,$tmpdir.'hd_'.$file,$dirhd.$file,FTP_BINARY);
- if($get){
- $ar2['mediahd']=array('tmp_name'=>$tmpdir.'hd_'.$file,'name'=>$file);
- $message.='/HD';
- }
- }
- $message.=') => ';
- $ar2['ref']=$infos['filename'];
- $ar2['importedfrom']=$oid;
- if(!empty($br['lines_oowner'][$i]->raw)){
- $ar2['OWN']=$br['lines_oowner'][$i]->raw;
- }
- $ret=$this->importAMedia($ar2,array('uniq'=>$br['lines_ouniqname'][$i]->raw,'iptctpl'=>@$br['lines_oiptctpl'][$i]->filename));
- // message de log
- $i1=$xds->rDisplay($oid);
- $xds->procEdit(array('oid'=>$oid,'mylog'=>"LD/".date('Y-m-d H:i:s').'/'.$ar2['ref'].':'.$ret['message']."\n".$i1['omylog']->text,'_local'=>true));
- $message.=$ret['message']."\r\n";
- ftp_delete($ftp,$dir.$file);
- if(!empty($ar2['mediahd'])) ftp_delete($ftp,$dirhd.$file);
- }
- // Importe les medias HD qui n'ont pas de LD
- $mimeClasse=XMimeTypes::getInstance();
- foreach($fileshd as $file){
- if(in_array($file,$files)) continue;
- $infos=pathinfo($tmpdir.'hd_'.$file);
- mkdir($infos['dirname'],0777,true);
- // controle que le transfert est fini
- if(!waitForFileCompletion($ftp, $dirhd.$file)) continue;
- $get=ftp_get($ftp,$tmpdir.'hd_'.$file,$dirhd.$file,FTP_BINARY);
- if(!$get) continue;
- $ar2=$ari;
- $tot++;
- $message.=$file.' (HD) => ';
- $ld=$this->generateLDFromHD($tmpdir.'hd_'.$file,$file,NULL);
- if($ld){
- $ar2['mediahd']=array('tmp_name'=>$tmpdir.'hd_'.$file,'name'=>$file);
- $ar2['media']=array('tmp_name'=>$ld,'name'=>$file);
- }else{
- $ar2['media']=array('tmp_name'=>$tmpdir.'hd_'.$file,'name'=>$file);
- }
- $infos=pathinfo($file);
- $ar2['ref']=$infos['filename'];
- $ar2['importedfrom']=$oid;
- $ret=$this->importAMedia($ar2,array('uniq'=>$br['lines_ouniqname'][$i]->raw,'iptctpl'=>@$br['lines_oiptctpl'][$i]->filename));
- $message.=$ret['message']."\r\n";
- // message de log
- $i1=$xds->rDisplay($oid);
- $xds->procEdit(array('oid'=>$oid,'mylog'=>"HD/".date('Y-m-d H:i:s').'/'.$ar2['ref'].':'.$ret['message']."\n".$i1['omylog']->text,'_local'=>true));
- ftp_delete($ftp,$dirhd.$file);
- }
- ftp_close($ftp);
- XDir::unlink($tmpdir);
- // Desctivation de la procedure si usage unique
- if($br['lines_oonlyone'][$i]->raw==1) updateQuery('update '.$this->imports.' set PUBLISH="2" where KOID="'.$oid.'"');
- // Envoie du mail de rapport
- if(!empty($br['lines_oemail'][$i]->raw) && $tot){
- XLogs::update($this->modulename.' : import '.$br['lines_otitle'][$i]->raw,NULL,$message);
- $this->sendMail2User($this->modulename.' : import '.$br['lines_otitle'][$i]->raw,$message,$br['lines_oemail'][$i]->raw);
- }
- if(!empty($olduser)) {
- setSessionVar('UID',$olduser->uid());
- $GLOBALS["XUSER"]=$olduser;
- unset($oluser);
- }
- }
- }
- /// Créé des repertoires sur un ftp de facon récursive
- public function FTPRecursiveMkdir($host,$login,$pass,$dirs){
- $ftph=str_replace('ftp://','',$host);
- $ftp=ftp_connect($ftph);
- if($ftp){
- $login=ftp_login($ftp,$login,$pass);
- if($login){
- foreach($dirs as $dir){
- if(empty($dir)) continue;
- $ndir='';
- $sdirs=explode('/',$dir);
- foreach($sdirs as $sdir){
- if(empty($sdir)) continue;
- $ndir.=$sdir.'/';
- ftp_mkdir($ftp,$ndir);
- }
- }
- }
- ftp_close($ftp);
- }
- }
-
- /// Liste de facon recursive les fichiers d'un repertoire
- function FTPRecursiveList(&$ftp,$dir){
- if(empty($dir)) return array();
- $alls=array();
- $files=ftp_nlist($ftp,$dir);
- $pwd=ftp_pwd($ftp);
- foreach($files as $file){
- if(@ftp_chdir($ftp,$file)){
- ftp_chdir($ftp,$pwd);
- $sfiles=$this->FTPRecursiveList($ftp,$file.'/');
- if($sfiles){
- foreach($sfiles as $foo){
- $alls[]=$foo;
- }
- }
- }else{
- $alls[]=$file;
- }
- }
- return $alls;
- }
- /// Importe un media
- function importAMedia($ar,$ari){
- $f='';
- $uniq=$ari['uniq'];
- if($uniq==1) {
- $rs=preparedSelectQuery(array($ar['ref']),'select KOID from '.$this->table.' where ref=?');
- if($rs->rowCount()>0){
- $ors=$rs->fetch();
- $ar['oid']=$ors['KOID'];
- $f='procEdit';
- $message='updated';
- }
- }
- if(empty($f)){
- $f='procInsert';
- $message='added';
- }
- if(!empty($ari['iptctpl'])){
- if(!empty($ar['media']['tmp_name'])) XFileDef::setFileMetaWithTemplate($ari['iptctpl'],$ar['media']['tmp_name']);
- if(!empty($ar['mediahd']['tmp_name'])) XFileDef::setFileMetaWithTemplate($ari['iptctpl'],$ar['mediahd']['tmp_name']);
- }
- $ret=$this->$f($ar);
- if($ret['oid']) $oid=$ret['oid'];
- else $oid=$ar['oid'];
- return array('oid'=>$oid,'message'=>$message);
- }
- /// Génère une version LD d'un media HD
- public function generateLDFromHD($file,$filename=NULL,$mime=NULL,$opt=NULL){
- $mimeClasse=XMimeTypes::getInstance();
- $mime=$mimeClasse->getValidMime($mime,$file,$filename);
- // Génération de la LD car champ obligatoire
- if($mimeClasse->isImage($mime)){
- if(empty($opt)) $opt=$this->imgresize;
- system(TZR_MOGRIFY_RESIZER.' -resize "'.$opt.'" '.$file.' '.$file.'.ld');
- return $file.'.ld';
- }else{
- return false;
- }
- }
- /***********************/
- /* Gestion des exports */
- /***********************/
- /// Parcourt les exports
- function exportBrowse($ar=NULL){
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- $ar['_filter']='modid='.$this->_moid.' and atype="export"';
- return $xds->browse($ar);
- }
- /// Affiche un export
- function exportDisplay($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- $ret=$xds->display($ar);
- $cplt=XSystem::xml2array($ret['ocplt']->raw);
- $link=new XLinkDef();
- $link->field='query';
- $link->target='QUERIES';
- $ret['oquery']=$link->display($cplt['query']);
- $ret['ocplt']=$cplt;
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Prepare l'insertion d'un export
- function exportInput($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=$xds->input($ar);
- $link=new XLinkDef();
- $link->field='cplt[query]';
- $link->target='QUERIES';
- $link->checkbox=false;
- $ret['oquery']=$link->edit();
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Insere un export
- function exportProcInput($ar=NULL){
- $p=new XParam($ar,NULL);
- $cplt=$p->get('cplt');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- XSystem::array2xml($cplt,$ar['cplt']);
- $ar['modid']=$this->_moid;
- $ar['atype']='export';
- return $xds->procInput($ar);
- }
- /// Prepare l'edition d'un export
- function exportEdit($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- $ret=$xds->edit($ar);
- $cplt=XSystem::xml2array($ret['ocplt']->raw);
- $link=new XLinkDef();
- $link->field='cplt[query]';
- $link->target='QUERIES';
- $link->checkbox=false;
- $ret['oquery']=$link->edit($cplt['query']);
- $ret['ocplt']=$cplt;
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Edite un export
- function exportProcEdit($ar=NULL){
- $p=new XParam($ar,NULL);
- $cplt=$p->get('cplt');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- XSystem::array2xml($cplt,$ar['cplt']);
- $ar['modid']=$this->_moid;
- $ar['atype']='export';
- return $xds->procEdit($ar);
- }
- /// Efface un export
- public function exportDel($ar=NULL){
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=_ACCOUNTS');
- return $xds->del($ar);
- }
- /// Execute les exports
- public function runExports($ar=NULL){
- $rs=&selectQuery('select * from _ACCOUNTS where modid='.$this->_moid.' and atype="export"');
- while($rs && $ors=$rs->fetch()){
- $cplt=XSystem::xml2array($ors['cplt']);
- $upd=XDBIni::get('lastexport_'.$ors['KOID'].'_'.$this->_moid,'val');
- $oldfilter=$this->filter;
- $this->filter=$this->table.'.UPD>="'.$upd.'"';
- $query=$this->procQuery(array('getselectonly'=>true,'_storedquery'=>$cplt['query']));
- $this->filter=$oldfilter;
- XDBIni::set('lastexport_'.$ors['KOID'].'_'.$this->_moid,date('Y-m-d H:i:s'));
- $this->exportFiles(array('select'=>$query,'fmt'=>'ftpbatch','ftpserver'=>$ors['url'],'ftplogin'=>$ors['login'],
- 'ftppassword'=>$ors['passwd'],'ftpdir'=>$cplt['dir'],'zip'=>0,'reportto'=>$cplt['reportto']));
- }
- }
- /***************************/
- /* Gestion de l'indexation */
- /***************************/
- /// Recupere la notice du media
- function &getSearchEngineNotice($display){
- $notice = '';
- // les champs !publiés et non fichiers dans la notice
- foreach($display['fields_object'] as $i=>&$v) {
- $field = $v->fielddef;
- if ($field->indexable && (!$field->get_published() && !($field instanceof XFileDef) && !($field instanceof XFolderDef))){
- $notice .= ' '.$v->toText();
- }
- }
- // ajout des noms des champs fichiers
- $indexables = $this->xset->getIndexablesFields();
- $txt = getFilesContent($d, $indexables);
- $notice.=" ".$txt;
- return $notice;
- }
- /// Ajout d'une fiche au moteur de recherche
- function addToSearchEngine(&$searchEngine,$oid) {
- $d=$this->xset->display(array('tplentry'=>TZR_RETURN_DATA,'oid'=>$oid));
- $text=$this->getSearchEngineNotice($d);
- $fields=array('title'=>strip_tags($d['link']),'notice'=>$d['okeywords']->toText(),'contents'=>&$text);
- $searchEngine->addItem($oid,$fields,$this->_moid,NULL);
- XLogs::notice(get_class($this),get_class($this).'::addToSearchEngine '.$oid);
- }
-
- /// presentation d'un resultat de recherche dans le module
- public function showSearchResult($oids) {
- $this->_setSession('query', array('_table' => $this->table, 'where' => 'KOID in ("'.implode('","', $oids).'")'));
- $_REQUEST = array(
- 'function' => 'procQuery',
- 'template' => 'xmodmedia/browse.html',
- 'moid' => $this->_moid,
- 'tplentry' => 'br',
- '_persistent' => true,
- );
- $GLOBALS['XSHELL']->run();
- exit;
- }
- /// preview des resultats de recherche dans la liste globale des resultats de la recherche plain texte
- public function previewSearchResult($oids) {
- $browse = $this->xset->browse(array(
- 'tplentry' => TZR_RETURN_DATA,
- 'selectedfields' => array('media', 'ref'),
- 'cond' => array('KOID' => array('=', array_slice($oids, 0, 100))),
- 'order' => 'FIELD(KOID,"'.implode('","', array_slice($oids, 0, 100)).'")',
- 'pagesize' => 100,
- 'nocount' => 1
- ));
- $this->browse_actions($browse);
- $browse['count'] = count($browse['lines_oid']);
- return $browse;
- }
- function goto1($ar=NULL) {
- $p=new XParam($ar,array());
- $oid=$p->get('oid');
- $url=$GLOBALS['TZR_SESSION_MANAGER']::admin_url(false,true);
- $moid=$this->_moid;
- $right= $this->secure($oid, 'display');
- if(!$right) securityWarning('XModMedia::goto1: could not access to objet '.$oid.' in module '.$moid);
- header("Location: {$url}&moid=$moid&template=xmodmedia/view.html&oid=$oid&function=display&tplentry=br");
- }
- }
- ?>