. */ /** * @brief Action : Process a document * * Open a modal box to displays the process form, make the form checks and loads the result in database. Used by the core (manage_action.php page). * * @file * @author Claire Figueras * @date $date$ * @version $Revision$ * @ingroup apps */ /** * $confirm bool false */ $confirm = false; /** * $etapes array Contains 2 etaps : form and status (order matters) */ $etapes = array('form'); /** * $frm_width Width of the modal (empty) */ $frm_width=''; /** * $frm_height Height of the modal (empty) */ $frm_height = ''; /** * $mode_form Mode of the modal : fullscreen */ $mode_form = 'fullscreen'; include('apps'.DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR.'definition_mail_categories.php'); /** * Gets the folder data for a given document * * @param $coll_id string Collection identifier * @param $res_id string Resource identifier * @return Array Folder data (market + project) **/ function get_folder_data($coll_id, $res_id) { require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_security.php"); $sec =new security(); $view = $sec->retrieve_view_from_coll_id($coll_id); if(empty($view)) { $view = $sec->retrieve_table_from_coll($coll_id); } $db = new dbquery(); $db->connect(); $market = ''; $project = ''; $db->query("select folders_system_id, folder_name, fold_parent_id, fold_subject, folder_level from ".$view." where res_id = ".$res_id); $res = $db->fetch_object(); if($res->folder_level == 2) { $market = $res->folder_name.', '.$res->fold_subject.' ('.$res->folders_system_id.')'; $parent_id = $res->fold_parent_id; $db->query("select folder_name, parent_id, subject from ".$_SESSION['tablename']['fold_folders']." where folders_system_id = ".$parent_id); if($db->nb_result() == 1) { $res = $db->fetch_object(); $project = $res->folder_name.', '.$res->fold_subject.' ('.$parent_id.')'; } } else if($res->folder_level == 1) { $project = $res->folder_name.', '.$res->fold_subject.' ('.$res->folders_system_id.')'; } return array('project' => $project, 'market' => $market); } /** * Returns the indexing form text * * @param $values Array Contains the res_id of the document to process * @param $path_manage_action String Path to the PHP file called in Ajax * @param $id_action String Action identifier * @param $table String Table * @param $module String Origin of the action * @param $coll_id String Collection identifier * @param $mode String Action mode 'mass' or 'page' * @return String The form content text **/ function get_form_txt($values, $path_manage_action, $id_action, $table, $module, $coll_id, $mode ) { //print_r($_SESSION['current_basket']); if (preg_match("/MSIE 6.0/", $_SERVER["HTTP_USER_AGENT"])) { $browser_ie = true; $display_value = 'block'; } elseif(preg_match('/msie/i', $_SERVER["HTTP_USER_AGENT"]) && !preg_match('/opera/i', $_SERVER["HTTP_USER_AGENT"]) ) { $browser_ie = true; $display_value = 'block'; } else { $browser_ie = false; $display_value = 'table-row'; } $_SESSION['req'] = "action"; $res_id = $values[0]; $frm_str = ''; require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_security.php"); require_once("modules".DIRECTORY_SEPARATOR."basket".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_modules_tools.php"); require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_request.php"); require_once("apps".DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_types.php"); require_once("apps".DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_indexing_searching_app.php"); require_once("apps".DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_chrono.php"); $type = new types(); $sec =new security(); $core_tools =new core_tools(); $doctypes = $type->getArrayTypes($coll_id); $b = new basket(); $is = new indexing_searching_app(); $cr = new chrono(); $data = array(); $params_data = array('show_market' => false, 'show_project' => false); $data = get_general_data($coll_id, $res_id, 'full', $params_data); $process_data = $is->get_process_data($coll_id, $res_id); $chrono_number = $cr->get_chrono_number($res_id, $sec->retrieve_view_from_table($table)); $_SESSION['doc_id'] = $res_id; $indexes = array(); if(isset($data['type_id'])) { $indexes = $type->get_indexes($data['type_id']['value'], $coll_id); $fields = 'res_id'; foreach(array_keys($indexes) as $key) { $fields .= ','.$key; } $b->connect(); $b->query("select ".$fields." from ".$table." where res_id = ".$res_id); $values_fields = $b->fetch_object(); //print_r($indexes); } // to activate locking decomment these lines /*if($b->reserve_doc( $_SESSION['user']['UserId'], $res_id, $coll_id) == false ) { $frm_str = '
'; $frm_str .= '

'._DOC_NUM." ".$res_id ; $frm_str .= '

'; $frm_str .= '
'._DOC_ALREADY_RSV.'
'; $frm_str .= '
'; $frm_str .= '
'; } else {*/ $frm_str = '
'; $frm_str .= '

'._PROCESS._DOC_NUM." ".$res_id ; $frm_str .= '

'; $frm_str .= '
'; $frm_str .= '
'; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= '

'; $frm_str .= ' '._GENERAL_INFO.' :'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= '
'; $frm_str .= '
'; $frm_str .= ''; // Displays the document indexes foreach(array_keys($data) as $key) { $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; } if ($chrono_number <> '') { $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; } if(count($indexes) > 0) { foreach(array_keys($indexes) as $key) { $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; $frm_str .= ''; } } $frm_str .= '
'.$data[$key]['label'].' :'; if($data[$key]['display'] == 'textinput') { $frm_str .= ''; if(isset($data[$key]['addon'])) { $frm_str .= $data[$key]['addon']; } } elseif($data[$key]['display'] == 'textarea') { $frm_str .= ' '; if(isset($data[$key]['addon'])) { $frm_str .= $data[$key]['addon']; } //$frm_str .= ''.$data[$key]['show_value'].''; } $frm_str .= '
'._CHRONO_NUMBER.' :'; $frm_str .= ''; $frm_str .= '
'.$indexes[$key]['label'].' :'; $frm_str .= '$key.'" '; } else { $val = ''; for($i=0; count($indexes[$key]['values']); $i++) { if($values_fields->$key == $indexes[$key]['values'][$i]['id']) { $val = $indexes[$key]['values'][$i]['label']; break; } } $frm_str .= ' value="'.$val.'" '; } $frm_str .= ' />'; $frm_str .= '
'; $frm_str .= '
'; $frm_str .= '

