Commit 5e845399 authored by Philip Häusler's avatar Philip Häusler

rewritten angeltypes and user angeltypes

parent d921cf90
......@@ -41,24 +41,6 @@ CREATE TABLE IF NOT EXISTS `AngelTypes` (
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `ChangeLog`
--
DROP TABLE IF EXISTS `ChangeLog`;
CREATE TABLE IF NOT EXISTS `ChangeLog` (
`Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`UID` int(11) NOT NULL DEFAULT '0',
`Commend` text NOT NULL,
`SQLCommad` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Daten für Tabelle `ChangeLog`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `Counter`
......
/* angeltype view */
INSERT INTO `engelsystem`.`Privileges` (`id`, `name`, `desc`) VALUES (NULL , 'angeltypes', 'View angeltypes');
/* force active */
ALTER TABLE `User` ADD `force_active` BOOLEAN NOT NULL AFTER `Aktiv`, ADD INDEX ( `force_active` );
......
<?php
function angeltypes_title() {
return _("Angeltypes");
}
/**
* Route angeltype actions.
*/
function angeltypes_controller() {
if (! isset($_REQUEST['action']))
$_REQUEST['action'] = 'list';
switch ($_REQUEST['action']) {
default:
case 'list':
list($title, $content) = angeltypes_list_controller();
break;
case 'view':
list($title, $content) = angeltype_controller();
break;
case 'edit':
list($title, $content) = angeltype_edit_controller();
break;
case 'delete':
list($title, $content) = angeltype_delete_controller();
break;
}
return array(
$title,
$content
);
}
function angeltype_delete_controller() {
global $privileges, $user;
if (! in_array('admin_angel_types', $privileges))
redirect(page_link_to('angeltypes'));
$angeltype = mAngelType($_REQUEST['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null)
redirect(page_link_to('angeltypes'));
if (isset($_REQUEST['confirmed'])) {
$result = AngelType_delete($angeltype);
if ($result === false)
engelsystem_error("Unable to delete angeltype.");
engelsystem_log("Deleted angeltype: " . $name);
success(sprintf(_("Angeltype %s deleted."), $name));
redirect(page_link_to('angeltypes'));
}
return array(
sprintf(_("Delete angeltype %s"), $angeltype['name']),
AngelType_delete_view($angeltype)
);
}
function angeltype_edit_controller() {
global $privileges, $user;
if (! in_array('admin_angel_types', $privileges))
redirect(page_link_to('angeltypes'));
$name = "";
$restricted = false;
if (isset($_REQUEST['angeltype_id'])) {
$angeltype = mAngelType($_REQUEST['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null)
redirect(page_link_to('angeltypes'));
$name = $angeltype['name'];
$restricted = $angeltype['restricted'];
}
if (isset($_REQUEST['submit'])) {
$ok = true;
if (isset($_REQUEST['name'])) {
list($valid, $name) = AngelType_validate_name($_REQUEST['name'], $angeltype);
if (! $valid) {
$ok = false;
error(_("Please check the name. Maybe it already exists."));
}
}
$restricted = isset($_REQUEST['restricted']);
if ($ok) {
$restricted = $restricted ? 1 : 0;
if (isset($angeltype)) {
$result = AngelType_update($angeltype['id'], $name, $restricted);
if ($result === false)
engelsystem_error("Unable to update angeltype.");
engelsystem_log("Updated angeltype: " . $name . ", restricted: " . $restricted);
$angeltype_id = $angeltype['id'];
} else {
$angeltype_id = AngelType_create($name, $restricted);
if ($angeltype_id === false)
engelsystem_error("Unable to create angeltype.");
engelsystem_log("Created angeltype: " . $name . ", restricted: " . $restricted);
}
success("Angel type saved.");
redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype_id);
}
}
return array(
isset($angeltype) ? sprintf(_("Edit %s"), $name) : _("Add new angeltype"),
AngelType_edit_view($name, $restricted)
);
}
/**
* View details of a given angeltype.
*/
function angeltype_controller() {
global $privileges, $user;
if (! isset($_REQUEST['angeltype_id']))
redirect(page_link_to('angeltypes'));
$angeltype = mAngelType($_REQUEST['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null)
redirect(page_link_to('angeltypes'));
$user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype);
if ($user_angeltype === false)
engelsystem_error("Unable to load user angeltype.");
$members = Users_by_angeltype($angeltype);
if ($members === false)
engelsystem_error("Unable to load members.");
return array(
sprintf(_("Team %s"), $angeltype['name']),
AngelType_view($angeltype, $members, $user_angeltype, in_array('admin_user_angeltypes', $privileges), in_array('admin_angel_types', $privileges))
);
}
/**
* View a list of all angeltypes.
*/
function angeltypes_list_controller() {
global $privileges, $user;
$angeltypes = AngelTypes_with_user($user);
if ($angeltypes === false)
engelsystem_error("Unable to load angeltypes.");
foreach ($angeltypes as &$angeltype) {
$actions = array(
'<a class="view" href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'] . '">' . _("view") . '</a>'
);
if (in_array('admin_angel_types', $privileges)) {
$actions[] = '<a class="edit" href="' . page_link_to('angeltypes') . '&action=edit&angeltype_id=' . $angeltype['id'] . '">' . _("edit") . '</a>';
$actions[] = '<a class="delete" href="' . page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'] . '">' . _("delete") . '</a>';
}
$angeltype['membership'] = "";
if ($angeltype['user_angeltype_id'] != null) {
if ($angeltype['restricted']) {
if ($angeltype['confirm_user_id'] == null)
$angeltype['membership'] = '<img src="pic/icons/lock.png" alt="' . _("Unconfirmed") . '" title="' . _("Unconfirmed") . '"> ' . _("Unconfirmed");
else
$angeltype['membership'] = '<img src="pic/icons/tick.png" alt="' . _("Member") . '" title="' . _("Member") . '"> ' . _("Member");
} else
$angeltype['membership'] = '<img src="pic/icons/tick.png" alt="' . _("Member") . '" title="' . _("Member") . '"> ' . _("Member");
$actions[] = '<a class="cancel" href="' . page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $angeltype['user_angeltype_id'] . '">' . _("leave") . '</a>';
} else {
$angeltype['membership'] = '<img src="pic/icons/cross.png" alt="" title="">';
$actions[] = '<a class="add" href="' . page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'] . '">' . _("join") . '</a>';
}
$angeltype['restricted'] = $angeltype['restricted'] ? '<img src="pic/icons/lock.png" alt="' . _("Restricted") . '" title="' . _("Restricted") . '">' : '';
$angeltype['name'] = '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'] . '">' . $angeltype['name'] . '</a>';
$angeltype['actions'] = join(" ", $actions);
}
return array(
angeltypes_title(),
AngelTypes_list_view($angeltypes, in_array('admin_angel_types', $privileges))
);
}
?>
\ No newline at end of file
<?php
function user_angeltypes_delete_all_controller() {
global $user, $privileges;
if (! in_array('admin_user_angeltypes', $privileges)) {
error(_("You are not allowed to delete all users for this angeltype."));
redirect(page_link_to('angeltypes'));
}
if (! isset($_REQUEST['angeltype_id'])) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$angeltype = mAngelType($_REQUEST['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
if (isset($_REQUEST['confirmed'])) {
$result = UserAngelTypes_delete_all($angeltype['id']);
if ($result === false)
engelsystem_error("Unable to confirm all users.");
engelsystem_log(sprintf("Denied all users for angeltype %s", $angeltype['name']));
success(sprintf(_("Denied all users for angeltype %s."), $angeltype['name']));
redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']);
}
return array(
_("Deny all users"),
UserAngelTypes_delete_all_view($angeltype)
);
}
function user_angeltypes_confirm_all_controller() {
global $user, $privileges;
if (! in_array('admin_user_angeltypes', $privileges)) {
error(_("You are not allowed to confirm all users for this angeltype."));
redirect(page_link_to('angeltypes'));
}
if (! isset($_REQUEST['angeltype_id'])) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$angeltype = mAngelType($_REQUEST['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
if (isset($_REQUEST['confirmed'])) {
$result = UserAngelTypes_confirm_all($angeltype['id'], $user);
if ($result === false)
engelsystem_error("Unable to confirm all users.");
engelsystem_log(sprintf("Confirmed all users for angeltype %s", $angeltype['name']));
success(sprintf(_("Confirmed all users for angeltype %s."), $angeltype['name']));
redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']);
}
return array(
_("Confirm all users"),
UserAngelTypes_confirm_all_view($angeltype)
);
}
function user_angeltype_confirm_controller() {
global $user, $privileges;
if (! in_array('admin_user_angeltypes', $privileges)) {
error(_("You are not allowed to confirm this users angeltype."));
redirect(page_link_to('angeltypes'));
}
if (! isset($_REQUEST['user_angeltype_id'])) {
error(_("User angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$user_angeltype = UserAngelType($_REQUEST['user_angeltype_id']);
if ($user_angeltype === false)
engelsystem_error("Unable to load user angeltype.");
if ($user_angeltype == null) {
error(_("User angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$angeltype = mAngelType($user_angeltype['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$user_source = User($user_angeltype['user_id']);
if ($user_source === false)
engelsystem_error("Unable to load user.");
if ($user_source == null) {
error(_("User doesn't exist."));
redirect(page_link_to('angeltypes'));
}
if (isset($_REQUEST['confirmed'])) {
$result = UserAngelType_confirm($user_angeltype['id'], $user);
if ($result === false)
engelsystem_error("Unable to confirm user angeltype.");
engelsystem_log(sprintf("%s confirmed for angeltype %s", User_Nick_render($user_source), $angeltype['name']));
success(sprintf(_("%s confirmed for angeltype %s."), User_Nick_render($user_source), $angeltype['name']));
redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']);
}
return array(
_("Confirm angeltype for user"),
UserAngelType_confirm_view($user_angeltype, $user, $angeltype)
);
}
function user_angeltype_delete_controller() {
global $user, $privileges;
if (! isset($_REQUEST['user_angeltype_id'])) {
error(_("User angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$user_angeltype = UserAngelType($_REQUEST['user_angeltype_id']);
if ($user_angeltype === false)
engelsystem_error("Unable to load user angeltype.");
if ($user_angeltype == null) {
error(_("User angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$angeltype = mAngelType($user_angeltype['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$user_source = User($user_angeltype['user_id']);
if ($user_source === false)
engelsystem_error("Unable to load user.");
if ($user_source == null) {
error(_("User doesn't exist."));
redirect(page_link_to('angeltypes'));
}
if ($user['UID'] != $user_angeltype['user_id'] && ! in_array('admin_user_angeltypes', $privileges)) {
error(_("You are not allowed to delete this users angeltype."));
redirect(page_link_to('angeltypes'));
}
if (isset($_REQUEST['confirmed'])) {
$result = UserAngelType_delete($user_angeltype);
if ($result === false)
engelsystem_error("Unable to delete user angeltype.");
$success_message = sprintf(_("User %s removed from %s."), User_Nick_render($user_source), $angeltype['name']);
engelsystem_log($success_message);
success($success_message);
redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']);
}
return array(
_("Remove angeltype"),
UserAngelType_delete_view($user_angeltype, $user, $angeltype)
);
}
function user_angeltype_update_controller() {
}
function user_angeltype_add_controller() {
global $user, $privileges;
if (! isset($_REQUEST['angeltype_id'])) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$angeltype = mAngelType($_REQUEST['angeltype_id']);
if ($angeltype === false)
engelsystem_error("Unable to load angeltype.");
if ($angeltype == null) {
error(_("Angeltype doesn't exist."));
redirect(page_link_to('angeltypes'));
}
$user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype);
if ($user_angeltype === false)
engelsystem_error("Unable to load user angeltype.");
if ($user_angeltype != null) {
error(sprintf(_("User is already an %s."), $angeltype['name']));
redirect(page_link_to('angeltypes'));
}
if (isset($_REQUEST['confirmed'])) {
$user_angeltype_id = UserAngelType_create($user, $angeltype);
if ($user_angeltype_id === false)
engelsystem_error("Unable to create user angeltype.");
$success_message = sprintf(_("User %s joined %s."), User_Nick_render($user), $angeltype['name']);
engelsystem_log($success_message);
success($success_message);
if (in_array('admin_user_angeltypes', $privileges)) {
$result = UserAngelType_confirm($user_angeltype_id, $user);
if ($result === false)
engelsystem_error("Unable to confirm user angeltype.");
$success_message = sprintf(_("User %s confirmed as %s."), User_Nick_render($user), $angeltype['name']);
engelsystem_log($success_message);
}
redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']);
}
return array(
_("Add user to angeltype"),
UserAngelType_add_view($user, $angeltype)
);
}
function user_angeltypes_controller() {
if (! isset($_REQUEST['action']))
redirect(page_link_to('angeltypes'));
switch ($_REQUEST['action']) {
case 'delete_all':
list($title, $content) = user_angeltypes_delete_all_controller();
break;
case 'confirm_all':
list($title, $content) = user_angeltypes_confirm_all_controller();
break;
case 'confirm':
list($title, $content) = user_angeltype_confirm_controller();
break;
case 'delete':
list($title, $content) = user_angeltype_delete_controller();
break;
case 'update':
list($title, $content) = user_angeltype_update_controller();
break;
case 'add':
list($title, $content) = user_angeltype_add_controller();
break;
default:
redirect(page_link_to('angeltypes'));
}
return array(
$title,
$content
);
}
?>
\ No newline at end of file
<?php
/**
* Returns AngelType id array
*/
function mAngelTypeList() {
$angelType_source = sql_select("SELECT `id` FROM `AngelTypes`");
if ($angelType_source === false)
return false;
if (count($angelType_source) > 0)
return $angelType_source;
return null;
}
/**
* Returns angelType by id.
*
* @param $id angelType ID
*/
function mAngelType($id) {
$angelType_source = sql_select("SELECT * FROM `AngelTypes` WHERE `id`=" . sql_escape($id) . " LIMIT 1");
if ($angelType_source === false)
return false;
if (count($angelType_source) > 0)
return $angelType_source[0];
return null;
}
<?php
function AngelType_delete($angeltype) {
sql_query("DELETE FROM `NeededAngelTypes` WHERE `angel_type_id`=" . sql_escape($angeltype['id']) . " LIMIT 1");
sql_query("DELETE FROM `ShiftEntry` WHERE `TID`=" . sql_escape($angeltype['id']) . " LIMIT 1");
sql_query("DELETE FROM `UserAngelTypes` WHERE `angeltype_id`=" . sql_escape($angeltype['id']) . " LIMIT 1");
return sql_query("DELETE FROM `AngelTypes` WHERE `id`=" . sql_escape($angeltype['id']) . " LIMIT 1");
}
function AngelType_update($angeltype_id, $name, $restricted) {
return sql_query("
UPDATE `AngelTypes` SET
`name`='" . sql_escape($name) . "',
`restricted`=" . sql_escape($restricted) . "
WHERE `id`=" . sql_escape($angeltype_id) . "
LIMIT 1");
}
function AngelType_create($name, $restricted) {
$result = sql_query("
INSERT INTO `AngelTypes` SET
`name`='" . sql_escape($name) . "',
`restricted`=" . sql_escape($restricted));
if ($result === false)
return false;
return sql_id();
}
/**
* Validates a name for angeltypes.
* Returns array containing validation success and validated name.
*
* @param string $name
* @param AngelType $angeltype
*/
function AngelType_validate_name($name, $angeltype) {
$name = strip_item($name);
if ($name == "")
return array(
false,
$name
);
if (isset($angeltype) && isset($angeltype['id']))
return array(
sql_num_query("
SELECT *
FROM `AngelTypes`
WHERE `name`='" . sql_escape($name) . "'
AND NOT `id`=" . sql_escape($angeltype['id']) . "
LIMIT 1") == 0,
$name
);
else
return array(
sql_num_query("
SELECT `id`
FROM `AngelTypes`
WHERE `name`='" . sql_escape($name) . "'
LIMIT 1") == 0,
$name
);
}
/**
* Returns all angeltypes and subscription state to each of them for given user.
*
* @param User $user
*/
function AngelTypes_with_user($user) {
return sql_select("
SELECT `AngelTypes`.*,
`UserAngelTypes`.`id` as `user_angeltype_id`,
`UserAngelTypes`.`confirm_user_id`
FROM `AngelTypes`
LEFT JOIN `UserAngelTypes` ON `AngelTypes`.`id`=`UserAngelTypes`.`angeltype_id`
AND `UserAngelTypes`.`user_id`=" . $user['UID'] . "
ORDER BY `name`");
}
/**
* Returns AngelType id array
*/
function mAngelTypeList() {
$angelType_source = sql_select("SELECT `id` FROM `AngelTypes`");
if ($angelType_source === false)
return false;
if (count($angelType_source) > 0)
return $angelType_source;
return null;
}
/**
* Returns angelType by id.
*
* @param $id angelType
* ID
*/
function mAngelType($id) {
$angelType_source = sql_select("SELECT * FROM `AngelTypes` WHERE `id`=" . sql_escape($id) . " LIMIT 1");
if ($angelType_source === false)
return false;
if (count($angelType_source) > 0)
return $angelType_source[0];
return null;
}
?>
\ No newline at end of file
<?php
function UserAngelTypes_delete_all($angeltype_id) {
return sql_query("
DELETE FROM `UserAngelTypes`
WHERE `angeltype_id`=" . sql_escape($angeltype_id) . "
AND `confirm_user_id` IS NULL");
}
function UserAngelTypes_confirm_all($angeltype_id, $confirm_user) {
return sql_query("
UPDATE `UserAngelTypes`
SET `confirm_user_id`=" . sql_escape($confirm_user['UID']) . "
WHERE `angeltype_id`=" . sql_escape($angeltype_id) . "
AND `confirm_user_id` IS NULL");
}
function UserAngelType_confirm($user_angeltype_id, $confirm_user) {
return sql_query("
UPDATE `UserAngelTypes`
SET `confirm_user_id`=" . sql_escape($confirm_user['UID']) . "
WHERE `id`=" . sql_escape($user_angeltype_id) . "
LIMIT 1");
}
function UserAngelType_delete($user_angeltype) {
return sql_query("
DELETE FROM `UserAngelTypes`
WHERE `id`=" . sql_escape($user_angeltype['id']) . "
LIMIT 1");
}
function UserAngelType_create($user, $angeltype) {
$result = sql_query("
INSERT INTO `UserAngelTypes` SET
`user_id`=" . sql_escape($user['UID']) . ",
`angeltype_id`=" . sql_escape($angeltype['id']));
if ($result === false)
return false;
return sql_id();
}
function UserAngelType($user_angeltype_id) {
$angeltype = sql_select("
SELECT *
FROM `UserAngelTypes`
WHERE `id`=" . sql_escape($user_angeltype_id) . "
LIMIT 1");
if ($angeltype === false)
return false;
if (count($angeltype) == 0)
return null;
return $angeltype[0];
}