Exemple #1
0
function getDetailBlocks($module, $col_fields)
{
    global $log;
    $log->debug("Entering getDetailBlocks() method ...");
    global $adb, $current_user;
    global $mod_strings;
    $tabid = getTabid($module);
    $block_detail = array();
    $getBlockinfo = "";
    $prev_header = "";
    //block cache on 2008-12-23 for performance by dingjianting
    $key = "blockid_list_" . $tabid . "_" . $disp_view;
    $key2 = "block_label_" . $tabid . "_" . $disp_view;
    $blockid_list = getSqlCacheData($key);
    $block_label = getSqlCacheData($key2);
    if (!$blockid_list || !$block_label) {
        $query = "select blockid,blocklabel,show_title from ec_blocks where tabid={$tabid} and detail_view=0 and visible = 0 order by sequence";
        $result = $adb->query($query);
        $noofrows = $adb->num_rows($result);
        $blockid_list = '(';
        for ($i = 0; $i < $noofrows; $i++) {
            $blockid = $adb->query_result($result, $i, "blockid");
            if ($i != 0) {
                $blockid_list .= ', ';
            }
            $blockid_list .= $blockid;
            $block_label[$blockid] = $adb->query_result($result, $i, "blocklabel");
        }
        $blockid_list .= ')';
        setSqlCacheData($key, $blockid_list);
        setSqlCacheData($key2, $block_label);
    }
    $key = "blockview_sql_" . $tabid . "_detail_view";
    $sql = getSqlCacheData($key);
    if (!$sql) {
        $display_type_check = 'ec_field.displaytype in (1,4)';
        $sql = "SELECT ec_field.* FROM ec_field INNER JOIN ec_def_org_field ON ec_def_org_field.fieldid=ec_field.fieldid AND ec_def_org_field.visible=0 WHERE ec_field.tabid=" . $tabid . " AND ec_field.block IN {$blockid_list} AND ec_field.displaytype IN (1,2,4) ORDER BY block,sequence";
        setSqlCacheData($key, $sql);
    }
    $result = $adb->query($sql);
    $getBlockInfo = getDetailBlockInformation($module, $result, $col_fields, $tabid, $block_label);
    $index_count = 1;
    $max_index = 0;
    if (!isset($getBlockInfo)) {
        $getBlockInfo = array();
    }
    foreach ($getBlockInfo as $label => $contents) {
        $no_rows = count($contents);
        $index_count = $max_index + 1;
        foreach ($contents as $block_row => $elements) {
            $max_index = $no_rows + $index_count;
            for ($i = 0; $i < count($elements); $i++) {
                if (isset($getBlockInfo[$label][$block_row][$i]) && sizeof($getBlockInfo[$label][$block_row][$i]) != 0) {
                    if ($i == 0) {
                        $getBlockInfo[$label][$block_row][$i][] = array($index_count);
                    } else {
                        $getBlockInfo[$label][$block_row][$i][] = array($max_index);
                    }
                }
            }
            $index_count++;
        }
    }
    $log->debug("Exiting getDetailBlocks method ...");
    return $getBlockInfo;
}
/**
 * This function returns the vtiger_blocks and its related information for given module.
 * Input Parameter are $module - module name, $disp_view = display view (edit,detail or create),$mode - edit, $col_fields - * column vtiger_fields/
 * This function returns an array
 */