'; if($core_tools->is_module_loaded('cases')) { require_once("modules".DIRECTORY_SEPARATOR."cases".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR.'class_modules_tools.php'); $cases = new cases(); $case_id = $cases->get_case_id($res_id); if ($case_id <> false) $case_properties = $cases->get_case_info($case_id); else $case_properties = ''; $frm_str .= '

'; $frm_str .= ' '._CASE.' :'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= ''; } if($core_tools->is_module_loaded('entities')) { // Displays the diffusion list (only copies) require_once("modules".DIRECTORY_SEPARATOR."entities".DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_manage_listdiff.php'); $diff_list = new diffusion_list(); $_SESSION['process']['diff_list'] = $diff_list->get_listinstance($res_id); $frm_str .= '

'; $frm_str .= ' '._DIFF_LIST_COPY.' :'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= ''; } if($core_tools->is_module_loaded('folder')) { // Displays the folder data $arr_tmp = get_folder_data($coll_id, $res_id); $project = $arr_tmp['project']; $market = $arr_tmp['market']; $frm_str .= '

'; $frm_str .= ' '._FOLDER_ATTACH.' :'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= ''; $frm_str .=''; } $frm_str .= '

'; $frm_str .= ' '. _DOC_HISTORY.' :'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= ''; if($core_tools->is_module_loaded('notes')) { // Displays the notes $select_notes[$_SESSION['tablename']['users']] = array(); array_push($select_notes[$_SESSION['tablename']['users']],"user_id","lastname","firstname"); $select_notes[$_SESSION['tablename']['not_notes']] = array(); array_push($select_notes[$_SESSION['tablename']['not_notes']],"id", "date_note", "note_text", "user_id"); $where_notes = " identifier = ".$res_id." "; $request_notes = new request; $tab_notes=$request_notes->select($select_notes,$where_notes,"order by ".$_SESSION['tablename']['not_notes'].".date_note desc",$_SESSION['config']['databasetype'], "500", true,$_SESSION['tablename']['not_notes'], $_SESSION['tablename']['users'], "user_id" ); $frm_str .= '

'; $frm_str .= ' '._NOTES." (".count($tab_notes).")".' :'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= ''; } // Displays the process data $nb_attach = 0; if($core_tools->is_module_loaded('attachments')) { $req = new request; $req->connect(); $req->query("select res_id from ".$_SESSION['tablename']['attach_res_attachments']." where status <> 'DEL' and res_id_master = ".$res_id); if($req->nb_result() > 0) { $nb_attach = $req->nb_result(); } } $frm_str .= '

'; $frm_str .= ' '._DONE_ANSWERS.' ('.$nb_attach .'):'; $frm_str .= ' '; $frm_str .= '

'; $frm_str .= '
'; $frm_str .= '
'; $frm_str .= '

