summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Häusler <msquare@notrademark.de>2014-05-13 16:49:09 +0200
committerPhilip Häusler <msquare@notrademark.de>2014-05-13 16:49:09 +0200
commitd394ed2feec7801d7fb38240fc6f001d4367063c (patch)
treedea0c0ca4c4283d630ff1f0a84c158d7fd07b210
parentf1145b8a5e8630e0180d35ff1ced2e934b872f01 (diff)
notify coordinators about unconfirmed angeltypes
-rw-r--r--includes/controller/angeltypes_controller.php32
-rw-r--r--includes/controller/user_angeltypes_controller.php17
-rw-r--r--includes/model/UserAngelTypes_model.php15
-rw-r--r--includes/view/AngelTypes_view.php14
-rw-r--r--public/index.php4
5 files changed, 61 insertions, 21 deletions
diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php
index 6b94545b..59e55a2d 100644
--- a/includes/controller/angeltypes_controller.php
+++ b/includes/controller/angeltypes_controller.php
@@ -85,9 +85,6 @@ function angeltype_delete_controller() {
function angeltype_edit_controller() {
global $privileges, $user;
- if (! in_array('admin_angel_types', $privileges))
- redirect(page_link_to('angeltypes'));
-
$name = "";
$restricted = false;
$description = "";
@@ -102,21 +99,32 @@ function angeltype_edit_controller() {
$name = $angeltype['name'];
$restricted = $angeltype['restricted'];
$description = $angeltype['description'];
+
+ if (! User_is_AngelType_coordinator($user, $angeltype))
+ redirect(page_link_to('angeltypes'));
+ } else {
+ if (! in_array('admin_angel_types', $privileges))
+ redirect(page_link_to('angeltypes'));
}
+ // In coordinator mode only allow to modify description
+ $coordinator_mode = ! in_array('admin_angel_types', $privileges);
+
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."));
+ if (! $coordinator_mode) {
+ 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']);
}
- $restricted = isset($_REQUEST['restricted']);
-
if (isset($_REQUEST['description']))
$description = strip_request_item_nl('description');
@@ -142,7 +150,7 @@ function angeltype_edit_controller() {
return array(
isset($angeltype) ? sprintf(_("Edit %s"), $name) : _("Add new angeltype"),
- AngelType_edit_view($name, $restricted, $description)
+ AngelType_edit_view($name, $restricted, $description, $coordinator_mode)
);
}
@@ -174,7 +182,7 @@ function angeltype_controller() {
return array(
sprintf(_("Team %s"), $angeltype['name']),
- AngelType_view($angeltype, $members, $user_angeltype, in_array('admin_user_angeltypes', $privileges) || $user_angeltype['coordinator'], in_array('admin_angel_types', $privileges))
+ AngelType_view($angeltype, $members, $user_angeltype, in_array('admin_user_angeltypes', $privileges) || $user_angeltype['coordinator'], in_array('admin_angel_types', $privileges), $user_angeltype['coordinator'])
);
}
diff --git a/includes/controller/user_angeltypes_controller.php b/includes/controller/user_angeltypes_controller.php
index 095b35f5..cb8c72ae 100644
--- a/includes/controller/user_angeltypes_controller.php
+++ b/includes/controller/user_angeltypes_controller.php
@@ -1,6 +1,21 @@
<?php
/**
+ * Display a hint for team/angeltype coordinators if there are unconfirmed users for his angeltype.
+ */
+function user_angeltypes_unconfirmed_hint() {
+ global $user;
+ $unconfirmed_user_angeltypes = User_unconfirmed_AngelTypes($user);
+ if ($unconfirmed_user_angeltypes === false)
+ engelsystem_error("Unable to load user angeltypes.");
+ if (count($unconfirmed_user_angeltypes) == 0)
+ return '';
+ if ($_REQUEST['p'] == 'angeltypes' && $_REQUEST['action'] == 'view' && $_REQUEST['angeltype_id'] == $unconfirmed_user_angeltypes[0]['angeltype_id'])
+ return '';
+ return error(sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", count($unconfirmed_user_angeltypes)), count($unconfirmed_user_angeltypes)) . " " . sprintf(_("The first wants to join %s."), '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $unconfirmed_user_angeltypes[0]['angeltype_id'] . '">' . $unconfirmed_user_angeltypes[0]['name'] . '</a>'), true);
+}
+
+/**
* Remove all unconfirmed users from a specific angeltype.
*/
function user_angeltypes_delete_all_controller() {
@@ -263,7 +278,7 @@ function user_angeltype_update_controller() {
return array(
$coordinator ? _("Add coordinator rights") : _("Remove coordinator rights"),
- UserAngelType_update_view($user_angeltype, $user, $angeltype, $coordinator)
+ UserAngelType_update_view($user_angeltype, $user_source, $angeltype, $coordinator)
);
}
diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php
index b9b44032..a9944ff1 100644
--- a/includes/model/UserAngelTypes_model.php
+++ b/includes/model/UserAngelTypes_model.php
@@ -4,6 +4,21 @@
*/
/**
+ * Gets unconfirmed user angeltypes for angeltypes of which the given user is a coordinator.
+ *
+ * @param User $user
+ */
+function User_unconfirmed_AngelTypes($user) {
+ return sql_select("
+ SELECT `UnconfirmedMembers`.*, `AngelTypes`.`name` FROM `UserAngelTypes`
+ JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id`=`AngelTypes`.`id`
+ JOIN `UserAngelTypes` as `UnconfirmedMembers` ON `UserAngelTypes`.`angeltype_id`=`UnconfirmedMembers`.`angeltype_id`
+ WHERE `UserAngelTypes`.`user_id`=" . sql_escape($user['UID']) . "
+ AND `AngelTypes`.`restricted`=TRUE
+ AND `UnconfirmedMembers`.`confirm_user_id` IS NULL");
+}
+
+/**
* Returns true if user is angeltype coordinator or has privilege admin_user_angeltypes.
*
* @param User $user
diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php
index c9293903..fd1ab6e8 100644
--- a/includes/view/AngelTypes_view.php
+++ b/includes/view/AngelTypes_view.php
@@ -40,15 +40,15 @@ function AngelType_delete_view($angeltype) {
));
}
-function AngelType_edit_view($name, $restricted, $description) {
+function AngelType_edit_view($name, $restricted, $description, $coordinator_mode) {
return page(array(
buttons(array(
button(page_link_to('angeltypes'), _("Angeltypes"), 'back')
)),
msg(),
form(array(
- form_text('name', _("Name"), $name),
- form_checkbox('restricted', _("Restricted"), $restricted),
+ $coordinator_mode ? form_info(_("Name"), $name) : form_text('name', _("Name"), $name),
+ $coordinator_mode ? form_info(_("Restricted"), $restricted ? _("Yes") : _("No")) : form_checkbox('restricted', _("Restricted"), $restricted),
form_info("", _("Restricted angel types can only be used by an angel if enabled by an archangel (double opt-in).")),
form_textarea('description', _("Description"), $description),
form_info("", _("Please use markdown for the description.")),
@@ -57,7 +57,7 @@ function AngelType_edit_view($name, $restricted, $description) {
));
}
-function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes) {
+function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes, $coordinator) {
$buttons = array(
button(page_link_to('angeltypes'), _("Angeltypes"), 'back')
);
@@ -70,10 +70,10 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel
$buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $user_angeltype['id'], _("leave"), 'cancel');
}
- if ($admin_angeltypes) {
+ if ($admin_angeltypes || $coordinator)
$buttons[] = button(page_link_to('angeltypes') . '&action=edit&angeltype_id=' . $angeltype['id'], _("edit"), 'edit');
+ if ($admin_angeltypes)
$buttons[] = button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'], _("delete"), 'delete');
- }
$page = array(
msg(),
@@ -175,7 +175,7 @@ function AngelTypes_about_view($angeltypes, $user_logged_in) {
buttons(array(
! $user_logged_in ? button(page_link_to('register'), register_title()) : '',
! $user_logged_in ? button(page_link_to('login'), login_title()) : '',
- $user_logged_in ? button(page_link_to('angeltypes'), '&laquo; ' . angeltypes_title()) : 'back',
+ $user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '',
button($faq_url, _("FAQ"))
)),
'<p>' . _("Here is the list of teams and their tasks. If you have questions, read the FAQ.") . '</p>'
diff --git a/public/index.php b/public/index.php
index 968a8286..40459dce 100644
--- a/public/index.php
+++ b/public/index.php
@@ -78,7 +78,7 @@ $free_pages = array(
'user_password_recovery',
'api',
'credits',
- 'angeltypes'
+ 'angeltypes'
);
// Gewünschte Seite/Funktion
@@ -232,6 +232,8 @@ if (isset($user)) {
// Erzengel Hinweis für unbeantwortete Fragen
if ($p != "admin_questions")
$content = admin_new_questions() . $content;
+
+ $content = user_angeltypes_unconfirmed_hint() . $content;
}
echo template_render('../templates/layout.html', array(