function getBlocks($module, $disp_view, $mode, $col_fields = '', $info_type = '')
{
    global $log;
    $log->debug("Entering getBlocks(" . $module . "," . $disp_view . "," . $mode . "," . $col_fields . "," . $info_type . ") method ...");
    global $adb, $current_user;
    global $mod_strings;
    $tabid = getTabid($module);
    $block_detail = array();
    $getBlockinfo = "";
    $query = "select blockid,blocklabel,show_title,display_status from vtiger_blocks where tabid=? and {$disp_view}=0 and visible = 0 order by sequence";
    $result = $adb->pquery($query, array($tabid));
    $noofrows = $adb->num_rows($result);
    $prev_header = "";
    $blockid_list = array();
    for ($i = 0; $i < $noofrows; $i++) {
        $blockid = $adb->query_result($result, $i, "blockid");
        array_push($blockid_list, $blockid);
        $block_label[$blockid] = $adb->query_result($result, $i, "blocklabel");
        $sLabelVal = getTranslatedString($block_label[$blockid], $module);
        $aBlockStatus[$sLabelVal] = $adb->query_result($result, $i, "display_status");
    }
    if ($mode == 'edit') {
        $display_type_check = 'vtiger_field.displaytype = 1';
    } elseif ($mode == 'mass_edit') {
        $display_type_check = 'vtiger_field.displaytype = 1 AND vtiger_field.masseditable NOT IN (0,2)';
    } else {
        $display_type_check = 'vtiger_field.displaytype in (1,4)';
    }
    /*if($non_mass_edit_fields!='' && sizeof($non_mass_edit_fields)!=0){
    		$mass_edit_query = "AND vtiger_field.fieldname NOT IN (". generateQuestionMarks($non_mass_edit_fields) .")";
    	}*/
    //retreive the vtiger_profileList from database
    require 'user_privileges/user_privileges_' . $current_user->id . '.php';
    if ($disp_view == "detail_view") {
        if ($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0 || $module == "Users" || $module == "Emails") {
            $sql = "SELECT vtiger_field.*, '0' as readonly FROM vtiger_field WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) ORDER BY block,sequence";
            $params = array($tabid, $blockid_list);
        } else {
            $profileList = getCurrentUserProfileList();
            $sql = "SELECT vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") GROUP BY vtiger_field.fieldid ORDER BY block,sequence";
            $params = array($tabid, $blockid_list, $profileList);
            //Postgres 8 fixes
            if ($adb->dbType == "pgsql") {
                $sql = fixPostgresQuery($sql, $log, 0);
            }
        }
        $result = $adb->pquery($sql, $params);
        // Added to unset the previous record's related listview session values
        if (isset($_SESSION['rlvs'])) {
            unset($_SESSION['rlvs']);
        }
        $getBlockInfo = getDetailBlockInformation($module, $result, $col_fields, $tabid, $block_label);
    } else {
        if ($info_type != '') {
            if ($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0 || $module == 'Users' || $module == "Emails") {
                $sql = "SELECT vtiger_field.* FROM vtiger_field WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND {$display_type_check} AND info_type = ? and vtiger_field.presence in (0,2) ORDER BY block,sequence";
                $params = array($tabid, $blockid_list, $info_type);
            } else {
                $profileList = getCurrentUserProfileList();
                $sql = "SELECT vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid  WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND {$display_type_check} AND info_type = ? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid ORDER BY block,sequence";
                $params = array($tabid, $blockid_list, $info_type, $profileList);
                //Postgres 8 fixes
                if ($adb->dbType == "pgsql") {
                    $sql = fixPostgresQuery($sql, $log, 0);
                }
            }
        } else {
            if ($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0 || $module == 'Users' || $module == "Emails") {
                $sql = "SELECT vtiger_field.* FROM vtiger_field WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND {$display_type_check}  and vtiger_field.presence in (0,2) ORDER BY block,sequence";
                $params = array($tabid, $blockid_list);
            } else {
                $profileList = getCurrentUserProfileList();
                $sql = "SELECT vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid  WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND {$display_type_check} AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid ORDER BY block,sequence";
                $params = array($tabid, $blockid_list, $profileList);
                //Postgres 8 fixes
                if ($adb->dbType == "pgsql") {
                    $sql = fixPostgresQuery($sql, $log, 0);
                }
            }
        }
        $result = $adb->pquery($sql, $params);
        $getBlockInfo = getBlockInformation($module, $result, $col_fields, $tabid, $block_label, $mode);
    }
    $log->debug("Exiting getBlocks method ...");
    if (count($getBlockInfo) > 0) {
        foreach ($getBlockInfo as $label => $contents) {
            if (empty($getBlockInfo[$label])) {
                unset($getBlockInfo[$label]);
            }
        }
    }
    $_SESSION['BLOCKINITIALSTATUS'] = $aBlockStatus;
    return $getBlockInfo;
}