Beispiel #1
0
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;
    }
}