/class.xoptions.inc
PHP | 734 lines | 711 code | 5 blank | 18 comment | 51 complexity | 2ddc334676d0db1059e43b4ef6378967 MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
- <?php
- /****c* tzr-5/XOptions
- * NAME
- * XOptions -- gestion d'un ensemble d'options
- * DESCRIPTION
- * Classe permettant la gestion d'un ensemble d'options dans un bloc de données
- * Utilisation: options des champs, options des modules, etc...
- * SYNOPSIS
- ****/
- class XOptions {
- private $_s = NULL;
- private $_p = array();
- function __construct($id = null) {
- if (!is_null($id)) $this->setId($id);
- }
- public function setId($id) {
- $this->id=$id;
- }
- /// Déclaration d'une nouvelle option
- public function setOpt($label, $option, $type, $opts=NULL, $def=NULL, $group='Specific', $level='admin') {
- if(XShell::admini_mode()) $this->_p[$option]=array('label'=>$label, 'type'=>$type, 'options'=>$opts, 'def'=>$def, 'group'=>$group, 'level'=>$level);
- else $this->_p[$option]=array('type'=>$type, 'options'=>$opts, 'def'=>$def, 'level'=>$level);
- }
- /// Applique la valeur d'une option à un objet
- public function set(&$s,$field,$value) {
- // Recupere la valeur par defaut dans l'objet si celle ci n'est pas renseignée dans l'option
- if($this->_p[$field]['def']===NULL && isset($s->$field)) $this->_p[$field]['def']=$s->$field;
- if(@$this->_p[$field]['type']=='boolean') {
- if(!isset($value)) $value=@$this->_p[$field]['def'];
- if($value==1) $s->$field=true;
- else $s->$field=false;
- return;
- }elseif(@$this->_p[$field]['type']=='ttext'){
- $lang=XShell::getLangData();
- $txts=XLabels::getAMsg($this->id.':'.$field,$lang,false);
- $s->$field=$txts;
- return;
- }else{
- if($value==='' || $value===NULL) $value=@$this->_p[$field]['def'];
- $s->$field=$value;
- }
- }
- /// Positionne l'option en lecture seule
- public function setRO($field) {
- $this->_p[$field]['options']['read-only']=true;
- }
- public function delOpt($option) {
- unset($this->_p[$option]);
- }
- public function clearOpts() {
- $this->_p=array();
- }
- public function get($s, $field) {
- return $s->$field;
- }
- public function getValues($s) {
- foreach($this->_p as $n => $p) {
- $r[$n]=$this->get($s, $n);
- }
- return $r;
- }
- public function setValues(&$s1, $s=NULL) {
- if(!is_array($s)) $s=array();
- foreach($this->_p as $n =>$v) {
- if(!isset($s[$n])) $s[$n]=NULL;
- $this->set($s1, $n, $s[$n]);
- }
- }
- public function setLabel($label,$option) {
- if($this->_p[$option])
- $this->_p[$option]['label']=$label;
- }
- public function setComment($comment,$option) {
- if($this->_p[$option])
- $this->_p[$option]['comment']=$comment;
- }
- public function setGroupComment($comment,$option) {
- if($this->_p[$option])
- $this->_p[$option]['groupcomment']=$comment;
- }
- public function getDialog(&$o, $ar=NULL,$block='options',$level='admin') {
- $lang = XShell::getLangUser();
- $ui=array();
- $groups=array();
- foreach($this->_p as $n =>$v) {
- if(!empty($v['group']) && !in_array($v['group'],$groups)) {
- $groups[]=$v['group'];
- }
- }
- if(empty($groups)) $groups[]='Specific';
- foreach($groups as $i1=>$g) {
- foreach($this->_p as $n =>$v) {
- if(empty($v['group'])) $v['group']='Specific';
- if($v['group']==$g) {
- if((@$v['options']['read-only']) || (($level!='admin') && ($v['level']=='admin'))) {
- $ui[]=array('field'=>$n,
- 'group'=>@$v['group'],
- 'label'=>@$v['label'],
- 'options'=>@$v['options'],
- 'comment'=>@$v['comment'],
- 'groupcomment'=>@$v['groupcomment'],
- 'edit'=>$this->_getView($block, $n,$this->get($o, $n))
- );
- } else {
- $ui[]=array('field'=>$n, 'group'=>@$v['group'],
- 'label'=>@$v['label'],
- 'options'=>@$v['options'],
- 'comment'=>@$v['comment'],
- 'groupcomment'=>@$v['groupcomment'],
- 'edit'=>$this->_getUI($block, $n, $o)
- );
- }
- }
- }
- }
- return $ui;
- }
- /**
- * Enregistre les propriétés passées en paramètre
- * @param &$obj Objet dont les propriétés vont être modifiées
- * @param &$values Nouvelles valeurs à insérer dans l'objet passé en paramètre précédent
- */
- public function procDialog(&$obj,&$values) {
- $lang = XShell::getLangUser();
- $ui=array();
- foreach($this->_p as $n =>$v) {
- if(isset($values[$n])){
- $val=$values[$n];
- if(method_exists($this, '_proc'.$this->_p[$n]['type'])) {
- $m='_proc'.$this->_p[$n]['type'];
- $this->$m($obj, $n, $val);
- }
- $this->set($obj, $n, $val);
- $values[$n]=$val;
- }
- }
- }
- private function _procdependency($s, $n, &$v) {
- // suppression des quotes protégeant l'opérateur pour export excel
- $v['op'] = preg_replace('/"(.*)"/', '$1', $v['op']);
- }
- private function _procttext($s, $n, &$v) {
- XLabels::updateAMsg($this->id.':'.$n, $v);
- $v=$this->id.':'.$n;
- }
- private function _proctemplate($s, $n, &$v) {
- if(is_array($v)) {
- $v=implode('',$v);
- }
- }
- private function _procdate($s, $n, &$v) {
- if(empty($this->_p[$n]['options']['free'])){
- $xdate=new XDateDef();
- $ret=$xdate->post_edit($v);
- $v=$ret->raw;
- }
- }
- public function getView(&$o, $ar=NULL,$block='opt') {
- $lang = XShell::getLangUser();
- $ui=array();
- $groups=array();
- foreach($this->_p as $n =>$v) {
- if(!empty($v['group']) && !in_array($v['group'],$groups)) {
- $groups[]=$v['group'];
- }
- }
- if(empty($groups)) $groups[]='Specific';
- foreach($groups as $i1=>$g) {
- foreach($this->_p as $n =>$v) {
- if(empty($v['group'])) $v['group']='Specific';
- if($v['group']==$g) {
- $ui[]=array('field'=>$n,
- 'group'=>$v['group'],
- 'options'=>$v['options'],
- 'label'=>$v['label'],
- 'view'=>$this->_getView($block, $n,$this->get($o, $n)));
- }
- }
- }
- return $ui;
- }
- private function _getUI($block,$n,&$o) {
- $v=$this->get($o,$n);
- $type=$this->_p[$n]['type'];
- $opts=$this->_p[$n]['options'];
- $txt='';
- if($block) $name=$block.'['.$n.']';
- else $name=$n;
- $onchange = (!empty($opts['validate'])?'onchange="if(this.form.onsubmit()) this.form.submit();"':'');
- switch($type) {
- case 'ttext':
- if(is_array($v)) $txts=$v;
- else{
- $txts=XLabels::getAMsg($this->id.':'.$n,NULL,false);
- }
- $txt="<table>";
- $size=(!empty($opts['size'])?$opts['size']:30);
- if(!empty($opts['rows'])) {
- $cols=$opts['cols'];
- $rows=$opts['rows'];
- }
- $varid=uniqid('v');
- $js='';
- foreach($GLOBALS['TZR_LANGUAGES'] as $lang=>$iso) {
- $txt.='<tr><th>'.$lang.'</th><td>';
- $v=str_replace('<br />','',$txts[$lang]);
- if($opts['rows']) {
- if($lang == TZR_DEFAULT_LANG){
- $js .= "jQuery('#".$varid.$lang."').blur(function(){var val = jQuery(this).val();var oldval= jQuery(this).attr('oldval'); jQuery('textarea[id^=$varid]').each(function(){if(jQuery(this).val()==oldval) jQuery(this).val(val)})}).focus(function(){jQuery(this).attr('oldval',jQuery(this).val());});";
- }
- $txt.='<textarea id="'.$varid.$lang.'" name="'.$block.'['.$n.']['.$lang.']" cols="'.$cols.'" rows="'.$rows.'" '.$onchange.'>'.$v.'</textarea>';
- } else {
- $txt.='<input id="'.$varid.$lang.'" type="text" name="'.$block.'['.$n.']['.$lang.']" value="'.$v.'" size="'.$size.'" '.$onchange.'/>';
- if($lang == TZR_DEFAULT_LANG){
- $js .= "jQuery('#".$varid.$lang."').blur(function(){var val = jQuery(this).val();var oldval= jQuery(this).attr('oldval'); jQuery('input[id^=$varid]').each(function(){if(jQuery(this).val()==oldval) jQuery(this).val(val)})}).focus(function(){jQuery(this).attr('oldval',jQuery(this).val());});";
- }
- }
- $txt.='</td></tr>';
- if(!empty($opts['compulsory'])){
- $js.='TZR.addValidator(["'.$varid.$lang.'",/(.+)/,"","'.XIni::get('error_color').'","XShortTextDef"]);';
- }
- }
- $txt.='</table>';
- if($js !='' ) $txt.='<script type="text/javascript">'.$js.'</script>';
- break;
- case 'text':
- $varid=uniqid('v');
- $size=(!empty($opts['size'])?$opts['size']:30);
- if(@$opts['rows']) {
- $cols=$opts['cols'];
- $rows=$opts['rows'];
- $txt='<textarea id="'.$varid.'" name="'.$block.'['.$n.']" cols="'.$cols.'" rows="'.$rows.'" '.$onchange.'>'.$v.'</textarea>';
- } else {
- $txt='<input id="'.$varid.'" type="text" name="'.$block.'['.$n.']" value="'.htmlentities($v,ENT_COMPAT,TZR_INTERNAL_CHARSET).'" size="'.$size.'" '.@$onchange.'/>';
- }
- if(!empty($opts['compulsory'])){
- $txt.='<script type="text/javascript">TZR.addValidator(["'.$varid.'",/(.+)/,"","'.XIni::get('error_color').'","XShortTextDef"]);</script>';
- }
- break;
- case 'label':
- $size=(!empty($opts['size'])?$opts['size']:30);
- if(!empty($opts['rows'])) {
- $cols=$opts['cols'];
- $rows=$opts['rows'];
- $txt="<textarea name=\"".$block."[$n]\" cols=\"$cols\" rows=\"$rows\" $onchange >$v</textarea>";
- } else {
- $txt="<input type=\"text\" name=\"".$block."[$n]\" value=\"$v\" size=\"$size\" $onchange />";
- }
- break;
- case 'boolean':
- $txt='<select name="'.$block."[$n]\"><option value=\"1\" ".($v?'selected':'').'>'.
- XLabels::getSysLabel('general','yes').'</option>'.
- '<option value="0" '.(!$v?'selected':'').'>'.XLabels::getSysLabel('general','no').'</option>';
- $txt.='</select>';
- break;
- case 'date':
- $txt=$this->_getDateUI($block.'['.$n.']',$v,$opts);
- break;
- case 'object':
- if(empty($opts['table'])) return '';
- $txt=$this->_getLinkUI($block.'['.$n.']',$v,$opts,$opts['table']);
- break;
- case 'template':
- if(!preg_match('/([0-9]+)/',$opts['moid']) && !empty($opts['moid'])) {
- $f=$opts['moid'];
- $opts['moid']=$o->$f;
- }
- $txt=$this->_getLinkUI($block.'['.$n.']',$v,$opts,'TEMPLATES');
- break;
- case 'letter':
- $txt=$this->_getLinkUI($block."[$n]",$v,$opts,'LETTERS');
- break;
- case 'table':
- $k = new Kernel;
- $txt=$k->baseSelector(array('fieldname'=>$name,'value'=>$v,'misc'=>$onchange,'emptyok'=>$opts['emptyok']));
- break;
- case 'module':
- if(!array_key_exists('emptyok',$opts)) $opts['emptyok']=true;
- if(is_object($v)) $v=$v->_moid;
- $txt=XModule::moduleSelector(array('fieldname'=>$name,'value'=>$v,'misc'=>$onchange,'emptyok'=>$opts['emptyok'],
- 'toid'=>@$opts['toid'],'table'=>@$opts['table']));
- break;
- case 'list':
- $txt =$this->_getListUI($block."[$n]",$v,$opts['labels'],$opts['values'],$onchange);
- break;
- case 'multiplelist':
- $txt =$this->_getMultipleListUI($block."[$n]",$v,$opts['labels'],$opts['values'],$onchange);
- break;
- case 'field':
- $t=$opts['table'];
- if(empty($t)) $t='table';
- $table=$this->get($o,$t);
- if(empty($table)) $table=$t;
- if(empty($table) || $table=='%') {
- $txt='';
- } else {
- $x=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- $txt=$x->fieldSelector(array('fieldname'=>$block."[$n]",
- 'compulsory'=>$opts['compulsory'],
- 'value'=>$v,'type'=>$opts['type']));
- }
- break;
- case 'dependency':
- $t=$opts['table'];
- if(empty($t)) {
- $t='table';
- }
- $table=$this->get($o,$t);
- if(empty($table)) {
- $txt='';
- break;
- }
- $x = XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- list($foo,$field)=explode(':',$this->id);
- if(!isset($x->desc[$field])){
- $txt='';
- break;
- }
- $txt=$x->fieldSelector(array('fieldname'=>$block."[$n][f]",'compulsory'=>false,'value'=>$v['f'],
- 'type'=>array('XBoolDef','XLinkDef','XStringSetDef'),
- 'filter'=>array('multivalued'=>false,'field'=>array('!=',$o->field))));
- $txt=str_replace('<select ','<select onchange="document.getElementById(\'ddep_'.$block.'_'.$n.'\').innerHTML=\'\';" ',$txt);
- if(strpos($txt,$x->desc[$v['f']]->field)===false) return $txt;
- if(!empty($v['f'])){
- $xd=clone($x->desc[$v['f']]);
- $xd->multivalued=false;
- $xf=clone($x->desc[$field]);
- $xf->compulsory=false;
- if($xd->ftype=='XBoolDef'){
- $xd->listbox=true;
- }
- $txt.='<div id="ddep_'.$block.'_'.$n.'">';
- $txt.='<table id="tdep_'.$block.'_'.$n.'"><tr><td></td><th>Valeur</th><th>Style</th><th>Nouvelle valeur</th></tr>';
- $txt.='<tr><td></td><td></td><td></td><td></td><td></td></tr>';
- foreach($v['dval'] as $i=>$foo){
- $uniq=uniqid();
- $ui=$this->_getDependencyUI($block."[$n][xxx][$uniq]",$table,$field,$v['f'],
- $v['op'][$i],$v['dval'][$i],$v['style'][$i],$v['val'][$i],$v['nochange'][$i]);
- $txt.='<tr>';
- $txt.='<td><a onclick="TZR.delLine(this); return false;">'.XLabels::getSyslabel('general','delete').'</a></td>';
- $txt.='<td>'.$ui[0].'</td>';
- $txt.='<td>'.$ui[1].'</td>';
- $txt.='<td>'.$ui[2].'</td>';
- }
- $txt.='</table>';
- $txt.='<a href="#" onclick="TZR.addTableLine(\'tdep_'.$block.'_'.$n.'\','.$n.'tds,1); return false;">Ajouter</a>';
- $ui=$this->_getDependencyUI($block."[$n][xxx][xidxid]",$table,$field,$v['f']);
- $txt.='<script type="text/javascript">';
- $txt.='var '.$n.'tds=new Array();';
- $txt.=$n.'tds[0]="'.escapeJavascript('<a onclick="TZR.delLine(this); return false;">'.XLabels::getSyslabel('general','delete').
- '</a>').'";';
- $txt.=$n.'tds[1]="'.escapeJavascript($ui[0]).'";';
- $txt.=$n.'tds[2]="'.escapeJavascript($ui[1]).'";';
- $txt.=$n.'tds[3]="'.escapeJavascript($ui[2]).'";';
- $txt.='</script>';
- $txt.='</div>';
- }
- break;
- }
- return $txt;
- }
- private function _getView($block, $n,$v) {
- $lang = XShell::getLangUser();
- $type = $this->_p[$n]['type'];
- $opts = $this->_p[$n]['options'];
- $txt=$v;
- switch($type) {
- case 'boolean':
- $txt = ($v?XLabels::getSysLabel('general','yes'):XLabels::getSysLabel('general','no'));
- break;
- case 'date':
- $txt = $v;
- break;
- case 'object':
- if(empty($opts['table'])) return '';
- $txt = $this->_getLinkView($block."[$n]",$v,$opts['table']);
- break;
- case 'template':
- $txt = $this->_getLinkView($block."[$n]",$v,'TEMPLATES');
- break;
- case 'letter':
- $txt = $this->_getLinkView($block."[$n]",$v,'LETTERS');
- break;
- case 'list':
- $txt = $v;
- break;
- case 'table':
- if(!empty($v)) {
- $x = XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$v);
- $txt=$x->getLabel();
- }
- break;
- case 'module':
- $txt='( '.XLabels::getSysLabel('general.empty').' )';
- if(!empty($v)) {
- $x = &XModule::objectFactory(array('moid'=>$v,'tplentry'=>TZR_RETURN_DATA));
- if(!empty($x)) $txt=$x->getLabel();
- }
- break;
- }
- return $txt;
- }
- public function serialize(&$o) {
- $a=$this->getValues($o);
- return serialize($a);
- }
- private function _getDependencyUI($name,$table,$f,$d,$op=NULL,$valued=NULL,$style=NULL,$value=NULL,$nochange=NULL){
- $x=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- $xd=clone($x->desc[$d]);
- $xf=clone($x->desc[$f]);
- $xf->compulsory=false;
- $xd->multivalued=$xf->multivalued=false;
- $xd->dependency=$xf->dependency=NULL;
- $txt=array();
- $opt=array('fieldname'=>str_replace('[xxx]','[dval]',$name),'simple'=>true);
- $o=&$xd->edit($valued,$opt);
- $txt[0]='<select name="'.str_replace('[xxx]','[op]',$name).'">'.
- '<option value="="'.($op=='='?' selected':'').'>=</option>'.
- '<option value="!="'.($op=='!='?' selected':'').'>!=</option>'.
- '</select> '.$o->html;
- $txt[1]=$this->_getDependencyStyleUI($name,$style);
- $valname=str_replace('[xxx]','[val]',$name);
- $opt=array('fieldname'=>$valname,'simple'=>true);
- $o=&$xf->edit($value,$opt);
- $txt[2]='<input type="hidden" name="'.str_replace('[xxx]','[nochange_HID]',$name).'" value="0">'.
- '<input type="checkbox" value="1" name="'.str_replace('[xxx]','[nochange]',$name).'" '.($nochange?'checked ':'').
- 'onclick="if(this.checked) document.getElementById(\''.$valname.'\').style.display=\'none\'; else '.
- 'document.getElementById(\''.$valname.'\').style.display=\'inline\';">no change';
- $txt[2].='<br><span id="'.$valname.'"'.($nochange?'style="display:none" ':'').
- '>'.$o->html.'</span>';
- unset($xd);
- unset($xf);
- return $txt;
- }
- private function _getDependencyStyleUI($name,$style){
- $txt='<select name="'.str_replace('[xxx]','[style]',$name).'">';
- $txt.='<option value="">----</option>';
- $txt.='<option value="hidden"'.($style=='hidden'?' selected':'').'>Cacher</option>';
- $txt.='<option value="invalid"'.($style=='invalid'?' selected':'').'>Invalider</option>';
- $txt.='</select>';
- return $txt;
- }
- private function _getDateUI($name, $value, $opts=NULL) {
- if(!empty($opts['free'])){
- $t='<input type="text" name="'.$name.'_free" value="'.$value.'">';
- }else{
- list($year,$month,$day)=explode('-',$value);
- $xdate=new XDateDef();
- $t=$xdate->getJSCode($value,$name,$name,uniqid(),2);
- }
- return $t;
- }
- private function _getLinkUI($name,$value,$options,$table) {
- $r['FIELD']=$name;
- $r['FTYPE']='XLinkDef';
- $r['DTAB']='';
- $r['COMPULSORY']=false;
- $r['MULTIVALUED']=false;
- $r['TARGET']=$table;
- $o=(object)$r;
- $n=XFieldDef::objectFactory($o);
- $cond='';
- if(!empty($options['cond'])) $cond='and '.$options['cond'];
- if(!empty($options['moid'])) $cond="(modid='".$options['moid']."') $cond";
- $n->filter=$cond;
- $n->checkbox=false;
- $n->multivalued=$options['multivalued'];
- if($n->multivalued) $value=implode('||',unserialize($value));
- if(is_array($value)) $value=implode('',$value);
- $opts1=array('intable'=>true);
- $e=$n->edit($value,$opts);
- $boid=XDataSource::getBoidFromSpecs('XDSTable',$table);
- $url=$GLOBALS['TZR_SESSION_MANAGER']::complete_self().'&moid='.XModule::getMoid(XMODDATASOURCE_TOID).'&function=XDSContentInput&tplentry=br&boid='.$boid.
- '&template=xmoddatasource/XDSContentInput.html&modid='.$options['moid'];
- $e->html.=' <a class="cv8-ajaxlink" href="'.$url.'">'.XLabels::getSysLabel('general','new').'</a>';
- return $e->html;
- }
- private function _getLinkView($name, $value,$table) {
- $r['FIELD']=$name;
- $r['FTYPE']='XLinkDef';
- $r['DTAB']='';
- $r['COMPULSORY']=false;
- $r['MULTIVALUED']=false;
- $r['TARGET']=$table;
- $o=(object)$r;
- $n = XFieldDef::objectFactory($o);
- $e = $n->display($value);
- return $e->html;
- }
- private function _getListUI($name, $value, $labels, $values,$onchange) {
- $t = "<select name=\"$name\" $onchange >";
- foreach($labels as $i => $l) {
- if($value==$values[$i])
- $t.="<option value=\"".$values[$i]."\" selected>".$labels[$i]."</option>";
- else
- $t.="<option value=\"".$values[$i]."\">".$labels[$i].'</option>';
- }
- return $t;
- }
- private function _getMultipleListUI($name, $value, $labels, $values, $onchange) {
- $t = "<select name=\"{$name}[]\" multiple $onchange >";
- foreach($labels as $i => $l) {
- if(in_array($values[$i],$value))
- $t.="<option value=\"".$values[$i]."\" selected>".$labels[$i]."</option>";
- else
- $t.="<option value=\"".$values[$i]."\">".$labels[$i].'</option>';
- }
- return $t;
- }
- /// Retourne le tableau des options avec leur valeur complète
- public function getAllValues(&$o,$ar=NULL,$block='options') {
- $options=array();
- foreach($this->_p as $n=>$v) {
- switch($v['type']){
- case 'ttext':
- $txts=XLabels::getAMsg($this->id.':'.$n);
- foreach($GLOBALS['TZR_LANGUAGES'] as $lang=>$iso) {
- if(!empty($txts[$lang])) $options[$block.'['.$n.']['.$lang.']']=str_replace("\r\n","\n",$txts[$lang]);
- }
- break;
- case 'module':
- $v=$this->get($o,$n);
- if(!empty($v)) $options[$block.'['.$n.']']=$v;
- break;
- case 'boolean':
- $v=$this->get($o,$n);
- if($v) $options[$block.'['.$n.']']=1;
- else $options[$block.'['.$n.']']=0;
- break;
- case 'table':
- $v=$this->get($o,$n);
- if($v && $v!='%') $options[$block.'['.$n.']']=$v;
- break;
- case 'dependency':
- $v=$this->get($o,$n);
- if($v['f']){
- $options[$block.'[dependency][f]']=$v['f'];
- foreach($v['dval'] as $i=>$dv){
- if ($ar['for_export']) // protéger l'operateur pour excel
- $options[$block.'[dependency][op]['.$i.']'] = '"' . $v['op'][$i] . '"';
- else
- $options[$block.'[dependency][op]['.$i.']']=$v['op'][$i];
- $options[$block.'[dependency][dval]['.$i.']']=$v['dval'][$i];
- $options[$block.'[dependency][style]['.$i.']']=$v['style'][$i];
- $options[$block.'[dependency][nochange]['.$i.']']=$v['nochange'][$i];
- $options[$block.'[dependency][val]['.$i.']']=$v['val'][$i];
- }
- }
- break;
- default:
- $v=$this->get($o,$n);
- if(!empty($v)) $options[$block.'['.$n.']']=$v;
- break;
- }
- }
- return $options;
- }
- /****m* XOptions/toXML
- * NAME
- * XOptions::toXML - serialisation vers XML
- * DESCRIPTION
- * Serialisation d'un ensemble d'options vers XML
- * INPUTS
- * $s - bloc contenant les valeurs des options
- * RETURN
- * chaine representant les options en XML
- ****/
- public function toXML(&$s) {
- $txt="<?xml version=\"1.0\" encoding=\"utf-8\" ?".">";
- $txt.='<properties>';
- foreach($this->_p as $n =>$v) {
- $typ=$v['type'];
- $txt.= "<field name=\"$n\" type=\"$typ\">";
- $val=$this->get($s, $n);
- if($typ=='module' && is_object($val)){
- $val=$val->_moid;
- }elseif(is_array($val)){
- if($v['type']=='dependency' && $val['f']){
- // Fait un post_edit sur les valeurs et tri les regles par opérateurs
- $x=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->get($s,'table'));
- $defined=$orgval=array();
- foreach($val['dval'] as $i=>$foo){
- $tmp=$x->desc[$val['f']]->post_edit($val['dval'][$i]);
- if(in_array($val['op'][$i].'-'.$tmp->raw,$defined)) continue;
- $tmp2=$s->post_edit($val['val'][$i]);
- $orgval[$val['op'][$i]]['op'][]=$val['op'][$i];
- $orgval[$val['op'][$i]]['val'][]=$tmp2->raw;
- $orgval[$val['op'][$i]]['dval'][]=$tmp->raw;
- $orgval[$val['op'][$i]]['style'][]=$val['style'][$i];
- $orgval[$val['op'][$i]]['nochange'][]=$val['nochange'][$i];
- $defined[]=$val['op'][$i].'-'.$tmp->raw;
- }
- $val['op']=array_merge((array)$orgval['=']['op'],(array)$orgval['!=']['op']);
- $val['val']=array_merge((array)$orgval['=']['val'],(array)$orgval['!=']['val']);
- $val['dval']=array_merge((array)$orgval['=']['dval'],(array)$orgval['!=']['dval']);
- $val['style']=array_merge((array)$orgval['=']['style'],(array)$orgval['!=']['style']);
- $val['nochange']=array_merge((array)$orgval['=']['nochange'],(array)$orgval['!=']['nochange']);
- $val=serialize($val);
- }else{
- foreach($val as &$v) convert_charset($v,TZR_INTERNAL_CHARSET,"UTF-8");
- $val=serialize($val);
- }
- }else{
- convert_charset($val, TZR_INTERNAL_CHARSET,"UTF-8");
- }
- if(isset($val)) $txt.='<value><![CDATA['.$val.']]></value>';
- else $txt.='<value />';
- $txt.='</field>';
- }
- $txt.='</properties>';
- return $txt;
- }
- /***** XOptions/rawToXML
- * NAME
- * XOptions::rawToXML - transformation d'un tableau en bloc XML
- * DESCRIPTION
- * création d'un bloc xml depuis un tableau
- * INPUTS
- * $ar - le tableau
- * $ch - encodage des valeurs du tableau
- * RETURN
- * chaine bloc XML
- ****/
- static public function rawToXML($ar,$ch = TZR_INTERNAL_CHARSET){
- $txt="<?xml version=\"1.0\" encoding=\"utf-8\" ?".">";
- $txt.='<properties>';
- if(is_array($ar)) {
- foreach($ar as $n =>$v) {
- $txt.= "<field name=\"$n\" type=\"\">";
- $val=$v;
- if($ch != "UTF-8"){
- if(is_array($val)){
- foreach($val as &$v) convert_charset($v,$ch,"UTF-8");
- $val=serialize($val);
- }else{
- convert_charset($val, $ch,"UTF-8");
- }
- }
- if(isset($val))
- $txt.='<value><![CDATA['.$val.']]></value>';
- else
- $txt.='<value />';
- $txt.='</field>';
- }
- }
- $txt.='</properties>';
- return $txt;
- }
- /**
- * Liste d'options construite par XML
- * @param $values object Objet qui récupère les valeurs par défaut des options
- * @param $xml string chaine XML contenant les options
- */
- function setOptsFromXML(&$values, &$xml) {
- $oxml = simplexml_load_string($xml);
- if (empty($oxml->field)) return;
- foreach ($oxml->field as $field) {
- $name = (string) $field['name'];
- $type = (string) $field['type'];
- $label = (string) $field->label;
- $default = (string) $field->default;
- $comment = (string) $field->comment;
- $options = (array) $field->options;
- $group = (string) $field->group;
- $level = (string) $field->level;
- $this->setOpt($label, $name, $type, $options, $default, empty($group) ? 'Specific' : $group, empty($level) ? 'none' : $level);
- if (!empty($comment)) $this->setComment($comment, $name);
- if (!empty($default)) $this->set($values, $name, $default);
- }
- }
- /****m* XOptions/fromXML
- * NAME
- * XOptions::fromXML - recupération des donnees depuis un bloc xml
- * DESCRIPTION
- * Recuperation des données des options depuis un bloc xml
- * INPUTS
- * $s - objet de stockage des données
- * $xml - chaine contenant la representation xml
- * OUTPUTS
- * $s - les valeurs sont mises à jour
- ****/
- public function fromXML(&$s, &$xml) {
- $r=self::rawFromXML($xml);
- $this->setValues($s,$r);
- }
- /****m* XOptions/rawFromXML
- * NAME
- * XOptions::rawFromXML - recupération des donnees depuis un bloc xml
- * DESCRIPTION
- * Recuperation des données des options depuis un bloc xml
- * INPUTS
- * $xml - chaine contenant la representation xml
- * OUTPUTS
- * return - les valeurs sont mises à jour
- ****/
- static public function rawFromXML(&$xml) {
- $oxml=simplexml_load_string($xml);
- $r=array();
- if(empty($oxml->field)) return $r;
- foreach($oxml->field as $o) {
- $name=(string)$o['name'];
- $type=(string)$o['type'];
- $value=(string)$o->value;
- if($type=='multiplelist' || $type=='dependency') $value=unserialize($value);
- if(TZR_INTERNAL_CHARSET != "UTF-8"){
- if(is_array($value)){
- foreach($value as &$v) convert_charset($v,"UTF-8",TZR_INTERNAL_CHARSET);
- }else{
- convert_charset($value,"UTF-8",TZR_INTERNAL_CHARSET);
- }
- }
- $r[$name]=$value;
- }
- return $r;
- }
- }
- ?>