function getResourceMapping($dt_code) { $arrdt = explode(".", $dt_code); if (count($arrdt) > 2) { $dt_code = array_shift($arrdt); // $arrdt[0]; $resource_rt_id = array_shift($arrdt); //$arrdt[1]; //resource record type $resource_dt_id = $arrdt[0]; } else { return " wrong resource mapping " . $dt_code; } $dt_id = getDetailTypeLocalID($dt_code); if ($dt_id == null) { return " detail type not found " . $dt_code; } $res_rt_id = getRecTypeLocalID($resource_rt_id); if ($res_rt_id == null) { return " resource record type not recognized: " . $resource_rt_id; } $res_dt_id = getDetailTypeLocalID($resource_dt_id); if ($res_dt_id == null) { return " detail type for resource not recognized " . $resource_dt_id; } if (count($arrdt) > 1) { // next level $subres = getResourceMapping(implode(".", $arrdt)); if (is_array($subres)) { $res = array($dt_id, $res_rt_id, $subres); } else { return $subres; } } else { //pointer detail type and detail type in resource record $res = array($dt_id, $res_rt_id, $res_dt_id); } return $res; }
/** * call back function of classEmailProcessor * * @param mixed $email * @return true - then classEmailProcessor may remove this email */ function add_email_as_record($email) { global $emails_processed, $emails_failed, $attachment_size_max, $sys_sender, $ownership, $oldFileArray; $emails_processed++; $description = $email->getBody(); $rec_id = null; /* use UNIX-style lines $description=str_replace("\r\n", "\n", $description); $description=str_replace("\r", "\n", $description); */ /*****DEBUG****/ //error_log(">>>desc:".$description); $description = str_replace("\r\n", "", $description); $description = str_replace("\r", "", $description); $arr = json_decode($description, true); /*****DEBUG****/ //error_log("arr=>>>>".is_array($arr)." ".count($arr)." ".print_r($arr, true)); // assume all id (rtID, dtID, trmID and ontID) are all concept ids (dbID - ID) // get rectype concept id and convert to local id or notes // for each detail type: convert to local ids //if type is file the save Attachment first //if type is enum then convert term ID to local // for any id that doesn't convert, save info in scratch in record. if (is_array($arr) && count($arr) > 2) { //this is from export record from another heurist instance $key_file = null; //id of field type for assoc files (attachments) $arrnew = array(); //convert all global id to local id foreach ($arr as $key => $value) { $pos = strpos($key, "type:"); /*****DEBUG****/ error_log(">>>> " . (is_numeric($pos) && $pos == 0) . " " . $pos); if (is_numeric($pos) && $pos == 0) { //@todo we have to convert the content of fields as well - // since it may contain terms and references to other rectypes !!!1 $typeid = substr($key, 5); // temporay code to translate existing reports switch ($typeid) { case "2-221": case "68-221": $typeid = DT_BUG_REPORT_FILE; $oldFileArray = true; break; case "2-179": case "68-179": $typeid = DT_BUG_REPORT_NAME; break; case "2-303": case "68-303": $typeid = DT_BUG_REPORT_DESCRIPTION; break; case "2-560": case "68-560": $typeid = DT_BUG_REPORT_STEPS; break; case "2-725": case "68-725": $typeid = DT_BUG_REPORT_STATUS; break; } $newkey = getDetailTypeLocalID($typeid); /*****DEBUG****/ error_log(">>>> " . $newkey . " dettype=" . $typeid); $value = str_replace(" ", "\n", $value); if ($newkey) { $arrnew["type:" . $newkey] = $value; if ($newkey == DT_FILE_RESOURCE) { $key_file = "type:" . $newkey; } } else { $email->setErrorMessage("Can't find the local id for fieldtype #" . $typeid); $key_file = null; //avoid processing attachments break; } } else { $arrnew[$key] = $value; } } //for $rectype = $arr["rectype"]; switch ($rectype) { case "2-216": case "68-216": $rectype = RT_BUG_REPORT; } $newrectype = getRecTypeLocalID($rectype); if ($newrectype) { $arrnew["rectype"] = $newrectype; if ($rectype == RT_BUG_REPORT) { } } else { $email->setErrorMessage("Can't find the local id for rectype #" . $_POST["rectype"]); $key_file = null; //avoid processing attachments exit; } /*****DEBUG****/ //error_log("KEY FILE ".$key_file); //assosiated files if ($key_file) { $files_arr = $arrnew[$key_file]; if ($files_arr && count($files_arr) > 0) { /*****DEBUG****/ //error_log(">>>>files_arr=".print_r($files_arr[0], true)); $arrnew[$key_file] = saveAttachments($files_arr, $email); if ($arrnew[$key_file] == 0) { return false; } } else { unset($arrnew[$key_file]); } } /*$bug_descr = $arrnew["type:".DT_BUG_REPORT_DESCRIPTION]; if($bug_descr){ $bug_descr = str_replace("<br>","\n",$bug_descr); $arrnew["type:".DT_BUG_REPORT_DESCRIPTION] = $bug_descr; }*/ /*****DEBUG****/ //error_log(">>>>ARRAY=".print_r($arrnew, true)); $_POST = $arrnew; $statusKey = getDetailTypeLocalID(DT_BUG_REPORT_STATUS); /*****DEBUG****/ //error_log("status key ".print_r($statusKey,true)); if ($statusKey) { $_POST["type:" . $statusKey] = array("Received"); } } else { if (defined('RT_NOTE')) { // this is from usual email - we will add email rectype //error_log(" in emailProccesor as Note"); // liposuction away those unsightly double, triple and quadruple spaces $description = preg_replace('/ +/', ' ', $description); // trim() each line $description = preg_replace('/^[ \\t\\v\\f]+|[ \\t\\v\\f]+$/m', '', $description); $description = preg_replace('/^\\s+|\\s+$/s', '', $description); // reduce anything more than two newlines in a row $description = preg_replace("/\n\n\n+/s", "\n\n", $description); //consider this message as usual email and $_POST["save-mode"] = "new"; $_POST["notes"] = ""; $_POST["rec_url"] = ""; /* FOR EMAIL RECORD TYPE - BUT IAN REQUIRES POST "NOTE" RECORDTYPE $_POST["type:160"] = array($email->getSubject()); $_POST["type:166"] = array(date('Y-m-d H:i:s')); //date sent $_POST["type:521"] = array($email->getFrom()); //email owner $_POST["type:650"] = array($email->getFrom()); //email sender $_POST["type:651"] = array("*****@*****.**"); //recipients //$_POST["type:221"] = array(); //attachments $_POST["type:560"] = array($description); $_POST["rectype"]="183"; //EMAIL */ if (defined('DT_NAME')) { $_POST["type:" . DT_NAME] = array($email->getSubject()); } //title //$_POST["type:158"] = array("email harvesting"); //creator (recommended) if (defined('DT_DATE')) { $_POST["type:" . DT_DATE] = array(date('Y-m-d H:i:s')); } //specific date if (defined('DT_SHORT_SUMMARY')) { $_POST["type:" . DT_SHORT_SUMMARY] = array($email->getFrom() . " " . $description); } //notes $_POST["rectype"] = RT_NOTE; //NOTE $_POST["check-similar"] = "1"; $arr = saveAttachments(null, $email); if ($arr == 0) { return false; } else { if (count($arr) > 0) { if (defined('DT_FILE_RESOURCE')) { $_POST['type:' . DT_FILE_RESOURCE] = $arr; } //array_push($_POST['type:221'], $arr); /*****DEBUG****/ //error_log(">>>>>>>>>ARRAY>>".print_r($arr, true)); } } /*****DEBUG****/ //error_log(">>>>>>>>>HERE>>>>>>".print_r($_POST['type:221'],true)); } } if ($email->getErrorMessage() == null) { $_POST["owner"] = get_user_id(); $sss = $email->getFrom(); if (is_array($sys_sender)) { foreach ($sys_sender as $sys_sender_email) { if ($sys_sender_email == $sss || strpos($sss, "<" + $sys_sender_email + ">") >= 0) { $_POST["owner"] = $ownership; break; } } } $_POST["visibility"] = 'hidden'; /*****DEBUG****/ //error_log(">>>>before insert POST=".print_r($_POST, true)); $updated = insertRecord($_POST['rectype']); //from saveRecordDetails.php if ($updated) { $rec_id = $_REQUEST["recID"]; $email->setRecId($rec_id); } /*****DEBUG****/ //error_log("updated = $updated recID = $rec_id "); } printEmail($email); //$rec_id=null; if ($rec_id) { //($rec_id){ return true; } else { $emails_failed++; return false; } }