$rights_client = 'view_own_reports,view_own_charts,view_own_invoices,manage_own_settings';
$rights_user = 'track_own_time,track_own_expenses,view_own_reports,view_own_charts,view_own_projects,view_own_tasks,manage_own_settings,view_users';
- $rights_supervisor = $rights_user.',track_time,track_expenses,view_reports,view_charts,override_punch_mode,override_date_lock,override_own_date_lock,swap_roles,approve_timesheets';
+ $rights_supervisor = $rights_user.',track_time,track_expenses,view_reports,view_charts,view_own_clients,override_punch_mode,override_date_lock,override_own_date_lock,swap_roles,approve_timesheets';
$rights_comanager = $rights_supervisor.',manage_own_account,manage_users,manage_projects,manage_tasks,manage_custom_fields,manage_clients,manage_invoices,override_allow_ip,view_all_reports';
$rights_manager = $rights_comanager.',manage_features,manage_basic_settings,manage_advanced_settings,manage_roles,export_data,manage_subgroups';
$rights_client = 'view_own_reports,view_own_charts,view_own_invoices,manage_own_settings';
$rights_user = 'track_own_time,track_own_expenses,view_own_reports,view_own_charts,view_own_projects,view_own_tasks,manage_own_settings,view_users';
- $rights_supervisor = $rights_user.',track_time,track_expenses,view_reports,view_charts,override_punch_mode,override_date_lock,override_own_date_lock,swap_roles,approve_timesheets';
+ $rights_supervisor = $rights_user.',track_time,track_expenses,view_reports,view_charts,view_own_clients,override_punch_mode,override_date_lock,override_own_date_lock,swap_roles,approve_timesheets';
$rights_comanager = $rights_supervisor.',manage_own_account,manage_users,manage_projects,manage_tasks,manage_custom_fields,manage_clients,manage_invoices,override_allow_ip,view_all_reports';
$rights_manager = $rights_comanager.',manage_features,manage_basic_settings,manage_advanced_settings,manage_roles,export_data,manage_subgroups';
return $result;
}
+ // getAssignedClients - returns an array of clients assigned to own projects.
+ function getAssignedClients()
+ {
+ // Start with projects;
+ $projects = $this->getAssignedProjects();
+ if (!$projects) return false;
+ $assigned_project_ids = array();
+ foreach($projects as $project) {
+ $assigned_project_ids[] = $project['id'];
+ }
+
+ $mdb2 = getConnection();
+
+ // Get active clients for group.
+ $clients = array();
+ $sql = "select id, name, address, projects from tt_clients where group_id = $this->group_id and status = 1";
+ $res = $mdb2->query($sql);
+ if (!is_a($res, 'PEAR_Error')) {
+ while ($val = $res->fetchRow()) {
+ $client_project_ids = $val['projects'] ? explode(',', $val['projects']) : array();
+ if (array_intersect($assigned_project_ids, $client_project_ids))
+ $clients[] = $val; // Add client if one of user projects is a client project, too.
+ }
+ }
+ return $clients;
+ }
+
// isDateLocked checks whether a specifc date is locked for modifications.
function isDateLocked($date)
{
<tr><td align="center"><br><form><input type="button" onclick="chLocation('client_add.php');" value="{$i18n.button.add}"></form></td></tr>
</table>
{/if}
+{else}
+ <table cellspacing="1" cellpadding="3" border="0" width="100%">
+ <tr>
+ <td class="tableHeader">{$i18n.label.thing_name}</td>
+ <td class="tableHeader">{$i18n.label.address}</td>
+ </tr>
+ {if $active_clients}
+ {foreach $active_clients as $client}
+ <tr bgcolor="{cycle values="#f5f5f5,#ffffff"}">
+ <td>{$client.name|escape}</td>
+ <td>{$client.address|escape}</td>
+ </tr>
+ {/foreach}
+ {/if}
+ </table>
{/if}
</td>
</tr>
<br>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
- <td align="center"> Anuko Time Tracker 1.17.84.4206 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+ <td align="center"> Anuko Time Tracker 1.17.85.4207 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
<a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
<a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
<a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>
{if $user->can('view_users') || $user->can('manage_users')}
· <a class="mainMenu" href="users.php">{$i18n.menu.users}</a>
{/if}
- {if $user->isPluginEnabled('cl') && $user->can('manage_clients')}
+ {if $user->isPluginEnabled('cl') && ($user->can('view_own_clients') || $user->can('manage_clients'))}
· <a class="mainMenu" href="clients.php">{$i18n.menu.clients}</a>
{/if}
{if $user->can('export_data')}
<tr><td align="center"><br><form><input type="button" onclick="chLocation('client_add.php');" value="{$i18n.button.add}"></form></td></tr>
</table>
{/if}
+{else}
+ <table cellspacing="1" cellpadding="3" border="0" width="100%">
+ <tr>
+ <td class="tableHeader">{$i18n.label.thing_name}</td>
+ <td class="tableHeader">{$i18n.label.address}</td>
+ </tr>
+ {if $active_clients}
+ {foreach $active_clients as $client}
+ <tr bgcolor="{cycle values="#f5f5f5,#ffffff"}">
+ <td>{$client.name|escape}</td>
+ <td>{$client.address|escape}</td>
+ </tr>
+ {/foreach}
+ {/if}
+ </table>
{/if}
</td>
</tr>
{if $user->can('view_users') || $user->can('manage_users')}
· <a class="mainMenu" href="users.php">{$i18n.menu.users}</a>
{/if}
- {if $user->isPluginEnabled('cl') && $user->can('manage_clients')}
+ {if $user->isPluginEnabled('cl') && ($user->can('view_own_clients') || $user->can('manage_clients'))}
· <a class="mainMenu" href="clients.php">{$i18n.menu.clients}</a>
{/if}
</td>
import('ttTeamHelper');
// Access checks.
-if (!ttAccessAllowed('manage_clients')) {
+if (!(ttAccessAllowed('view_own_clients') || ttAccessAllowed('manage_clients'))) {
header('Location: access_denied.php');
exit();
}
exit();
}
-$smarty->assign('active_clients', ttTeamHelper::getActiveClients($user->group_id, true));
-$smarty->assign('inactive_clients', ttTeamHelper::getInactiveClients($user->group_id, true));
+if($user->can('manage_clients')) {
+ $active_clients = ttTeamHelper::getActiveClients($user->group_id, true);
+ $inactive_clients = ttTeamHelper::getInactiveClients($user->group_id, true);
+} else
+ $active_clients = $user->getAssignedClients();
+
+$smarty->assign('active_clients', $active_clients);
+$smarty->assign('inactive_clients', $inactive_clients);
$smarty->assign('title', $i18n->get('title.clients'));
$smarty->assign('content_page_name', 'clients.tpl');
$smarty->display('index.tpl');
print "Updated $users_updated users...<br>\n";
}
- if ($_POST["convert11744to11784"]) {
+ if ($_POST["convert11744to11785"]) {
setChange("update `tt_roles` inner join `tt_site_config` sc on (sc.param_name = 'version_db' and sc.param_value = '1.17.44') set rights = replace(rights, 'override_punch_mode,override_date_lock', 'override_punch_mode,override_own_punch_mode,override_date_lock')");
setChange("UPDATE `tt_site_config` SET param_value = '1.17.48' where param_name = 'version_db' and param_value = '1.17.44'");
setChange("update `tt_users` inner join `tt_site_config` sc on (sc.param_name = 'version_db' and sc.param_value = '1.17.48') set role_id = (select id from tt_roles where team_id = 0 and rank = 512) where role = 324");
setChange("UPDATE `tt_site_config` SET param_value = '1.17.83', modified = now() where param_name = 'version_db' and param_value = '1.17.82'");
setChange("update `tt_roles` inner join `tt_site_config` sc on (sc.param_name = 'version_db' and sc.param_value = '1.17.83') set rights = replace(rights, 'view_own_projects,manage_own_settings', 'view_own_projects,view_own_tasks,manage_own_settings')");
setChange("UPDATE `tt_site_config` SET param_value = '1.17.84', modified = now() where param_name = 'version_db' and param_value = '1.17.83'");
+ setChange("update `tt_roles` inner join `tt_site_config` sc on (sc.param_name = 'version_db' and sc.param_value = '1.17.84') set rights = replace(rights, 'view_charts,override_punch_mode', 'view_charts,view_own_clients,override_punch_mode')");
+ setChange("UPDATE `tt_site_config` SET param_value = '1.17.85', modified = now() where param_name = 'version_db' and param_value = '1.17.84'");
}
if ($_POST["cleanup"]) {
<h2>DB Install</h2>
<table width="80%" border="1" cellpadding="10" cellspacing="0">
<tr>
- <td width="80%"><b>Create database structure (v1.17.84)</b>
+ <td width="80%"><b>Create database structure (v1.17.85)</b>
<br>(applies only to new installations, do not execute when updating)</br></td><td><input type="submit" name="crstructure" value="Create"></td>
</tr>
</table>
<td><input type="submit" name="convert11400to11744" value="Update"><br><input type="submit" name="update_role_id" value="Update role_id"></td>
</tr>
<tr valign="top">
- <td>Update database structure (v1.17.44 to v1.17.84)</td>
- <td><input type="submit" name="convert11744to11784" value="Update"></td>
+ <td>Update database structure (v1.17.44 to v1.17.85)</td>
+ <td><input type="submit" name="convert11744to11785" value="Update"></td>
</tr>
</table>
import('ttTeamHelper');
// Access checks.
-if (!ttAccessAllowed('manage_clients')) {
+if (!(ttAccessAllowed('view_own_clients') || ttAccessAllowed('manage_clients'))) {
header('Location: access_denied.php');
exit();
}
header('Location: feature_disabled.php');
exit();
}
+// End of access checks.
-$smarty->assign('active_clients', ttTeamHelper::getActiveClients($user->group_id, true));
-$smarty->assign('inactive_clients', ttTeamHelper::getInactiveClients($user->group_id, true));
+if($user->can('manage_clients')) {
+ $active_clients = ttTeamHelper::getActiveClients($user->group_id, true);
+ $inactive_clients = ttTeamHelper::getInactiveClients($user->group_id, true);
+} else
+ $active_clients = $user->getAssignedClients();
+
+$smarty->assign('active_clients', $active_clients);
+$smarty->assign('inactive_clients', $inactive_clients);
$smarty->assign('title', $i18n->get('title.clients'));
$smarty->assign('content_page_name', 'mobile/clients.tpl');
$smarty->display('mobile/index.tpl');
# Insert site-wide roles - site administrator and top manager.
INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Site administrator', 1024, 'administer_site');
-INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Top manager', 512, 'track_own_time,track_own_expenses,view_own_reports,view_own_charts,view_own_invoices,view_own_projects,view_own_tasks,manage_own_settings,view_users,track_time,track_expenses,view_reports,view_charts,override_punch_mode,override_own_punch_mode,override_date_lock,override_own_date_lock,swap_roles,approve_timesheets,manage_own_account,manage_users,manage_projects,manage_tasks,manage_custom_fields,manage_clients,manage_invoices,override_allow_ip,view_all_reports,manage_features,manage_basic_settings,manage_advanced_settings,manage_roles,export_data,manage_subgroups');
+INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Top manager', 512, 'track_own_time,track_own_expenses,view_own_reports,view_own_charts,view_own_invoices,view_own_projects,view_own_tasks,manage_own_settings,view_users,track_time,track_expenses,view_reports,view_charts,view_own_clients,override_punch_mode,override_own_punch_mode,override_date_lock,override_own_date_lock,swap_roles,approve_timesheets,manage_own_account,manage_users,manage_projects,manage_tasks,manage_custom_fields,manage_clients,manage_invoices,override_allow_ip,view_all_reports,manage_features,manage_basic_settings,manage_advanced_settings,manage_roles,export_data,manage_subgroups');
#
PRIMARY KEY (`param_name`)
);
-INSERT INTO `tt_site_config` (`param_name`, `param_value`, `created`) VALUES ('version_db', '1.17.84', now()); # TODO: change when structure changes.
+INSERT INTO `tt_site_config` (`param_name`, `param_value`, `created`) VALUES ('version_db', '1.17.85', now()); # TODO: change when structure changes.