/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
Large files files are truncated, but you can click here to view the full file
- <?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('tpl…
Large files files are truncated, but you can click here to view the full file