id = intval($id); $this->fetch_data(); } protected function fetch_data(){ if(!$this->id){ $this->name = ""; $this->classement= 0; $this->comment = ""; $this->used_datasource = ""; }else{ $query = "select editions_state_name, editions_state_used_datasource, editions_state_comment, editions_state_num_classement,editions_state_fieldslist, editions_state_fieldsparams from editions_states where id_editions_state = ".$this->id; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $row = pmb_mysql_fetch_object($result); $this->name = $row->editions_state_name; $this->used_datasource = $row->editions_state_used_datasource; $this->comment = $row->editions_state_comment; $this->classement = $row->editions_state_num_classement; $this->state_fields_list = unserialize($row->editions_state_fieldslist); $this->state_fields_params = unserialize($row->editions_state_fieldsparams); // $this->datasource = new $this->used_datasource(); } } $this->datasource = new editions_datasource($this->used_datasource); $this->fields = $this->datasource->get_struct_format(); $this->get_filter();//Je récupère les valeurs des filtres si besoin } public function save(){ if($this->id){ $query = "update editions_states"; $clause= " where id_editions_state = ".$this->id; }else{ $query ="insert into editions_states"; $clause= ""; } //On supprimer les informations de paramétrage pour les vues au cas ou on supprime un champ utilisé pour une vue $this->state_fields_params["view"]=array(); //on va chercher les infos des filtres, tris, groupements... $query.=" set editions_state_name = '".addslashes($this->name)."', editions_state_num_classement = '".addslashes($this->classement)."', editions_state_used_datasource = '".addslashes($this->used_datasource)."', editions_state_comment = '".addslashes($this->comment)."', editions_state_fieldslist = '".addslashes(serialize($this->state_fields_list))."', editions_state_fieldsparams = '".addslashes(serialize($this->state_fields_params))."'"; pmb_mysql_query($query.$clause); if(!$this->id){ $this->id = pmb_mysql_insert_id(); } } public function update_param_view($param){ if($this->id){ $this->state_fields_params["view"]=$param; $query = "update editions_states "; $query.=" set editions_state_fieldsparams = '".addslashes(serialize($this->state_fields_params))."'"; $clause= " where id_editions_state = ".$this->id; pmb_mysql_query($query.$clause); } } public static function delete($id){ $id = intval($id); if($id){ $query = "delete from editions_states where id_editions_state=".$id; pmb_mysql_query($query); } return true; } public function get_from_form(){ global $editions_state_name; global $editions_state_classement; global $editions_state_datasource; global $editions_state_comment; global $editions_state_fields_fields; global $editions_state_fields_content_fields; global $editions_state_filters_fields; global $editions_state_filters_content_fields; global $editions_state_orders_fields; global $editions_state_orders_content_fields; global $class_path; global $partial_submit,$action; $this->name = stripslashes($editions_state_name); $this->classement = $editions_state_classement; $this->used_datasource = $editions_state_datasource; // $this->datasource = new $this->used_datasource(); $this->datasource = new editions_datasource($this->used_datasource); $this->comment = stripslashes($editions_state_comment); $this->fields = $this->datasource->get_struct_format(); if($partial_submit == 1 || $action == "save"){// On vient de déplacer une information pour créer l'état //Je garde les valeurs $this->state_fields_list=array( 'fields' => array( 'fields' => (is_array($editions_state_fields_fields) ? $editions_state_fields_fields : array()), 'content' => (is_array($editions_state_fields_content_fields) ? $editions_state_fields_content_fields : array()) ), 'filters' => array( 'fields' => (is_array($editions_state_filters_fields) ? $editions_state_filters_fields : array()), 'content' => (is_array($editions_state_filters_content_fields) ? $editions_state_filters_content_fields : array()), ), 'orders' => array( 'fields' => (is_array($editions_state_orders_fields) ? $editions_state_orders_fields : array()), 'content' => (is_array($editions_state_orders_content_fields) ? $editions_state_orders_content_fields : array()), ) ); $this->get_filter(); $this->state_fields_params['orders']=array();//on initialise foreach($this->state_fields_list['orders']['content'] as $field){ $order = new editions_state_order($this->fields[$field]); $this->state_fields_params['orders'][$field] = $order->get_params(); } }else{//$partial_submit == 2 On vient de changer la source de données //Je réinitialise toutes les informations $this->state_fields_list=array( 'fields' => array( 'fields' => array(), 'content' => array() ), 'filters' => array( 'fields' => array(), 'content' => array(), ), 'orders' => array( 'fields' => array(), 'content' => array(), ) ); } } public function get_form(){ global $msg,$charset; global $editions_state_content_form; $content_form = $editions_state_content_form; $content_form = str_replace('!!id!!', $this->id, $content_form); $interface_form = new interface_form('editions_state_form'); if(!$this->id){ $interface_form->set_label($msg['704']); }else{ $interface_form->set_label($msg['procs_modification']); } //positionnement auto sur le dernier onglet, ca marche tout seul, pas besoin de s'en soucier ! global $editionsstate_active_tab; $content_form = str_replace('!!active_tab!!', htmlentities($editionsstate_active_tab,ENT_QUOTES, $charset), $content_form); //nom $content_form = str_replace('!!name!!', htmlentities($this->name,ENT_QUOTES, $charset), $content_form); //commentaire $content_form = str_replace('!!comment!!', htmlentities($this->comment,ENT_QUOTES, $charset), $content_form); //classement $combo_clas= gen_liste ("SELECT idproc_classement,libproc_classement FROM procs_classements ORDER BY libproc_classement ", "idproc_classement", "libproc_classement", "editions_state_classement", "", $this->classement, 0, $msg['proc_clas_aucun'],0, $msg['proc_clas_aucun']) ; $content_form = str_replace('!!classement!!', $combo_clas, $content_form); //source de données $datasource_options = " "; } // // $datasource_options.=" // "; $content_form = str_replace('!!datasource_options!!', $datasource_options, $content_form); if((isset($this->state_fields_list['filters']['content']) && count($this->state_fields_list['filters']['content'])) || (isset($this->state_fields_list['fields']['content']) && count($this->state_fields_list['fields']['content']))){ //J'ai commencé à créer un état je ne peux donc pas changer de source $content_form = str_replace('!!datasource_readonly!!', "disabled='disabled'", $content_form); $content_form = str_replace('', "", $content_form); }else{ $content_form = str_replace('!!datasource_readonly!!', "", $content_form); } if(!$this->used_datasource){ $content_form = str_replace("!!tabs!!","",$content_form); }else{ $content_form = str_replace("!!tabs!!",$this->get_tabs_form(),$content_form); } $interface_form->set_object_id($this->id) ->set_confirm_delete_msg($msg['editions_state_confirm_delete']) ->set_content_form($content_form) ->set_table_name('editions_states') ->set_field_focus('editions_state_name'); return $interface_form->get_display(); } public function get_tabs_form(){ global $msg,$charset; global $class_path; global $editions_state_form_tabs; $form = $editions_state_form_tabs; if(count($this->state_fields_list['fields']['fields']) ==0 && count($this->state_fields_list['fields']['content']) == 0){ foreach($this->fields as $id => $field){ $this->state_fields_list['fields']['fields'][] = $id; $this->state_fields_list['filters']['fields'][] = $id; } }else{ $nb_champ=count($this->state_fields_list['fields']['fields']) + count($this->state_fields_list['fields']['content']); if($nb_champ < count($this->fields)){ //On a ajouté des champs dans le fichier datasources.xml foreach($this->fields as $id => $field){ if(!in_array($id,$this->state_fields_list['fields']['fields']) && !in_array($id,$this->state_fields_list['fields']['content'])){ $this->state_fields_list['fields']['fields'][] = $id; $this->state_fields_list['filters']['fields'][] = $id; } } }elseif($nb_champ > count($this->fields)){ //On a enlevé des champs dans le fichier datasources.xml foreach($this->state_fields_list['fields']['fields'] as $key => $field){ if(!($this->fields[$field])){ unset($this->state_fields_list['fields']['fields'][$key]); $key_fiters=array_search ($field, $this->state_fields_list['filters']['fields']); if( $key_fiters !== false){ unset($this->state_fields_list['filters']['fields'][$key_fiters]); } $key_fiters=array_search ($field, $this->state_fields_list['filters']['content']); if( $key_fiters !== false){ unset($this->state_fields_list['filters']['content'][$key_fiters]); } } } foreach($this->state_fields_list['fields']['content'] as $key => $field){ if(!($this->fields[$field])){ unset($this->state_fields_list['fields']['content'][$key]); $key_fiters=array_search ($field, $this->state_fields_list['filters']['fields']); if( $key_fiters !== false){ unset($this->state_fields_list['filters']['fields'][$key_fiters]); } $key_fiters=array_search ($field, $this->state_fields_list['filters']['content']); if( $key_fiters !== false){ unset($this->state_fields_list['filters']['content'][$key_fiters]); } $key_fiters=array_search ($field, $this->state_fields_list['orders']['fields']); if( $key_fiters !== false){ unset($this->state_fields_list['orders']['fields'][$key_fiters]); } $key_fiters=array_search ($field, $this->state_fields_list['orders']['content']); if( $key_fiters !== false){ unset($this->state_fields_list['orders']['content'][$key_fiters]); } } } } } //contruction de la liste des champs pour l'onglets champs $form = str_replace("!!fields_fields_list!!",$this->gen_tab_list('fields'),$form); $form = str_replace("!!fields_fields_content!!",$this->gen_tab_content('fields'),$form); //contruction de la liste des champs pour l'onglets filtres $form = str_replace("!!filters_fields_list!!",$this->gen_tab_list('filters'),$form); $form = str_replace("!!filters_fields_content!!",$this->gen_tab_content('filters'),$form); //contruction de la liste des champs pour l'onglets tri $form = str_replace("!!order_fields_list!!",$this->gen_tab_list('orders'),$form); $form = str_replace("!!order_fields_content!!",$this->gen_tab_content('orders'),$form); return $form; } protected function _compare_fields($a, $b) { return strcmp(convert_diacrit($this->fields[$a]['label']), convert_diacrit($this->fields[$b]['label'])); } protected function _sort_tab_fields($tab) { usort($this->state_fields_list[$tab]['fields'], array($this, "_compare_fields")); } public function gen_tab_list($tab){ $list = ""; $this->_sort_tab_fields($tab); foreach($this->state_fields_list[$tab]['fields'] as $field){ switch($tab){ case "fields" : $id = $this->fields[$field]['id']; break; case "filters" : $id = "filter_".$this->fields[$field]['id']; break; case "orders" : $id = "crit_".$this->fields[$field]['id']; break; } $list.="