diff --git a/include/class/card_property.class.php b/include/class/card_property.class.php index acb748b3d..2fb1f883c 100644 --- a/include/class/card_property.class.php +++ b/include/class/card_property.class.php @@ -56,6 +56,10 @@ class Card_Property $this->ad_id=0; $this->display_mode='window'; } + public function __toString(): string + { + return "card_property".var_export($this,true); + } public function setDisplayMode($p_mode) { if ( ! in_array($p_mode,array("window","large"))) { @@ -139,6 +143,143 @@ class Card_Property $this->jnt_order=$jnt_order; } + /** + * @brief build the needed elements to display + * @param Object Fiche_Def $p_fiche_def + * @return array + * - $result['msg'] message to display, + * - $result['label'] label of the CardProperty (ad_text), + * - $result['input' is the HtmlInput object + * - $result['class'] is the CSS class to use + * - $result['bulle'] is the infobulle + */ + public function build_input($p_fiche_def=null) + { + $result = ['msg' => '', 'input' => null, 'label' => '', 'class' => 'input_text','bulle'=>'']; + if ($this->ad_id == ATTR_DEF_NAME || $this->ad_id == ATTR_DEF_QUICKCODE) { + $result['class'] = " input_text highlight info"; + } + if ($this->ad_id == ATTR_DEF_ACCOUNT) { + if ( $p_fiche_def == null ) { + throw new \Exception ("CP162.p_fiche_def is null"); + } + $result['input'] = new IPoste("av_text" . $this->ad_id); + $result['input']->id = uniqid('accounting'); + $result['input']->set_attribute('ipopup', 'ipop_account'); + $result['input']->set_attribute('jrn', '0'); + $result['input']->set_attribute('account', "av_text" . $this->ad_id); + $result['input']->dbl_click_history(); + $result['input']->value = $this->av_text; + // account created automatically + $sql = "select account_auto($p_fiche_def->id)"; + $ret_sql = $this->cn->exec_sql($sql); + $a = Database::fetch_array($ret_sql, 0); + $result['label'] = new ISpan(); + $result['label']->name = "av_text" . $this->ad_id . "_label"; + $p_fiche_def->load(); + if ($a['account_auto'] == 't') { + $result['msg'] .= $result['label']->input() . " " . + _("Rappel: Poste créé automatiquement à partir de ") + . $p_fiche_def->class_base . " "; + } else { + // if there is a class base in fiche_def_ref, this account will be the + // the default one + if (strlen(trim($p_fiche_def->class_base)) != 0) { + $result['msg'] .= " " . _("Rappel: Poste par défaut sera ") . + $p_fiche_def->class_base . + " ! "; + $result['input']->value = $p_fiche_def->class_base; + } + } + $result['label']=_("Poste comptable"); + $result['class']=" highlight input_text"; + return $result; + } elseif ($this->ad_id == ATTR_DEF_TVA) { + $result['input'] = new ITva_Popup('popup_tva'); + $result['input']->table = 1; + $result['input']->value = $this->av_text; + $result['label']=$this->ad_text; + } else { + switch ($this->ad_type) { + case 'text': + $result['input'] = new IText(); + $result['input']->css_size = "100%"; + $result['input']->value = $this->av_text; + break; + case 'numeric': + $result['input'] = new INum(); + $result['input']->prec = ($this->ad_extra == "") ? 2 : $this->ad_extra; + $result['input']->size = $this->ad_size; + $result['input']->value = $this->av_text; + break; + case 'date': + $result['input'] = new IDate(); + $result['input']->value = $this->av_text; + break; + case 'zone': + $result['input'] = new ITextArea(); + $result['input']->style = ' class="itextarea" style="margin:0px;width:100%"'; + $result['input']->value = $this->av_text; + break; + case 'poste': + $result['input'] = new IPoste("av_text" . $this->ad_id); + $result['input']->set_attribute('ipopup', 'ipop_account'); + $result['input']->set_attribute('account', "av_text" . $this->ad_id); + $result['input']->table = 1; + $bulle = Icon_Action::infobulle(14); + $result['input']->value = $this->av_text; + break; + case 'check': + $result['input'] = new InputSwitch("av_text" . $this->ad_id); + $result['input']->value = (empty($this->av_text) ) ? 0 : 1; + break; + case 'select': + $result['input'] = new ISelect("av_text" . $this->ad_id); + $result['input']->value = $this->cn->make_array($this->ad_extra); + $result['input']->style = 'style="width:100%"'; + $result['input']->selected = $this->av_text; + break; + case 'card': + $result['input'] = new ICard("av_text" . $this->ad_id); + // filter on frd_id + $result['input']->extra = $this->ad_extra; + $result['input']->extra2 = 0; + $result['input']->id = uniqid(); + $result['label'] = new ISpan(); + $filter = $this->ad_extra; + $result['input']->width = $this->ad_size; + $result['input']->extra = $filter; + $result['input']->extra2 = 0; + $result['input']->limit = 6; + $result['label']->name = "av_text" . $this->ad_id . $result['input']->id . "_label"; + $result['input']->set_attribute('ipopup', 'ipopcard'); + $result['input']->set_attribute('typecard', $this->ad_extra); + $result['input']->set_attribute('inp', $result['input']->id); + $result['input']->set_attribute('label', "av_text" . $this->ad_id . $result['input']->id . "_label"); + $result['input']->autocomplete = 1; + $result['input']->dblclick = "fill_ipopcard(this);"; + $result['msg'] = $result['input']->search(); + $result['msg'] .= $result['label']->input(); + $result['input']->value = $this->av_text; + break; + } + $result['input']->table = 0; + $result['label']=$this->ad_text; + } + + $result['input']->label = $this->ad_text; + $result['input']->name = "av_text" . $this->ad_id; + if ($this->ad_id == 21 || $this->ad_id == 22 || $this->ad_id == 20 || $this->ad_id == 31) { + $result['bulle'] = Icon_Action::infobulle(21); + } + + // Warning length quickcode + if ($this->ad_id == ATTR_DEF_QUICKCODE) { + $result['bulle'] = Icon_Action::warnbulle(76); + } + + return $result; + } /** * @brief Load all the attribute of a card , it modifies the parameter $fiche. Usually called from fiche::insert * and fiche::update . In the same time, it will synchronize the attributes which the database. @@ -231,142 +372,15 @@ class Card_Property */ function input($p_fiche_def=null) { - $bulle=""; $msg=""; - $r=""; - if ($this->ad_id==ATTR_DEF_ACCOUNT) - { - $w=new IPoste("av_text".$this->ad_id); - $w->id=uniqid('accounting'); - $w->set_attribute('ipopup', 'ipop_account'); - $w->set_attribute('jrn', '0'); - $w->set_attribute('account', "av_text".$this->ad_id); - $w->dbl_click_history(); - $w->value=$this->av_text; - // account created automatically - $sql="select account_auto($p_fiche_def->id)"; - $ret_sql=$this->cn->exec_sql($sql); - $a=Database::fetch_array($ret_sql, 0); - $label=new ISpan(); - $label->name="av_text".$this->ad_id."_label"; - if ($a['account_auto']=='t') - { - $msg.=$label->input()." ". - _("Rappel: Poste créé automatiquement à partir de ") - .$p_fiche_def->class_base." "; - } - else - { - // if there is a class base in fiche_def_ref, this account will be the - // the default one - if (strlen(trim($p_fiche_def->class_base))!=0) - { - $msg.="".$label->input()." "._("Rappel: Poste par défaut sera "). - $p_fiche_def->class_base. - " ! "; - $w->value=$p_fiche_def->class_base; - } - } - $r.="".td(_("Poste Comptable"), ' class="highlight input_text" ').td($w->input().$msg).""; - return $r; - } - elseif ($this->ad_id==ATTR_DEF_TVA) - { - $w=new ITva_Popup('popup_tva'); - $w->table=1; - $w->value=$this->av_text; - } - else - { - switch ($this->ad_type) - { - case 'text': - $w=new IText(); - $w->css_size="100%"; - $w->value=$this->av_text; - break; - case 'numeric': - $w=new INum(); - $w->prec=($this->ad_extra=="")?2:$this->ad_extra; - $w->size=$this->ad_size; - $w->value=$this->av_text; - break; - case 'date': - $w=new IDate(); - $w->value=$this->av_text; - break; - case 'zone': - $w=new ITextArea(); - $w->style=' class="itextarea" style="margin:0px;width:100%"'; - $w->value=$this->av_text; - break; - case 'poste': - $w=new IPoste("av_text".$this->ad_id); - $w->set_attribute('ipopup', 'ipop_account'); - $w->set_attribute('account', "av_text".$this->ad_id); - $w->table=1; - $bulle=Icon_Action::infobulle(14); - $w->value=$this->av_text; - break; - case 'check': - $w=new InputSwitch("av_text".$this->ad_id); - $w->value=(trim($w->value)=="")?1:$w->value; - break; - case 'select': - $w=new ISelect("av_text".$this->ad_id); - $w->value=$this->cn->make_array($this->ad_extra); - $w->style='style="width:100%"'; - $w->selected=$this->av_text; - break; - case 'card': - $w=new ICard("av_text".$this->ad_id); - // filter on frd_id - $w->extra=$this->ad_extra; - $w->extra2=0; - $w->id=uniqid(); - $label=new ISpan(); - $filter=$this->ad_extra; - $w->width=$this->ad_size; - $w->extra=$filter; - $w->extra2=0; - $w->limit=6; - $label->name="av_text".$this->ad_id.$w->id."_label"; - $w->set_attribute('ipopup', 'ipopcard'); - $w->set_attribute('typecard', $this->ad_extra); - $w->set_attribute('inp', $w->id); - $w->set_attribute('label', "av_text".$this->ad_id.$w->id."_label"); - $w->autocomplete=1; - $w->dblclick="fill_ipopcard(this);"; - $msg=$w->search(); - $msg.=$label->input(); - $w->value=$this->av_text; - break; - } - $w->table=0; - } + $result=$this->build_input($p_fiche_def); - $w->label=$this->ad_text; - $w->name="av_text".$this->ad_id; - if ($this->ad_id==21||$this->ad_id==22||$this->ad_id==20||$this->ad_id==31) - { - $bulle=Icon_Action::infobulle(21); - } - // Warning length quickcode - if ($this->ad_id==ATTR_DEF_QUICKCODE) - { - $bulle=Icon_Action::warnbulle(76); - } - if ($this->ad_id==ATTR_DEF_NAME||$this->ad_id==ATTR_DEF_QUICKCODE) - { - $class=" input_text highlight info"; - } - else - { - $class="input_text"; - } $url=''.$this->add_link($this->ad_id,$this->av_text).''; - $r.="".td(_($w->label)." $bulle", ' class="'.$class.'" ').td($w->input()." $msg"). + $r="". + td(_($result["label"]). $result['bulle'], + ' class="'.$result['class'].'" '). + td($result["input"]->input().$result["msg"]). $url. " "; return $r; @@ -653,4 +667,18 @@ class Card_Property return $url; } + /** + * @brief return the Property of an array of property with the right ad_id + * @param int $attr_def_id the search attr_def_id + * @param array $a_property array of Card_Property + * @return mixed|null + */ + static function findProperty($attr_def_id, $a_property) + { + $nb = count($a_property); + for ($i = 0; $i < $nb; $i++) { + if ($a_property[$i]->get_ad_id() == $attr_def_id) return $a_property[$i]; + } + return null; + } }