X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=charts.php;h=862a2fad61b3be312ff0a0c7df539d3540d894bb;hb=HEAD;hp=31ac49f1e7bde6e99dcd0b2d825e07cbce962b39;hpb=b5d95bbf6e8ce2b60c6640cdee5571025524e1a6;p=timetracker.git diff --git a/charts.php b/charts.php index 31ac49f1..862a2fad 100644 --- a/charts.php +++ b/charts.php @@ -32,16 +32,51 @@ require_once('initialize.php'); import('form.Form'); import('DateAndTime'); import('ttChartHelper'); -import('ttSysConfig'); +import('ttUserConfig'); import('PieChartEx'); import('ttUserHelper'); import('ttTeamHelper'); -// Access check. -if (!ttAccessCheck(right_view_charts)) { +// Access checks. +if (!(ttAccessAllowed('view_own_charts') || ttAccessAllowed('view_charts'))) { header('Location: access_denied.php'); exit(); } +if (!$user->isPluginEnabled('ch')) { + header('Location: feature_disabled.php'); + exit(); +} +if (!$user->exists()) { + header('Location: access_denied.php'); // Nobody to display a chart for. + exit(); +} +if ($user->behalf_id && (!$user->can('view_charts') || !$user->checkBehalfId())) { + header('Location: access_denied.php'); // Trying on behalf, but no right or wrong user. + exit(); +} +if (!$user->behalf_id && !$user->can('view_own_charts') && !$user->adjustBehalfId()) { + header('Location: access_denied.php'); // Trying as self, but no right for self, and noone to view on behalf. + exit(); +} +if ($request->isPost() && $request->getParameter('user')) { + if (!$user->isUserValid($request->getParameter('user'))) { + header('Location: access_denied.php'); // Wrong user id on post. + exit(); + } +} +// End of access checks. + +// Determine user for which we display this page. +$userChanged = $request->getParameter('user_changed'); +if ($request->isPost() && $userChanged) { + $user_id = $request->getParameter('user'); + $user->setOnBehalfUser($user_id); +} else { + $user_id = $user->getUser(); +} + +$uc = new ttUserConfig(); +$tracking_mode = $user->getTrackingMode(); // Initialize and store date in session. $cl_date = $request->getParameter('date', @$_SESSION['date']); @@ -51,123 +86,84 @@ if(!$cl_date) { } $_SESSION['date'] = $cl_date; -// Initialize chart interval. -$cl_interval = $_SESSION['chart_interval']; -if (!$cl_interval) { - $sc = new ttSysConfig($user->id); - $cl_interval = $sc->getValue(SYSC_CHART_INTERVAL); -} -if (!$cl_interval) $cl_interval = INTERVAL_THIS_MONTH; -$_SESSION['chart_interval'] = $cl_interval; - -// Initialize chart type. -$cl_type = $_SESSION['chart_type']; -if (!$cl_type) { - $sc = new ttSysConfig($user->id); - $cl_type = $sc->getValue(SYSC_CHART_TYPE); -} -if (MODE_TIME == $user->tracking_mode) { - if (in_array('cl', explode(',', $user->plugins))) - $cl_type = CHART_CLIENTS; -} else { - if ($cl_type == CHART_CLIENTS) { - if (!in_array('cl', explode(',', $user->plugins))) - $cl_type = CHART_PROJECTS; - } else if ($cl_type == CHART_TASKS) { - if (MODE_PROJECTS_AND_TASKS != $user->tracking_mode) - $cl_type = CHART_PROJECTS; - } -} -if (!$cl_type) $cl_type = CHART_PROJECTS; -$_SESSION['chart_type'] = $cl_type; - -// Who do we draw charts for? -$on_behalf_id = $request->getParameter('onBehalfUser', (isset($_SESSION['behalf_id'])? $_SESSION['behalf_id'] : $user->id)); - -if ($request->getMethod( )== 'POST') { - // If chart interval changed - save it. +if ($request->isPost()) { $cl_interval = $request->getParameter('interval'); - if ($cl_interval) { - // Save in the session - $_SESSION['chart_interval'] = $cl_interval; - // and permanently. - $sc = new ttSysConfig($user->id); - $sc->setValue(SYSC_CHART_INTERVAL, $cl_interval); - } - // If chart type changed - save it. + if (!$cl_interval) $cl_interval = INTERVAL_THIS_MONTH; + $_SESSION['chart_interval'] = $cl_interval; + $uc->setValue(SYSC_CHART_INTERVAL, $cl_interval); + $cl_type = $request->getParameter('type'); - if ($cl_type) { - // Save in the session - $_SESSION['chart_type'] = $cl_type; - // and permanently. - $sc = new ttSysConfig($user->id); - $sc->setValue(SYSC_CHART_TYPE, $cl_type); - } - // If user has changed - set behalf_id accordingly in the session. - if ($request->getParameter('onBehalfUser')) { - if($user->canManageTeam()) { - unset($_SESSION['behalf_id']); - unset($_SESSION['behalf_name']); - - if($on_behalf_id != $user->id) { - $_SESSION['behalf_id'] = $on_behalf_id; - $_SESSION['behalf_name'] = ttUserHelper::getUserName($on_behalf_id); - } - header('Location: charts.php'); - exit(); - } - } + if (!$cl_type) $cl_type = ttChartHelper::adjustType($cl_type); + $_SESSION['chart_type'] = $cl_type; + $uc->setValue(SYSC_CHART_TYPE, $cl_type); +} else { + // Initialize chart interval. + $cl_interval = $_SESSION['chart_interval']; + if (!$cl_interval) $cl_interval = $uc->getValue(SYSC_CHART_INTERVAL); + if (!$cl_interval) $cl_interval = INTERVAL_THIS_MONTH; + $_SESSION['chart_interval'] = $cl_interval; + + // Initialize chart type. + $cl_type = $_SESSION['chart_type']; + if (!$cl_type) $cl_type = $uc->getValue(SYSC_CHART_TYPE); + $cl_type = ttChartHelper::adjustType($cl_type); + $_SESSION['chart_type'] = $cl_type; } // Elements of chartForm. $chart_form = new Form('chartForm'); // User dropdown. Changes the user "on behalf" of whom we are working. -if ($user->canManageTeam()) { - $user_list = ttTeamHelper::getActiveUsers(array('putSelfFirst'=>true)); - if (count($user_list) > 1) { +if ($user->can('view_charts')) { + $rank = $user->getMaxRankForGroup($user->getGroup()); + if ($user->can('view_own_charts')) + $options = array('status'=>ACTIVE,'max_rank'=>$rank,'include_self'=>true,'self_first'=>true); + else + $options = array('status'=>ACTIVE,'max_rank'=>$rank); + $user_list = $user->getUsers($options); + if (count($user_list) >= 1) { $chart_form->addInput(array('type'=>'combobox', - 'onchange'=>'this.form.submit();', - 'name'=>'onBehalfUser', - 'value'=>$on_behalf_id, + 'onchange'=>'this.form.user_changed.value=1;this.form.submit();', + 'name'=>'user', + 'value'=>$user_id, 'data'=>$user_list, 'datakeys'=>array('id','name'), )); - $smarty->assign('on_behalf_control', 1); + $chart_form->addInput(array('type'=>'hidden','name'=>'user_changed')); + $smarty->assign('user_dropdown', 1); } } // Chart interval options. $intervals = array(); -$intervals[INTERVAL_THIS_DAY] = $i18n->getKey('dropdown.this_day'); -$intervals[INTERVAL_THIS_WEEK] = $i18n->getKey('dropdown.this_week'); -$intervals[INTERVAL_THIS_MONTH] = $i18n->getKey('dropdown.this_month'); -$intervals[INTERVAL_THIS_YEAR] = $i18n->getKey('dropdown.this_year'); -$intervals[INTERVAL_ALL_TIME] = $i18n->getKey('dropdown.all_time'); +$intervals[INTERVAL_THIS_DAY] = $i18n->get('dropdown.selected_day'); +$intervals[INTERVAL_THIS_WEEK] = $i18n->get('dropdown.selected_week'); +$intervals[INTERVAL_THIS_MONTH] = $i18n->get('dropdown.selected_month'); +$intervals[INTERVAL_THIS_YEAR] = $i18n->get('dropdown.selected_year'); +$intervals[INTERVAL_ALL_TIME] = $i18n->get('dropdown.all_time'); // Chart interval dropdown. $chart_form->addInput(array('type' => 'combobox', - 'onchange' => 'if(this.form) this.form.submit();', + 'onchange' => 'this.form.submit();', 'name' => 'interval', 'value' => $cl_interval, 'data' => $intervals )); // Chart type options. -$chart_selector = (MODE_PROJECTS_AND_TASKS == $user->tracking_mode - || in_array('cl', explode(',', $user->plugins))); +$chart_selector = (MODE_PROJECTS_AND_TASKS == $tracking_mode || $user->isPluginEnabled('cl')); if ($chart_selector) { $types = array(); - if (MODE_PROJECTS == $user->tracking_mode || MODE_PROJECTS_AND_TASKS == $user->tracking_mode) - $types[CHART_PROJECTS] = $i18n->getKey('dropdown.projects'); - if (MODE_PROJECTS_AND_TASKS == $user->tracking_mode) - $types[CHART_TASKS] = $i18n->getKey('dropdown.tasks'); - if (in_array('cl', explode(',', $user->plugins))) - $types[CHART_CLIENTS] = $i18n->getKey('dropdown.clients'); - + if (MODE_PROJECTS == $tracking_mode || MODE_PROJECTS_AND_TASKS == $tracking_mode) + $types[CHART_PROJECTS] = $i18n->get('dropdown.projects'); + if (MODE_PROJECTS_AND_TASKS == $tracking_mode) + $types[CHART_TASKS] = $i18n->get('dropdown.tasks'); + if ($user->isPluginEnabled('cl')) + $types[CHART_CLIENTS] = $i18n->get('dropdown.clients'); + // Add chart type dropdown. $chart_form->addInput(array('type' => 'combobox', - 'onchange' => 'if(this.form) this.form.submit();', + 'onchange' => 'this.form.submit();', 'name' => 'type', 'value' => $cl_type, 'data' => $types @@ -178,8 +174,8 @@ if ($chart_selector) { $chart_form->addInput(array('type'=>'calendar','name'=>'date','value'=>$cl_date)); // calendar // Get data for our chart. -$totals = ttChartHelper::getTotals($on_behalf_id, $cl_type, $cl_date, $cl_interval); -$smarty->assign('totals', $totals); +$totals = ttChartHelper::getTotals($user_id, $cl_type, $cl_date, $cl_interval); +$smarty->assign('totals', $totals); // Prepare chart for drawing. /* @@ -188,7 +184,7 @@ $smarty->assign('totals', $totals); * auto-calculated percentage markers around it. We print labels (to the side of the picture) ourselves, * using the same colors libchart is using. For labels printout, the $totals array (which is used for picture points) * is also passed to charts.tpl Smarty template. - * + * * To make all of the above possible with only one database call to obtain $totals we have to print the chart image * to a file here (see code below). Once the image is available as a .png file, the charts.tpl can render it. * @@ -224,6 +220,6 @@ $chart->renderEx(array('fileName'=>$file_name,'hideLogo'=>true,'hideTitle'=>true $smarty->assign('img_file_name', $img_ref); $smarty->assign('chart_selector', $chart_selector); $smarty->assign('forms', array($chart_form->getName() => $chart_form->toArray())); -$smarty->assign('title', $i18n->getKey('title.charts')); +$smarty->assign('title', $i18n->get('title.charts')); $smarty->assign('content_page_name', 'charts.tpl'); $smarty->display('index.tpl');