/class.xmodtable.inc
PHP | 4658 lines | 4000 code | 247 blank | 411 comment | 778 complexity | 55424be8b9a6697202b4b2a0f9d9c4c8 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
- /****c* tzr-5/XModTable
- * NAME
- * XModTable -- gestion d'un ensemble de fiches
- * DESCRIPTION
- * Affichage edition et manipulations diverses sur une ensemble de fiches.
- * SYNOPSIS
- * La creation d'un module est realisee par utilisation de la methode de classe XModule::objectFactory.
- * PARAMETERS
- ****/
- /// Module de gestion de fiches, base sur une simple table SQL
- class XModTable extends XModule implements XModuleContainerInterface, XCalInterface {
- static $_templates;
- public $xset=NULL;
- public $fieldssec=array();
- public $boid;
- public $table='T001';
- public $multipleedit=true;
- public $owner_sec=true;
- public $filter='';
- public $order='UPD DESC';
- public $quickquery=true;
- public $stored_query=false;
- public $pagesize=TZR_XMODTABLE_BROWSE_PAGESIZE;
- public $templates='';
- public $btemplates='';
- public $captcha=false;
- public $savenext='standard';
- public $showsystprop='show';
- public $persistentquery=false;
- public $trackaccess=false;
- public $trackchanges=true;
- public $archive=false;
- public $searchtemplate='xmodtable/searchResult.html';
- public $submodsearch=false;
- private $secOids_cache;
- private $navActions = NULL;
- function __construct($ar=NULL) {
- parent::__construct($ar);
- XLabels::loadLabels('xmodtable');
- $this->xset=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->table);
- if (!is_object($this->xset)) {
- throw new Exception('Non existent table: "'.$this->table.'"');
- }
- $this->boid=$this->xset->getBoid();
- if(XShell::admini_mode() && empty($this->_templates) && (!empty($this->templates) || !empty($this->btemplates)))
- $this->_templates=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS=TEMPLATES');
- if(!XShell::isRoot() && !empty($GLOBALS['XUSER'])) $this->loadFieldsSec($this->fieldssec);
- }
- /// Duplication d'un module, méthode interne
- /// Retour : duplicatetables => liste des tables dupliquées par le module (cle : ancienne table, valeur : nouvelle table))
- /// Retour : duplicatemods => liste des modules dupliqués par le module (cle : ancien moid, valeur : nouveau moid))
- function _duplicateModule($newmoid,&$params,$prefix) {
- if(!is_array($params['tables'])) $params['tables']=array();
- if(!$params['noduplicatetable']){
- if(empty($params['tables'][$this->table])){
- $ar['newtable']=XDSTable::newTableNumber();
- if(($pos=strpos($this->xset->getLabel(),':'))!==false) $ar['mtxt']=$prefix.substr($this->xset->getLabel(),$pos);
- else $ar['mtxt']=$prefix.':'.$this->xset->getLabel();
- $ar['data']=true;
- $ar['_options']=array('local'=>1);
- $xset2=$this->xset->procDuplicateDataSource($ar);
- $params['table']=$ar['newtable'];
- }else{
- $params['table']=$params['tables'][$this->table];
- }
- }
- unset($params['noduplicatetable']);
- return array('duplicatetables'=>array($this->table=>$params['table']),'duplicatemods'=>array());
- }
- /// securite des fonctions accessibles par le web
- function secGroups($function, $group=NULL) {
- $g=array();
- $g['browse']=array('list','ro','rw','rwv','admin');
- $g['browseFiles']=array('list','ro','rw','rwv','admin');
- $g['del']=array('rw','rwv','admin');
- $g['delAll']=array('rw','rwv','admin');
- $g['delStoredQuery']=array('rw','rwv','admin');
- $g['display']=array('ro','rw','rwv','admin');
- $g['XMCdisplay']=array('ro','rw','rwv','admin');
- $g['edit']=array('rw','rwv','admin');
- $g['editSelection']=array('rw','rwv','admin');
- $g['editAll']=array('rw','rwv','admin');
- $g['export']=array('list','ro','rw','rwv','admin');
- $g['exportDisplay']=array('ro','rw','rwv','admin');
- $g['exportFilesBatch']=array('ro','rw','rwv','admin');
- $g['gDisplay']=array('admin');
- $g['insert']=array('rw','rwv','admin');
- $g['journal']=array('ro','rw','rwv','admin');
- $g['prePrintBrowse']=array('list','ro','rw','rwv','admin');
- $g['prePrintDisplay']=array('list','ro','rw','rwv','admin');
- $g['preExportBrowse']=array('list','ro','rw','rwv','admin');
- $g['preExportDisplay']=array('list','ro','rw','rwv','admin');
- $g['printBrowse']=array('list','ro','rw','rwv','admin');
- $g['printDisplay']=array('ro','rw','rwv','admin');
- $g['procEdit']=array('rw','rwv','admin');
- $g['procEditDup']=array('rw','rwv','admin');
- $g['procEditAllLang']=array('rw','rwv','admin');
- $g['procEditSelection']=array('rw','rwv','admin');
- $g['procInsert']=array('rw','rwv','admin');
- $g['procQuery']=array('list','ro','rw','rwv','admin');
- $g['procQueryFiles']=array('list','ro','rw','rwv','admin');
- $g['publish']=array('rwv','admin');
- $g['query']=array('list', 'ro','rw','rwv','admin');
- $g['quickquery']=array('list','ro','rw','rwv','admin');
- $g['adminSubscribe']=array('admin');
- $g['getUnread']=array('list','ro','rw','rwv','admin');
- $g['markAsRead']=array('list','ro','rw','rwv','admin');
- self::getGetAdminSecGroups($g);
- if(isset($g[$function])) {
- if(!empty($group)) return in_array($group, $g[$function]);
- return $g[$function];
- }
- return parent::secGroups($function,$group);
- }
- /// Complete le tableau des focntion du module avec les fonction d'administration
- function getGetAdminSecGroups(&$g){
- $g['adminBrowseFields']=array('admin');
- $g['adminPrint']=array('admin');
- $g['adminClear']=array('admin');
- $g['adminDuplicate']=array('admin');
- $g['adminProcDuplicate']=array('admin');
- $g['adminChk']=array('admin');
- $g['adminEditSourceProperties']=array('admin');
- $g['adminProcEditSourceProperties']=array('admin');
- $g['adminNewField']=array('admin');
- $g['adminProcNewField']=array('admin');
- $g['adminEditField']=array('admin');
- $g['adminProcEditField']=array('admin');
- $g['adminProcEditFields']=array('admin');
- $g['adminDelField']=array('admin');
- $g['adminBrowseStrings']=array('admin');
- $g['adminNewString']=array('admin');
- $g['adminProcNewString']=array('admin');
- $g['adminEditString']=array('admin');
- $g['adminProcEditString']=array('admin');
- $g['adminDelString']=array('admin');
- $g['adminSortStrings']=array('admin');
- $g['adminClearStrings']=array('admin');
- $g['adminPreImportFieldsSec']=array('admin');
- $g['adminImportFieldsSec']=array('admin');
- $g['adminResetChrono']=array('admin');
- }
- /* Webservice du module */
- /// Sous fonction chargée d'ajouter les types necessaires
- function _SOAPWSDLTypes(&$wsdl){
- $fields=array(array('minOccurs'=>1,'maxOccurs'=>1,'name'=>'oid','type'=>'xsd:string'));
- foreach($this->xset->desc as $n=>&$f){
- $type=$f->getSoapType();
- $fields[]=array('minOccurs'=>0,'maxOccurs'=>1,'name'=>$n,'type'=>$type['name']);
- if(!empty($type['descr'])) $this->_SOAPAddTypes($wsdl,$type['descr']);
- }
- $this->_SOAPAddTypes($wsdl,array('browseParam'=>array(array('name'=>'filter','minOccurs'=>0,'maxOccurs'=>1,'type'=>'xsd:string'),
- array('name'=>'fields','minOccurs'=>0,'maxOccurs'=>1,'type'=>'xsd:string')),
- 'displayParam'=>array(array('name'=>'oid','minOccurs'=>1,'maxOccurs'=>1,'type'=>'xsd:string')),
- 'displayResult'=>$fields,
- 'browseResult'=>array(array('name'=>'line','minOccurs'=>0,'maxOccurs'=>'unbounded','type'=>'tns:displayResult'))));
- return;
- }
- /// Sous fonction chargée d'ajouter les messages necessaires
- function _SOAPWSDLMessages(&$wsdl){
- $wsdl->addMessage('browseIn',array('context'=>'tns:contextParam','param'=>'tns:browseParam'));
- $wsdl->addMessage('browseOut',array('return'=>'tns:browseResult'));
- $wsdl->addMessage('displayIn',array('context'=>'tns:contextParam','param'=>'tns:displayParam'));
- $wsdl->addMessage('displayOut',array('return'=>'tns:displayResult'));
- return;
- }
- /// Sous fonction chargée d'ajouter les ports necessaires
- function _SOAPWSDLPortOps(&$wsdl,&$pt){
- $wsdl->addPortOperation($pt,'browse','tns:browseIn','tns:browseOut');
- $wsdl->addPortOperation($pt,'display','tns:displayIn','tns:displayOut');
- return;
- }
- /// Sous fonction chargée d'ajouter les operations necessaires
- function _SOAPWSDLBindingOps(&$wsdl,&$b){
- $bo=$wsdl->addBindingOperation($b,'browse',array('use'=>'literal'),array('use'=>'literal'));
- $o=$wsdl->addSoapOperation($bo,'');
- $o->setAttribute('style','rpc');
- $bo=$wsdl->addBindingOperation($b,'display',array('use'=>'literal'),array('use'=>'literal'));
- $o=$wsdl->addSoapOperation($bo,'');
- $o->setAttribute('style','rpc');
- return;
- }
- /// Sous fonction declarant les fonctions du module
- function _SOAPRequestFunctions(&$server) {
- function browse($context,$params){
- global $soapmod;
- $LANG_DATA = XShell::getLangData();
- XLogs::debug("SOAPRequest function browse LANG:$LANG_DATA filter:".$params->filter." fields:".$params->fields);
- $soapmod->SOAPContext($context,'browse');
- $ar=array('tplentry'=>TZR_RETURN_DATA,'pagesize'=>999999);
- if(!empty($params->fields)){
- if($params->fields=='all' || $params->fields=='*') $ar['selectedfields']='all';
- else $ar['selectedfields']=explode(',',$params->fields);
- }
- if(!empty($params->filter)){
- $translatable = $soapmod->xset->getTranslatable();
- if(!$translatable) $LANG_DATA=TZR_DEFAULT_LANG;
- $ar['select']='select * from '.$soapmod->table.' where LANG="'.$LANG_DATA.'" AND ('.str_ireplace(' select ','',$params->filter).')';
- }
- $ar['nocount'] = 1;
- foreach($ar['selectedfields'] as $fieldname){
- $ar['options'][$fieldname]['nofollowlinks']=1;
- }
- $br=$soapmod->browse($ar);
- $lines=array();
- foreach($br['lines_oid'] as $i=>$oid){
- $line=array('oid'=>$oid);
- foreach($br['header_fields'] as $j=>&$f){
- $line[$f->field]=$br['lines_o'.$f->field][$i]->getSoapValue();
- }
- $lines[]=$line;
- }
- return array('line'=>$lines);
- }
- function display($context,$params){
- global $soapmod;
- XLogs::debug("SOAPRequest function display oid:".$params->oid);
- $soapmod->SOAPContext($context,'display',$params->oid);
- $ar=array('tplentry'=>TZR_RETURN_DATA,'oid'=>$params->oid);
- $br=$soapmod->display($ar);
- $ret=array('oid'=>$br['oid']);
- foreach($br['fields_object'] as $j=>&$f){
- $ret[$f->field]=$br['o'.$f->field]->getSoapValue();
- }
- return $ret;
- }
- $server->addFunction(array('browse','display'));
- }
- /// Rend la liste des fonctions utilisables dans le gestionnaire de rubriques en mode fonction (tableau de paires fonction=>label)
- function getUIFunctionList() {
- return array('display'=>XLabels::getSysLabel('xmodtable','uidisplay','text'),
- 'procQuery'=>XLabels::getSysLabel('xmodtable','uiquery','text'),
- 'insert'=>XLabels::getSysLabel('xmodtable','uiinsert','text'));
- }
- /// Suppression du module
- function delete($ar=NULL) {
- return parent::delete($ar);
- }
- /// Initialisation des propriétés
- public function initOptions() {
- parent::initOptions();
- $genlabel=XLabels::getSysLabel('xmodule.general');
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable','multipleedit'),'multipleedit','boolean',NULL,NULL,$genlabel);
- $slabel=XLabels::getSysLabel('general','security','text');
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable','owner_sec'),'owner_sec','boolean',NULL,NULL,$slabel);
- $alabel = XLabels::getSysLabel('xmodtable.modulename');
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable','table'),'table','table',array('validate'=>true),NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable','filter'),'filter','text',NULL,NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.order'),'order','text',NULL,NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.quickquery'),'quickquery','boolean',NULL,NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.stored_query'),'stored_query','boolean',NULL,NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.pagesize'),'pagesize','text',NULL,NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.templates'),'templates','template',array('moid'=>$this->_moid, 'cond'=>"(gtype like '%')"),
- NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.btemplates'),'btemplates','template',array('moid'=>$this->_moid, 'cond'=>"(gtype like '%')"),
- NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.captcha'),'captcha','boolean',NULL,NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.savenext'),'savenext','list',
- array('values'=>array('standard','display','edit'),
- 'labels'=>array(XLabels::getSysLabel('xmodtable.savenext_std'),
- XLabels::getSysLabel('xmodtable.savenext_display'),
- XLabels::getSysLabel('xmodtable.savenext_edit'))),
- NULL, $alabel);
- $this->_options->setOpt(XLabels::getSysLabel('general.systemproperties'),'showsystprop','list',
- array('values'=>array('show','hide'),
- 'labels'=>array(XLabels::getSysLabel('general.yes'),
- XLabels::getSysLabel('general.no'))),
- NULL,$alabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable.persistentquery'),'persistentquery','boolean',NULL,NULL,$alabel);
- $slabel=XLabels::getSysLabel('xmodule.ssmod');
- $tlabel=XLabels::getSysLabel('general','title','text');
- $flabel=XLabels::getSysLabel('general','field','text');
- $ilabel=XLabels::getSysLabel('xmodtable','activate_additem');
- $dlabel=XLabels::getSysLabel('xmodtable','dependentfiles');
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable','submodmax'),'submodmax','text',NULL,NULL,$slabel);
- $this->_options->setOpt(XLabels::getSysLabel('xmodtable','submodsearch'),'submodsearch','boolean',NULL,NULL,$slabel);
- if(!empty(XModule::$_mcache[$this->_moid]['MPARAM']['submodmax']))
- $this->_options->set($this,'submodmax',XModule::$_mcache[$this->_moid]['MPARAM']['submodmax']);
- for($i=1;$i<=$this->submodmax;$i++) {
- $this->_options->setOpt($tlabel.' '.$i,'ssmodtitle'.$i,'text',NULL,'',$slabel);
- $this->_options->setOpt($flabel.' '.$i,'ssmodfield'.$i,'text',NULL,'',$slabel);
- $this->_options->setOpt($slabel.' '.$i,'ssmod'.$i,'module',array('validate'=>true),'', $slabel);
- $this->_options->setOpt($ilabel.' '.$i,'ssmodactivate_additem'.$i,'boolean',NULL,true,$slabel);
- $this->_options->setOpt($dlabel.' '.$i,'ssmoddependent'.$i,'boolean',NULL,false,$slabel);
- }
- $tlabel=XLabels::getSysLabel('xmodule.tracking');
- $this->_options->setOpt(XLabels::getSysLabel('xfielddef','trackchanges'),'trackchanges','boolean',NULL,NULL,$tlabel);
- $this->_options->setOpt(XLabels::getSysLabel('xfielddef','trackaccess'),'trackaccess','boolean',NULL,NULL,$tlabel);
- $this->_options->setOpt(XLabels::getSysLabel('xfielddef','archive'),'archive','boolean',NULL,NULL,$tlabel);
- }
- /// Cette fonction est appliquee pour afficher l'ensemble des methodes de ce module
- protected function _actionlist(&$my) {
- parent::_actionlist($my);
- $myclass=get_class($this);
- $moid=$this->_moid;
- $myoid=@$_REQUEST['oid'];
- $user=&XUser::get_user();
- $f=XShell::_function();
- $uniqid='v'.XShell::uniqid();
- $submodcontext=NULL;
- // Parcourir
- if($this->secure('','browse')){
- // recupération du contexte sous module
- $submodcontext = $this->subModuleContext(array(), true);
- // en sous fiche, le browse est un retour à la fiche parent
- if($this->dependant_module && $submodcontext) {
- $o1=new XModuleAction($this,'browse',XLabels::getSysLabel('general','browse','text'),
- '&moid='.$this->dependant_module.'&_function=display&template=xmodtable/view.html&tplentry=br&oid='.
- $submodcontext['_parentoids'][0].$submodcontext['urlparms'],'display');
- } else {
- $o1=new XModuleAction($this,'browse',XLabels::getSysLabel('general','browse','text'),
- '&moid='.$moid.'&_function=browse&template=xmodtable/browse.html&tplentry=br','display');
- }
- $o1->containable=true;
- $o1->setToolbar('general','browse');
- $my['browse']=$o1;
- }
- // Recherche
- if((!$this->dependant_module || !$submodcontext) && $this->secure('','query')) {
- $o1=new XModuleAction($this,'query',XLabels::getSysLabel('general','query','text'),
- '&moid='.$moid.'&_function=query&template=xmodtable/query2.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='.$moid.'&_function=procQuery&template=xmodtable/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 && (!$this->dependant_module || !$submodcontext)) {
- $o1=new XModuleAction($this,'insert',XLabels::getSysLabel('general','new','text'),
- '&moid='.$moid.'&_function=insert&template=xmodtable/new.html&tplentry=br','edit');
- $o1->setToolbar('general','new');
- $o1->order=1;
- $my['insert']=$o1;
- }
- // Actions de navigation de fiche en fiche : nous ne sommes pas en sous module
- if(!empty($this->navActions) && !$submodcontext){
- foreach($this->navActions as $ak=>$o){
- $my[$ak] = $o;
- }
- }
- // Avertir
- $oid=@$_REQUEST['oid'];
- if ($this->secure('', 'sendACopyTo')){
- if(!empty($oid)) {
- $o1=new XModuleAction($this,'sendACopy',XLabels::getSysLabel('xmodule','sendacopyto','text'),
- '&moid='.$moid.'&tplentry=br&oid='.$oid.'&_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;
- }
- // Impression
- if(in_array(XShell::_function(),array('display','edit'))) $printfct='printDisplay';
- else $printfct='printBrowse';
- if(XShell::_function()!='insert' && $this->secure($myoid,$printfct)){
- $o1=new XModuleAction($this,'print',XLabels::getSysLabel('general','print','text'),
- 'javascript:'.$uniqid.'.printselected();','display');
- $o1->setToolbar('general','print');
- $my['print']=$o1;
- }
- // Export
- if(in_array(XShell::_function(),array('display','edit'))) $expfct='exportDisplay';
- else $expfct='export';
- if(XShell::_function()!='insert' && $this->secure($myoid,$expfct)){
- $o1=new XModuleAction($this,'export',XLabels::getSysLabel('general','export','text'),'javascript:'.$uniqid.'.exportselected();',
- 'edit');
- $o1->menuable=true;
- $my['sexport']=$o1;
- }
- //Import
- if($this->secure('','manage')){
- $o1=new XModuleAction($this,'manage',XLabels::getSysLabel('general','import','text'),
- $GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.$this->_moid.'&function=manage&template=xmodule/manage.html','edit');
- $o1->menuable=true;
- $my['import']=$o1;
- }
- // Voir les documents non lus
- if($this->trackaccess && $this->secure('','getUnread')){
- $o1=new XModuleAction($this,'lastdoc',XLabels::getSysLabel('xmodule','unread','text'),
- '&moid='.$this->_moid.'&_function=getUnread&tplentry=br&template=xmodtable/getUnread.html','more');
- $o1->menuable=true;
- $my['unread']=$o1;
- }
- // Abonnements
- $modsubmoid=XModule::getMoid(XMODSUB_TOID);
- if(!empty($modsubmoid)){
- $o1=new XModuleAction($this, 'subscribe', XLabels::getSysLabel('xmodsub','subadd','text'),
- '&amoid='.$this->_moid.'&moid='.$modsubmoid.
- '&_function=preSubscribe&tplentry=br&template=xmodsub/sub.html&aoid='.$myoid);
- $o1->menuable=true;
- $o1->group='more';
- $my['subscribe']=$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=xmodtable/editSelection.html');
- $o1->menuable=true;
- $o1->group='more';
- $my['rule']=$o1;
- }
- }
- // Mode conception et administration
- if($this->secure('','adminBrowseFields')){
- $o1=new XModuleAction($this, 'administration', XLabels::getSysLabel('general', 'administration', 'text'),
- '&moid='.$this->_moid.'&function=adminBrowseFields&template=xmodule/admin/browseFields.html','admin');
- $o1->setToolBar('general', 'administration');
- $my['administration']=$o1;
- }
- // Chemin
- if($this->interactive) {
- if($this->dependant_module && $submodcontext) {
- $mod1=XModule::objectFactory($this->dependant_module);
- $o1=new XModuleAction($this,'browse',$mod1->modulename,
- '&moid='.$this->dependant_module.'&_function=browse&template=xmodtable/browse.html&tplentry=br');
- $my['stack'][]=$o1;
- $d1=&$mod1->xset->rDisplayText($submodcontext['_parentoids'][0], array());
- $o1=new XModuleAction($this,'d1',$d1['link'],
- '&moid='.$this->dependant_module.'&_function=display&template=xmodtable/view.html&tplentry=br&oid='.
- $submodcontext['_parentoids'][0]);
- $my['stack'][]=$o1;
- } else {
- $o1=new XModuleAction($this,'browse',$this->modulename,
- '&moid='.$moid.'&_function=browse&template=xmodtable/browse.html&tplentry=br','display');
- $my['stack'][]=$o1;
- $f=XShell::_function();
- if(strpos($f,'admin')===0){
- $o1=new XModuleAction($this,'adminBrowseFields',XLabels::getSysLabel('xmodule','browsefields','text').' ('.$this->xset->getTable().')',
- '&moid='.$moid.'&_function=adminBrowseFields&template=xmodule/admin/browseFields.html','display');
- $my['stack'][]=$o1;
- }
- }
- if(!empty($oid) && !is_array($oid)) {
- $br=&XShell::from_screen('br');
- $br=&$this->xset->rDisplayText($oid, array());
- if($submodcontext) {
- $o1=new XModuleAction($this,'browse',$br['link'],
- '&moid='.$moid.$submodcontext['urlparms'].
- '&_function=display&template=xmodtable/view.html&tplentry=br&oid='.$oid,'display');
- } else {
- $o1=new XModuleAction($this,'browse',$br['link'],
- '&moid='.$moid.'&_function=display&template=xmodtable/view.html&tplentry=br&oid='.$oid,'display');
- }
- $my['stack'][]=$o1;
- }
- }
- }
- /// Action principale du menu
- public function getMainAction(){
- return $GLOBALS['TZR_SESSION_MANAGER']::complete_self().'moid='.$this->_moid.'&function=browse&tplentry=br&template=xmodtable/browse.html&_persistent=1';
- }
- /**
- * Contruit la liste des actions relatives aux sous-modules
- * @param &$my array() Liste de XModuleAction
- */
- function getSSMAl(&$my){
- $uniqid='v'.XShell::uniqid();
- $myoid=@$_REQUEST['oid'];
- $ssmmenu=array();
- for($i=1;$i<=$this->submodmax;$i++) {
- $f='ssmod'.$i;
- $ff='ssmodfield'.$i;
- $fa='ssmodactivate_additem'.$i;
- if(!$this->$fa || !$this->$f) continue;
- if(empty($this->$ff)){
- $smod=XModule::objectFactory($this->$f);
- $links=$smod->xset->getXLinkDefs(NULL,$this->table);
- if(!empty($links)) list($foo,$linkfield)=each($links);
- } else {
- $linkfield = $this->$ff;
- }
- $ssm=XModule::objectFactory($this->$f);
- if(!$ssm->secure('','insert')) continue;
- $submodcontext=$this->subModuleContext($ar); // ???? sert pas
- $o1=new XModuleAction($this,$f,$ssm->modulename,
- 'javascript:'.$uniqid.'.addTabs("'.$this->$f.'","'.$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.$this->$f.'&function=insert&template=xmodtable/new.html&tplentry=br&_linkedfields[]='.$linkfield.
- '&_parentoids[]='.$myoid.'&_parentoid='.$myoid.'&_linkedfield='.$linkfield.'&_raw=1&_ajax=1&skip=1'.
- '&tabsmode=1","'.XLabels::getSysLabel('general','add','text').' : '.addslashes($ssm->modulename).'");');
- $o1->menuable=true;
- $ssmmenu[]=$o1;
- }
- if(count($ssmmenu)>1){
- $o1=new XModuleAction($this,'alladd',XLabels::getSysLabel('general','add','text'),'#');
- $o1->menuable=true;
- $o1->newgroup='ssm';
- $my['ssm']=$o1;
- foreach($ssmmenu as &$o1){
- $o1->group='ssm';
- $my[$o1->xfunction]=$o1;
- }
- }else{
- foreach($ssmmenu as &$o1){
- $o1->name=XLabels::getSysLabel('general','add','text').' : '.$o1->name;
- $my[$o1->xfunction]=$o1;
- }
- }
- }
- /**
- * Construit la liste des actions à rendre disponible lors de l'affichage d'une fiche (display)
- * @param &$my array() Liste de XModuleAction
- */
- function al_display(&$my){
- $uniqid='v'.XShell::uniqid();
- $moid=$this->_moid;
- $myoid=@$_REQUEST['oid'];
- $sec=$this->secure($myoid,'edit');
- if($sec) {
- // recuperation contexte sous module
- $submodcontext=$this->subModuleContext();
- $o1=new XModuleAction($this,'edit',XLabels::getSysLabel('general','edit','text'),
- '&function=edit&moid='.$moid.'&template=xmodtable/edit.html&tplentry=br&oid='.$myoid.$submodcontext['urlparms'],'edit');
- $o1->order=2;
- $o1->setToolbar('general','edit');
- $my['edit']=$o1;
- }
- $sec=$this->secure($myoid,'del');
- if($sec){
- $o1=new XModuleAction($this,'del',XLabels::getSysLabel('general','delete','text'),'javascript:'.$uniqid.'.deleterecord();','edit');
- $o1->order=3;
- $o1->setToolbar('general','delete');
- $my['del']=$o1;
- }
- $this->getSSMAl($my);
- }
- /**
- * Construit la liste des actions à rendre disponible lors de la préparation à l'édition d'une fiche (edit)
- * @param &$my array() Liste de XModuleAction
- */
- function al_edit(&$my){
- $uniqid='v'.XShell::uniqid();
- $myoid=@$_REQUEST['oid'];
- $o1=new XModuleAction($this,'save',XLabels::getSysLabel('general','save','text'),'javascript:'.$uniqid.'.saverecord();','edit');
- $o1->order=1;
- $o1->setToolbar('general','save');
- $my['save']=$o1;
- // recuperation contexte sous module
- $submodcontext=$this->subModuleContext();
- $o1=new XModuleAction($this,'display',XLabels::getSysLabel('general','display','text'),
- '&function=display&moid='.$this->_moid.'&template=xmodtable/view.html&tplentry=br&oid='.$myoid.$submodcontext['urlparms'],
- 'edit');
- $o1->order=2;
- $o1->setToolbar('general','display');
- $my['display']=$o1;
- $sec=$this->secure($myoid,'del');
- if($sec){
- $o1=new XModuleAction($this,'del',XLabels::getSysLabel('general','delete','text'),'javascript:'.$uniqid.'.deleterecord();','edit');
- $o1->order=3;
- $o1->setToolbar('general','delete');
- $my['del']=$o1;
- }
- $this->getSSMAl($my);
- }
- /**
- * Construit la liste des actions à rendre disponible lors de l'édition d'une fiche (procEdit)
- * @param &$my array() Liste de XModuleAction
- */
- function al_procEdit(&$my){
- $this->al_edit($my);
- }
- /**
- * Construit la liste des actions à rendre disponible lors de la duplication d'une fiche (procEditDup)
- * @param &$my array() Liste de XModuleAction
- */
- function al_procEditDup(&$my){
- $this->al_insert($my);
- }
- /**
- * Construit la liste des actions à rendre disponible lors de la préparation à l'insertion d'une fiche (insert)
- * @param &$my array() Liste de XModuleAction
- */
- function al_insert(&$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;
- }
- /**
- * Construit la liste des actions à rendre disponible lors de l'insertion d'une fiche (procInsert)
- * @param &$my array() Liste de XModuleAction
- */
- function al_procInsert(&$my){
- $this->al_insert($my);
- }
- /**
- * Construit la liste des actions à rendre disponible lors du listing des fiches du module (browse)
- * @param &$my array() Liste de XModuleAction
- */
- function al_browse(&$my){
- $uniqid='v'.XShell::uniqid();
- $moid=$this->_moid;
- $myoid=@$_REQUEST['oid'];
- if($this->secure($myoid,'del')){
- $o1=new XModuleAction($this,'del',XLabels::getSysLabel('general','delete','text'),'javascript:'.$uniqid.'.deleteselected();','edit');
- $o1->setToolbar('general','delete');
- $o1->order=3;
- $my['del']=$o1;
- }
- if($this->objectSecurityEnabled() && $this->secure($myoid,'secEditSimple')){
- $o1=new XModuleAction($this,'seceditsimple',XLabels::getSysLabel('general','security','text'),
- 'javascript:TZR.editSec("'.$GLOBALS['TZR_SESSION_MANAGER']::complete_self(true).'","'.$this->_moid.'","",'.$uniqid.');','edit');
- $o1->setToolbar('general','security');
- $o1->order=4;
- $my['secEditSimple']=$o1;
- }
- if(isset($this->xset->desc['PUBLISH'])){
- if($this->secure($myoid,'publish')){
- $o1=new XModuleAction($this,'approve',XLabels::getSysLabel('general','approve','text'),
- 'javascript:'.$uniqid.".applyfunction('publish','',{value:1});",'edit');
- $o1->menuable=true;
- $my['approve']=$o1;
- $o1=new XModuleAction($this,'unapprove',XLabels::getSysLabel('general','unapprove','text'),
- 'javascript:'.$uniqid.".applyfunction('publish','',{value:2});",'edit');
- $o1->menuable=true;
- $my['unapprove']=$o1;
- }
- }
- // Affichage (changement taille page, ajout de champ...)
- $o1=new XModuleAction($this,'fieldgrp',XLabels::getSysLabel('xmodtable','field_label','text'),'#','display');
- $o1->menuable=true;
- $o1->newgroup='fieldgrp';
- $my['fieldgrp']=$o1;
- foreach($this->xset->orddesc as $i=>$fn){
- $f=$this->xset->getField($fn);
- $o1=new XModuleAction($this,'field'.$fn,$f->label,'javascript:'.$uniqid.'.add_field(\''.$fn.'\');'.$uniqid.'.go_browse(\'\',0);','fieldgrp');
- $o1->menuable=true;
- $my['field'.$fn]=$o1;
- }
- $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->multipleedit && $this->secure('','editSelection')){
- $o1=new XModuleAction($this,'editselection',XLabels::getSysLabel('xmodmedia','editselection','text'),
- 'javascript:'.$uniqid.'.applyfunction("editSelection","",{template:"xmodtable/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;
- }
- }
- }
- /**
- * Construit la liste des actions à rendre disponible lors d'une recherche sur les fiches du module (procQuery)
- * @param &$my array() Liste de XModuleAction
- */
- function al_procQuery(&$my){
- $this->al_browse($my);
- }
- /// Fonctions sur gestion des champs
- function al_adminBrowseFields(&$my){
- $uniqid='v'.XShell::uniqid();
- $o1=new XModuleAction($this,'importfieldssec',XLabels::getSysLabel('xmodule','importfieldssec','text'),
- '&moid='.$this->_moid.'&_function=adminPreImportFieldsSec&template=xmodule/admin/preimportfieldssec.html&tplentry=br','more');
- $o1->menuable=true;
- $my['importfieldssec']=$o1;
- $o1=new XModuleAction($this,'newfield',XLabels::getSysLabel('xdatasource','new_field','text'),
- '&moid='.$this->_moid.'&function=adminNewField&template=xmodule/admin/newField.html');
- $o1->menuable=true;
- $my['newfield']=$o1;
- $o1=new XModuleAction($this,'emptydata',XLabels::getSysLabel('xdatasource','empty_data','text'),
- 'javascript:'.$uniqid.'.emptybase();','more');
- $o1->menuable=true;
- $my['emptydata']=$o1;
- $o1=new XModuleAction($this,'clonebase',XLabels::getSysLabel('general','clone','text'),
- '&moid='.$this->_moid.'&function=adminDuplicate&template=xmodule/admin/duplicate.html&tplentry=br','more');
- $o1->menuable=true;
- $my['clonebase']=$o1;
- $o1=new XModuleAction($this,'checkbase',XLabels::getSysLabel('general','check','text'),
- '&moid='.$this->_moid.'&function=adminChk&skip=1&_next='.rawurlencode($GLOBALS['XSHELL']->get_back_url(0)),'more');
- $o1->menuable=true;
- $my['checkbase']=$o1;
- $o1=new XModuleAction($this,'checkrbase',XLabels::getSysLabel('general','check_and_repair','text'),
- '&moid='.$this->_moid.'&function=adminChk&skip=1&repair=1&_next='.rawurlencode($GLOBALS['XSHELL']->get_back_url(0)),'more');
- $o1->menuable=true;
- $my['checkrbase']=$o1;
- $o1=new XModuleAction($this,'propbase',XLabels::getSysLabel('general','properties','text'),
- '&moid='.$this->_moid.'&function=adminEditSourceProperties&template=xmodule/admin/editSource.html','more');
- $o1->menuable=true;
- $my['propbase']=$o1;
- $o1=new XModuleAction($this,'printbase',XLabels::getSysLabel('general','print','text'),
- 'javascript:'.$uniqid.'.printselected();');
- $o1->menuable=true;
- $my['printbase']=$o1;
- }
- /// Fonctions sur gestion des champs
- function al_adminBrowseStrings(&$my){
- $uniqid='v'.XShell::uniqid();
- $o1=new XModuleAction($this,'alphasort',XLabels::getSysLabel('general','alpha_sort','text'),
- '&moid='.$this->_moid.'&function=adminSortStrings&skip=1&field='.$_REQUEST['field'].'&_next='.rawurlencode($GLOBALS['XSHELL']->get_back_url(0)));
- $o1->menuable=true;
- $my['alphasort']=$o1;
- $o1=new XModuleAction($this,'deletebase',XLabels::getSysLabel('general','delete_all','text'),
- 'javascript:'.$uniqid.'.deleteall();');
- $o1->menuable=true;
- $my['deleteall']=$o1;
- $o1=new XModuleAction($this,'newstring',XLabels::getSysLabel('general','new','text'),
- '&moid='.$this->_moid.'&function=adminNewString&template=xmodule/admin/newString.html&field='.$_REQUEST['field']);
- $o1->menuable=true;
- $my['newstring']=$o1;
- }
- /// Fonctions sur gestion des champs
- function al_adminEditField(&$my){
- $uniqid='v'.XShell::uniqid();
- $br=&XShell::from_screen('');
- $o1=new XModuleAction($this,'resetchrono','Reset',
- '&moid='.$this->_moid.'&_function=adminResetChrono&field='.$br['field'].'&boid='.$br['boid'].'&skip=1&_next='.
- rawurlencode($GLOBALS['XSHELL']->get_back_url(0)),'more');
- $o1->menuable=true;
- $my['resetchrono']=$o1;
- }
- function nav($ar=NULL){
- parent::nav($ar);
- if(substr(XShell::_function(),0,5)=='admin') {
- $this->pushNav(XLabels::getSysLabel('general','administration','text'),
- '&function=adminBrowseFields&moid='.$this->_moid.'&template=xmodule/admin/browseFields.html&boid='.$this->boid);
- }
- }
- function isDependant() {
- return XDbIni::get('dependant:'.$this->_moid,'val');
- }
- /// Preparartion des donnees pour ecran de parametrage d'impression
- public function prePrintBrowse($ar) {
- $p=new XParam($ar,array());
- $order=$p->get('order');
- $tplentry=$p->get('tplentry');
- if(empty($order)) $order=$this->order;
- $ar['order']=$order;
- $ar['table']=$this->table;
- // 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('=','xmodtable_browse_print'))));
- $r=&$this->_templates->browse(array('select'=>$q1,'pagesize'=>100,'tplentry'=>TZR_RETURN_DATA));
- XShell::toScreen1($tplentry.'t',$r);
- }
- // recherche des donnees
- $ar['_filter']=$this->getFilter(true,$ar);
- $ar['tplentry']=TZR_RETURN_DATA;
- $ar['fieldssec']=$this->getFieldsSec($ar);
- $ar['selectedfields']='all';
- $ar['pagesize']=1;
- $ar['ssmoid']='all';
- for($i=1;$i<=$this->submodmax;$i++) {
- $f='ssmod'.$i;
- $ar['options'][$this->$f]['selectedfields']='all';
- }
- // cas module ayant lui meme en sous modules
- $mycurrentquery = NULL;
- if($this->isThereAQueryActive())
- $mycurrentquery = $this->_getSession('query');
- $r=&$this->xset->browse($ar);
- $this->setSubModules($ar,$r);
- if ($mycurrentquery != NULL)
- $this->_setSession('query', $mycurrentquery);
- // calcul du nombre d'enregistrements impactes (passage d'oid, browseSelection ou browse/query classique)
- $r['_selected']=$p->get('_selected');
- if(is_array($r['_selected'])) {
- $r['record_count']=count($r['_selected']);
- }elseif($p->get('fromfunction')=='browseSelection') {
- $selection=getSessionVar('selection');
- $r['_selected']=$selection[$this->_moid];
- $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);
- }
- /// Retourne la requete permattant de recuperer tous les objets suivant le contexte (selection, recherche en cours...)
- function getContextQuery($ar,$queryonly=true){
- $p=new XParam($ar,array());
- $oidsel=$p->get('_selected');
- $noreg=$p->get('noreg');
- $from=$p->get('fromfunction');
- if(is_array($oidsel)) {
- $oid=array_keys($oidsel);
- $q=$this->xset->select_query(array('cond'=>array('KOID'=>array('=',$oid))));
- }elseif($this->isThereAQueryActive() && ($from=='procQuery')) {
- $_storedquery=$this->_getSession('query');
- $ar1=array_merge($_storedquery,$ar);
- if($queryonly){
- $ar1['getselectonly']=true;
- $q=$this->xset->procQuery($ar1);
- }else{
- $ar1['getselectonly']=false;
- $ar1['pagesize']=1;
- $r=$this->xset->procQuery($ar1);
- $q=$r['select'];
- $params=array('queryobject'=>$r['queryobject']);
- }
- if(!$noreg) $q=preg_replace('@select (.*) from (.*)$@i','select '.$this->table.'.* from $2',$q);
- }else{
- $q=$this->xset->select_query(array("cond"=>array()));
- }
- if($queryonly) return $q;
- else return array('query'=>$q,'all'=>$r);
- }
- /// Impression sur un browse
- public function printBrowse($ar) {
- $p=new XParam($ar,array());
- $title=$p->get('title');
- $email=$p->get('dest');
- $target=$p->get('_target');
- $linkedfield=$p->get('_linkedfield');
- $fmt=$p->get('fmt');
- $context=$this->getContextQuery($ar,false);
- $q=$context['query'];
- $ar['selected']='0';
- $ar['pagesize']='100000';
- $ar['select']=$q;
- $ar['_format']='text/html';
- $ar['tplentry']=TZR_RETURN_DATA;
- $tpldata['param']=array('title'=>$title,'queryfields'=>$context['all']['queryfields']);
- $oldinteractive=$this->interactive;
- $this->interactive=false;
- if(!empty($target) && $target!=$this->_moid){
- $mod=XModule::objectFactory($target);
- if($mod->secure('','export')){
- $ar2=$ar;
- $ar['selectedfields']=array('xx');
- $ar['order']=$this->order;
- $b=$this->browse($ar);
- $q='select * from '.$mod->table.' where '.$linkedfield.' in ("'.implode('","',$b['lines_oid']).'")';
- $ar2['select']=$q;
- $ar2['tplentry']=$tplentry;
- if($fmt=='pdf') $ar2['_format']='application/prince';
- $res=$mod->browse($ar2);
- }
- }else{
- if($fmt=='pdf') $ar['_format']='application/prince';
- $res=$this->browse($ar);
- $mod=&$this;
- }
- $this->interactive=$oldinteractive;
- if($fmt=='pdf') {
- // Impression PDF par defaut
- if(!empty($this->_templates) && !empty($this->btemplates)) {
- $r=&$this->_templates->display(array('oid'=>$this->btemplates,'_options'=>array('error'=>'return'),'tplentry'=>TZR_RETURN_DATA));
- if(!empty($r['oprintp']->filename)) $filename=$r['oprintp']->filename;
- }
- $this->_printBrowsePDF($ar,$filename);
- }elseif(Kernel::isAKoid($fmt)) {
- // Impression via un template d'impressions
- $t=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$fmt);
- $dispfmt=$t->rDisplay($fmt);
- $displayformats=explode(',',$dispfmt['odfmt']->raw);
- if(in_array('text/html',$displayformats) || empty($dispfmt['odfmt']->raw)) $this->_printBrowseHTML($ar,$dispfmt['oprint']->filename);
- elseif(in_array('application/prince',$displayformats)) $this->_printBrowsePDF($ar,$dispfmt['oprint']->filename);
- }else{
- // Impression HTML par defaut
- $template=$p->get('template');
- $this->_printBrowseHTML($ar,$template);
- }
- }
- /// Sous fonction d'impression au format HTML
- function _printBrowseHTML($ar=NULL,$filename=NULL){
- $p=new XParam($ar,NULL);
- $email=$p->get('dest');
- if(empty($filename)) $filename='xmodtable/print.html';
- $content=$this->_printGetContent($ar,$filename,'browse');
- if(!empty($email)) $this->sendMail2User('print','',$email,NULL,false,NULL,'report.html',$content);
- echo $content;
- exit(0);
- }
- /// Sous fonction d'impression au format PDF
- function _printBrowsePDF($ar=NULL,$filename=NULL){
- $p=new XParam($ar,array('pdfname'=>'browse.pdf'));
- $email=$p->get('dest');
- if(empty($filename)) $filename='xmodtable/print.xml';
- $ar['_format']='application/prince';
- $content=$this->_printGetContent($ar,$filename,'browse');
- $tmpname=princeTidyXML2PDF(NULL,$content);
- if(!empty($email) && !empty($tmpname)) {
- $content=file_get_contents($tmpname);
- $this->sendMail2User('print','',$email,NULL,false,NULL,'browse.pdf',$content,'application/pdf');
- }
- $pdfname=$p->get('pdfname');
- 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);
- }
- /// Impression d'une fiche
- public function printDisplay($ar) {
- $p=new XParam($ar,array('pdfname'=>'view.pdf'));
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ar['ssmoid']='all';
- $fmt=$p->get('fmt');
- if($fmt=='pdf') {
- // Impression PDF par defaut
- if(!empty($this->_templates) && !empty($this->templates)) {
- $r=&$this->_templates->display(array('oid'=>$this->templates,'_options'=>array('error'=>'return'),'tplentry'=>TZR_RETURN_DATA));
- if(!empty($r['oprintp']->filename)) $filename=$r['oprintp']->filename;
- }
- $this->_printDisplayPDF($ar,$filename);
- }elseif(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('text/html',$displayformats) || empty($dispfmt['odfmt']->raw)) $this->_printDisplayHTML($ar,$dispfmt['oprint']->filename);
- elseif(in_array('application/prince',$displayformats)) $this->_printDisplayPDF($ar,$dispfmt['oprint']->filename);
- }else{
- // Impression HTML par defaut
- $template=$p->get('template');
- $this->_printDisplayHTML($ar,$template);
- }
- }
- /// Sous fonction d'impression au format HTML
- function _printDisplayHTML($ar=NULL,$filename=NULL){
- $p=new XParam($ar,NULL);
- $email=$p->get('dest');
- if(empty($filename)) $filename='xmodtable/printdisplay.html';
- $content=$this->_printGetContent($ar,$filename,'display');
- if(!empty($email)) $this->sendMail2User('print','',$email,NULL,false,NULL,'report.html',$content);
- echo $content;
- exit(0);
- }
- /// Sous fonction d'impression au format PDF
- function _printDisplayPDF($ar=NULL,$filename=NULL){
- $p=new XParam($ar,array('pdfname'=>'view.pdf'));
- $email=$p->get('dest');
- if(empty($filename)) $filename='xmodtable/print-view.xml';
- $ar['_format']='application/prince';
- $content=$this->_printGetContent($ar,$filename,'display');
- $tmpname=princeTidyXML2PDF(NULL,$content);
- if(!empty($email) && !empty($tmpname)) {
- $content=file_get_contents($tmpname);
- $this->sendMail2User('print','',$email,NULL,false,NULL,'view.pdf',$content,'application/pdf');
- }
- $pdfname=$p->get('pdfname');
- 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['param']=array('title'=>$title);
- $tpldata['br']=$res;
- $tpldata['imod']=&XShell::from_screen('imod');
- $content=$xt->parse($tpldata,$r3,NULL);
- return $content;
- }
- /// Exporte une fiche
- public function exportDisplay($ar=NULL){
- $p= new XParam($ar,array());
- $fmt=$p->get('fmt');
- $ar['norow']=1;
- $ar['nodef']=1;
- $ar['ssmoid']='all';
- $ar['_options']=array('genpublishtag'=>false);
- if($fmt=='xl' || $fmt=='xl07') $ar['_format']='application/excel';
- $this->display($ar);
- if($fmt=='xl' || $fmt=='xl07') $this->_exportXLSDisplay($ar);
- if($fmt=='html') $this->printDisplay($ar);
- if($fmt=='csv') $this->_exportCSVDisplay($ar);
- }
- /// Exporte une fiche au format excel
- public function _exportXLSDisplay($ar){
- require_once('add-ons/PHPExcel/PHPExcel.php');
- $p=new XParam($ar,NULL);
- $fmt=$p->get('fmt');
- $br=&XShell::from_screen('br');
- $ss=new PHPExcel();
- $ss->setActiveSheetIndex(0);
- $ws=$ss->getActiveSheet();
- $ws->setTitle('Main');
- $ws->SetCellValue('A1','OID');
- $ws->SetCellValue('B1',$br['oid']);
- $row=2;
- foreach($br['fields_object'] as $j => &$f) {
- if(!$f->sys){
- $l=$f->fielddef->label;
- $c=$f->field;
- convert_charset($l,TZR_INTERNAL_CHARSET,'UTF-8');
- $ws->setCellValueByColumnAndRow(0,$row,$l);
- $f1=&$this->xset->getField($c);
- $f1->writeXLS($ws,$row++,1,$br['o'.$c],0,$ss);
- }
- }
- $ws->getStyle('A1:A'.($row-1))->getFont()->setBold(true);
- foreach($br['__ssmod'] as $i=>&$ssr){
- $ssmod=XModule::objectFactory($br['__ssprops'][$i]['_moid']);
- $l=$br['__ssprops'][$i]['modulename'];
- convert_charset($l,TZR_INTERNAL_CHARSET,'UTF-8');
- $ss->createSheet($i+1);
- $ss->setActiveSheetIndex($i+1);
- $ws=$ss->getActiveSheet();
- $ws->setTitle($l);
- foreach($ssr['header_fields'] as $j => &$f) {
- $l=$ssr['header_fields'][$j]->label;
- convert_charset($l,TZR_INTERNAL_CHARSET,'UTF-8');
- $ws->setCellValueByColumnAndRow($j,1,$l);
- }
- foreach($ssr['lines_oid'] as $j=>$oid){
- foreach($ssr['header_fields'] as $k=>&$f) {
- $f->writeXLS($ws,$j+2,$k,$ssr['lines_o'.$f->field][$j],0,$ss);
- }
- }
- $ws->getStyle('A1:'.PHPExcel_Cell::stringFromColumnIndex($k).'1')->getFont()->setBold(true);
- }
- $ss->setActiveSheetIndex(0);
- sendPHPExcelFile($ss,$fmt,'export');
- }
- /// Exporte une fiche et ses sous fiches au format csv (si sous fiches, un fichier csv par sous modules, le tout dans un zip)
- public function _exportCSVDisplay($ar=NULL){
- $p= new XParam($ar,array('fname'=>'Export'));
- $fsep=$p->get('csvfsep');
- $textsep=stripslashes($p->get('csvtextsep'));
- $charset=stripslashes($p->get('csvcharset'));
- $fname=$p->get('fname');
- $br=&XShell::from_screen('br');
- $csv=$headers=$row=array();
- foreach($br['fields_object'] as $j => &$f) {
- if(!$f->sys){
- $f1=&$this->xset->getField($f->field);
- $headers[]=$textsep.$f->fielddef->label.$textsep;
- $row[]=$f1->writeCSV($br['o'.$f->field],$textsep);
- }
- }
- $csv[]=implode($fsep,$headers);
- $csv[]=implode($fsep,$row);
- $csv=implode("\r\n",$csv);
- convert_charset($csv,TZR_INTERNAL_CHARSET,$charset);
- if(empty($br['__ssmod'])){
- ob_clean();
- header('Content-Type: text/csv; charset='.$charset);
- header('Content-Transfer-Encoding:'.$charset);
- header('Content-disposition: attachment; filename='.str_replace(' ','_',removeaccents($fname)).'.csv');
- header('Content-Length: '.strlen($csv));
- echo $csv;
- exit(0);
- }else{
- $dir=TZR_TMP_DIR.'exportdisp'.uniqid();
- @mkdir($dir);
- file_put_contents($dir.'/Main.csv',$csv);
- foreach($br['__ssmod'] as $i=>&$ssr){
- $csv=$headers=$row=array();
- $ssmod=XModule::objectFactory($br['__ssprops'][$i]['_moid']);
- $l=$br['__ssprops'][$i]['modulename'];
- $fields=array();
- foreach($ssr['header_fields'] as $j=>&$f) {
- $headers[]=$textsep…
Large files files are truncated, but you can click here to view the full file