* SPDX-License-Identifier: AGPL-3.0-only ************************************/ include_once('include/utils/utils.php'); require_once('modules/Picklistmulti/Picklistmulti_utils.php'); class Picklistmulti { var $module; var $module_name; var $module_list; var $field; var $field_name; var $field_list; var $languages; var $start; var $limit; var $has_limit; var $total; var $uitype = Array(1015); //carica tutti i campi Picklistmultilinguaggio per tutti i moduli function __construct($loadval = false,$module = '',$field = '',$limits=false){ $this->loadval = $loadval; $this->module_name = $module; $this->field_name = $field; $this->setLang(); $this->setModules(); $this->setFields(); $this->setLimit($limits); $this->setFieldValues(); } function setLimit($limits){ if (is_array($limits)){ $this->start = $limits[0]; $this->limit = $limits[1]; $this->has_limit = true; } else $this->has_limit = false; } function setLang(){ $this->languages=get_active_languages(); foreach ($this->languages as $key=>$arr){ $this->columns[$arr['prefix']] = Array('label'=>$arr['label'],'visible'=>1); } } function setModules(){ // if ($this->module_name !="") return; global $adb,$table_prefix; // Ignore disabled modules. $query = 'select distinct '.$table_prefix.'_field.fieldname,'.$table_prefix.'_field.tabid,'.$table_prefix.'_tab.tablabel, '.$table_prefix.'_tab.name as tabname,uitype from '.$table_prefix.'_field inner join '.$table_prefix.'_tab on '.$table_prefix.'_tab.tabid='.$table_prefix.'_field.tabid where uitype IN ('.generateQuestionMarks($this->uitype).') and '.$table_prefix.'_field.tabid != 29 and '.$table_prefix.'_tab.presence <> 1 and '.$table_prefix.'_field.presence in (0,2) order by '.$table_prefix.'_field.tabid ASC'; // END $result = $adb->pquery($query, array($this->uitype)); while($row = $adb->fetch_array($result)){ $modules[$row['tablabel']] = $row['tabname']; } if (is_array($modules)) $modules_keys = array_keys($modules); //crmv@22582 if ($this->module_name == '') $this->module_name = $modules_keys[0]; $this->module_list = $modules; } function setFields(){ if ($this->module_name =="") return; global $adb, $log,$table_prefix; $user_fld = Array(); $tabid = getTabid($this->module_name); //crmv@18156 crmv@146061 $query="select ".$table_prefix."_field.fieldlabel,".$table_prefix."_field.columnname,".$table_prefix."_field.fieldname, ".$table_prefix."_field.uitype FROM ".$table_prefix."_field left join ".$table_prefix."_picklist on ".$table_prefix."_field.fieldname = ".$table_prefix."_picklist.name where ".$table_prefix."_field.tabid=? and ".$table_prefix."_field.uitype in (".generateQuestionMarks($this->uitype).") and ".$table_prefix."_field.presence in (0,2) ORDER BY ".$table_prefix."_picklist.picklistid ASC"; //crmv@18156e crmv@146061e $result = $adb->pquery($query, array($tabid,$this->uitype)); // echo "
".$adb->convert2Sql($query,$adb->flatten_array(array($tabid,$this->uitype)));die; while ($row=$adb->fetchByAssoc($result)){ if ($this->field_name == '') $this->field_name = $row['fieldname']; if ($this->field_name == $row['fieldname']) { $this->field = array(); $this->field['fieldlabel'] = $row["fieldlabel"]; $this->field['columnname'] = $row["columnname"]; $this->field['fieldname'] = $row["fieldname"]; $this->field['uitype'] = $row["uitype"]; $this->field['columns'] = $this->getColumns(); } //crmv@18156 $this->field_list[$row['columnname']] = getTranslatedString($row["fieldlabel"],$this->module_name); //crmv@18156 end } $this->field_label = $this->field['fieldlabel']; } function getColumns($translate=false){ $arr[] = 'Code_system'; $arr[] = 'Code'; foreach ($this->languages as $key=>$lang) if ($translate) $arr[] = $lang['label']; else $arr[] = $lang['prefix']; return $arr; } function getColumnsjson(){ $i = 0; $arr[$i]['name'] = 'code_system'; $arr[$i]['index'] = 'code_system'; $arr[$i]['hidden'] = 'true'; $arr[$i]['sortable'] = 'false'; $i++; $arr[$i]['name'] = 'code'; $arr[$i]['index'] = 'code'; $arr[$i]['sortable'] = 'false'; $arr[$i]['editable'] = 'true'; $arr[$i]['editrules'] = 'required:true,custom:true,custom_func:checkcode'; $arr[$i]['formoptions'] = "elmprefix:'(*)'"; $i++; foreach ($this->languages as $key=>$lang){ $arr[$i]['name'] = $lang['prefix']; $arr[$i]['index'] = $lang['prefix']; $arr[$i]['sortable'] = 'false'; $arr[$i]['edittype'] = 'textarea'; $arr[$i]['editable'] = 'true'; $arr[$i]['editoptions'] = 'size:"20"'; // crmv@89143 $i++; } return $arr; } function getColumnNames(){ foreach ($this->getColumns(true) as $column){ $arr[] = "'".getTranslatedString($column,'Picklistmulti')."'"; } return implode(",",$arr); } function getPicklistValues(){ global $adb; $var = array(); //crmv@136987 $sql = "SELECT code_system,code,field FROM tbl_s_picklist_language WHERE field = ? GROUP BY code_system,code,field"; $res = $adb->pquery($sql,Array($this->field_name)); if ($res){ $this->total = $adb->num_rows($res); } //crmv@136987e if ($this->has_limit){ $params = Array($this->field); $res = $adb->limitpQuery($sql,$this->start,$this->limit,$params); } if ($res){ $i=0; while($row=$adb->fetchByAssoc($res,-1,false)){ $arr[$i]['code_system'] = $row['code_system']; $arr[$i]['code'] = $row['code']; foreach ($this->languages as $key=>$lang){ $arr[$i][$lang['prefix']] = self::getTranslatedPicklist($row['code'],$this->field,$lang['prefix']); } $i++; } } return $arr; } function setFieldValues(){ if (!$this->loadval) return; global $adb; //crmv@136987 $sql = "SELECT code_system,code,field FROM tbl_s_picklist_language WHERE field = ? GROUP BY code_system,code,field"; $res = $adb->pquery($sql,Array($this->field_name)); if ($res){ $this->total = $adb->num_rows($res); } if ($this->has_limit){ $params = Array($this->field_name); $res = $adb->limitpQuery($sql,$this->start,$this->limit,$params); } //crmv@136987e if ($res){ $i=0; while($row=$adb->fetchByAssoc($res,-1,false)){ $arr[$i]['code_system'] = $row['code_system']; $arr[$i]['code'] = $row['code']; foreach ($this->languages as $key=>$lang){ $arr[$i][$lang['prefix']] = self::getTranslatedPicklist($row['code'],$this->field_name,$lang['prefix']); } $i++; } } $this->field['value'] = $arr; } public function getTranslatedPicklist($id = false,$fieldname,$language=false){ global $adb,$current_language; if (!$language) $language = $current_language; $sql = "select code,value from tbl_s_picklist_language where "; if ($id !== false) $sql .= " tbl_s_picklist_language.code = ? and "; $sql.=" tbl_s_picklist_language.field = ? and tbl_s_picklist_language.language = ?"; if ($id !== false) $params = Array($id,$fieldname,$language); else { // $sql.=" order by value "; $params = Array($fieldname,$language); } // echo "
".$adb->convert2Sql($sql,$adb->flatten_array($params)); $res = $adb->pquery($sql,$params); if ($res){ while ($row = $adb->fetchByAssoc($res,-1,false)){ $values[trim($row['code'])] = $row['value']; // crmv@36205 - warning, here ending spaces are packed together if ($id !== false) return $row['value']; //crmv@32334 } } return $values; } function is_empty(){ if (!is_array($this->field) || count($this->field) == 0) return 1; return 0; } function editline($arr){ global $adb, $metaLogs,$table_prefix; // crmv@49398 crmv@136231 //crmv@136231 //get previous value $sql_prev = "SELECT code FROM tbl_s_picklist_language WHERE code_system = ? AND field = ? GROUP BY code"; $res = $adb->pquery($sql_prev,Array($arr['code_system'],$this->field_name)); if ($res){ $prev_value = $adb->query_result($res,0,'code'); } //crmv@136231e //cancel all previous values // if (!$this->control_code_unique($arr['code'])) return 'LBL_CODE_NOT_UNIQUE'; $sql = "delete from tbl_s_picklist_language where code_system = ? and field = ?"; $params = Array($arr['code_system'],$this->field_name); // echo "
".$adb->convert2Sql($sql,$adb->flatten_array($params)); $adb->pquery($sql,$params); //insert all languages foreach ($this->languages as $language){ $params = Array($arr['code_system'],$arr['code'],$this->field_name,$language['prefix'],$arr[$language['prefix']]); $sql = "insert into tbl_s_picklist_language (code_system,code,field,language,value) values (".generateQuestionMarks($params).")"; // echo "
".$adb->convert2Sql($sql,$adb->flatten_array($params)); $adb->pquery($sql,$params); } //crmv@136231 $qry="SELECT tablename,columnname FROM ".$table_prefix."_field WHERE fieldname=? AND presence IN (0,2)"; $result = $adb->pquery($qry, array($this->field_name)); $num = $adb->num_rows($result); if($num > 0){ for($n=0;$n<$num;$n++){ $table_name = $adb->query_result_no_html($result,$n,'tablename'); $columnName = $adb->query_result_no_html($result,$n,'columnname'); $sql_update = "UPDATE $table_name SET $columnName=? WHERE $columnName=?"; $adb->pquery($sql_update, array($arr['code'], $prev_value)); } } //crmv@136231e if ($metaLogs) $metaLogs->log($metaLogs::OPERATION_EDITFIELD, getFieldid(getTabid($this->module_name), $this->field_name)); // crmv@49398 return true; } function addline($arr){ global $adb, $metaLogs; // crmv@49398 // if (!$this->control_code_unique($arr['code'])) return 'LBL_CODE_NOT_UNIQUE'; //take unique id $id=$adb->getUniqueID("tbl_s_picklist_language"); //insert all languages foreach ($this->languages as $language){ $params = Array($id,$arr['code'],$this->field_name,$language['prefix'],$arr[$language['prefix']]); $sql = "insert into tbl_s_picklist_language (code_system,code,field,language,value) values (".generateQuestionMarks($params).")"; // echo "
".$adb->convert2Sql($sql,$adb->flatten_array($params)); $adb->pquery($sql,$params); } if ($metaLogs) $metaLogs->log($metaLogs::OPERATION_EDITFIELD, getFieldid(getTabid($this->module_name), $this->field_name)); // crmv@49398 return true; } function removeline($arr){ global $adb, $metaLogs; // crmv@49398 //remove all about that id $params = $arr['code_system']; $sql="delete from tbl_s_picklist_language where code_system in (".generateQuestionMarks($params).") and field = ?"; $params[] = $this->field_name; $adb->pquery($sql,$params); if ($metaLogs) $metaLogs->log($metaLogs::OPERATION_EDITFIELD, getFieldid(getTabid($this->module_name), $this->field_name)); // crmv@49398 return true; } function control_code_unique($code,$code_system,$mode){ global $adb; switch ($mode){ case 'edit':{ $sql = "select count(*) as cnt from tbl_s_picklist_language where field = ? and code = ? and code_system <> ?"; $params = Array($this->field_name,$code,$code_system); break; } case 'add':{ $sql = "select count(*) as cnt from tbl_s_picklist_language where field = ? and code = ?"; $params = Array($this->field_name,$code); break; } } $res = $adb->pquery($sql,$params); if ($res && $adb->num_rows($res) == 1){ if ($adb->query_result($res,0,'cnt') > 1 ) return 'LBL_CODE_NOT_UNIQUE'; else return true; } else return 'LBL_CODE_NOT_UNIQUE'; } function create_picklist($module,$label){ include_once('vtlib/Vtecrm/Menu.php');//crmv@207871 include_once('vtlib/Vtecrm/Module.php');//crmv@207871 //in progress! } function get_search_values($field,$valueArray,$operator){ global $current_language,$adb; $found = false; $values = array(); $params = array(); $ssql = "select code from tbl_s_picklist_language where "; $cnt = 0; //crmv@31346 foreach ($valueArray as $value){ switch($operator) { case 'e': case 'n': $sqlOperator = "="; break; case 's': $sqlOperator = "LIKE"; $value = "$value%"; break; case 'ew': $sqlOperator = "LIKE"; $value = "%$value"; break; case 'c': case 'k': $sqlOperator = "LIKE"; $value = "%$value%"; break; case 'l': $sqlOperator = "<"; break; case 'g': $sqlOperator = ">"; break; case 'm': $sqlOperator = "<="; break; case 'h': $sqlOperator = ">="; break; } $value = $adb->sql_escape_string($value); if ($cnt > 0) $ssql .= "or "; else $ssql .= "("; $ssql .= " value $sqlOperator ? "; array_push($params,$value); $cnt++; } if ($cnt > 0) $ssql .= ")"; $ssql.=" and field =? and language = ?"; array_push($params,$field,$current_language); // echo $adb->convert2Sql($ssql,$adb->flatten_array($params));die; $res=$adb->pquery($ssql,$params); if ($res && $adb->num_rows($res) > 0){ while ($row = $adb->fetchByAssoc($res)) array_push($values,$row['code']); $found = true; } if (!$found) return Array($valueArray,$operator); //cmrv@33988 else{ switch($operator) { case 'k': $newsqlOperator = "n"; break; case 's': case 'ew': case 'c': case 'l': case 'g': case 'm': case 'h': $newsqlOperator = "e"; break; default: $newsqlOperator = $operator; break; } return Array(array_unique($adb->flatten_array($values)),$newsqlOperator); } //crmv@31346 e } } ?>