Пример #1
0
 /**
  * Returns data for the custom fields weekly report, based on the field and options passed in.
  *
  * @param   integer $fld_id The id of the custom field.
  * @param   array $cfo_ids An array of option ids.
  * @param   string $start_date
  * @param   string $end_date
  * @param   boolean $per_user Show time spent per user
  * @return  array An array of data.
  */
 public static function getCustomFieldWeeklyReport($fld_id, $cfo_ids, $start_date, $end_date, $per_user = false)
 {
     $fld_id = (int) $fld_id;
     $cfo_ids = (array) $cfo_ids;
     // get field values
     $options = Custom_Field::getOptions($fld_id, $cfo_ids);
     $params = array();
     $sql = 'SELECT
                 iss_id,
                 SUM(ttr_time_spent) ttr_time_spent_sum,
                 iss_summary,
                 iss_customer_id,
                 iss_private
            ';
     if ($per_user) {
         $sql .= ', usr_full_name ';
     }
     $sql .= '
              FROM
                 {{%time_tracking}},';
     if ($per_user) {
         $sql .= '{{%user}}, ';
     }
     $sql .= '
                     {{%issue}}
                 WHERE
                     iss_prj_id=? AND
                     ttr_created_date BETWEEN ? AND ? AND
                     ttr_iss_id = iss_id AND
                     ';
     $params[] = Auth::getCurrentProject();
     $params[] = "{$start_date} 00:00:00";
     $params[] = "{$end_date} 23:59:59";
     if ($per_user) {
         $sql .= ' usr_id = ttr_usr_id AND ';
     }
     $sql .= '
                     ttr_iss_id = iss_id
                     ';
     if (count($options) > 0) {
         $ids = array_keys($options);
         $list = DB_Helper::buildList($ids);
         $sql .= " AND (\n                SELECT\n                    count(*)\n                FROM\n                    {{%issue_custom_field}} a\n                WHERE\n                    a.icf_fld_id = ? AND\n                    a.icf_value IN({$list}) AND\n                    a.icf_iss_id = ttr_iss_id\n                ) > 0";
         $params[] = $fld_id;
         $params = array_merge($params, $ids);
     }
     if ($per_user) {
         $sql .= '
                 GROUP BY
                 iss_id, ttr_usr_id';
     } else {
         $sql .= '
                 GROUP BY
                 iss_id';
     }
     try {
         $res = DB_Helper::getInstance()->getAll($sql, $params);
     } catch (DbException $e) {
         return array();
     }
     foreach ($res as &$row) {
         $row['field_value'] = Custom_Field::getDisplayValue($row['iss_id'], $fld_id);
         $row['ttr_time_spent_sum_formatted'] = Misc::getFormattedTime($row['ttr_time_spent_sum'], false);
     }
     return $res;
 }
