]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #2658. Merged uservalidationbyemail changes from 1.7 to 1.8. This plugin needs...
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 20 Feb 2011 04:42:49 +0000 (04:42 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 20 Feb 2011 04:42:49 +0000 (04:42 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8357 36083f99-b078-4883-b0ff-0f9b5a30f544

mod/uservalidationbyemail/actions/resend_validation.php
mod/uservalidationbyemail/languages/en.php
mod/uservalidationbyemail/lib/functions.php
mod/uservalidationbyemail/start.php
mod/uservalidationbyemail/views/default/admin/users/unvalidated.php
mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php
mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php [new file with mode: 0644]
mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php

index 59a69b0f631d7b85a74201dc35bc4ba2f9d43a42..586509b13eb5aec1d7c474daa0acc603cac1b145 100644 (file)
@@ -26,7 +26,7 @@ foreach ($user_guids as $guid) {
 
        // don't resend emails to validated users
        $is_validated = elgg_get_user_validation_status($guid);
-       if ($is_validated !== FALSE || !uservalidationbyemail_request_validation($guid)) {
+       if ($is_validated !== FALSE || !uservalidationbyemail_request_validation($guid, true)) {
                $error = TRUE;
                continue;
        }
index 0c385cab5efbb3be9d82676b7a9d8b0a9f90f687..df576a0e0c1ed3b2f0883f0652057ce01f69a9c1 100644 (file)
@@ -39,7 +39,10 @@ If you can't click on the link, copy and paste it to your browser manually.
        'uservalidationbyemail:confirm_validate_user' => 'Validate %s?',
        'uservalidationbyemail:confirm_resend_validation' => 'Resend validation email to %s?',
        'uservalidationbyemail:confirm_delete' => 'Delete %s?',
-       'uservalidationbyemail:admin:with_checked' => 'With checked:',
+       'uservalidationbyemail:confirm_validate_checked' => 'Validate checked users?',
+       'uservalidationbyemail:confirm_resend_validation_checked' => 'Resend validation to checked users?',
+       'uservalidationbyemail:confirm_delete_checked' => 'Delete checked users?',
+       'uservalidationbyemail:check_all' => 'All',
 
        'uservalidationbyemail:errors:unknown_users' => 'Unknown users',
        'uservalidationbyemail:errors:could_not_validate_user' => 'Could not validate user.',
index b28e4a127a245962786a58ce32fa48e18cd49b50..8a97c40b5b5481733f396ea41469804f79bb210f 100644 (file)
@@ -25,12 +25,13 @@ function uservalidationbyemail_generate_code($user_guid, $email_address) {
  * Request user validation email.
  * Send email out to the address and request a confirmation.
  *
- * @param int $user_guid The user's GUID
+ * @param int  $user_guid       The user's GUID
+ * @param bool $admin_requested Was it requested by admin
  * @return mixed
  */
-function uservalidationbyemail_request_validation($user_guid) {
+function uservalidationbyemail_request_validation($user_guid, $admin_requested = FALSE) {
 
-       $site_url = elgg_get_site_url();
+       $site = elgg_get_site_entity();
 
        $user_guid = (int)$user_guid;
        $user = get_entity($user_guid);
@@ -38,15 +39,15 @@ function uservalidationbyemail_request_validation($user_guid) {
        if (($user) && ($user instanceof ElggUser)) {
                // Work out validate link
                $code = uservalidationbyemail_generate_code($user_guid, $user->email);
-               $link = "{$site_url}pg/uservalidationbyemail/confirm?u=$user_guid&c=$code";
-               $site = elgg_get_site_entity();
+               $link = "{$site->url}pg/uservalidationbyemail/confirm?u=$user_guid&c=$code";
+
 
                // Send validation email
                $subject = elgg_echo('email:validate:subject', array($user->name, $site->name));
                $body = elgg_echo('email:validate:body', array($user->name, $site->name, $link, $site->name, $site->url));
                $result = notify_user($user->guid, $site->guid, $subject, $body, NULL, 'email');
 
-               if ($result) {
+               if ($result && !$admin_requested) {
                        system_message(elgg_echo('uservalidationbyemail:registerok'));
                }
 
@@ -72,3 +73,30 @@ function uservalidationbyemail_validate_email($user_guid, $code) {
 
        return false;
 }
+
+/**
+ * Return a where clause to get entities
+ *
+ * "Unvalidated" means metadata of validated is not set or not truthy.
+ * We can't use elgg_get_entities_from_metadata() because you can't say
+ * "where the entity has metadata set OR it's not equal to 1".
+ *
+ * @return array
+ */
+function uservalidationbyemail_get_unvalidated_users_sql_where() {
+       global $CONFIG;
+
+       $validated_id = get_metastring_id('validated');
+       $one_id = get_metastring_id(1);
+
+       // thanks to daveb@freenode for the SQL tips!
+       $wheres = array();
+       $wheres[] = "e.enabled='no'";
+       $wheres[] = "NOT EXISTS (
+                       SELECT 1 FROM {$CONFIG->dbprefix}metadata md
+                       WHERE md.entity_guid = e.guid
+                               AND md.name_id = $validated_id
+                               AND md.value_id = $one_id)";
+
+       return $wheres;
+}
\ No newline at end of file
index 7cd97c1e54f1fe7439fd889b9dd528218501198a..03f20451109922471a5e82ec89207da64e53ae6c 100644 (file)
@@ -41,6 +41,8 @@ function uservalidationbyemail_init() {
        // admin interface to manually validate users
        elgg_add_admin_menu_item('unvalidated', elgg_echo('uservalidationbyemail:admin:unvalidated'), 'users');
 
+       elgg_extend_view('js/elgg', 'uservalidationbyemail/js');
+
        $action_path = dirname(__FILE__) . '/actions';
 
        elgg_register_action('uservalidationbyemail/validate', "$action_path/validate.php", 'admin');
index 0b94ab039582fd7d47ac4bad119cc7c19f848d26..f34447b65fd0169ef91a4a36b585898e484840d2 100644 (file)
@@ -1,3 +1,6 @@
 <?php
 
-echo elgg_view_form('uservalidationbyemail/bulk_action');
+echo elgg_view_form('uservalidationbyemail/bulk_action', array(
+       'name' => 'unvalidated-users',
+       'action' => 'action/uservalidationbyemail/bulk_action'
+));
index d5060d7e5f2366b85be211bcc35afd7c4aa6b67d..fb0d9e5b1cf6825cba079d928657562c760440e4 100644 (file)
@@ -16,22 +16,33 @@ access_show_hidden_entities(TRUE);
 
 $options = array(
        'type' => 'user',
-       'metadata_name' => 'validated',
-       'metadata_value' => 0,
+       'wheres' => uservalidationbyemail_get_unvalidated_users_sql_where(),
        'limit' => $limit,
-       'offset' => $offset
+       'offset' => $offset,
+       'count' => TRUE,
 );
-$users = elgg_get_entities_from_metadata($options);
+$count = elgg_get_entities($options);
+
+if (!$count) {
+       access_show_hidden_entities($hidden_entities);
+       elgg_set_ignore_access($ia);
+
+       echo elgg_view('page_elements/contentwrapper', array(
+               'body' => elgg_echo('uservalidationbyemail:admin:no_unvalidated_users')
+       ));
+       return;
+}
 
-$options['count'] = TRUE;
-$count = elgg_get_entities_from_metadata($options);
+$options['count']  = FALSE;
+
+$users = elgg_get_entities($options);
 
 access_show_hidden_entities($hidden_entities);
 elgg_set_ignore_access($ia);
 
 // setup pagination
-$pagination = elgg_view('navigation/pagination', array(
-       'baseurl' => elgg_get_site_url() . 'pg/admin/users/unvalidated',
+$pagination = elgg_view('navigation/pagination',array(
+       'baseurl' => $vars['url'] . '/pg/uservalidationbyemail/admin/',
        'offset' => $offset,
        'count' => $count,
        'limit' => $limit,
@@ -39,25 +50,54 @@ $pagination = elgg_view('navigation/pagination', array(
 
 echo $pagination;
 
-if ($users) {
-       foreach ($users as $user) {
-               $form_body .= elgg_view('uservalidationbyemail/unvalidated_user', array('theuser' => $user));
-       }
-} else {
-       echo elgg_echo('uservalidationbyemail:admin:no_unvalidated_users');
-       return;
-}
+$bulk_actions_checkbox = '<label><input type="checkbox" class="unvalidated-users-checkall" />'
+       . elgg_echo('uservalidationbyemail:check_all') . '</label>';
+
+$validate = elgg_view('output/url', array(
+       'is_action' => TRUE,
+       'js' => 'title="' . elgg_echo('uservalidationbyemail:confirm_validate_checked') . '"',
+       'href' => $vars['url'] . "action/uservalidationbyemail/validate/",
+       'text' => elgg_echo('uservalidationbyemail:admin:validate'),
+       'class' => 'unvalidated-users-bulk-post',
+));
 
-$form_body .= elgg_echo('uservalidationbyemail:admin:with_checked') . elgg_view('input/dropdown', array(
-       'name' => 'action_type',
-       'options_values' => array(
-               'validate' => elgg_echo('uservalidationbyemail:admin:validate'),
-               'resend_validation' => elgg_echo('uservalidationbyemail:admin:resend_validation'),
-               'delete' => elgg_echo('uservalidationbyemail:admin:delete'),
-       ),
-       'value' => 'resend_validation',
+$resend_email = elgg_view('output/url', array(
+       'is_action' => TRUE,
+       'js' => 'title="' . elgg_echo('uservalidationbyemail:confirm_resend_validation_checked') . '"',
+       'href' => $vars['url'] . "action/uservalidationbyemail/resend_validation/",
+       'text' => elgg_echo('uservalidationbyemail:admin:resend_validation'),
+       'class' => 'unvalidated-users-bulk-post',
 ));
 
-$form_body .= '<br />' . elgg_view('input/submit', array('value' => elgg_echo('submit')));
+$delete = elgg_view('output/url', array(
+       'is_action' => TRUE,
+       'js' => 'title="' . elgg_echo('uservalidationbyemail:confirm_delete_checked') . '"',
+       'href' => $vars['url'] . "action/uservalidationbyemail/delete/",
+       'text' => elgg_echo('uservalidationbyemail:admin:delete'),
+       'class' => 'unvalidated-users-bulk-post',
+));
+
+$bulk_actions = <<<___END
+<div class="uvbe_bulk_actions">
+       <div class="uvbe_admin_controls">
+               $resend_email | $validate | $delete
+       </div>
+
+       $bulk_actions_checkbox
+</div>
+___END;
+
+//$bulk_actions = elgg_view('page_elements/contentwrapper', array('body' => $bulk_actions));
+
+echo $bulk_actions;
+
+
+foreach ($users as $user) {
+       echo elgg_view('uservalidationbyemail/unvalidated_user', array('user' => $user));
+}
+
+if ($count > 5) {
+       echo $bulk_actions;
+}
 
-echo $form_body;
\ No newline at end of file
+echo $pagination;
\ No newline at end of file
diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php
new file mode 100644 (file)
index 0000000..c1ca585
--- /dev/null
@@ -0,0 +1,27 @@
+elgg.provide('elgg.uservalidationbyemail');
+
+elgg.uservalidationbyemail.init = function() {
+       $('.unvalidated-users-checkall').click(function() {
+               checked = $(this).attr('checked');
+               $('form[name=unvalidated-users]').find('input[type=checkbox]').attr('checked', checked);
+       });
+
+       $('.unvalidated-users-bulk-post').click(function(event) {
+               $form = $('form[name=unvalidated-users]');
+               event.preventDefault();
+
+               // check there are selected users
+               if ($form.find('input[type=checkbox]:checked').length < 1) {
+                       return false;
+               }
+
+               // confirmation
+               if (!confirm($(this).attr('title'))) {
+                       return false;
+               }
+
+               $form.attr('action', $(this).attr('href')).submit();
+       });
+};
+
+elgg.register_event_handler('init', 'system', elgg.uservalidationbyemail.init);
\ No newline at end of file
index 295f4170e05fceebb2841978f3e0fb57992abee0..209dbe02bbf66df3f7ce08abf74488c3a97d47fd 100644 (file)
@@ -6,7 +6,7 @@
  * @subpackage UserValidationByEmail.Administration
  */
 
-$user = elgg_extract('theuser', $vars);
+$user = elgg_extract('user', $vars);
 
 // doesn't work.
 //$checkbox = elgg_view('input/checkboxes', array(