Index: casetracker_dashboard.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/casetracker/casetracker_dashboard.module,v retrieving revision 1.6 diff -u -p -r1.6 casetracker_dashboard.module --- casetracker_dashboard.module 23 Nov 2007 07:51:33 -0000 1.6 +++ casetracker_dashboard.module 12 Jan 2008 00:35:06 -0000 @@ -5,270 +5,234 @@ * Implementation of hook_help(). */ function casetracker_dashboard_help($section) { - switch ($section) { - case 'casetracker/dashboard': - return '

'.t('Overview of number of cases for each project').'

'; - break; - case 'admin/content/casetracker/dashboard': - return '

' . t('Adminster dashboard') . '

'; - break; - } + switch ($section) { + case 'casetracker/dashboard': + return '

'. t('Overview of number of cases for each project') .'

'; + break; + case 'admin/content/casetracker/dashboard': + return '

'. t('Adminster dashboard') .'

'; + break; + } } /** * Implementation of hook_perm(). */ function casetracker_dashboard_perm() { - return array( - 'access case tracker dashboard', - ); + return array('access case tracker dashboard'); } /** * Implementation of hook_menu(). */ function casetracker_dashboard_menu($may_cache) { - global $user; - $items = array(); - - if ($may_cache) - { - /* -- user accessible menu items ---------------------------------------- */ - $items[] = array( - 'access' => user_access('access case tracker dashboard'), - 'callback' => 'casetracker_dashboard_overview', - 'path' => 'casetracker/dashboard', - 'title' => t('Dashboard'), - 'weight' => 2 - ); - - $items[] = array( - 'access' => user_access('administer case tracker'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('casetracker_dashboard_admin_form'), - 'description' => t('Configure the Case Tracker dashboard options with these settings.'), - 'path' => 'admin/settings/casetracker/dashboard', - 'title' => t('Dashboard'), - 'type' => MENU_LOCAL_TASK, - ); - } - - return $items; -} - + global $user; + $items = array(); + if ($may_cache) { + // User accessible menu items + $items[] = array( + 'access' => user_access('access case tracker dashboard'), + 'callback' => 'casetracker_dashboard_overview', + 'path' => 'casetracker/dashboard', + 'title' => t('Dashboard'), + 'weight' => 2 + ); + + $items[] = array( + 'access' => user_access('administer case tracker'), + 'callback' => 'drupal_get_form', + 'callback arguments' => array('casetracker_dashboard_admin_form'), + 'description' => t('Configure the Case Tracker dashboard options with these settings.'), + 'path' => 'admin/settings/casetracker/dashboard', + 'title' => t('Dashboard'), + 'type' => MENU_LOCAL_TASK, + ); + } + return $items; +} /** * Menu callback * Displays a list of all projects and a count of all their states. * - * @param void - * @return string + * @param void + * @return string */ function casetracker_dashboard_overview() { drupal_set_breadcrumb( - array( - l(t('Home'), NULL), - l(t('Case Tracker'), 'casetracker'), - l(t('Dashboard'), 'casetracker/dashboard') - ) - ); + array( + l(t('Home'), NULL), + l(t('Case Tracker'), 'casetracker'), + l(t('Dashboard'), 'casetracker/dashboard') + ) + ); drupal_add_css(drupal_get_path('module', 'casetracker') .'/casetracker.css'); - + $output = array(); - + // first we create an overview of all projects and their states counts - $output[] = _casetracker_dashboard_states(); - + $output[] = _casetracker_dashboard_states(); + return implode("\n\n", $output); } /** * Form callback * Configure the CaseTracker dashboard - * - * @param void - * @return string + * + * @param void + * @return string */ -function casetracker_dashboard_admin_form() -{ - $form = array(); - - $form['casetracker_dashboard_admin'] = array( - '#type' => 'fieldset', - '#title' => t('Dashboard settings'), - '#collapsible' => TRUE, - '#collapsed' => FALSE, - '#description' => t('Assign the case status that need to be counted as Done'), - ); - - $states = casetracker_case_state_load('status'); - - $statesChecked = variable_get('casetracker_dashboard_states_done', array()); - - foreach($states AS $csid => $title) - { - $checked = isset($statesChecked[$csid]) - ? $statesChecked[$csid] - : false; - $form['casetracker_dashboard_admin'][$csid] = array( - '#type' => 'checkbox', - '#title' => t($title), - '#default_value' => $checked, - ); - } - - return system_settings_form($form); +function casetracker_dashboard_admin_form() { + $form = array(); + + $form['casetracker_dashboard_admin'] = array( + '#type' => 'fieldset', + '#title' => t('Dashboard settings'), + '#collapsible' => TRUE, + '#collapsed' => FALSE, + '#description' => t('Assign the case status that need to be counted as Done'), + ); + + $states = casetracker_case_state_load('status'); + + $stateschecked = variable_get('casetracker_dashboard_states_done', array()); + + foreach ($states AS $csid => $title) { + $checked = isset($stateschecked[$csid]) + ? $stateschecked[$csid] + : false; + $form['casetracker_dashboard_admin'][$csid] = array( + '#type' => 'checkbox', + '#title' => t($title), + '#default_value' => $checked, + ); + } + + return system_settings_form($form); } /** * Form submit hook * - * @param string - * @param array - * @return void + * @param string + * @param array + * @return void */ -function casetracker_dashboard_admin_form_submit($_formId, $_formValues) -{ - if($_formValues['op'] == 'Save configuration') - { - // get the states - $states = casetracker_case_state_load('status'); - - - $settings = array(); - foreach($states AS $csid => $title) - { - $settings[$csid] = (isset($_formValues[$csid])) - ? (bool)$_formValues[$csid] - : false; - } - - variable_set('casetracker_dashboard_states_done', $settings); - - drupal_set_message(t('The configuration options have been saved.')); - } -} +function casetracker_dashboard_admin_form_submit($_formId, $_formValues) { + if ($_formValues['op'] == 'Save configuration') { + // get the states + $states = casetracker_case_state_load('status'); + + $settings = array(); + foreach ($states AS $csid => $title) { + $settings[$csid] = (isset($_formValues[$csid])) ? (bool)$_formValues[$csid] : false; + } + + variable_set('casetracker_dashboard_states_done', $settings); + drupal_set_message(t('The configuration options have been saved.')); + } +} /** * Function to get an overview of all projects and their states count - * - * @param void - * @return string + * + * @param void + * @return string */ -function _casetracker_dashboard_states() -{ - $output = array(); - - // first we get all the possible projects - $projects = _casetracker_dashboard_getProjects(); - - // we get the possible states - $states = casetracker_case_state_load('status'); - - // we get the project - cases count - $caseCount = _casetracker_dashboard_projectCasesCount(); - - // create the table array - $projectCaseCount = _casetracker_dashboard_createProjectCountArray( - $projects, - $states, - $caseCount - ); - - // create the overview table - $headers = array( - array( - 'data' => t('Project'), - 'class' => 'project', - ), - ); - foreach($states AS $state) - { - $headers[] = t($state); - } - $headers[] = array( - 'data' => t('Todo'), - 'class' => 'devider' - ); - $headers[] = t('Done'); - $headers[] = array( - 'data' => t('Total'), - 'class' => 'devider' - ); - $headers[] = array( - 'data' => t('Completed
%'), - 'class' => 'percent' - ); - - // theme the array - $output[] = theme( - 'table', - $headers, - $projectCaseCount, - array('id' => 'casetracker-dashboard') - ); - - return implode("\n", $output); +function _casetracker_dashboard_states() { + $output = array(); + + // first we get all the possible projects + $projects = _casetracker_dashboard_getProjects(); + + // we get the possible states + $states = casetracker_case_state_load('status'); + + // we get the project - cases count + $casecount = _casetracker_dashboard_projectCasesCount(); + + // create the table array + $projectcasecount = _casetracker_dashboard_createProjectCountArray($projects, $states, $casecount); + + // create the overview table + $headers = array( + array( + 'data' => t('Project'), + 'class' => 'project', + ), + ); + foreach ($states AS $state) { + $headers [] = t($state); + } + $headers[] = array( + 'data' => t('Todo'), + 'class' => 'devider' + ); + $headers[] = t('Done'); + $headers[] = array( + 'data' => t('Total'), + 'class' => 'devider' + ); + $headers[] = array( + 'data' => t('Completed
%'), + 'class' => 'percent' + ); + + // theme the array + $output[] = theme('table', $headers, $projectcasecount, array('id' => 'casetracker-dashboard')); + + return implode("\n", $output); } /** * Function to get all the projects - * - * @param void - * @return array + * + * @param void + * @return array */ -function _casetracker_dashboard_getProjects() -{ - static $projects; - - if(!is_array($projects)) - { - $filter_sql = NULL; - $filter_args = array_filter( - variable_get( - 'casetracker_project_node_types', - array('casetracker_basic_project') - ) - ); - - // this is an interisting feature - if ($project_filter == 'my') - { - global $user; - $filter_sql = 'AND n.uid = %d'; - $filter_args[] = $user->uid; - } - - // build the query - $sql = db_rewrite_sql( - 'SELECT n.nid, n.title, cp.project_number ' - . 'FROM {node} n ' - . 'LEFT JOIN {casetracker_project} cp ON (n.vid = cp.vid) ' - . 'WHERE n.type ' - . 'IN (\'' - . implode('\',\'', $filter_args) - .'\') ' - . 'AND n.status = 1 ' - . $filter_sql); - - $sql .= 'ORDER BY n.title ASC'; - - $results = db_query($sql); - - $projects = array(); - while ($row = db_fetch_object($results)) - { - $projects[$row->nid] = array( - 'project_number' => $row->project_number, - 'title' => $row->title - ); - } - } +function _casetracker_dashboard_getProjects() { + static $projects; + + if (!is_array($projects)) { + $filter_sql = NULL; + $filter_args = array_filter(variable_get('casetracker_project_node_types', array('casetracker_basic_project'))); + + // this is an interisting feature + if ($project_filter == 'my') { + global $user; + $filter_sql = 'AND n.uid = %d'; + $filter_args[] = $user->uid; + } + + // build the query + $sql = db_rewrite_sql( + 'SELECT n.nid, n.title, cp.project_number ' + .'FROM {node} n ' + .'LEFT JOIN {casetracker_project} cp ON (n.vid = cp.vid) ' + .'WHERE n.type ' + .'IN (\'' + . implode('\',\'', $filter_args) + .'\') ' + .'AND n.status = 1 ' + . $filter_sql); + $results = db_query($sql); - return $projects; + $sql .= 'ORDER BY n.title ASC'; + + $projects = array(); + while ($row = db_fetch_object($results)) { + $projects[$row->nid] = array( + 'project_number' => $row->project_number, + 'title' => $row->title + ); + } + } + + return $projects; } /** @@ -277,136 +241,113 @@ function _casetracker_dashboard_getProje * @param void * @return array */ -function _casetracker_dashboard_projectCasesCount() -{ - $filter_args = array_filter( - variable_get( - 'casetracker_project_node_types', - array('casetracker_basic_project') - ) - ); - - $sql = db_rewrite_sql('SELECT ' - . ' n.nid, c.csid, Count(1) AS number_of_cases ' - . 'FROM ' - . ' {node} AS n ' - . ' Inner Join {casetracker_case} AS b ON (n.nid = b.pid) ' - . ' Inner Join {node} AS d ON (b.vid = d.vid)' - . ' Inner Join {casetracker_case_states} AS c ON (b.case_status_id = c.csid) ' - . 'WHERE ' - . ' n.type IN (\'' . implode('\',\'', $filter_args) .'\') ' - . ' AND n.status = 1 ' - ); - - $sql .= 'GROUP BY n.nid, c.csid '; - $sql .= 'ORDER BY n.nid ASC, c.csid ASC '; - - $results = db_query($sql); - - $caseCounter = array(); - while ($row = db_fetch_object($results)) - { - $caseCounter[] = $row; - } +function _casetracker_dashboard_projectCasesCount() { + $filter_args = array_filter(variable_get('casetracker_project_node_types', array('casetracker_basic_project'))); + + $sql = db_rewrite_sql('SELECT ' + .' n.nid, c.csid, Count(1) AS number_of_cases ' + .'FROM ' + .' {node} AS n ' + .' Inner Join {casetracker_case} AS b ON (n.nid = b.pid) ' + .' Inner Join {node} AS d ON (b.vid = d.vid)' + .' Inner Join {casetracker_case_states} AS c ON (b.case_status_id = c.csid) ' + .'WHERE ' + .' n.type IN (\''. implode('\',\'', $filter_args) .'\') ' + .' AND n.status = 1 ' + ); + + $sql .= 'GROUP BY n.nid, c.csid '; + $sql .= 'ORDER BY n.nid ASC, c.csid ASC '; + + $results = db_query($sql); + + $casecounter = array(); + while ($row = db_fetch_object($results)) { + $casecounter[] = $row; + } - return $caseCounter; + return $casecounter; } /** * Function to combine project - states and case count to one big array - * - * @param array projects - * @param array states - * @param array count - * @return array + * + * @param array projects + * @param array states + * @param array count + * @return array */ -function _casetracker_dashboard_createProjectCountArray($_projects, $_states, $_caseCount) -{ - $overview = array(); - - // init vars - $info = array(); - $completedKeys = array(); - - // get the state keys that have to be counted as done - $statesDone = variable_get('casetracker_dashboard_states_done', array()); - foreach($statesDone AS $key => $done) - { - if(true === $done) - { - $completedKeys[] = $key; - } - } - - // create the states count array - foreach($_states AS $key => $value) - { - $info['state_' . $key] = array( - 'data' => 0 - ); - } - $info['todo'] = array( - 'data' => 0, - 'class' => 'devider' - ); - $info['done'] = array( - 'data' => 0 - ); - $info['total'] =array( - 'data' => 0, - 'class' => 'devider' - ); - $info['completed'] = array( - 'data' => 0, - 'class' => 'percent' - ); - // first add all possible projects as an extra array to the projects array - foreach($_projects AS $key => $project) - { - $link = l($project['title'], 'casetracker/cases/' . $key . '/all'); - $overview[$key]['project'] = array( - 'data' => $link, - 'class' => 'project' - ); - $overview[$key] = array_merge($overview[$key], $info); - } - - // loop through the counts and add the counts to the array - foreach($_caseCount AS $count) - { - $nid = (int)$count->nid; - $csid = (int)$count->csid; - - $overview[$nid]['state_' . $csid]['data'] = (int)$count->number_of_cases; - if(in_array($csid, $completedKeys)) - { - $overview[$nid]['done']['data'] = $overview[$nid]['done']['data'] - + (int)$count->number_of_cases; - } - else - { - $overview[$nid]['todo']['data'] = $overview[$nid]['todo']['data'] - + (int)$count->number_of_cases; - } - $overview[$nid]['total']['data'] = $overview[$nid]['total']['data'] - + (int)$count->number_of_cases; - } - - // loop through the projects and count the percentage of completed cases - foreach($overview AS $key => $project) - { - if(0 < $project['total']['data']) - { - $overview[$key]['completed']['data'] = round( - ($project['done']['data'] / $project['total']['data']) - * 100 - ); - } - else - { - $overview[$key]['completed']['data'] = 100; - } - } - - return $overview; +function _casetracker_dashboard_createProjectCountArray($_projects, $_states, $completedkeys) { + $overview = array(); + + // init vars + $info = array(); + $completedkeys = array(); + + // get the state keys that have to be counted as done + $statesdone = variable_get('casetracker_dashboard_states_done', array()); + foreach ($statesdone AS $key => $done) { + if (true === $done) { + $completedkeys[] = $key; + } + } + + // create the states count array + foreach ($_states AS $key => $value) { + $info['state_'. $key] = array( + 'data' => 0 + ); + } + $info['todo'] = array( + 'data' => 0, + 'class' => 'devider' + ); + $info['done'] = array( + 'data' => 0 + ); + $info['total'] =array( + 'data' => 0, + 'class' => 'devider' + ); + $info['completed'] = array( + 'data' => 0, + 'class' => 'percent' + ); + + // first add all possible projects as an extra array to the projects array + foreach ($_projects AS $key => $project) { + $link = l($project['title'], 'casetracker/cases/'. $key .'/all'); + $overview[$key]['project'] = array( + 'data' => $link, + 'class' => 'project' + ); + $overview[$key] = array_merge($overview[$key], $info); + } + + // loop through the counts and add the counts to the array + foreach ($completedkeys AS $count) { + $nid = (int)$count->nid; + $csid = (int)$count->csid; + + $overview[$nid]['state_'. $csid]['data'] = (int)$count->number_of_cases; + if (in_array($csid, $completedkeys)) { + $overview[$nid]['done']['data'] = $overview[$nid]['done']['data'] + (int)$count->number_of_cases; + } + else { + $overview[$nid]['todo']['data'] = $overview[$nid]['todo']['data'] + (int)$count->number_of_cases; + } + $overview[$nid]['total']['data'] = $overview[$nid]['total']['data'] + (int)$count->number_of_cases; + } + + // loop through the projects and count the percentage of completed cases + foreach ($overview AS $key => $project) { + if (0 < $project['total']['data']) { + $overview[$key]['completed']['data'] = round(($project['done']['data'] / $project['total']['data']) * 100); + } + else { + $overview[$key]['completed']['data'] = 100; + } + } + + return $overview; }