Пример #2
0
$tpl = new Template_Helper();
$tpl->setTemplate('reports/custom_fields.tpl.html');
Auth::checkAuthentication();
if (!Access::canAccessReports(Auth::getUserID())) {
    echo 'Invalid role';
    exit;
}
$prj_id = Auth::getCurrentProject();
// get list of fields and convert info useful arrays
$fields = Custom_Field::getListByProject($prj_id, '');
$custom_fields = array();
$options = array();
if (is_array($fields) && count($fields) > 0) {
    foreach ($fields as $field) {
        $custom_fields[$field['fld_id']] = $field['fld_title'];
        $options[$field['fld_id']] = Custom_Field::getOptions($field['fld_id']);
    }
} else {
    echo ev_gettext('No custom fields for this project');
    exit;
}
if (!empty($_REQUEST['start']['Year']) && !empty($_REQUEST['start']['Month']) && !empty($_REQUEST['start']['Day'])) {
    $start = implode('-', $_REQUEST['start']);
} else {
    $start = false;
}
if (!empty($_REQUEST['end']['Year']) && !empty($_REQUEST['end']['Month']) && !empty($_REQUEST['end']['Day'])) {
    $end = implode('-', $_REQUEST['end']);
} else {
    $end = false;
}
Пример #3
0
 /**
  * Returns an array of active filters
  *
  * @param   array $options The options array
  * @return array
  */
 public static function getActiveFilters($options)
 {
     $prj_id = Auth::getCurrentProject();
     $filter_info = self::getFiltersInfo();
     $return = array();
     foreach ($filter_info as $filter_key => $filter) {
         $display = false;
         if (isset($filter['param']) && isset($options[$filter['param']])) {
             $filter_details = $options[$filter['param']];
         }
         if (isset($filter['is_custom'])) {
             // custom fields
             $fld_id = $filter['fld_id'];
             if (!isset($options['custom_field'][$fld_id]) || empty($options['custom_field'][$fld_id])) {
                 continue;
             } elseif ($filter['fld_type'] == 'date' && empty($options['custom_field'][$fld_id]['Year'])) {
                 continue;
             } elseif ($filter['fld_type'] == 'integer') {
                 if (!isset($options['custom_field'][$fld_id]['value']) || empty($options['custom_field'][$fld_id]['value'])) {
                     continue;
                 } else {
                     $filter_details = $options['custom_field'][$fld_id];
                     switch ($filter_details['filter_type']) {
                         case 'ge':
                             $display = ev_gettext('%1$s or greater', $filter_details['value']);
                             break;
                         case 'le':
                             $display = ev_gettext('%1$s or less', $filter_details['value']);
                             break;
                         case 'gt':
                             $display = ev_gettext('Greater than %1$s', $filter_details['value']);
                             break;
                         case 'lt':
                             $display = ev_gettext('Less than %1$s', $filter_details['value']);
                             break;
                         default:
                             $display = $filter_details['value'];
                     }
                 }
             } elseif (in_array($filter['fld_type'], array('multiple', 'combo'))) {
                 $display = implode(', ', Custom_Field::getOptions($fld_id, $options['custom_field'][$fld_id]));
             } else {
                 $display = $options['custom_field'][$fld_id];
             }
         } elseif (!isset($options[$filter['param']]) || empty($options[$filter['param']]) || in_array($filter_key, array('sort_order', 'sort_by', 'rows', 'search_type'))) {
             continue;
         } elseif (isset($filter['is_date']) && $filter['is_date'] == true) {
             if (!empty($filter_details['Year']) || isset($filter_details['time_period'])) {
                 switch ($filter_details['filter_type']) {
                     case 'in_past':
                         $display = ev_gettext('In Past %1$s hours', $filter_details['time_period']);
                         break;
                     case 'null':
                         $display = ev_gettext('Is NULL');
                         break;
                     case 'between':
                         $end = $options[$filter['param'] . '_end'];
                         $display = ev_gettext('Is between %1$s-%2$s-%3$s AND %4$s-%5$s-%6$s', $filter_details['Year'], $filter_details['Month'], $filter_details['Day'], $end['Year'], $end['Month'], $end['Day']);
                         break;
                     case 'greater':
                         $display = ev_gettext('Is greater than %1$s-%2$s-%3$s', $filter_details['Year'], $filter_details['Month'], $filter_details['Day']);
                         break;
                     case 'less':
                         $display = ev_gettext('Is less than %1$s-%2$s-%3$s', $filter_details['Year'], $filter_details['Month'], $filter_details['Day']);
                 }
             }
         } elseif ($filter['param'] == 'status') {
             $statuses = Status::getAssocStatusList($prj_id);
             $display = $statuses[$filter_details];
         } elseif ($filter['param'] == 'category') {
             $categories = Category::getAssocList($prj_id);
             if (is_array($filter_details)) {
                 $active_categories = array();
                 foreach ($filter_details as $category) {
                     $active_categories[] = $categories[$category];
                 }
                 $display = implode(', ', $active_categories);
             } else {
                 $display = $categories[$filter_details];
             }
         } elseif ($filter['param'] == 'priority') {
             $priorities = Priority::getAssocList($prj_id);
             $display = $priorities[$filter_details];
         } elseif ($filter['param'] == 'severity') {
             $severities = Severity::getAssocList($prj_id);
             $display = $severities[$filter_details];
         } elseif ($filter['param'] == 'users') {
             if ($filter_details == -1) {
                 $display = ev_gettext('un-assigned');
             } elseif ($filter_details == -2) {
                 $display = ev_gettext('myself and un-assigned');
             } elseif ($filter_details == -3) {
                 $display = ev_gettext('myself and my group');
             } elseif ($filter_details == -4) {
                 $display = ev_gettext('myself, un-assigned and my group');
             } elseif (substr($filter_details, 0, 3) == 'grp') {
                 $display = ev_gettext('%1$s Group', Group::getName(substr($filter_details, 4)));
             } else {
                 $display = User::getFullName($filter_details);
             }
         } elseif ($filter['param'] == 'hide_closed') {
             if ($filter_details == true) {
                 $display = ev_gettext('Yes');
             }
         } elseif ($filter['param'] == 'reporter') {
             $display = User::getFullName($filter_details);
         } elseif ($filter['param'] == 'release') {
             $display = Release::getTitle($filter_details);
         } elseif ($filter['param'] == 'customer_id') {
             try {
                 $crm = CRM::getInstance($prj_id);
                 $customer = $crm->getCustomer($filter_details);
                 $display = $customer->getName();
             } catch (CRMException $e) {
                 $display = $filter_details;
             }
         } elseif ($filter['param'] == 'product') {
             $display = Product::getTitle($filter_details);
         } else {
             $display = $filter_details;
         }
         if ($display != false) {
             $return[$filter['title']] = array('value' => $display, 'remove_link' => 'list.php?view=clearandfilter&' . self::buildUrl($filter_info, $options, $filter_key, true));
         }
     }
     return $return;
 }
