/class.xmodform.inc
PHP | 574 lines | 499 code | 31 blank | 44 comment | 71 complexity | 4cafd51639313fa22fb20a18b0471b22 MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
- <?php
- class XModForm extends XModTable{
- function __construct($ar=NULL){
- parent::__construct($ar);
- }
- /// securite des fonctions accessibles par le web
- function secGroups($function, $group=NULL) {
- $g=array();
- $g['viewForm']=array('ro','rw','rwv','admin');
- $g['editForm']=array('rw','rwv','admin');
- $g['procEditForm']=array('rw','rwv','admin');
- $g['answer']=array('ro','rw','rwv','admin');
- $g['procAnswer']=array('ro','rw','rwv','admin');
- $g['delAnswers']=array('rw','rwv','admin');
- $g['dashboard']=array('rw','rwv','admin');
- $g['exportAnswers']=array('rw','rwv','admin');
- $g['sendInvitations']=array('rw','rwv','admin');
- $g['procSendInvitations']=array('rw','rwv','admin');
- $g['createMod']=array('rw','rwv','admin');
- if(isset($g[$function])) {
- if(!empty($group)) return in_array($group, $g[$function]);
- return $g[$function];
- }
- return parent::secGroups($function,$group);
- }
- public function initOptions() {
- parent::initOptions();
- $this->_options->setOpt(XLabels::getSysLabel('xmodform','answerstable'),'atable','table',array('validate'=>true),NULL);
- }
- /// Cette fonction est appliquee pour afficher l'ensemble des methodes de ce module
- protected function _actionlist(&$my) {
- parent::_actionlist($my);
- $oid=@$_REQUEST['oid'];
- if(XShell::_function()=='sendInvitations') {
- $br=&$this->xset->rDisplayText($oid, array());
- $o1=new XModuleAction($this,'browse',$br['link'],
- '&moid='.$moid.'&_function=display&template=xmodtable/view.html&tplentry=br&oid='.$oid,'display');
- $my['stack'][]=$o1;
- }
- }
- function al_display(&$my){
- parent::al_display($my);
- $u=XShell::uniqid();
- $oid=$_REQUEST['oid'];
- $o1=new XModuleAction($this,'sendinvit',XLabels::getSysLabel('xmodform','sendinvitations','text'),
- '&moid='.$this->_moid.'&function=sendInvitations&tplentry=br&template=xmodform/sendInvitations.html&oid='.$oid,'edit');
- $o1->menuable=true;
- $my['sendinvit']=$o1;
- $o1=new XModuleAction($this,'createmod',XLabels::getSysLabel('xmodform','createmod','text'),
- '&moid='.$this->_moid.'&function=createMod&template=basic/message.html&oid='.$oid,'more');
- $o1->menuable=true;
- $my['createmod']=$o1;
- }
- /// Creation d'un module ensemble de fiche sur les reponses d'un formulaire
- function createMod($ar=NULL){
- $p=new XParam($oid,NULL);
- $oid=$p->get('oid');
- $ors=selectQueryGetAll('select * from '.$this->table.' where KOID="'.$oid.'" LIMIT 1');
- if($ors['KOID']){
- $mod=new XModTableWd(array('newmoid'=>XMODTABLE_TOID));
- $mod->_module->modulename=$ors['title'];
- $mod->_module->group=$this->group;
- $mod->_module->table=$ors['qtable'];
- $moid=$mod->iend();
- $GLOBALS['XUSER']->setUserAccess('',$moid,'all','','admin');
- XShell::toScreen2('','message',XLabels::getSysLabel('xmodform','createmodok','text'));
- }
- }
- /// Affichage d'une fiche
- function &display($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=parent::display($ar);
- $ret['__ajaxtabs'][]=array('title'=>XLabels::getSysLabel('xmodform','viewform','text'),
- 'url'=>$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.$this->_moid.'&oid='.$ret['oid'].
- '&tplentry=br&function=viewForm&template=xmodform/viewForm.html&_ajax=1&_raw=1&tabsmode=1&skip=1&_uniqid='.XShell::uniqid());
- $ret['__ajaxtabs'][]=array('title'=>XLabels::getSysLabel('xmodform','dashboard','text'),
- 'url'=>$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.$this->_moid.'&oid='.$ret['oid'].'&tplentry=br'.
- '&function=dashboard&template=xmodform/dashboard.html&_ajax=1&_raw=1&tabsmode=1&skip=1&_uniqid='.XShell::uniqid());
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Edition d'une fiche
- function &edit($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=parent::edit($ar);
- $ret['__ajaxtabs'][]=array('title'=>XLabels::getSysLabel('xmodform','editform','text'),
- 'url'=>$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.$this->_moid.'&oid='.$ret['oid'].'&skip=1&'.
- '&tplentry=br&function=editForm&template=xmodform/editForm.html&_ajax=1&_raw=1&tabsmode=1&_uniqid='.XShell::uniqid());
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Créé un nouveau questionnaire
- function procInsert($ar=NULL) {
- $p=new XParam($ar,NULL);
- $t=$p->get('qtable');
- $title=$p->get('title');
- // Création de la table des questions/réponses
- if(empty($t)){
- $ar1=array();
- $ar1['translatable']=0;
- $ar1['auto_translate']=0;
- $ar['qtable']=$ar1['btab']=XDSTable::newTableNumber('FORM');
- $ar1['bname'][TZR_DEFAULT_LANG]=$this->modulename.' : '.$title;
- $ar1['publish']=0;
- XDSTable::procNewSource($ar1);
- $x=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$ar['qtable']);
- $x->createField('email','Email','XShortTextDef','255','2','0','1','0','0','0','0');
- $reedit=$p->get('reedit');
- $hid=$p->get('reedit_HID');
- if($reedit==1 || $hid['val']){
- $x->createField('close','Clos','XBoolDef','0','3', '0','1','0','0','0','0');
- }
- }
- $isopen=$p->get('isopen');
- $hid=$p->get('isopen_HID');
- if(!$hid && $isopen==1 || $hid['val']){
- $oid=$ar['newoid']=$this->xset->getNewOID($ar);
- $ar['accesurl']=$GLOBALS['TZR_SESSION_MANAGER']::complete_self(false,true).'&moid='.$this->_moid.'&oid='.$oid.
- '&function=answer&template=generic8-raw.html&insidefile=xmodform/viewForm.html&tplentry=br';
- }else{
- $ar['accesurl']='Accès restreint. Aucune URL publique.';
- }
- return parent::procInsert($ar);
- }
- /// Dupplique la table des questions avant de duppliquer le formulaire
- function procEditDup($ar=NULL) {
- $p = new XParam($ar,NULL);
- $qtable = $p->get('qtable');
- $title = $p->get('title');
- $xset_qtable = XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$qtable);
- $result = $xset_qtable->procDuplicateDataSource(array(
- 'newtable' => XDSTable::newTableNumber('FORM'),
- 'mtxt' => $this->modulename.' : '.$title.' (clone)'
- ));
- $ar['qtable'] = $result['table'];
- // Duplication des réponses dans la table associée
- if ($this->atable) {
- // Récupération des choix groupés par KOID (pour dupliquer le multilingue)
- $choices = selectQuery("SELECT KOID,{$this->atable}.* FROM {$this->atable} WHERE dtable='$qtable'")->fetchAll(PDO::FETCH_GROUP);
- foreach ($choices as $koid => $choices_by_languages) {
- $koid = XDataSource::getNewBasicOID($this->atable);
- foreach ($choices_by_languages as $choice) {
- $choice['KOID'] = $koid;
- $choice['dtable'] = $result['table'];
- updateQuery(getInsertQuery($this->atable, $choice));
- }
- }
- }
- return parent::procEditDup($ar);
- }
- /// Supprime la table des questions ainsi que les choix de réponses liées au formulaire
- function del($ar=NULL) {
- $p = new XParam($ar,NULL);
- $oid = $p->get('oid');
- // Table des questions
- $qtable = selectQuery("SELECT qtable FROM {$this->table} WHERE KOID='$oid'")->fetch(PDO::FETCH_COLUMN);
- if ($qtable) {
- // Suppression des choix de réponses
- if ($this->atable) updateQuery("DELETE FROM {$this->atable} WHERE dtable='$qtable'");
- // Suppression de la table des questions
- XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$qtable)->procDeleteDataSource();
- }
- return parent::del($ar);
- }
- /// Edition un nouveau questionnaire
- function procEdit($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- if(is_array($oid)) return parent::procEdit($ar);
- $isopen=$p->get('isopen');
- $hid=$p->get('isopen_HID');
- if(!$hid && $isopen==1 || $hid['val']){
- $ar['accesurl']=$GLOBALS['TZR_SESSION_MANAGER']::complete_self(false,true).'&moid='.$this->_moid.'&oid='.$oid.
- '&function=answer&template=generic8-raw.html&insidefile=xmodform/viewForm.html&tplentry=br';
- }elseif($hid){
- $ar['accesurl']='Accès restreint. Aucune URL publique.';
- }
- $ret=parent::procEdit($ar);
- $d=$this->display(array('oid'=>$oid,'tplentry'=>TZR_RETURN_DATA,'selectedfields'=>array('qtable','reedit')));
- $x=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$d['oqtable']->raw);
- if($d['oreedit']==1 && !$x->desc['close']) $x->createField('close','Clos','XBoolDef','0','2','0','1','0','0','0','0');
- return $ret;
- }
- /// Voir le formulaire
- function viewForm($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=$this->display($ar);
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$ret['oqtable']->raw);
- $this->setSysFields($xds);
- $ret['__table']=$xds->input();
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Repondre au formulaire
- function answer($ar=NULL){
- $p=new XParam($ar,array('email'=>'nobody'));
- $oid=$p->get('oid');
- $tplentry=$p->get('tplentry');
- $email=$p->get('email');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=$this->display($ar);
- $date=date('Y-m-d');
- if($date<$ret['odtstart']->raw && $date>$ret['odtend']->raw){
- $ret['__error']=XLabels::getSysLabel('xmodform','wrongdate');
- }else{
- $table=$ret['oqtable']->raw;
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- $this->setSysFields($xds);
- // Recupere une eventuelle reponse deja enregistrée (si formulaire reeditable, on veux la fiche en cours en priorité)
- if($ret['oreedit']->raw==1) $order=' order by FIELD(close,1)';
- else $order='';
- $ors=array();
- if(!XUser::isNobody()) $ors=selectQueryGetOne('select * from '.$table.' where OWN="'.XUser::get_current_user_uid().'"'.$order.' limit 1');
- elseif($email!='nobody') $ors=selectQueryGetOne('select * from '.$table.' where email="'.addslashes($email).'"'.$order.' limit 1');
-
- if(empty($ors)){
- // Pas de reponse enregistré => insertion
- $ret['__table']=$xds->input($ar);
- }elseif($ret['oamulti']->raw!=1 && !($ret['oreedit']->raw==1 && $ors['close']!=1)){
- // Fiche deja existante et plus modifiable => erreur
- $ret['__error']=XLabels::getSysLabel('xmodform','answeralreadyexists');
- }elseif($ret['oreedit']->raw==1 && $ors['close']!=1){
- // Fiche editable presente => edition de la fiche
- $ar['oid']=$ors['KOID'];
- $ret['__table']=$xds->edit($ar);
- }else{
- // Tous les autres cas => insertion d'une nouvelle fiche
- $ret['__table']=$xds->input($ar);
- }
- }
- if($ret['oisopen']->raw==1) $ret['__captcha']=$this->createCaptcha(array('tplentry'=>TZR_RETURN_DATA),true);
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Enregistre une reponse
- function procAnswer($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- $aoid=$p->get('aoid');
- $close=$p->get('close');
- $f=$this->display(array('oid'=>$oid,'tplentry'=>TZR_RETURN_DATA));
- if($f['oisopen']->raw==1){
- $captcha_key=md5($p->get('captcha_key'));
- $captcha_id=$p->get('captcha_id');
- $cnt=countSelectQuery('SELECT COUNT(*) FROM _VARS WHERE name = "CAPTCHA_'.$captcha_id.'" AND value = "'.$captcha_key.'" ');
- updateQuery('DELETE FROM _VARS WHERE name="CAPTCHA_'.$captcha_id.'" or (UPD<"'.date('YmdHis',strtotime('- 20 minutes')).'" AND '.
- 'name LIKE "CAPTCHA_%")');
- if(!$cnt) {
- $onerror=$p->get('onerror');
- if(!empty($onerror)){
- if(!preg_match('@(^http://|^/)@',$onerror)) $onerror=$GLOBALS['TZR_SESSION_MANAGER']::complete_self().$onerror;
- }else{
- $onerror=$_SERVER['HTTP_REFERER'];
- }
- header('Location: '.$onerror);
- die();
- }
- }
- $table=$f['oqtable']->raw;
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- if($aoid){
- $ar['oid']=$aoid;
- $ret=$xds->procEdit($ar);
- }else{
- $ret=$xds->procInput($ar);
- }
- if(!$xds->desc['close'] || $close==1) setSessionVar('message',XLabels::getSysLabel('xmodform','answerokclose'));
- else setSessionVar('message',XLabels::getSysLabel('xmodform','answerok'));
- return $ret;
- }
- /// Prepare l'edition du questionnaire
- function editForm($ar=NULL){
- $p=new XParam($ar,NULL);
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=$this->display($ar);
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$ret['oqtable']->raw);
- $this->setSysFields($xds);
- $axds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->atable);
- $ret['__table']=array();
- $max=0;
- foreach($xds->desc as $n=>$f){
- if($f->sys) continue;
- $table=array('field'=>$n,'q'=>$f->get_labels(),'compulsory'=>$f->get_compulsory(),'comment'=>$f->get_option('comment'),
- 'type'=>$this->getQuestionType($f),
- 'fgroup'=>$f->get_option('fgroup'), 'ftype'=>$f->ftype);
- if($f->ftype=='XLinkDef'){
- foreach($GLOBALS['TZR_LANGUAGES'] as $lang=>$foo) {
- $table['answers'][$lang]=$axds->browse(array('selectedfields'=>array('title','score'),'_filter'=>'dtable="'.$ret['oqtable']->raw.'" and '.
- 'dfield="'.$n.'"','tplentry'=>TZR_RETURN_DATA,'order'=>'ord','LANG_DATA'=>$lang));
- }
- }
- $ret['__table'][]=$table;
- $max=max($max,substr($n,1));
- }
- $ret['__lastnum']=$max+1;
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Efface toutes les réponses
- function delAnswers($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- $ors=selectQueryGetOne('select qtable from '.$this->table.' where KOID="'.$oid.'" LIMIT 1');
- if($ors['qtable']) updateQuery('truncate table '.$ors['qtable']);
- }
- /// Enregistre l'edition d'un formulaire
- function procEditForm($ar=NULL){
- $p=new XParam($ar,NULL);
- $qs=$p->get('question');
- $cs=$p->get('comment');
- $qts=$p->get('qtype');
- $comps=$p->get('compulsory');
- $answers=$p->get('answers');
- $fgroup=$p->get('fgroup');
- $scores=$p->get('scores');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=$this->display($ar);
- $table=$ret['oqtable']->raw;
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- $this->setSysFields($xds);
- $fields=array('email','close');
- $i=2;
- foreach($qs as $n=>$q){
- if(empty($q)) continue;
- // Récupération des parametres des champs
- $editopt=array();
- $qt=$qts[$n];
- $c=$cs[$n];
- $group=$fgroup[$n];
- $comp=$comps[$n];
- $ans=$answers[$n];
- $sc=$scores[$n];
- if(!$comp) $comp=false;
- switch($qt){
- case 'shorttext':
- $type='XShortTextDef';
- $size=255;
- $multi=false;
- $setans=false;
- $editopt=array('listbox'=>false);
- break;
- case 'longtext':
- $type='XTextDef';
- $size=60;
- $multi=false;
- $setans=false;
- break;
- case 'select':
- $type='XLinkDef';
- $size=0;
- $editopt=array('checkbox'=>0,'filter'=>'dtable="'.$table.'" and dfield="'.$n.'"',
- 'query'=>"SELECT KOID FROM ".$this->atable." WHERE dtable='$table' AND dfield='$n' ORDER BY ord");
- $multi=false;
- $setans=true;
- break;
- case 'checkbox':
- $type='XLinkDef';
- $size=0;
- $editopt=array('checkbox'=>1,'checkbox_cols'=>1,'filter'=>'dtable="'.$table.'" and dfield="'.$n.'"',
- 'query'=>"SELECT KOID FROM ".$this->atable." WHERE dtable='$table' AND dfield='$n' ORDER BY ord");
- $multi='on';
- $setans=true;
- break;
- case 'radio':
- $type='XLinkDef';
- $size=0;
- $editopt=array('checkbox'=>1,'checkbox_cols'=>1,'usedefault'=>false,'filter'=>'dtable="'.$table.'" and dfield="'.$n.'"',
- 'query'=>"SELECT KOID FROM ".$this->atable." WHERE dtable='$table' AND dfield='$n' ORDER BY ord");
- $multi=false;
- $setans=true;
- break;
- case 'date':
- $type='XDateDef';
- $size=0;
- $editopt=array();
- $multi=false;
- $setans=true;
- break;
- case 'file':
- $type='XFileDef';
- $size=0;
- $editopt=array();
- $multi=false;
- $setans=true;
- break;
- }
- if($c) $editopt['comment']=$c;
- if($group) $editopt['fgroup']=$group;
- // Création du champ s'il n'existe pas encore
- if(!isset($xds->desc[$n])) $xds->createField($n,$q,$type,$size,$i+5,$comp,'1','1','0',$multi,'0',$this->atable);
- // Mise à jour du champ avec toutes les options
- $xds->procEditField(array('field'=>$n,'table'=>$xds->getTable(),'_todo'=>'save','options'=>$editopt,'_options'=>array('local'=>1),
- 'ftype'=>$type,'compulsory'=>$comp,'multivalued'=>$multi,'fcount'=>$size,'forder'=>$i+5,'target'=>$this->atable,
- 'label'=>$q));
- // Mise à jour des reponses possible pour les questions à choix multiple
- if($setans){
- $axds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->atable);
- $soids=array();
- foreach($ans as $j=>$a){
- if(empty($a)) continue;
- if(substr($j,0,3)!='foo'){
- $axds->procEdit(array('oid'=>$j,'title'=>$a[TZR_DEFAULT_LANG],'score'=>$sc[$j],'ord'=>count($soids),'LANG_DATA'=>TZR_DEFAULT_LANG,
- '_options'=>array('local'=>true)));
- $soids[]=$oid=$j;
- }else{
- $ret=$axds->procInput(array('dtable'=>$table,'dfield'=>$n,'title'=>$a[TZR_DEFAULT_LANG],'score'=>$sc[$j],
- 'LANG_DATA'=>TZR_DEFAULT_LANG,
- 'ord'=>count($soids),'_options'=>array('local'=>true)));
- $soids[]=$oid=$ret['oid'];
- }
- foreach($a as $lang=>$title) {
- $axds->procEdit(array('oid'=>$oid,'title'=>$a[$lang],'LANG_DATA'=>$lang,'_options'=>array('local'=>true)));
- }
- }
- updateQuery('DELETE FROM '.$this->atable.' where dtable="'.$table.'" AND dfield="'.$n.'" AND KOID NOT IN("'.implode('","',$soids).'")');
- }else{
- updateQuery('DELETE FROM '.$this->atable.' where dtable="'.$table.'" AND dfield="'.$n.'"');
- }
- $i++;
- $fields[]=$n;
- }
- // Suppression des champs qui ne sont plus present dans le questionnaire
- foreach($xds->desc as $n=>$f){
- if(!$f->sys && !in_array($n,$fields)) $xds->delField(array('field'=>$n,'action'=>'OK'));
- }
- }
- /// Parcourir les reponses
- function dashboard($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- $tplentry=$p->get('tplentry');
- $ar['tplentry']=TZR_RETURN_DATA;
- $ret=$this->display($ar);
- $table=$ret['oqtable']->raw;
- $ret['__total']=countSelectQuery('select count(*) from '.$table);
- if($ret['oreedit']->raw==1){
- $ret['__ototal']=countSelectQuery('select count(*) from '.$table.' where close!=1 or close is null');
- $ret['__ctotal']=countSelectQuery('select count(*) from '.$table.' where close=1');
- }
- return XShell::toScreen1($tplentry,$ret);
- }
- /// Exporte les reponses d'un questionnaire
- function exportAnswers($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- $ors=selectQueryGetOne('select title,qtable from '.$this->table. ' where KOID="'.$oid.'" limit 1');
- $xds=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$ors['qtable']);
- $xds->browse(array('tplentry'=>'br','pagesize'=>999999,'order'=>'UPD','selectedfields'=>'all'));
- $this->_exportXLS($ar2=array('fname'=>rewriteToAscii($ors['title']),'fmt'=>'xl07'));
- }
- /// Prepare l'envoie des invitations
- function sendInvitations($ar=NULL){
- return $this->display($ar);
- }
- /// Envoi des invitations
- function procSendInvitations($ar=NULL){
- $p=new XParam($ar,NULL);
- $oid=$p->get('oid');
- $ar['tplentry']=TZR_RETURN_DATA;
- $d=$this->display($ar);
- $sender=$p->get('sender');
- $sub=$p->get('subject');
- $mess=$p->get('content');
- $mess='<html><body>'.$mess.'</body></html>';
- $url=$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.$this->_moid.'&oid='.$oid.'&function=answer&template=generic8-raw.html&'.
- 'insidefile=xmodform/viewForm.html&tplentry=br';
- // Envoi aux personnes externes
- $emails=preg_split("/[;\n, ]/",$d['odestm']->raw);
- foreach($emails as $email){
- $email=trim($email);
- if(!preg_match('/^[^@]+@[^.]+.*$/',$email)) continue;
- $tmess=str_replace('<url>','<a href="'.$url.'&email='.$email.'&key='.md5($oid.'-'.$email).'">',$mess);
- $tmess=str_replace('</url>','</a>',$tmess);
- $this->sendMail2User($sub,$tmess,$email,$sender);
- }
- // Envoi aux personnes internes
- foreach($d['odest']->oidcollection as $uoid){
- $ors=selectQueryGetOne('select email from USERS where KOID="'.$uoid.'" LIMIT 1');
- $email=$ors['email'];
- $email=trim($email);
- if(!preg_match('/^[^@]+@[^.]+.*$/',$email)) continue;
- $tmess=str_replace('<url>','<a href="'.$url.'">',$mess);
- $tmess=str_replace('</url>','</a>',$tmess);
- $this->sendMail2User($sub,$tmess,$email,$sender);
- }
- // Notifie que l'envoi a été effetué
- updateQuery('update '.$this->table.' set UPD=UPD,invitok=1 where KOID="'.$oid.'"');
- setSessionVar('message',XLabels::getSysLabel('xmodmaillist','sent'));
- }
- /// Retourne le type de champ simplifié du champ d'une source
- function getQuestionType(&$f){
- if($f->ftype=='XShortTextDef') return 'shorttext';
- if($f->ftype=='XDateDef') return 'date';
- if($f->ftype=='XFileDef') return 'file';
- if($f->ftype=='XTextDef') return 'longtext';
- if($f->ftype=='XLinkDef'){
- if($f->multivalued) return 'checkbox';
- if($f->checkbox) return 'radio';
- return 'select';
- }
- }
- /// Passe certains champs du questionnaire en champ systeme
- function setSysFields(&$x){
- if(!empty($x->desc['email'])) $x->desc['email']->sys=true;
- if(!empty($x->desc['close'])) $x->desc['close']->sys=true;
- }
- /// Verification des droits sur un objet
- function secure($oid,$function,$user=NULL,$lang=TZR_DEFAULT_LANG){
- // Pour repondre à un formulaire, on vérifie avant que la personne est dans la liste des destinataires
- if($function=='answer' || $function=='procAnswer'){
- $nb=countSelectQuery('select count(*) from '.$this->table.' where KOID="'.$oid.'" and LANG="'.$lang.'" and isopen=1');
- if($nb) return true;
- if($user && $user->_curoid!=TZR_USERID_NOBODY){
- $nb=countSelectQuery('select count(*) from '.$this->table.' where KOID="'.$oid.'" and LANG="'.$lang.'" and dest like "%'.$user->_curoid.'%"');
- }elseif(!$user && !XUser::isNobody()){
- $nb=countSelectQuery('select count(*) from '.$this->table.' where '.
- 'KOID="'.$oid.'" and LANG="'.$lang.'" and dest like "%'.XUser::get_current_user_uid().'%"');
- }else{
- // Pour les personnes externes, on verifie la clé d'acces
- if($_REQUEST['key']!=md5($oid.'-'.$_REQUEST['email'])) return false;
- $nb=countSelectQuery('select count(*) from '.$this->table.' where '.
- 'KOID="'.$oid.'" and LANG="'.$lang.'" and destm like "%'.addslashes($_REQUEST['email']).'%"');
- }
- if(!$nb) return false;
- else return true;
- }
- return parent::secure($oid,$function,$user,$lang);
- }
- /// Rend la liste des fonctions utilisables dans le gestionnaire de rubriques en mode fonction (tableau de paires fonction=>label)
- function getUIFunctionList() {
- return array('answer'=>XLabels::getSysLabel('xmodform','uianswer','text'));
- }
- function UIParam_answer(){
- $ret['__oid']=XFieldDef::objectFactory((object)array('FIELD'=>'__oid','FTYPE'=>'XLinkDef','COMPULSORY'=>1,'TARGET'=>$this->table,
- 'LABEL'=>XLabels::getSysLabel('xmodform','form','text')));
- $ret['__nextalias']=XFieldDef::objectFactory((object)array('FIELD'=>'__nextalias','FTYPE'=>'XShortTextDef','COMPULSORY'=>1,
- 'LABEL'=>XLabels::getSysLabel('xmodtable','uiinsert_okalias','text')));
- $ret['__nextalias']->listbox=false;
- return $ret;
- }
- }
- ?>