$val = $res->fetchRow();
if ($val['id'] > 0) {
return array('login'=>$login,'id'=>$val['id']);
+ } else {
+ // If the OLD_PASSWORDS option is defined - set it.
+ if (isTrue(OLD_PASSWORDS)) {
+ $sql = "SET SESSION old_passwords = 1";
+ $res = $mdb2->query($sql);
+ if (is_a($res, 'PEAR_Error')) {
+ die($res->getMessage());
+ }
+ }
+ // Try legacy password match. This is needed for compatibility with older versions of TT.
+ $sql = "SELECT id FROM tt_users
+ WHERE login = ".$mdb2->quote($login)." AND password = old_password(".$mdb2->quote($password).") AND status = 1";
+ $res = $mdb2->query($sql);
+ if (is_a($res, 'PEAR_Error')) {
+ return false; // Simply return false for a meaningful error message on screen, see the comment below.
+ // die($res->getMessage()); // old_password() function is removed in MySQL 5.7.5.
+ // We are getting a confusing "MDB2 Error: not found" in this case if we die.
+ // TODO: perhaps it's time to simplify things and remove handling of old passwords completely.
+ // HOWEVER: some users apparently never change their passwords. When I tried removing OLD_PASSWORDS
+ // support in November 2018, there were login issues with such users.
+ }
+ $val = $res->fetchRow();
+ if ($val['id'] > 0) {
+ return array('login'=>$login,'id'=>$val['id']);
+ }
}
// Special handling for admin@localhost - search for an account with admin role with a matching password.
$res = $mdb2->query($sql);
if (!is_a($res, 'PEAR_Error')) {
while ($val = $res->fetchRow()) {
- $groups[] = $val; // array('id'=>$val['id'],'name'=>$val['name']);
+ $groups[] = $val;
}
}
return $groups;
<br>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
- <td align="center"> Anuko Time Tracker 1.18.26.4492 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+ <td align="center"> Anuko Time Tracker 1.18.27.4493 | 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>
<script>
function chLocation(newLocation) { document.location = newLocation; }
</script>
-
+{$forms.groupsForm.open}
<table cellspacing="1" cellpadding="3" border="0" width="720">
+{if $on_behalf_group_control}
+ <tr>
+ <td align="right">{$i18n.label.group}:</td>
+ <td>{$forms.groupsForm.onBehalfGroup.control}</td>
+ </tr>
+ <tr><td colspan="2"> </td></tr>
+{/if}
<tr>
<td width="35%" class="tableHeader">{$i18n.label.thing_name}</td>
<td width="35%" class="tableHeader">{$i18n.label.description}</td>
<td class="tableHeader">{$i18n.label.edit}</td>
<td class="tableHeader">{$i18n.label.delete}</td>
</tr>
-{if $groups}
- {foreach $groups as $group}
+{if $subgroups}
+ {foreach $subgroups as $subgroup}
<tr bgcolor="{cycle values="#f5f5f5,#ffffff"}">
- <td>{$group.name|escape}</td>
- <td>{$group.description|escape}</td>
- <td><a href="group_edit.php?id={$group.id}">{$i18n.label.edit}</a></td>
- <td><a href="group_delete.php?id={$group.id}">{$i18n.label.delete}</a></td>
+ <td>{$subgroup.name|escape}</td>
+ <td>{$subgroup.description|escape}</td>
+ <td><a href="group_edit.php?id={$subgroup.id}">{$i18n.label.edit}</a></td>
+ <td><a href="group_delete.php?id={$subgroup.id}">{$i18n.label.delete}</a></td>
</tr>
{/foreach}
{/if}
</table>
+{$forms.groupsForm.close}
<table width="100%">
<tr>
}
// End of access checks.
-$smarty->assign('groups', $user->getSubgroups());
+$form = new Form('groupsForm');
+$groups = $user->getGroups();
+if (count($groups) > 1) {
+ $form->addInput(array('type'=>'combobox',
+ 'onchange'=>'this.form.submit();',
+ 'name'=>'onBehalfGroup',
+ 'style'=>'width: 250px;',
+ 'value'=>$on_behalf_group_id,
+ 'data'=>$groups,
+ 'datakeys'=>array('id','name')));
+ $smarty->assign('on_behalf_group_control', 1);
+}
+
+$smarty->assign('subgroups', $user->getSubgroups());
+$smarty->assign('forms', array($form->getName()=>$form->toArray()));
$smarty->assign('title', $i18n->get('label.subgroups'));
$smarty->assign('content_page_name', 'groups.tpl');
$smarty->display('index.tpl');