Пример #4
0
 /**
  * Method used to get the details of a specific custom field.
  *
  * @access  public
  * @param   integer $fld_id The custom field ID
  * @return  array The custom field details
  */
 function getDetails($fld_id)
 {
     static $returns;
     if (isset($returns[$fld_id])) {
         return $returns[$fld_id];
     }
     $stmt = "SELECT\n                    *\n                 FROM\n                    " . APP_DEFAULT_DB . "." . APP_TABLE_PREFIX . "custom_field\n                 WHERE\n                    fld_id=" . Misc::escapeInteger($fld_id);
     $res = $GLOBALS["db_api"]->dbh->getRow($stmt, DB_FETCHMODE_ASSOC);
     if (PEAR::isError($res)) {
         Error_Handler::logError(array($res->getMessage(), $res->getDebugInfo()), __FILE__, __LINE__);
         return "";
     } else {
         $res["projects"] = @array_keys(Custom_Field::getAssociatedProjects($fld_id));
         $t = array();
         $options = Custom_Field::getOptions($fld_id);
         foreach ($options as $cfo_id => $cfo_value) {
             $res["field_options"]["existing:" . $cfo_id . ":" . $cfo_value] = $cfo_value;
         }
         $returns[$fld_id] = $res;
         return $res;
     }
 }
Пример #5
0
include_once APP_INC_PATH . "class.template.php";
include_once APP_INC_PATH . "class.auth.php";
include_once APP_INC_PATH . "class.report.php";
include_once APP_INC_PATH . "class.custom_field.php";
include_once APP_INC_PATH . "db_access.php";
$tpl = new Template_API();
$tpl->setTemplate("reports/custom_fields.tpl.html");
Auth::checkAuthentication(APP_COOKIE);
if (Auth::getCurrentRole() <= User::getRoleID("Customer")) {
    echo "Invalid role";
    exit;
}
$prj_id = Auth::getCurrentProject();
// get list of fields and convert info useful arrays
$fields = Custom_Field::getListByProject($prj_id, '', "combo");
$custom_fields = array();
$options = array();
if (is_array($fields) && count($fields) > 0) {
    foreach ($fields as $field) {
        $custom_fields[$field["fld_id"]] = $field["fld_title"];
        $options[$field["fld_id"]] = Custom_Field::getOptions($field["fld_id"]);
    }
} else {
    echo "No custom fields for this project";
    exit;
}
if (count(@$_GET['custom_field']) > 0) {
    $data = Report::getCustomFieldReport(@$HTTP_GET_VARS["custom_field"], @$HTTP_GET_VARS["custom_options"], @$HTTP_GET_VARS["group_by"], true);
}
$tpl->assign(array("custom_fields" => $custom_fields, "custom_field" => @$HTTP_GET_VARS["custom_field"], "options" => $options, "custom_options" => @$HTTP_GET_VARS["custom_options"], "group_by" => @$HTTP_GET_VARS["group_by"], "selected_options" => @$_REQUEST['custom_options'], "data" => @$data));
$tpl->displayTemplate();
Пример #6
0
if (count($groups) > 0 && Auth::getCurrentRole() > User::getRoleID("Customer")) {
    foreach ($groups as $grp_id => $grp_name) {
        $assign_options["grp:{$grp_id}"] = "Group: " . $grp_name;
    }
}
$assign_options += $users;
// get display values for custom fields
$custom_fields_display = array();
if (is_array($options['custom_field']) && count($options['custom_field']) > 0) {
    foreach ($options['custom_field'] as $fld_id => $search_value) {
        if (empty($search_value)) {
            continue;
        }
        $field = Custom_Field::getDetails($fld_id);
        if ($field['fld_type'] == 'combo' || $field['fld_type'] == 'multiple') {
            $custom_fields_display[$fld_id] = join(', ', Custom_Field::getOptions($fld_id, $search_value));
        }
    }
}
$list = Issue::getListing($prj_id, $options, $pagerRow, $rows);
$tpl->assign("list", $list["list"]);
$tpl->assign("list_info", $list["info"]);
$tpl->assign("csv_data", base64_encode(@$list["csv"]));
$tpl->assign("columns", Display_Column::getColumnsToDisplay($prj_id, 'list_issues'));
$tpl->assign("priorities", Priority::getAssocList($prj_id));
$tpl->assign("status", Status::getAssocStatusList($prj_id));
$tpl->assign("open_status", Status::getAssocStatusList($prj_id, true));
$tpl->assign("users", $users);
$tpl->assign("assign_options", $assign_options);
$tpl->assign("custom", Filter::getAssocList($prj_id));
$tpl->assign("csts", Filter::getListing(true));