'; $frm_str .= ''._ACTIONS.' : '; $actions = $b->get_actions_from_current_basket($res_id, $coll_id, 'PAGE_USE'); if(count($actions) > 0) { $frm_str .=' '; $frm_str .= ' '; } $frm_str .= ''; $frm_str .= '

'; $frm_str .= '
'; $frm_str .= '
'; $frm_str .= ''; $frm_str .= '
'; $frm_str .= ''; $frm_str .= '
'; $frm_str .= ''; //} return addslashes($frm_str); } /** * Checks the action form * * @param $form_id String Identifier of the form to check * @param $values Array Values of the form * @return Bool true if no error, false otherwise **/ function check_form($form_id,$values) { $check = false; $other_checked = false; $other_txt = ''; $market = ''; $project = ''; $core = new core_tools(); // print_r($values); for($i=0; $i html_entity_decode( '['._DEFINE.']', ENT_NOQUOTES, 'UTF-8')) { $other_txt = $values[$i]['VALUE']; } if($values[$i]['ID'] == "market" ) { $market = $values[$i]['VALUE']; } if($values[$i]['ID'] == "project" ) { $project = $values[$i]['VALUE']; } if($values[$i]['ID'] == "coll_id" ) { $coll_id = $values[$i]['VALUE']; } if($values[$i]['ID'] == "res_id" ) { $res_id = $values[$i]['VALUE']; } } if($core->is_module_loaded('folder')) { $db = new dbquery(); $db->connect(); $project_id = ''; $market_id = ''; /*if(empty($market)) { $_SESSION['action_error'] = _MARKET.' '._IS_EMPTY; return false; }*/ if(!empty($market)) { if(!preg_match('/\([0-9]+\)$/', $market)) { $_SESSION['action_error'] = _MARKET." "._WRONG_FORMAT.""; return false; } $market_id = str_replace(')', '', substr($market, strrpos($market,'(')+1)); $db->query("select folders_system_id from ".$_SESSION['tablename']['fold_folders']." where folders_system_id = ".$market_id); if($db->nb_result() == 0) { $_SESSION['action_error'] = _MARKET.' '.$market_id.' '._UNKNOWN; return false; } } /* if(empty($project)) { $_SESSION['action_error'] = _PROJECT.' '._IS_EMPTY; return false; } */ if(!empty($project)) { if(!preg_match('/\([0-9]+\)$/', $project)) { $_SESSION['action_error'] = _PROJECT." "._WRONG_FORMAT.""; return false; } $project_id = str_replace(')', '', substr($project, strrpos($project,'(')+1)); $db->query("select folders_system_id from ".$_SESSION['tablename']['fold_folders']." where folders_system_id = ".$project_id); if($db->nb_result() == 0) { $_SESSION['action_error'] = _PROJECT.' '.$project_id.' '._UNKNOWN; return false; } } if(!empty($project_id) && !empty($market_id)) { $db->query("select folders_system_id from ".$_SESSION['tablename']['fold_folders']." where folders_system_id = ".$market_id." and parent_id = ".$project_id); if($db->nb_result() == 0) { $_SESSION['action_error'] = _INCOMPATIBILITY_MARKET_PROJECT; return false; } } if(!empty($res_id) && !empty($coll_id) && (!empty($project_id) || !empty($market_id))) { require_once('core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_security.php'); $sec = new security(); $table = $sec->retrieve_table_from_coll($coll_id); if(empty($table)) { $_SESSION['action_error'] .= _COLLECTION.' '._UNKNOWN; return false; } $db->query("select type_id from ".$table." where res_id = ".$res_id ); $res = $db->fetch_object(); $type_id = $res->type_id; $foldertype_id = ''; if(!empty($market_id)) { $db->query("select foldertype_id from ".$_SESSION['tablename']['fold_folders']." where folders_system_id = ".$market_id); } else //!empty($project_id) { $db->query("select foldertype_id from ".$_SESSION['tablename']['fold_folders']." where folders_system_id = ".$project_id); } $res = $db->fetch_object(); $foldertype_id = $res->foldertype_id; $db->query("select fdl.foldertype_id from ".$_SESSION['tablename']['fold_foldertypes_doctypes_level1']." fdl, ".$_SESSION['tablename']['doctypes']." d where d.doctypes_first_level_id = fdl.doctypes_first_level_id and fdl.foldertype_id = ".$foldertype_id." and d.type_id = ".$type_id); if($db->nb_result() == 0) { $_SESSION['action_error'] .= _ERROR_COMPATIBILITY_FOLDER; return false; } } } if($other_checked && $other_txt == '') { $_SESSION['action_error'] = _MUST_DEFINE_ANSWER_TYPE; return false; } if($check == false) { $_SESSION['action_error'] = _MUST_CHECK_ONE_BOX; } return $check; } /** * Action of the form : loads the index in the db * * @param $arr_id Array Not used here * @param $history String Log the action in history table or not * @param $id_action String Action identifier * @param $label_action String Action label * @param $status String Not used here * @param $coll_id String Collection identifier * @param $table String Table * @param $values_form String Values of the form to load * @return false or an array * $data['result'] : res_id of the new file followed by # * $data['history_msg'] : Log complement (empty by default) **/ function manage_form($arr_id, $history, $id_action, $label_action, $status, $coll_id, $table, $values_form ) { if(empty($values_form) || count($arr_id) < 1 || empty($coll_id)) { return false; } //require_once("core/class/class_db.php"); require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_security.php"); $sec =new security(); $db = new dbquery(); $core = new core_tools(); $db->connect(); $res_table = $sec->retrieve_table_from_coll($coll_id); $ind = $sec->get_ind_collection($coll_id); $table = $_SESSION['collections'][$ind]['extensions'][0]; $simple_mail = '0'; $AR_mail = '0'; $contact = '0'; $email = '0'; $fax = '0'; $other = '0'; $no_answer = '0'; $other_txt = ''; $process_notes = ''; $project = ''; $market = ''; for($j=0; $j html_entity_decode( '['._DEFINE.']', ENT_NOQUOTES, 'UTF-8')) { $other_txt = $values_form[$j]['VALUE']; } if($values_form[$j]['ID'] == "process_notes" ) { $process_notes = $values_form[$j]['VALUE']; } if($values_form[$j]['ID'] == "market" ) { $market = $values_form[$j]['VALUE']; } if($values_form[$j]['ID'] == "project" ) { $project = $values_form[$j]['VALUE']; } } if($no_answer == '1') { $bitmask = '000000'; } else { $bitmask = $other.$fax.$email.$contact.$AR_mail.$simple_mail; } if($core->is_module_loaded('folder') && (!empty($market) || !empty($project))) { $folder_id = ''; $db->connect(); $db->query("select folders_system_id from ".$res_table." where res_id = ".$arr_id[0]); $res = $db->fetch_object(); $old_folder_id = $res->folders_system_id; if(!empty($market)) { $folder_id = str_replace(')', '', substr($market, strrpos($market,'(')+1)); } else if(!empty($project)) { $folder_id = str_replace(')', '', substr($project, strrpos($project,'(')+1)); } if($folder_id <> $old_folder_id && $_SESSION['history']['folderup']) { require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_history.php"); $hist = new history(); $hist->add($_SESSION['tablename']['fold_folders'], $folder_id, "UP", _DOC_NUM.$arr_id[0]._ADDED_TO_FOLDER, $_SESSION['config']['databasetype'],'apps'); if(isset($old_folder_id) && !empty($old_folder_id)) { $hist->add($_SESSION['tablename']['fold_folders'], $old_folder_id, "UP", _DOC_NUM.$arr_id[0]._DELETED_FROM_FOLDER, $_SESSION['config']['databasetype'],'apps'); } } $db->connect(); $db->query("update ".$res_table." set folders_system_id =".$folder_id." where res_id =".$arr_id[0]); } if($core->is_module_loaded('entities') ) { require_once('modules'.DIRECTORY_SEPARATOR.'entities'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_manage_listdiff.php'); $list = new diffusion_list(); $params = array('mode'=> 'listinstance', 'table' => $_SESSION['tablename']['ent_listinstance'], 'coll_id' => $coll_id, 'res_id' => $arr_id[0], 'user_id' => $_SESSION['user']['UserId'], 'concat_list' => true, 'only_cc' => true); $list->load_list_db($_SESSION['process']['diff_list'], $params); //pb enchainement avec action redirect } unset($_SESSION['redirection']); $db->query("update ".$table." set answer_type_bitmask = '".$bitmask."', process_notes = '".$db->protect_string_db($process_notes)."', other_answer_desc ='".$db->protect_string_db($other_txt)."' WHERE res_id=".$arr_id[0]); return array('result' => $arr_id[0].'#', 'history_msg' => ''); } function manage_unlock($arr_id, $history, $id_action, $label_action, $status, $coll_id, $table) { $db = new dbquery(); $db->connect(); $result = ''; for($i=0; $iquery("update ".$table. " set video_user = '', video_time = 0 where res_id = ".$arr_id[$i], true); if(!$req) { $_SESSION['action_error'] = _SQL_ERROR; return false; } } return array('result' => $result, 'history_msg' => ''); } ?>