source: extensions/UserAdvManager/trunk/include/functions.inc.php @ 17969

Revision 17969, 90.0 KB checked in by flop25, 7 years ago (diff)

No more need of rejected.php and tpl (je te laisse les supprimer, si tu valides ce changement)

  • Property svn:eol-style set to LF
Line 
1<?php
2include_once (UAM_PATH.'include/constants.php');
3load_language('plugin.lang', UAM_PATH);
4
5
6/**
7 * Triggered on get_admin_plugin_menu_links
8 *
9 * Plugin's administration menu
10 */
11function UAM_admin_menu($menu)
12{
13// +-----------------------------------------------------------------------+
14// |                      Getting plugin name                              |
15// +-----------------------------------------------------------------------+
16  $plugin =  PluginInfos(UAM_PATH);
17  $name = $plugin['name'];
18 
19  array_push($menu,
20    array(
21                'NAME' => $name,
22                'URL' => get_root_url().'admin.php?page=plugin-'.basename(UAM_PATH)
23    )
24  );
25
26  return $menu;
27}
28
29
30/**
31 * Triggered on loc_begin_admin_page
32 *
33 * Check options compatibility
34 */
35function UAM_check_compat()
36{
37  global $conf, $page;
38 
39  $conf_UAM = unserialize($conf['UserAdvManager']);
40 
41  // Check mandatory email address for email exclusion
42  if (!$conf['obligatory_user_mail_address'] and $conf_UAM[10] = 'true')
43  {
44    array_push($page['warnings'], l10n('UAM_mail_exclusion_error'));
45  }
46}
47
48
49/**
50 * Triggered on loc_begin_index
51 *
52 * Initiating GhostTracker - Perform user logout after registration if not validated
53 */
54function UAM_Init()
55{
56  global $conf, $user;
57
58  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
59
60  $conf_UAM = unserialize($conf['UserAdvManager']);
61 
62
63  // Admins, Guests and Adult_Content users are not tracked for Ghost Tracker or Users Tracker
64  // -----------------------------------------------------------------------------------------
65  if (!is_admin() and !is_a_guest() and $user['username'] != "16" and $user['username'] != "18")
66  {
67    if ((isset($conf_UAM[15]) and $conf_UAM[15] == 'true') or (isset($conf_UAM[18]) and $conf_UAM[18] == 'true'))
68    {
69
70                                                $userid = get_userid($user['username']);
71         
72      // Looking for existing entry in last visit table
73      // ----------------------------------------------
74      $query = '
75SELECT *
76FROM '.USER_LASTVISIT_TABLE.'
77WHERE user_id = '.$userid.'
78;';
79       
80      $count = pwg_db_num_rows(pwg_query($query));
81         
82      if ($count == 0)
83      {
84        // If not, data are inserted in table
85        // ----------------------------------
86        $query = '
87INSERT INTO '.USER_LASTVISIT_TABLE.' (user_id, lastvisit, reminder)
88VALUES ('.$userid.', now(), "false")
89;';
90        pwg_query($query);
91      }
92      else if ($count > 0)
93      {
94        // If yes, data are updated in table
95        // ---------------------------------
96        $query = '
97UPDATE '.USER_LASTVISIT_TABLE.'
98SET lastvisit = now(), reminder = "false"
99WHERE user_id = '.$userid.'
100LIMIT 1
101;';
102        pwg_query($query);
103      }
104    }
105
106    // Perform user logout after registration if not validated
107    if ((isset($conf_UAM[39]) and $conf_UAM[39] == 'true') and !UAM_UsrReg_Verif($user['id']) and !is_admin() and !is_webmaster() )
108    {
109      invalidate_user_cache();
110      logout_user();
111      if ( $conf['guest_access'] )
112      {
113        redirect( make_index_url().'?UAM_msg=rejected', 0);
114      }
115      else
116      {
117        redirect( get_root_url().'identification.php?UAM_msg=rejected' , 0);
118      }
119    }
120  }
121}
122
123
124/**
125 * Triggered on register_user
126 *
127 * Additional controls on user registration
128 */
129function UAM_Adduser($register_user)
130{
131  global $conf;
132
133  $conf_UAM = unserialize($conf['UserAdvManager']);
134
135  // Exclusion of Adult_Content users
136  // --------------------------------
137  if ($register_user['username'] != "16" and $register_user['username'] != "18")
138  {
139    $passwd = (isset($_POST['password'])) ? $_POST['password'] : '';
140
141    if (isset($conf_UAM[1]) and $conf_UAM[1] == 'local')
142    {
143      // This is to set user to "waiting" group or status and without ConfirMail until admin validation
144      // ----------------------------------------------------------------------------------------------
145      SetPermission($register_user['id']);// Set to "waiting" group or status until admin validation
146     
147      // This is to set UAM_validated field to false in #_users table - Usefull if no "waiting" group or status is set
148      // -------------------------------------------------------------------------------------------------------------
149      SetUnvalidated($register_user['id']);
150
151      // This is to send the validation key by email to admins for their manual validation without having to connect the gallery
152      // -----------------------------------------------------------------------------------------------------------------------
153      SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], true);
154    }
155    // Sending registration confirmation by email
156    // ------------------------------------------
157    elseif (isset($conf_UAM[1]) and $conf_UAM[1] == 'true')
158    {
159      if (is_admin() and isset($conf_UAM[19]) and $conf_UAM[19] == 'true')
160      {
161        SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], true); 
162      }
163      elseif (is_admin() and isset($conf_UAM[19]) and $conf_UAM[19] == 'false')
164      {
165        SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], false);
166      }
167      elseif (!is_admin())
168      {
169        SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], true);
170      }
171    }
172  }
173}
174
175
176/**
177 * Triggered on delete_user
178 *
179 * Database cleanup on user deletion
180 */
181function UAM_Deluser($user_id)
182{
183  // Cleanup for ConfirmMail table
184  // -----------------------------
185  DeleteConfirmMail($user_id);
186  // Cleanup for LastVisit table
187  // ---------------------------
188  DeleteLastVisit($user_id);
189  // Cleanup Redirection settings
190  // ----------------------------
191  DeleteRedir($user_id);
192}
193
194
195/**
196 * Triggered on register_user_check
197 *
198 * Additional controls on user registration check
199 */
200function UAM_RegistrationCheck($errors, $user)
201{
202  global $conf;
203
204  // Exclusion of Adult_Content users
205  // --------------------------------
206  if ($user['username'] != "16" and $user['username'] != "18")
207  {
208    load_language('plugin.lang', UAM_PATH);
209
210    $PasswordCheck = 0;
211
212    $conf_UAM = unserialize($conf['UserAdvManager']);
213
214    // Password enforcement control
215    // ----------------------------
216    if (isset($conf_UAM[12]) and $conf_UAM[12] == 'true' and !empty($conf_UAM[13]))
217    {
218      if (!empty($user['password']) and !is_admin())
219      {
220        $PasswordCheck = testpassword($user['password']);
221 
222        if ($PasswordCheck < $conf_UAM[13])
223        {
224          $message = get_l10n_args('UAM_reg_err_login4_%s', $PasswordCheck);
225          $lang['reg_err_pass'] = l10n_args($message).$conf_UAM[13];
226          array_push($errors, $lang['reg_err_pass']);
227        }
228      }
229      else if (!empty($user['password']) and is_admin() and isset($conf_UAM[14]) and $conf_UAM[14] == 'true')
230      {
231        $PasswordCheck = testpassword($user['password']);
232 
233        if ($PasswordCheck < $conf_UAM[13])
234        {
235          $message = get_l10n_args('UAM_reg_err_login4_%s', $PasswordCheck);
236          $lang['reg_err_pass'] = l10n_args($message).$conf_UAM[13];
237          array_push($errors, $lang['reg_err_pass']);
238        }
239      }
240    }
241
242    // Username without forbidden keys
243    // -------------------------------
244    if (isset($conf_UAM[5]) and $conf_UAM[5] == 'true' and !empty($user['username']) and ValidateUsername($user['username']) and !is_admin())
245    {
246      $lang['reg_err_login1'] = l10n('UAM_reg_err_login2')."'".$conf_UAM[6]."'";
247      array_push($errors, $lang['reg_err_login1']);
248    }
249
250    // Email without forbidden domains
251    // -------------------------------
252    if (isset($conf_UAM[10]) and $conf_UAM[10] == 'true' and !empty($user['email']) and ValidateEmailProvider($user['email']) and !is_admin())
253    {
254      $lang['reg_err_login1'] = l10n('UAM_reg_err_login5')."'".$conf_UAM[11]."'";
255      array_push($errors, $lang['reg_err_login1']);
256    }
257    return $errors;
258  }
259}
260
261
262/**
263 * Triggered on loc_begin_profile
264 */
265function UAM_Profile_Init()
266{
267  global $conf, $user, $template;
268
269  $conf_UAM = unserialize($conf['UserAdvManager']);
270
271  // Update first redirection parameter
272  // ----------------------------------
273  if ((isset($conf_UAM[20]) and $conf_UAM[20] == 'true'))
274  {
275    $user_idsOK = array();
276    if (!UAM_check_profile($user['id'], $user_idsOK))
277    {
278      $user_idsOK[] = $user['id'];
279
280      $query = '
281UPDATE '.CONFIG_TABLE.'
282SET value = "'.implode(',', $user_idsOK).'"
283WHERE param = "UserAdvManager_Redir";';
284         
285      pwg_query($query);
286    }
287  }
288
289  // Special message display for password reset
290  // ------------------------------------------
291  if ((isset($conf_UAM[38]) and $conf_UAM[38] == 'true'))
292  {
293    if (UAM_check_pwgreset($user['id']))
294    {
295      $template->append('errors', l10n('UAM_Password_Reset_Msg'));
296    }
297  }
298
299  // Controls on profile page submission
300  // -----------------------------------
301  if (isset($_POST['validate']) and !is_admin())
302  {
303    // Email without forbidden domains
304    // -------------------------------
305    if (isset($conf_UAM[10]) and $conf_UAM[10] == 'true' and !empty($_POST['mail_address']))
306    {
307      if (ValidateEmailProvider($_POST['mail_address']))
308      {
309        $template->append('errors', l10n('UAM_reg_err_login5')."'".$conf_UAM[11]."'");
310        unset($_POST['validate']);
311      }
312    }
313
314    // Password reset control
315    // ----------------------
316    if (isset($conf_UAM[38]) and $conf_UAM[38] == 'true' and UAM_check_pwgreset($user['id']))
317    {
318      // if password not changed then pwdreset field = true else pwdreset field = false
319      // ------------------------------------------------------------------------------
320      if (!empty($_POST['use_new_pwd']))
321      {
322        $query = '
323UPDATE '.USERS_TABLE.'
324SET UAM_pwdreset = "false"
325WHERE id = '.$user['id'].'
326LIMIT 1
327;';
328        pwg_query($query);
329      }
330    }
331
332    $typemail = 3; // Only information email send to user on user profile update if checked
333
334    if (!empty($_POST['use_new_pwd']))
335    {
336      $typemail = 2; // Confirmation email on user profile update - With information email
337
338      // Password enforcement control
339      // ----------------------------
340      if (isset($conf_UAM[12]) and $conf_UAM[12] == 'true' and !empty($conf_UAM[13]))
341      {
342        $PasswordCheck = testpassword($_POST['use_new_pwd']);
343
344        if ($PasswordCheck < $conf_UAM[13])
345        {
346          $message = get_l10n_args('UAM_reg_err_login4_%s', $PasswordCheck);
347          $template->append('errors', l10n_args($message).$conf_UAM[13]);
348          unset($_POST['use_new_pwd']);
349          unset($_POST['validate']);
350        }
351      }
352    }
353
354    // Sending registration confirmation by email
355    // ------------------------------------------
356    if ((isset($conf_UAM[1]) and $conf_UAM[1] == 'true') or (isset($conf_UAM[1]) and $conf_UAM[1] == 'local'))
357    {
358      $confirm_mail_need = false;
359
360      if (!empty($_POST['mail_address']))
361      {
362        $query = '
363SELECT '.$conf['user_fields']['email'].' AS email
364FROM '.USERS_TABLE.'
365WHERE '.$conf['user_fields']['id'].' = \''.$user['id'].'\'
366;';
367
368        list($current_email) = pwg_db_fetch_row(pwg_query($query));
369
370        // This is to send a new validation key
371        // ------------------------------------
372        if ($_POST['mail_address'] != $current_email and (isset($conf_UAM[1]) and $conf_UAM[1] == 'true'))
373        {
374          SetPermission($user['id']);// Set to "waiting" group or status until user validation
375          SetUnvalidated($user['id']); // Set UAM_validated field to false in #_users table
376          $confirm_mail_need = true;
377        }
378
379        // This is to set the user to "waiting" group or status until admin validation
380        // ---------------------------------------------------------------------------
381        elseif ($_POST['mail_address'] != $current_email and (isset($conf_UAM[1]) and $conf_UAM[1] == 'local'))
382        {
383          SetPermission($user['id']);// Set to "waiting" group or status until admin validation
384          SetUnvalidated($user['id']); // Set UAM_validated field to false in #_users table
385          $confirm_mail_need = false;
386        }       
387      }
388       
389      if (((!empty($_POST['use_new_pwd']) and (isset($conf_UAM[0]) and $conf_UAM[0] == 'true')) or $confirm_mail_need))
390      {
391        $query = '
392SELECT '.$conf['user_fields']['username'].'
393FROM '.USERS_TABLE.'
394WHERE '.$conf['user_fields']['id'].' = \''.$user['id'].'\'
395;';
396       
397        list($username) = pwg_db_fetch_row(pwg_query($query));
398        SendMail2User($typemail, $user['id'], $username, $_POST['use_new_pwd'], $_POST['mail_address'], $confirm_mail_need);
399      }
400    }
401  }
402}
403
404
405/**
406 * Triggered on login_success
407 *
408 * Triggers scheduled tasks at login
409 * Redirects a visitor (except for admins, webmasters and generic statuses) to his profile.php page (Thx to LucMorizur)
410 *
411 */
412function UAM_LoginTasks()
413{
414  global $conf, $user;
415 
416  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
417 
418  $conf_UAM = unserialize($conf['UserAdvManager']);
419 
420  // Performing GhostTracker scheduled tasks
421  // ---------------------------------------
422  if ((isset($conf_UAM[21]) and $conf_UAM[21] == 'true'))
423  {
424    UAM_GT_ScheduledTasks();
425  }
426
427  // Performing User validation scheduled tasks
428  // ------------------------------------------
429  if ((isset($conf_UAM[30]) and $conf_UAM[30] == 'true'))
430  {
431    UAM_USR_ScheduledTasks();
432  }
433
434  // Avoid login into public galleries until registration confirmation is done
435  if ((isset($conf_UAM[39]) and $conf_UAM[39] == 'false') or ((isset($conf_UAM[39]) and $conf_UAM[39] == 'true') and UAM_UsrReg_Verif($user['id'])))
436  {
437    // Performing redirection to profile page on first login
438    // -----------------------------------------------------
439    if ((isset($conf_UAM[20]) and $conf_UAM[20] == 'true'))
440    {
441      $query ='
442SELECT user_id, status
443FROM '.USER_INFOS_TABLE.'
444WHERE user_id = '.$user['id'].'
445;';
446      $data = pwg_db_fetch_assoc(pwg_query($query));
447
448      if ($data['status'] <> "admin" and $data['status'] <> "webmaster" and $data['status'] <> "generic") // Exclusion of specific accounts
449      {
450        $user_idsOK = array();
451        if (!UAM_check_profile($user['id'], $user_idsOK))
452          redirect(PHPWG_ROOT_PATH.'profile.php');
453      }
454    }
455
456    // Performing redirection to profile page for password reset
457    // ---------------------------------------------------------
458    if ((isset($conf_UAM[38]) and $conf_UAM[38] == 'true'))
459    {
460      $query ='
461SELECT user_id, status
462FROM '.USER_INFOS_TABLE.'
463WHERE user_id = '.$user['id'].'
464;';
465      $data = pwg_db_fetch_assoc(pwg_query($query));
466
467      if ($data['status'] <> "webmaster" and $data['status'] <> "generic") // Exclusion of specific accounts
468      {
469        if (UAM_check_pwgreset($user['id']))
470        {
471          redirect(PHPWG_ROOT_PATH.'profile.php');
472        }
473      }
474    }
475  }
476  elseif ((isset($conf_UAM[39]) and $conf_UAM[39] == 'true') and !UAM_UsrReg_Verif($user['id']) and !is_admin() and !is_webmaster())
477  {
478    // Logged-in user cleanup, session destruction and redirected to custom page
479    // -------------------------------------------------------------------------
480    invalidate_user_cache();
481    logout_user();
482    if ( $conf['guest_access'] )
483    {
484      redirect( make_index_url().'?UAM_msg=rejected', 0);
485    }
486    else
487    {
488      redirect( get_root_url().'identification.php?UAM_msg=rejected' , 0);
489    }
490  }
491}
492
493
494/**
495 * Adds a new module settable in PWG_Stuffs - Triggered on get_stuffs_modules in main.inc.php
496 * Useful to inform unvalidated user for their status
497 *
498 */
499function register_UAM_stuffs_module($modules)
500{
501  array_push($modules, array(
502    'path' => UAM_PATH.'/stuffs_module',
503    'name' => l10n('UAM_Stuffs_Title'),
504    'description' => l10n('UAM_Stuffs_Desc'),
505    )
506  );
507  return $modules;
508}
509
510
511/**
512 * Triggered on UAM_LoginTasks()
513 *
514 * Executes optional post-login tasks for Ghost users
515 *
516 */
517function UAM_GT_ScheduledTasks()
518{
519  global $conf, $user, $page;
520
521  if (!defined('PHPWG_ROOT_PATH'))
522  {
523    die('Hacking attempt!');
524  }
525         
526  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
527
528  $conf_UAM = unserialize($conf['UserAdvManager']);
529 
530  $collection = array();
531  $reminder = false;
532 
533  $page['filtered_users'] = get_ghosts_autotasks();
534
535  foreach($page['filtered_users'] as $listed_user)
536  {
537    array_push($collection, $listed_user['id']);
538  }
539
540  // Auto group, status or privacy level downgrade and autodeletion if user already reminded
541  // ---------------------------------------------------------------------------------------
542  if ((isset($conf_UAM[21]) and $conf_UAM[21] == 'true') and ((isset($conf_UAM[25]) and $conf_UAM[25] <> -1) or (isset($conf_UAM[26]) and $conf_UAM[26] <> -1) or (isset($conf_UAM[37]) and $conf_UAM[37] <> -1)))
543  {
544    if (count($collection) > 0)
545         {
546      // Process if a non-admin nor webmaster user is logged
547      // ---------------------------------------------------
548      if (in_array($user['id'], $collection))
549                        {
550        // Check lastvisit reminder state
551        // ------------------------------
552        $query = '
553SELECT reminder
554FROM '.USER_LASTVISIT_TABLE.'
555WHERE user_id = '.$user['id'].';';
556
557        $result = pwg_db_fetch_assoc(pwg_query($query));
558
559        if (isset($result['reminder']) and $result['reminder'] == 'true')
560        {
561          $reminder = true;
562        }
563        else
564        {
565          $reminder = false;
566        }
567
568        // If user already reminded for ghost account
569        // ------------------------------------------
570        if ($reminder)
571        {
572          // Delete account
573          // --------------
574          delete_user($user['id']);
575
576          // Logged-in user cleanup, session destruction and redirected to custom page
577          // -------------------------------------------------------------------------
578          invalidate_user_cache();
579          logout_user();
580          redirect(UAM_PATH.'GT_del_account.php');
581        }
582                }
583      else // Process if an admin or webmaster user is logged
584      {
585        foreach ($collection as $user_id)
586        {
587          // Check lastvisit reminder state
588          // ------------------------------
589          $query = '
590SELECT reminder
591FROM '.USER_LASTVISIT_TABLE.'
592WHERE user_id = '.$user_id.';';
593
594          $result = pwg_db_fetch_assoc(pwg_query($query));
595
596          if (isset($result['reminder']) and $result['reminder'] == 'true')
597          {
598            $reminder = true;
599          }
600          else
601          {
602            $reminder = false;
603          }
604
605          // If never reminded before
606          // ------------------------
607          if (!$reminder)
608          {
609            // Reset of lastvisit date
610            // -----------------------
611            list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
612
613                        $query = '
614UPDATE '.USER_LASTVISIT_TABLE.'
615SET lastvisit="'.$dbnow.'"
616WHERE user_id = '.$user_id.'
617;';
618            pwg_query($query);
619
620          // Auto change group and / or status
621          // ---------------------------------
622            // Delete user from all groups
623            // ---------------------------
624            if ($conf_UAM[2] <> -1 and $conf_UAM[3] <> -1)
625            {
626                        $query = '
627DELETE FROM '.USER_GROUP_TABLE.'
628WHERE user_id = '.$user_id.'
629  AND (
630    group_id = '.$conf_UAM[2].'
631  OR
632    group_id = '.$conf_UAM[3].'
633  )
634;';
635                        pwg_query($query);
636                                                                                                }
637
638            // Change user status
639            // ------------------
640            if ($conf_UAM[26] <> -1)
641            {
642              $query = '
643UPDATE '.USER_INFOS_TABLE.'
644SET status = "'.$conf_UAM[26].'"
645WHERE user_id = '.$user_id.'
646;';
647              pwg_query($query);
648            }
649
650            // Change user group
651            // -----------------
652            if ($conf_UAM[25] <> -1)
653            {
654              $query = '
655INSERT INTO '.USER_GROUP_TABLE.'
656  (user_id, group_id)
657VALUES
658  ('.$user_id.', "'.$conf_UAM[25].'")
659;';
660              pwg_query($query);
661            }
662
663            // Change user privacy level
664            // -------------------------
665            if ($conf_UAM[37] <> -1)
666            {
667              $query = '
668UPDATE '.USER_INFOS_TABLE.'
669SET level = "'.$conf_UAM[37].'"
670WHERE user_id = '.$user_id.'
671;';
672              pwg_query($query);
673            }
674
675            // Auto send email notification on group / status downgrade
676            // --------------------------------------------------------
677            if (isset($conf_UAM[22]) and $conf_UAM[22] == 'true')
678            {
679              // Set reminder true
680              // -----------------
681              $query = '
682UPDATE '.USER_LASTVISIT_TABLE.'
683SET reminder = "true"
684WHERE user_id = '.$user_id.'
685;';
686              pwg_query($query);
687           
688              // Reset confirmed user status to unvalidated
689              // ------------------------------------------
690                                                                                                $query = '
691UPDATE '.USER_CONFIRM_MAIL_TABLE.'
692SET date_check = NULL
693WHERE user_id = '.$user_id.'
694;';
695                                                                                                pwg_query($query);
696
697              // Get users information for email notification
698              // --------------------------------------------
699                                                                                                $query = '
700SELECT id, username, mail_address
701FROM '.USERS_TABLE.'
702WHERE id = '.$user_id.'
703;';
704                                                                                                $data = pwg_db_fetch_assoc(pwg_query($query));
705           
706              demotion_mail($user_id, $data['username'], $data['mail_address']);
707            }
708          }
709          elseif ($reminder) // If user already reminded for ghost account
710          {
711            // Delete account
712            // --------------
713            delete_user($user_id);
714          }
715        }
716      }
717    }
718  }
719}
720
721
722/**
723 * Triggered on UAM_LoginTasks()
724 *
725 * Executes optional post-login tasks for unvalidated users
726 *
727 */
728function UAM_USR_ScheduledTasks()
729{
730  global $conf, $user, $page;
731
732  if (!defined('PHPWG_ROOT_PATH'))
733  {
734    die('Hacking attempt!');
735  }
736         
737  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
738
739  $conf_UAM = unserialize($conf['UserAdvManager']);
740 
741  $collection = array();
742  $reminder = false;
743 
744  $page['filtered_users'] = get_unvalid_user_autotasks();
745
746  foreach($page['filtered_users'] as $listed_user)
747  {
748    array_push($collection, $listed_user['id']);
749  }
750
751  // Unvalidated accounts auto email sending and autodeletion if user already reminded
752  // ---------------------------------------------------------------------------------
753  if ((isset($conf_UAM[30]) and $conf_UAM[30] == 'true'))
754  {
755    if (count($collection) > 0)
756                {
757      // Process if a non-admin nor webmaster user is logged
758      // ---------------------------------------------------
759      if (in_array($user['id'], $collection))
760                {
761        // Check ConfirmMail reminder state
762        // --------------------------------
763        $query = '
764SELECT reminder
765FROM '.USER_CONFIRM_MAIL_TABLE.'
766WHERE user_id = '.$user['id'].';';
767
768        $result = pwg_db_fetch_assoc(pwg_query($query));
769
770        if (isset($result['reminder']) and $result['reminder'] == 'true')
771        {
772          $reminder = true;
773        }
774        else
775        {
776          $reminder = false;
777        }
778
779        // If never reminded before, send reminder and set reminder True
780        // -------------------------------------------------------------
781        if (!$reminder and isset($conf_UAM[32]) and $conf_UAM[32] == 'true')
782        {
783                        $typemail = 1;
784         
785          // Get current user informations
786          // -----------------------------
787          $query = '
788SELECT id, username, mail_address
789FROM '.USERS_TABLE.'
790WHERE id = '.$user['id'].'
791;';
792          $data = pwg_db_fetch_assoc(pwg_query($query));
793
794          ResendMail2User($typemail,$user['id'],stripslashes($data['username']),$data['mail_address'],true);
795        }
796
797        // If already reminded before, delete user
798        // ---------------------------------------
799        if ($reminder)
800        {
801          // delete account
802          delete_user($user['id']);
803
804          // Logged-in user cleanup, session destruction and redirected to custom page
805          // -------------------------------------------------------------------------
806          invalidate_user_cache();
807          logout_user();
808          redirect(UAM_PATH.'USR_del_account.php');
809        }
810                }
811      else // Process if an admin or webmaster user is logged
812      {
813        foreach ($collection as $user_id)
814        {
815          // Check reminder state
816          // --------------------
817          $query = '
818SELECT reminder
819FROM '.USER_CONFIRM_MAIL_TABLE.'
820WHERE user_id = '.$user_id.';';
821
822          $result = pwg_db_fetch_assoc(pwg_query($query));
823
824          if (isset($result['reminder']) and $result['reminder'] == 'true')
825          {
826            $reminder = true;
827          }
828          else
829          {
830            $reminder = false;
831          }
832
833          // If never reminded before, send reminder and set reminder True
834          // -------------------------------------------------------------
835          if (!$reminder and isset($conf_UAM[32]) and $conf_UAM[32] == 'true')
836          {
837            $typemail = 1;
838         
839            // Get current user informations
840            // -----------------------------
841            $query = '
842SELECT id, username, mail_address
843FROM '.USERS_TABLE.'
844WHERE id = '.$user_id.'
845;';
846            $data = pwg_db_fetch_assoc(pwg_query($query));
847
848            ResendMail2User($typemail,$user_id,stripslashes($data['username']),$data['mail_address'],true);
849          }
850          elseif ($reminder) // If user already reminded for account validation
851          {
852            // Delete account
853            // --------------
854            delete_user($user_id);
855          }
856        }
857      }
858    }
859  }
860}
861
862
863/**
864 * Triggered on init
865 *
866 * Check for forbidden email domains in admin's users management panel
867 */
868function UAM_InitPage()
869{
870  load_language('plugin.lang', UAM_PATH);
871  global $conf, $template, $page, $lang, $errors;
872
873  $conf_UAM = unserialize($conf['UserAdvManager']);
874
875// Admin user management
876// ---------------------
877  if (script_basename() == 'admin' and isset($_GET['page']) and $_GET['page'] == 'user_list')
878  {
879    if (isset($_POST['submit_add']))
880    {
881      // Email without forbidden domains
882      // -------------------------------
883      if (isset($conf_UAM[10]) and $conf_UAM[10] == 'true' and !empty($_POST['email']) and ValidateEmailProvider($_POST['email']))
884      {
885        $template->append('errors', l10n('UAM_reg_err_login5')."'".$conf_UAM[11]."'");
886        unset($_POST['submit_add']);
887      }
888    }
889  }
890}
891
892/**
893 * Triggered on init
894 *
895 * Display a message according to $_GET['UAM_msg']
896 */
897function UAM_DisplayMsg()
898{
899  if( isset($_GET['UAM_msg']))
900  {
901    global $user, $lang, $conf, $page;
902    $conf_UAM = unserialize($conf['UserAdvManager']);
903   
904    if (isset($conf_UAM[40]) and $conf_UAM[40] <> '' and $_GET['UAM_msg']="rejected")
905    {
906      // Management of Extension flags ([mygallery], [myurl])
907      // ---------------------------------------------------
908      $patterns[] = '#\[mygallery\]#i';
909      $replacements[] = $conf['gallery_title'];
910      $patterns[] = '#\[myurl\]#i';
911      $replacements[] = get_gallery_home_url();
912   
913      if (function_exists('get_user_language_desc'))
914      {
915        $custom_text = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[40]));
916      }
917      else $custom_text = l10n(preg_replace($patterns, $replacements, $conf_UAM[40]));
918      $page["errors"][]=$custom_text;
919    }
920  }
921}
922
923/**
924 * Triggered on render_lost_password_mail_content
925 *
926 * Adds a customized text in lost password email content
927 * Added text is inserted before users login name and new password
928 *
929 * @param : Standard Piwigo email content
930 *
931 * @return : Customized content added to standard content
932 *
933 */
934function UAM_lost_password_mail_content($infos)
935{
936  global $conf;
937 
938  load_language('plugin.lang', UAM_PATH);
939 
940  $conf_UAM = unserialize($conf['UserAdvManager']);
941 
942  if (isset($conf_UAM[28]) and $conf_UAM[28] == 'true')
943  {
944    // Management of Extension flags ([mygallery], [myurl])
945    $patterns[] = '#\[mygallery\]#i';
946    $replacements[] = $conf['gallery_title'];
947    $patterns[] = '#\[myurl\]#i';
948    $replacements[] = get_gallery_home_url();
949   
950    $infos = preg_replace($patterns, $replacements, $conf_UAM[29])."\n"."\n".$infos;
951  }
952  return $infos;
953}
954
955
956/**
957 * Function called from main.inc.php to send validation email
958 *
959 * @param : Type of email, user id, username, email address, confirmation (optional)
960 *
961 */
962function SendMail2User($typemail, $id, $username, $password, $email, $confirm)
963{
964  global $conf;
965
966  $conf_UAM = unserialize($conf['UserAdvManager']);
967
968                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
969
970                $infos1_perso = "";
971  $infos2_perso = "";
972  $subject = "";
973
974// We have to get the user's language in database
975// ----------------------------------------------
976  $query ='
977SELECT user_id, language
978FROM '.USER_INFOS_TABLE.'
979WHERE user_id = '.$id.'
980;';
981  $data = pwg_db_fetch_assoc(pwg_query($query));
982
983// Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language
984// -------------------------------------------------------------------------------------------------------------------------------
985  if (empty($data))
986  {
987// And switch gallery to this language before using personalized and multilangual contents
988// ---------------------------------------------------------------------------------------
989    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
990    switch_lang_to($language);
991  }
992  else
993  {
994// And switch gallery to this language before using personalized and multilangual contents
995// ---------------------------------------------------------------------------------------
996    //$language = $data['language']; // Usefull for debugging
997    switch_lang_to($data['language']);
998    load_language('plugin.lang', UAM_PATH);
999  }
1000
1001  switch($typemail)
1002  {
1003    case 1: // Confirmation email on user registration - Without information email (already managed by Piwigo)
1004      if (isset($conf_UAM[41]) and $conf_UAM[41] <> '')
1005      {
1006        // Management of Extension flags ([username], [mygallery])
1007        // -------------------------------------------------------
1008        $patterns[] = '#\[username\]#i';
1009        $replacements[] = $username;
1010        $patterns[] = '#\[mygallery\]#i';
1011        $replacements[] = $conf['gallery_title'];
1012   
1013        if (function_exists('get_user_language_desc'))
1014        {
1015          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[41]))."\n\n";
1016        }
1017        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[41]))."\n\n"; 
1018      }
1019
1020      break;
1021     
1022    case 2: // Confirmation email on user profile update - With information email if modification done in user profile
1023      if (isset($conf_UAM[41]) and $conf_UAM[41] <> '')
1024      {
1025        // Management of Extension flags ([username], [mygallery])
1026        // -------------------------------------------------------
1027        $patterns[] = '#\[username\]#i';
1028        $replacements[] = $username;
1029        $patterns[] = '#\[mygallery\]#i';
1030        $replacements[] = $conf['gallery_title'];
1031   
1032        if (function_exists('get_user_language_desc'))
1033        {
1034          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[41]))."\n\n";
1035        }
1036        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[41]))."\n\n"; 
1037      }
1038
1039      $password = $password <> '' ? $password : l10n('UAM_empty_pwd');
1040
1041      if (isset($conf_UAM[8]) and $conf_UAM[8] <> '')
1042      {
1043        // Management of Extension flags ([username], [mygallery], [myurl])
1044        // ----------------------------------------------------------------
1045        $patterns[] = '#\[username\]#i';
1046        $replacements[] = $username;
1047        $patterns[] = '#\[mygallery\]#i';
1048        $replacements[] = $conf['gallery_title'];
1049        $patterns[] = '#\[myurl\]#i';
1050        $replacements[] = get_gallery_home_url();
1051   
1052        if (function_exists('get_user_language_desc'))
1053        {
1054          $infos1_perso = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[8]))."\n\n";
1055        }
1056        else $infos1_perso = l10n(preg_replace($patterns, $replacements, $conf_UAM[8]))."\n\n"; 
1057      }
1058
1059      if (isset($conf_UAM[0]) and $conf_UAM[0] == 'true')
1060      {
1061        if (isset($conf_UAM[34]) and $conf_UAM[34] == 'true') // Allow display of clear password in email
1062        {
1063          $infos1 = array(
1064            get_l10n_args('UAM_infos_mail %s', stripslashes($username)),
1065            get_l10n_args('UAM_User: %s', stripslashes($username)),
1066            get_l10n_args('UAM_Password: %s', $password),
1067            get_l10n_args('Email: %s', $email),
1068            get_l10n_args('', ''),
1069          );
1070        }
1071        else // Do not allow display of clear password in email
1072        {
1073          $infos1 = array(
1074            get_l10n_args('UAM_infos_mail %s', stripslashes($username)),
1075            get_l10n_args('UAM_User: %s', stripslashes($username)),
1076            get_l10n_args('Email: %s', $email),
1077            get_l10n_args('', ''),
1078          );
1079        }
1080      }
1081
1082      break;
1083       
1084    case 3: // Only information email send to user if checked
1085      if (isset($conf_UAM[43]) and $conf_UAM[43] <> '')
1086      {
1087        // Management of Extension flags ([username], [mygallery])
1088        // -------------------------------------------------------
1089        $patterns[] = '#\[username\]#i';
1090        $replacements[] = $username;
1091        $patterns[] = '#\[mygallery\]#i';
1092        $replacements[] = $conf['gallery_title'];
1093   
1094        if (function_exists('get_user_language_desc'))
1095        {
1096          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[43]))."\n\n";
1097        }
1098        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[43]))."\n\n"; 
1099      }
1100
1101      $password = $password <> '' ? $password : l10n('UAM_no_update_pwd');
1102
1103      if (isset($conf_UAM[8]) and $conf_UAM[8] <> '')
1104      {
1105        // Management of Extension flags ([username], [mygallery], [myurl])
1106        // ----------------------------------------------------------------
1107        $patterns[] = '#\[username\]#i';
1108        $replacements[] = $username;
1109        $patterns[] = '#\[mygallery\]#i';
1110        $replacements[] = $conf['gallery_title'];
1111        $patterns[] = '#\[myurl\]#i';
1112        $replacements[] = get_gallery_home_url();
1113   
1114        if (function_exists('get_user_language_desc'))
1115        {
1116          $infos1_perso = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[8]))."\n\n";
1117        }
1118        else $infos1_perso = l10n(preg_replace($patterns, $replacements, $conf_UAM[8]))."\n\n"; 
1119      }
1120
1121      if (isset($conf_UAM[0]) and $conf_UAM[0] == 'true')
1122      {
1123        if (isset($conf_UAM[34]) and $conf_UAM[34] == 'true') // Allow display of clear password in email
1124        {
1125          $infos1 = array(
1126            get_l10n_args('UAM_infos_mail %s', stripslashes($username)),
1127            get_l10n_args('UAM_User: %s', stripslashes($username)),
1128            get_l10n_args('UAM_Password: %s', $password),
1129            get_l10n_args('Email: %s', $email),
1130            get_l10n_args('', ''),
1131          );
1132        }
1133        else // Do not allow display of clear password in email
1134        {
1135          $infos1 = array(
1136            get_l10n_args('UAM_infos_mail %s', stripslashes($username)),
1137            get_l10n_args('UAM_User: %s', stripslashes($username)),
1138            get_l10n_args('Email: %s', $email),
1139            get_l10n_args('', ''),
1140          );
1141        }
1142      }
1143
1144      break;
1145  }
1146
1147  if (isset($conf_UAM[1]) and ($conf_UAM[1] == 'true' or $conf_UAM[1] == 'local')  and $confirm) // Add confirmation link ?
1148  {
1149    $infos2 = array
1150    (
1151      get_l10n_args('UAM_Link: %s', AddConfirmMail($id, $email)),
1152      get_l10n_args('', ''),
1153    );
1154
1155    if (isset($conf_UAM[9]) and $conf_UAM[9] <> '') // Add personal text in confirmation email ?
1156    {
1157      // Management of Extension flags ([username], [mygallery], [myurl], [Kdays])
1158      // -------------------------------------------------------------------------
1159      $patterns[] = '#\[username\]#i';
1160      $replacements[] = $username;
1161      $patterns[] = '#\[mygallery\]#i';
1162      $replacements[] = $conf['gallery_title'];
1163      $patterns[] = '#\[myurl\]#i';
1164      $replacements[] = get_gallery_home_url();
1165     
1166      if (isset($conf_UAM_ConfirmMail[0]) and $conf_UAM_ConfirmMail[0] == 'true') // [Kdays] replacement only if related option is active
1167      {
1168        $patterns[] = '#\[Kdays\]#i';
1169        $replacements[] = $conf_UAM_ConfirmMail[1];
1170      }
1171     
1172      if (function_exists('get_user_language_desc'))
1173      {
1174        $infos2_perso = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[9]))."\n\n";
1175      }
1176      else $infos2_perso = l10n(preg_replace($patterns, $replacements, $conf_UAM[9]))."\n\n";
1177    }
1178  }
1179
1180// Sending the email with subject and contents
1181// -------------------------------------------
1182                if (isset($conf_UAM[1]) and $conf_UAM[1] == 'local')
1183                {
1184                pwg_mail(get_webmaster_mail_address(), array(
1185                'subject' => $subject,
1186      'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1187    ));
1188                }
1189                else
1190                {
1191                pwg_mail($email, array(
1192                'subject' => $subject,
1193                'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1194                ));
1195                }
1196// Switching back to default language
1197// ----------------------------------
1198switch_lang_back();
1199}
1200
1201
1202/**
1203 * Function called from UAM_admin.php to resend validation email with or without new validation key
1204 *
1205 * @param : Type of email, user id, username, email address, confirmation (optional)
1206 *
1207 */
1208function ResendMail2User($typemail, $user_id, $username, $email, $confirm)
1209{
1210  global $conf;
1211 
1212  $subject = "";
1213
1214  $conf_UAM = unserialize($conf['UserAdvManager']);
1215
1216  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
1217 
1218                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1219 
1220// We have to get the user's language in database
1221// ----------------------------------------------
1222  $query ='
1223SELECT user_id, language
1224FROM '.USER_INFOS_TABLE.'
1225WHERE user_id = '.$user_id.'
1226;';
1227  $data = pwg_db_fetch_assoc(pwg_query($query));
1228  $language = $data['language'];
1229 
1230// And switch gallery to this language before using personalized and multilangual contents
1231// ---------------------------------------------------------------------------------------
1232  switch_lang_to($data['language']);
1233   
1234  load_language('plugin.lang', UAM_PATH);
1235
1236  switch($typemail)
1237  {
1238    case 1: //Generating email content for remind with a new key
1239      if (isset($conf_UAM[42]) and $conf_UAM[42] <> '')
1240      {
1241        // Management of Extension flags ([username], [mygallery])
1242        // -------------------------------------------------------
1243        $patterns[] = '#\[username\]#i';
1244        $replacements[] = $username;
1245        $patterns[] = '#\[mygallery\]#i';
1246        $replacements[] = $conf['gallery_title'];
1247   
1248        if (function_exists('get_user_language_desc'))
1249        {
1250          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n";
1251        }
1252        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n"; 
1253      }
1254     
1255      if (isset($conf_UAM_ConfirmMail[2]) and $conf_UAM_ConfirmMail[2] <> '' and isset($conf_UAM_ConfirmMail[3]) and $conf_UAM_ConfirmMail[3] == 'true' and $confirm)
1256      {
1257                // Management of Extension flags ([username], [mygallery], [myurl], [Kdays])
1258        // -------------------------------------------------------------------------
1259        $patterns[] = '#\[username\]#i';
1260        $replacements[] = $username;
1261        $patterns[] = '#\[mygallery\]#i';
1262        $replacements[] = $conf['gallery_title'];
1263        $patterns[] = '#\[myurl\]#i';
1264        $replacements[] = get_gallery_home_url();
1265
1266        if (isset($conf_UAM_ConfirmMail[0]) and $conf_UAM_ConfirmMail[0] == 'true') // [Kdays] replacement only if related option is active
1267        {
1268          $patterns[] = '#\[Kdays\]#i';
1269          $replacements[] = $conf_UAM_ConfirmMail[1];
1270        }
1271
1272        if (function_exists('get_user_language_desc'))
1273        {
1274          $infos1 = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[2]))."\n\n";
1275        }
1276                                else $infos1 = l10n(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[2]))."\n\n";
1277
1278        $infos2 = array
1279        (
1280          get_l10n_args('UAM_Link: %s', ResetConfirmMail($user_id)),
1281          get_l10n_args('', ''),
1282        );       
1283                                                }
1284
1285// Set reminder true
1286// -----------------     
1287      $query = '
1288UPDATE '.USER_CONFIRM_MAIL_TABLE.'
1289SET reminder = "true"
1290WHERE user_id = '.$user_id.'
1291;';
1292      pwg_query($query);
1293     
1294                                break;
1295     
1296    case 2: //Generating email content for remind without a new key
1297      if (isset($conf_UAM[42]) and $conf_UAM[42] <> '')
1298      {
1299        // Management of Extension flags ([username], [mygallery])
1300        // -------------------------------------------------------
1301        $patterns[] = '#\[username\]#i';
1302        $replacements[] = $username;
1303        $patterns[] = '#\[mygallery\]#i';
1304        $replacements[] = $conf['gallery_title'];
1305   
1306        if (function_exists('get_user_language_desc'))
1307        {
1308          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n";
1309        }
1310        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n"; 
1311      }
1312     
1313      if (isset($conf_UAM_ConfirmMail[4]) and $conf_UAM_ConfirmMail[4] <> '' and isset($conf_UAM_ConfirmMail[3]) and $conf_UAM_ConfirmMail[3] == 'true' and !$confirm)
1314      {
1315        // Management of Extension flags ([username], [mygallery], [myurl], [Kdays])
1316        // -------------------------------------------------------------------------
1317        $patterns[] = '#\[username\]#i';
1318        $replacements[] = $username;
1319        $patterns[] = '#\[mygallery\]#i';
1320        $replacements[] = $conf['gallery_title'];
1321        $patterns[] = '#\[myurl\]#i';
1322        $replacements[] = get_gallery_home_url();
1323
1324        if (isset($conf_UAM_ConfirmMail[0]) and $conf_UAM_ConfirmMail[0] == 'true') // [Kdays] replacement only if related option is active
1325        {
1326          $patterns[] = '#\[Kdays\]#i';
1327          $replacements[] = $conf_UAM_ConfirmMail[1];
1328        }
1329       
1330        if (function_exists('get_user_language_desc'))
1331        {
1332          $infos1 = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[4]))."\n\n";
1333        }
1334        else $infos1 = l10n(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[4]))."\n\n";
1335      }
1336     
1337// Set reminder true
1338// -----------------
1339      $query = '
1340UPDATE '.USER_CONFIRM_MAIL_TABLE.'
1341SET reminder = "true"
1342WHERE user_id = '.$user_id.'
1343;';
1344      pwg_query($query);
1345     
1346    break;
1347        }
1348 
1349  pwg_mail($email, array(
1350    'subject' => $subject,
1351    'content' => ($infos1."\n\n").(isset($infos2) ? l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1352  ));
1353
1354                // Switching back to default language
1355                // ----------------------------------
1356                switch_lang_back();
1357}
1358
1359
1360/**
1361 * Function called from UAM_admin.php to send a reminder mail for ghost users
1362 *
1363 * @param : User id, username, email address
1364 *
1365 */
1366function ghostreminder($user_id, $username, $email)
1367{
1368  global $conf;
1369
1370  $conf_UAM = unserialize($conf['UserAdvManager']);
1371  $subject = "";
1372 
1373                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1374
1375// We have to get the user's language in database
1376// ----------------------------------------------
1377  $query ='
1378SELECT user_id, language
1379FROM '.USER_INFOS_TABLE.'
1380WHERE user_id = '.$user_id.'
1381;';
1382  $data = pwg_db_fetch_assoc(pwg_query($query));
1383  $language = $data['language'];
1384
1385// And switch gallery to this language before using personalized and multilangual contents
1386// ---------------------------------------------------------------------------------------
1387  switch_lang_to($data['language']);
1388   
1389  load_language('plugin.lang', UAM_PATH);
1390
1391  if (isset($conf_UAM[45]) and $conf_UAM[45] <> '')
1392  {
1393    // Management of Extension flags ([username], [mygallery])
1394    // -------------------------------------------------------
1395    $patterns[] = '#\[username\]#i';
1396    $replacements[] = $username;
1397    $patterns[] = '#\[mygallery\]#i';
1398    $replacements[] = $conf['gallery_title'];
1399
1400    if (function_exists('get_user_language_desc'))
1401    {
1402      $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[45]))."\n\n";
1403    }
1404    else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[45]))."\n\n"; 
1405  }
1406
1407  if (isset($conf_UAM[17]) and $conf_UAM[17] <> '' and isset($conf_UAM[15]) and $conf_UAM[15] == 'true')
1408  {
1409    // Management of Extension flags ([username], [mygallery], [myurl], [days])
1410    // ------------------------------------------------------------------------
1411    $patterns[] = '#\[username\]#i';
1412    $replacements[] = $username;
1413    $patterns[] = '#\[mygallery\]#i';
1414    $replacements[] = $conf['gallery_title'];
1415    $patterns[] = '#\[myurl\]#i';
1416    $replacements[] = get_gallery_home_url();
1417    $patterns[] = '#\[days\]#i';
1418    $replacements[] = $conf_UAM[16];
1419
1420    if (function_exists('get_user_language_desc'))
1421    {
1422      $infos1 = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[17]))."\n\n";
1423    }
1424    else
1425    {
1426      $infos1 = l10n(preg_replace($patterns, $replacements, $conf_UAM[17]))."\n\n";
1427    }
1428
1429    resetlastvisit($user_id);
1430  }
1431
1432  pwg_mail($email, array(
1433    'subject' => $subject,
1434    'content' => $infos1.get_absolute_root_url(),
1435  ));
1436
1437                // Switching back to default language
1438                // ----------------------------------
1439                switch_lang_back();
1440}
1441
1442
1443/**
1444 * Function called from functions.inc.php to send notification email when user have been downgraded
1445 *
1446 * @param : user id, username, email address
1447 *
1448 */
1449function demotion_mail($id, $username, $email)
1450{
1451  global $conf;
1452
1453  $conf_UAM = unserialize($conf['UserAdvManager']);
1454 
1455                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1456 
1457                $custom_txt = "";
1458                $subject = "";
1459
1460// We have to get the user's language in database
1461// ----------------------------------------------
1462  $query = '
1463SELECT user_id, language
1464FROM '.USER_INFOS_TABLE.'
1465WHERE user_id = '.$id.'
1466;';
1467  $data = pwg_db_fetch_assoc(pwg_query($query));
1468
1469// Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language
1470// -------------------------------------------------------------------------------------------------------------------------------
1471  if (empty($data))
1472  {
1473// And switch gallery to this language before using personalized and multilangual contents
1474// ---------------------------------------------------------------------------------------
1475    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
1476    switch_lang_to($language);
1477  }
1478  else
1479  {
1480// And switch gallery to this language before using personalized and multilangual contents
1481// ---------------------------------------------------------------------------------------
1482    $language = $data['language']; // Usefull for debugging
1483    switch_lang_to($data['language']);
1484    load_language('plugin.lang', UAM_PATH);
1485  }
1486
1487  if (isset($conf_UAM[44]) and $conf_UAM[44] <> '')
1488  {
1489    // Management of Extension flags ([username], [mygallery])
1490    // -------------------------------------------------------
1491    $patterns[] = '#\[username\]#i';
1492    $replacements[] = $username;
1493    $patterns[] = '#\[mygallery\]#i';
1494    $replacements[] = $conf['gallery_title'];
1495
1496    if (function_exists('get_user_language_desc'))
1497    {
1498      $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[44]))."\n\n";
1499    }
1500    else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[44]))."\n\n"; 
1501  }
1502     
1503  if (isset($conf_UAM[24]) and $conf_UAM[24] <> '')
1504  {
1505    // Management of Extension flags ([username], [mygallery], [myurl])
1506    // ----------------------------------------------------------------
1507    $patterns[] = '#\[username\]#i';
1508    $replacements[] = stripslashes($username);
1509    $patterns[] = '#\[mygallery\]#i';
1510    $replacements[] = $conf['gallery_title'];
1511    $patterns[] = '#\[myurl\]#i';
1512    $replacements[] = get_gallery_home_url();
1513
1514    if (function_exists('get_user_language_desc'))
1515    {
1516      $custom_txt = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[24]))."\n\n";
1517    }
1518    else $custom_txt = l10n(preg_replace($patterns, $replacements, $conf_UAM[24]))."\n\n"; 
1519  }
1520
1521  $infos1 = array(
1522    get_l10n_args('UAM_User: %s', stripslashes($username)),
1523    get_l10n_args('Email: %s', $email),
1524    get_l10n_args('', ''),
1525  );
1526
1527  $infos2 = array
1528  (
1529    get_l10n_args('UAM_Link: %s', ResetConfirmMail($id)),
1530    get_l10n_args('', ''),
1531  ); 
1532
1533  resetlastvisit($id);
1534
1535// Sending the email with subject and contents
1536// -------------------------------------------
1537  pwg_mail($email, array(
1538    'subject' => $subject,
1539    'content' => ($custom_txt.l10n_args($infos1)."\n\n".l10n_args($infos2)."\n\n").get_absolute_root_url(),
1540  ));
1541
1542                // Switching back to default language
1543                // ----------------------------------
1544                switch_lang_back();
1545}
1546
1547
1548/**
1549 * Function called from UAM_admin.php to send notification email when user registration have been manually validated by admin
1550 *
1551 * @param : user id
1552 *
1553 */
1554function validation_mail($id)
1555{
1556  global $conf;
1557
1558  $conf_UAM = unserialize($conf['UserAdvManager']);
1559 
1560                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1561 
1562                $custom_txt = "";
1563  $subject = "";
1564
1565// We have to get the user's language in database
1566// ----------------------------------------------
1567  $query ='
1568SELECT user_id, language
1569FROM '.USER_INFOS_TABLE.'
1570WHERE user_id = '.$id.'
1571;';
1572  $data = pwg_db_fetch_assoc(pwg_query($query));
1573
1574// Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language
1575// -------------------------------------------------------------------------------------------------------------------------------
1576  if (empty($data))
1577  {
1578// And switch gallery to this language before using personalized and multilangual contents
1579// ---------------------------------------------------------------------------------------
1580    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
1581    switch_lang_to($language);
1582  }
1583  else
1584  {
1585// And switch gallery to this language before using personalized and multilangual contents
1586// ---------------------------------------------------------------------------------------
1587    $language = $data['language']; // Usefull for debugging
1588    switch_lang_to($data['language']);
1589    load_language('plugin.lang', UAM_PATH);
1590  }
1591
1592// Retreive users email and user name from id
1593// ------------------------------------------
1594  $query ='
1595SELECT id, username, mail_address
1596FROM '.USERS_TABLE.'
1597WHERE id = '.$id.'
1598;';
1599  $result = pwg_db_fetch_assoc(pwg_query($query));
1600
1601  if (isset($conf_UAM[46]) and $conf_UAM[46] <> '')
1602  {
1603    // Management of Extension flags ([username], [mygallery])
1604    // -------------------------------------------------------
1605    $patterns[] = '#\[username\]#i';
1606    $replacements[] = $result['username'];
1607    $patterns[] = '#\[mygallery\]#i';
1608    $replacements[] = $conf['gallery_title'];
1609
1610    if (function_exists('get_user_language_desc'))
1611    {
1612      $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[46]))."\n\n";
1613    }
1614    else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[46]))."\n\n"; 
1615  }
1616     
1617  if (isset($conf_UAM[27]) and $conf_UAM[27] <> '')
1618  {
1619    // Management of Extension flags ([username], [mygallery], [myurl])
1620    // ----------------------------------------------------------------
1621    $patterns[] = '#\[username\]#i';
1622    $replacements[] = $result['username'];
1623    $patterns[] = '#\[mygallery\]#i';
1624    $replacements[] = $conf['gallery_title'];
1625    $patterns[] = '#\[myurl\]#i';
1626    $replacements[] = get_gallery_home_url();
1627
1628    if (function_exists('get_user_language_desc'))
1629    {
1630      $custom_txt = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[27]))."\n\n";
1631    }
1632    else $custom_txt = l10n(preg_replace($patterns, $replacements, $conf_UAM[27]))."\n\n"; 
1633  }
1634
1635  $infos = array(
1636    get_l10n_args('UAM_User: %s', stripslashes($result['username'])),
1637    get_l10n_args('Email: %s', $result['mail_address']),
1638    get_l10n_args('', ''),
1639  );
1640
1641// Sending the email with subject and contents
1642// -------------------------------------------
1643  pwg_mail($result['mail_address'], array(
1644    'subject' => $subject,
1645    'content' => (l10n_args($infos)."\n\n".$custom_txt),
1646  ));
1647
1648                // Switching back to default language
1649                // ----------------------------------
1650                switch_lang_back();
1651}
1652
1653
1654/**
1655 * Function called from functions AddConfirmMail and ResetConfirmMail for validation key generation
1656 *
1657 * @return : validation key
1658 *
1659 */
1660function FindAvailableConfirmMailID()
1661{
1662  while (true)
1663  {
1664    $id = generate_key(16);
1665    $query = '
1666SELECT COUNT(*)
1667  FROM '.USER_CONFIRM_MAIL_TABLE.'
1668WHERE id = "'.$id.'"
1669;';
1670    list($count) = pwg_db_fetch_row(pwg_query($query));
1671
1672    if ($count == 0)
1673      return $id;
1674  }
1675}
1676
1677
1678/**
1679 * Function called from functions SendMail2User to process unvalidated users and generate validation key link
1680 *
1681 * @param : User id, email address
1682 *
1683 * @return : Build validation key in URL
1684 *
1685 */
1686function AddConfirmMail($user_id, $email)
1687{
1688  global $conf;
1689
1690  $conf_UAM = unserialize($conf['UserAdvManager']);
1691  $Confirm_Mail_ID = FindAvailableConfirmMailID();
1692
1693  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
1694 
1695  if (isset($Confirm_Mail_ID))
1696  {
1697    $query = '
1698SELECT status
1699  FROM '.USER_INFOS_TABLE.'
1700WHERE user_id = '.$user_id.'
1701;';
1702    list($status) = pwg_db_fetch_row(pwg_query($query));
1703   
1704    $query = '
1705INSERT INTO '.USER_CONFIRM_MAIL_TABLE.'
1706  (id, user_id, mail_address, status, date_check)
1707VALUES
1708  ("'.$Confirm_Mail_ID.'", '.$user_id.', "'.$email.'", "'.$status.'", null)
1709;';
1710    pwg_query($query);
1711
1712    // Delete user from all groups
1713    // ---------------------------
1714    $query = '
1715DELETE FROM '.USER_GROUP_TABLE.'
1716WHERE user_id = '.$user_id.'
1717  AND (
1718    group_id = '.$conf_UAM[2].'
1719  OR
1720    group_id = '.$conf_UAM[3].'
1721  )
1722;';
1723    pwg_query($query);
1724
1725    // Set user unvalidated status
1726    // ---------------------------
1727    if (!is_admin() and $conf_UAM[7] <> -1)
1728    {
1729      $query = '
1730UPDATE '.USER_INFOS_TABLE.'
1731SET status = "'.$conf_UAM[7].'"
1732WHERE user_id = '.$user_id.'
1733;';
1734      pwg_query($query);
1735    }
1736
1737    // Set user unvalidated group
1738    // --------------------------
1739    if (!is_admin() and $conf_UAM[2] <> -1)
1740    {
1741      $query = '
1742INSERT INTO '.USER_GROUP_TABLE.'
1743  (user_id, group_id)
1744VALUES
1745  ('.$user_id.', '.$conf_UAM[2].')
1746;';
1747      pwg_query($query);
1748    }
1749
1750    // Set user unvalidated privacy level
1751    // ----------------------------------
1752    if (!is_admin() and $conf_UAM[35] <> -1)
1753    {
1754      $query = '
1755UPDATE '.USER_INFOS_TABLE.'
1756SET level = "'.$conf_UAM[35].'"
1757WHERE user_id = '.$user_id.'
1758;';
1759      pwg_query($query);
1760    }
1761   
1762    // Set UAM_validated field to false in #_users table
1763    // -------------------------------------------------
1764    SetUnvalidated($user_id);
1765   
1766    return get_absolute_root_url().UAM_PATH.'ConfirmMail.php?key='.$Confirm_Mail_ID.'&userid='.$user_id;
1767  }
1768}
1769
1770
1771/**
1772 * Function called from UAM_Adduser() to set group/status/level to new users if manual validation is set
1773 *
1774 * @param : User id
1775 *
1776 *
1777 */
1778function SetPermission($user_id)
1779{
1780  global $conf;
1781 
1782  $conf_UAM = unserialize($conf['UserAdvManager']);
1783
1784// Groups cleanup
1785// --------------
1786  $query = '
1787DELETE FROM '.USER_GROUP_TABLE.'
1788WHERE user_id = '.$user_id.'
1789  AND (
1790    group_id = '.$conf_UAM[2].'
1791  OR
1792    group_id = '.$conf_UAM[3].'
1793  )
1794;';
1795  pwg_query($query);
1796
1797  if (!is_admin() and $conf_UAM[7] <> -1) // Set status
1798  {
1799    $query = '
1800UPDATE '.USER_INFOS_TABLE.'
1801SET status = "'.$conf_UAM[7].'"
1802WHERE user_id = '.$user_id.'
1803;';
1804    pwg_query($query);
1805  }
1806
1807  if (!is_admin() and $conf_UAM[2] <> -1) // Set group
1808  {
1809    $query = '
1810INSERT INTO '.USER_GROUP_TABLE.'
1811  (user_id, group_id)
1812VALUES
1813  ('.$user_id.', '.$conf_UAM[2].')
1814;';
1815    pwg_query($query);
1816  }
1817
1818  if (!is_admin() and $conf_UAM[35] <> -1) // Set privacy level
1819  {
1820    $query = '
1821INSERT INTO '.USER_INFOS_TABLE.'
1822  (user_id, level)
1823VALUES
1824  ('.$user_id.', "'.$conf_UAM[35].'")
1825;';
1826    pwg_query($query);
1827  }
1828}
1829
1830
1831/**
1832 * Function called from UAM_admin.php to reset validation key
1833 *
1834 * @param : User id
1835 *
1836 * @return : Build validation key in URL
1837 *
1838 */
1839function ResetConfirmMail($user_id)
1840{
1841  global $conf;
1842 
1843  $Confirm_Mail_ID = FindAvailableConfirmMailID();
1844
1845  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
1846 
1847  if (isset($Confirm_Mail_ID))
1848  { 
1849    $query = '
1850UPDATE '.USER_CONFIRM_MAIL_TABLE.'
1851SET id = "'.$Confirm_Mail_ID.'"
1852WHERE user_id = '.$user_id.'
1853;';
1854    pwg_query($query);
1855
1856                                $query = '
1857UPDATE '.USER_INFOS_TABLE.'
1858SET registration_date = "'.$dbnow.'"
1859WHERE user_id = '.$user_id.'
1860;';
1861                                pwg_query($query);
1862   
1863    return get_absolute_root_url().UAM_PATH.'ConfirmMail.php?key='.$Confirm_Mail_ID.'&userid='.$user_id;
1864  }
1865}
1866
1867
1868/**
1869 * Function called from functions.inc.php to reset last visit date after sending a reminder
1870 *
1871 * @param : User id
1872 *
1873 */
1874function resetlastvisit($user_id)
1875{
1876  global $conf;
1877
1878  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
1879
1880  $query = '
1881UPDATE '.USER_LASTVISIT_TABLE.'
1882SET lastvisit = "'.$dbnow.'", reminder = "true"
1883WHERE user_id = '.$user_id.'
1884;';
1885  pwg_query($query);
1886}
1887
1888
1889/**
1890 * Function called from main.inc.php - Triggered on user deletion
1891 *
1892 */
1893function DeleteConfirmMail($user_id)
1894{
1895  $query = '
1896DELETE FROM '.USER_CONFIRM_MAIL_TABLE.'
1897WHERE user_id = '.$user_id.'
1898;';
1899  pwg_query($query);
1900}
1901
1902/**
1903 * Function called from main.inc.php - Triggered on user deletion
1904 *
1905 */
1906function DeleteLastVisit($user_id)
1907{
1908  $query = '
1909DELETE FROM '.USER_LASTVISIT_TABLE.'
1910WHERE user_id = '.$user_id.'
1911;';
1912  pwg_query($query);
1913}
1914
1915
1916/**
1917 * Function called from main.inc.php - Triggered on user deletion
1918 *
1919 * @param : User id
1920 *
1921 */
1922function DeleteRedir($user_id)
1923{
1924  $tab = array();
1925
1926  $query = '
1927SELECT value
1928FROM '.CONFIG_TABLE.'
1929WHERE param = "UserAdvManager_Redir"
1930;';
1931
1932  $tab = pwg_db_fetch_row(pwg_query($query));
1933 
1934  $values = explode(',', $tab[0]);
1935
1936  unset($values[array_search($user_id, $values)]);
1937     
1938  $query = '
1939UPDATE '.CONFIG_TABLE.'
1940SET value = "'.implode(',', $values).'"
1941WHERE param = "UserAdvManager_Redir";';
1942
1943  pwg_query($query);
1944}
1945
1946
1947/**
1948 * Function called from ConfirmMail.php to verify validation key used by user according time limit
1949 * Return true is key validation is OK else return false
1950 *
1951 * @param : User id
1952 *
1953 * @return : Bool
1954 *
1955 */
1956function VerifyConfirmMail($id)
1957{
1958  global $conf;
1959
1960  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
1961 
1962  $conf_UAM = unserialize($conf['UserAdvManager']);
1963
1964  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
1965
1966  $query = '
1967SELECT COUNT(*)
1968FROM '.USER_CONFIRM_MAIL_TABLE.'
1969WHERE id = "'.$id.'"
1970;';
1971  list($count) = pwg_db_fetch_row(pwg_query($query));
1972
1973  if ($count == 1)
1974  {
1975    $query = '
1976SELECT user_id, status, date_check
1977FROM '.USER_CONFIRM_MAIL_TABLE.'
1978WHERE id = "'.$id.'"
1979;';
1980    $data = pwg_db_fetch_assoc(pwg_query($query));
1981
1982    if (!empty($data) and isset($data['user_id']) and is_null($data['date_check']))
1983    {
1984      $query = '
1985SELECT registration_date
1986FROM '.USER_INFOS_TABLE.'
1987WHERE user_id = '.$data['user_id'].'
1988;';
1989      list($registration_date) = pwg_db_fetch_row(pwg_query($query));
1990
1991//              Time limit process             
1992// ******************************************** 
1993      if (!empty($registration_date))
1994      {
1995                                                                // Verify Confirmmail with time limit ON
1996                                // -------------------------------------
1997                                                                if (isset ($conf_UAM_ConfirmMail[1]))
1998                                                                {
1999                                                                                // Dates formating and compare
2000                                        // ---------------------------
2001                                                                                $today = date("d-m-Y"); // Get today's date
2002                                                                                list($day, $month, $year) = explode('-', $today); // explode date of today                                               
2003                                                                        $daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
2004
2005                                                                list($regdate, $regtime) = explode(' ', $registration_date); // Explode date and time from registration date
2006                                                                                list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
2007                                                                                $regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
2008
2009                                                                                $deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps     
2010                                                                                $deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
2011
2012                                                                                // Condition with the value set for time limit
2013                                        // -------------------------------------------
2014                                                                                if ($deltadays <= $conf_UAM_ConfirmMail[1]) // If Nb of days is less than the limit set
2015                                                                                {
2016                                                                                                list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
2017
2018                                        // Update ConfirmMail table
2019                                        // ------------------------
2020                                                                                                $query = '
2021UPDATE '.USER_CONFIRM_MAIL_TABLE.'
2022SET date_check="'.$dbnow.'", reminder="false"
2023WHERE id = "'.$id.'"
2024;';
2025                                                                                                pwg_query($query);
2026
2027                                        // Update LastVisit table - Force reminder field to false
2028                                        // Usefull when a user has been automatically downgraded and revalidate its registration
2029                                        // -------------------------------------------------------------------------------------
2030                                                                                                $query = '
2031UPDATE '.USER_LASTVISIT_TABLE.'
2032SET reminder="false"
2033WHERE user_id = "'.$data['user_id'].'"
2034;';
2035                                                                                                pwg_query($query);
2036     
2037                                                                                                if ($conf_UAM[2] <> -1) // Delete user from unvalidated users group
2038                                                                                                {
2039                                                                                                                $query = '
2040DELETE FROM '.USER_GROUP_TABLE.'
2041WHERE user_id = '.$data['user_id'].'
2042  AND group_id = '.$conf_UAM[2].'
2043;';
2044                                                                                                                pwg_query($query);
2045                                                                                                }
2046
2047                                                                                                if ($conf_UAM[3] <> -1) // Add user to validated users group
2048                                                                                                {
2049                                                                                                                $query = '
2050INSERT INTO '.USER_GROUP_TABLE.'
2051  (user_id, group_id)
2052VALUES
2053  ('.$data['user_id'].', '.$conf_UAM[3].')
2054;';
2055                                                                                                                pwg_query($query);
2056                                                                                                }
2057
2058                                                                                                if ($conf_UAM[4] <> -1) // Change user's status
2059                                                                                                {
2060                                                                                                                $query = '
2061UPDATE '.USER_INFOS_TABLE.'
2062SET status = "'.$conf_UAM[4].'"
2063WHERE user_id = '.$data['user_id'].'
2064;';
2065                                                                                                                pwg_query($query);
2066                                                                                                }
2067
2068                                                                                                if ($conf_UAM[36] <> -1) // Change user's privacy level
2069                                                                                                {
2070                                                                                                                $query = '
2071UPDATE '.USER_INFOS_TABLE.'
2072SET level = "'.$conf_UAM[36].'"
2073WHERE user_id = '.$data['user_id'].'
2074;';
2075                                                                                                                pwg_query($query);
2076                                                                                                }
2077
2078                                                                                                // Set UAM_validated field to True in #_users table
2079                                                                                                $query = '
2080UPDATE '.USERS_TABLE.'
2081SET UAM_validated = "true"
2082WHERE id = '.$data['user_id'].'
2083;';
2084                                                                                                pwg_query($query);
2085
2086                                                                                                // Refresh user's category cache
2087                                                // -----------------------------
2088                                                                                                invalidate_user_cache();
2089
2090                                                                                                return true;
2091                                                                                }
2092                                                                                elseif ($deltadays > $conf_UAM_ConfirmMail[1]) // If timelimit exeeds
2093                                                                                {
2094                                                                                                return false;
2095                                                                                }
2096                                                                }
2097                                                                // Verify Confirmmail with time limit OFF
2098                                // --------------------------------------
2099                                                                else
2100                                                                {
2101                                                                                list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
2102
2103                                // Update ConfirmMail table
2104                                // ------------------------
2105                                                                                $query = '
2106UPDATE '.USER_CONFIRM_MAIL_TABLE.'
2107SET date_check="'.$dbnow.'"
2108WHERE id = "'.$id.'"
2109;';
2110                                                                                pwg_query($query);
2111
2112                                // Update LastVisit table - Force reminder field to false
2113                                // Usefull when a user has been automatically downgraded and revalidate its registration
2114                                // -------------------------------------------------------------------------------------
2115                                                                                $query = '
2116UPDATE '.USER_LASTVISIT_TABLE.'
2117SET reminder="false"
2118WHERE user_id = "'.$data['user_id'].'"
2119;';
2120                                pwg_query($query);
2121
2122                                                                                if ($conf_UAM[2] <> -1) // Delete user from unvalidated users group
2123                                                                                {
2124                                                                                                $query = '
2125DELETE FROM '.USER_GROUP_TABLE.'
2126WHERE user_id = '.$data['user_id'].'
2127AND group_id = '.$conf_UAM[2].'
2128;';
2129                                                                                                pwg_query($query);
2130                                                                                }
2131
2132                                                                                if ($conf_UAM[3] <> -1)
2133                                                                                {
2134                                                                                                $query = '
2135DELETE FROM '.USER_GROUP_TABLE.'
2136WHERE user_id = '.$data['user_id'].'
2137AND group_id = '.$conf_UAM[3].'
2138;';
2139                                                                                                pwg_query($query);
2140
2141                                                                                                $query = '
2142INSERT INTO '.USER_GROUP_TABLE.'
2143  (user_id, group_id)
2144VALUES
2145  ('.$data['user_id'].', '.$conf_UAM[3].')
2146;';
2147                                                                                                pwg_query($query);
2148                                                                                }
2149
2150                                                                                if ($conf_UAM[4] <> -1) // Change user's status
2151                                                                                {
2152                                                                                                $query = '
2153UPDATE '.USER_INFOS_TABLE.'
2154SET status = "'.$conf_UAM[4].'"
2155WHERE user_id = '.$data['user_id'].'
2156;';
2157                                                                                                pwg_query($query);
2158                                                                                }
2159
2160                                                                                if ($conf_UAM[36] <> -1) // Change user's privacy level
2161                                                                                {
2162                                                                                                $query = '
2163UPDATE '.USER_INFOS_TABLE.'
2164SET level = "'.$conf_UAM[36].'"
2165WHERE user_id = '.$data['user_id'].'
2166;';
2167                                                                                                pwg_query($query);
2168                                                                                }
2169
2170                                                                                // Set UAM_validated field to True in #_users table
2171                                                                                $query = '
2172UPDATE '.USERS_TABLE.'
2173SET UAM_validated = "true"
2174WHERE id = '.$data['user_id'].'
2175;';
2176                                                                                pwg_query($query);
2177
2178                                                                                // Refresh user's category cache
2179                                // -----------------------------
2180                                                                                invalidate_user_cache();
2181
2182                                                                                return true;
2183                                                                }
2184                                                }
2185                                }
2186    else if (!empty($data) and !is_null($data['date_check']))
2187    {
2188      return false;
2189    }
2190                }
2191  else
2192    return false;
2193}
2194
2195
2196/**
2197 * Function called from UAM_admin.php for manual validation by admin
2198 *
2199 * @param : User id
2200 *
2201 */
2202function ManualValidation($id)
2203{
2204                global $conf;
2205
2206                $conf_UAM = unserialize($conf['UserAdvManager']);
2207
2208                if (isset($conf_UAM[1]) and $conf_UAM[1] == 'true') // Set date of validation
2209                {
2210                                list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
2211
2212                                $query = '
2213UPDATE '.USER_CONFIRM_MAIL_TABLE.'
2214SET date_check="'.$dbnow.'"
2215WHERE user_id = '.$id.'
2216;';
2217                                pwg_query($query);
2218                }
2219
2220                if ($conf_UAM[2] <> -1) // Delete user from waiting group
2221                {
2222                                $query = '
2223DELETE FROM '.USER_GROUP_TABLE.'
2224WHERE user_id = '.$id.'
2225                AND group_id = '.$conf_UAM[2].'
2226;';
2227                                pwg_query($query);
2228                }
2229 
2230                if ($conf_UAM[3] <> -1) // Set user's valid group
2231                {
2232                                $query = '
2233DELETE FROM '.USER_GROUP_TABLE.'
2234WHERE user_id = '.$id.'
2235                AND group_id = '.$conf_UAM[3].'
2236;';
2237                                pwg_query($query);
2238       
2239                                $query = '
2240INSERT INTO '.USER_GROUP_TABLE.'
2241                (user_id, group_id)
2242VALUES
2243                ('.$id.', '.$conf_UAM[3].')
2244;';
2245                                pwg_query($query);
2246                }
2247
2248                if ($conf_UAM[4] <> -1) // Set user's valid status
2249                {
2250                                $query = '
2251UPDATE '.USER_INFOS_TABLE.'
2252SET status = "'.$conf_UAM[4].'"
2253WHERE user_id = '.$id.'
2254;';
2255                                pwg_query($query);
2256                }
2257
2258                if ($conf_UAM[36] <> -1) // Set user's valid privacy level
2259                {
2260                                $query = '
2261UPDATE '.USER_INFOS_TABLE.'
2262SET level = "'.$conf_UAM[36].'"
2263WHERE user_id = '.$id.'
2264;';
2265                                pwg_query($query);
2266                }
2267
2268                // Set UAM_validated field to True in #_users table
2269                $query = '
2270UPDATE '.USERS_TABLE.'
2271SET UAM_validated = "true"
2272WHERE id = '.$id.'
2273;';
2274                pwg_query($query);
2275}
2276
2277
2278/**
2279 * Function called from functions.inc.php - Check if username matches forbidden caracters
2280 *
2281 * @param : User login
2282 *
2283 * @return : Bool
2284 *
2285 */
2286function ValidateUsername($login)
2287{
2288  global $conf;
2289
2290  $conf_UAM = unserialize($conf['UserAdvManager']);
2291
2292  if (isset($login) and isset($conf_UAM[6]) and $conf_UAM[6] <> '')
2293  {
2294    $conf_CharExclusion = preg_split("/,/",$conf_UAM[6]);
2295    for ($i = 0 ; $i < count($conf_CharExclusion) ; $i++)
2296    {
2297      $pattern = '/'.$conf_CharExclusion[$i].'/i';
2298      if (preg_match($pattern, $login))
2299      {
2300        return true;
2301      }
2302    }
2303  }
2304  else
2305  {
2306    return false;
2307  }
2308}
2309
2310
2311/**
2312 * Function called from main.inc.php - Check if user's email is in excluded email providers list
2313 * Doesn't work on call - Must be copied in main.inc.php to work
2314 *
2315 * @param : Email address
2316 *
2317 * @return : Bool
2318 *
2319 */
2320function ValidateEmailProvider($email)
2321{
2322  global $conf;
2323
2324  $conf_UAM = unserialize($conf['UserAdvManager']);
2325 
2326                if (isset($email) and isset($conf_UAM[11]) and $conf_UAM[11] <> '')
2327                {
2328                                $conf_MailExclusion = preg_split("/[\s,]+/",$conf_UAM[11]);
2329                                for ($i = 0 ; $i < count($conf_MailExclusion) ; $i++)
2330                                {
2331                                                $pattern = '/'.$conf_MailExclusion[$i].'/i';
2332                                                if (preg_match($pattern, $email))
2333      {
2334                return true;
2335      }
2336                                }
2337                }
2338  else
2339  {
2340    return false;
2341  }
2342}
2343
2344
2345/**
2346 * Function called from UAM_admin.php - Get unvalidated users according time limit
2347 *
2348 * @return : List of users
2349 *
2350 */
2351function get_unvalid_user_list()
2352{
2353                global $conf, $page;
2354         
2355                // Get ConfirmMail configuration
2356  // -----------------------------
2357  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2358  // Get UAM configuration
2359  // ---------------------
2360  $conf_UAM = unserialize($conf['UserAdvManager']);
2361 
2362  $users = array();
2363
2364                // Search users depending expiration date
2365  // --------------------------------------
2366  $query = '
2367SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2368                u.'.$conf['user_fields']['username'].' AS username,
2369                u.'.$conf['user_fields']['email'].' AS email,
2370                ui.status,
2371                ui.enabled_high,
2372                ui.level,
2373                ui.registration_date
2374FROM '.USERS_TABLE.' AS u
2375  INNER JOIN '.USER_INFOS_TABLE.' AS ui
2376    ON u.'.$conf['user_fields']['id'].' = ui.user_id
2377  LEFT JOIN '.USER_GROUP_TABLE.' AS ug
2378    ON u.'.$conf['user_fields']['id'].' = ug.user_id
2379WHERE u.'.$conf['user_fields']['id'].' >= 3
2380  AND (TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) >= "'.$conf_UAM_ConfirmMail[1].'"
2381  OR TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) < "'.$conf_UAM_ConfirmMail[1].'")';
2382
2383                if ($conf_UAM[2] <> '-1' and $conf_UAM[7] == '-1')
2384  {
2385    $query.= '
2386  AND ug.group_id = '.$conf_UAM[2];
2387  }
2388  if ($conf_UAM[2] == '-1' and $conf_UAM[7] <> '-1')
2389  {
2390    $query.= '
2391  AND ui.status = \''.$conf_UAM[7]."'";
2392  }
2393  if ($conf_UAM[2] <> '-1' and $conf_UAM[7] <> '-1')
2394  {
2395    $query.= '
2396  AND ug.group_id = '.$conf_UAM[2];
2397  }
2398
2399  $query.= '
2400ORDER BY ui.registration_date ASC
2401;';
2402
2403                $result = pwg_query($query);
2404     
2405  while ($row = pwg_db_fetch_assoc($result))
2406  {
2407                $user = $row;
2408    $user['groups'] = array();
2409
2410    array_push($users, $user);
2411                }
2412
2413                // Add groups list
2414  // ---------------
2415  $user_ids = array();
2416  foreach ($users as $i => $user)
2417  {
2418                $user_ids[$i] = $user['id'];
2419                }
2420
2421                $user_nums = array_flip($user_ids);
2422
2423  if (count($user_ids) > 0)
2424  {
2425                $query = '
2426SELECT user_id, group_id
2427  FROM '.USER_GROUP_TABLE.'
2428WHERE user_id IN ('.implode(',', $user_ids).')
2429;';
2430       
2431                                $result = pwg_query($query);
2432       
2433    while ($row = pwg_db_fetch_assoc($result))
2434    {
2435                array_push(
2436                $users[$user_nums[$row['user_id']]]['groups'],
2437        $row['group_id']
2438                                                );
2439                                }
2440                }
2441
2442                return $users;
2443}
2444
2445
2446/**
2447 * Function called from functions.inc.php - Get all users who haven't validate their registration in configured time
2448 * to delete or remail them automatically
2449 *
2450 * @return : List of users
2451 *
2452 */
2453function get_unvalid_user_autotasks()
2454{
2455                global $conf, $page;
2456         
2457                // Get ConfirmMail configuration
2458  // -----------------------------
2459  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2460 
2461  $users = array();
2462
2463                // search users depending expiration date
2464  // --------------------------------------
2465  $query = '
2466SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2467                ui.registration_date
2468FROM '.USERS_TABLE.' AS u
2469  INNER JOIN '.USER_INFOS_TABLE.' AS ui
2470    ON u.'.$conf['user_fields']['id'].' = ui.user_id
2471WHERE u.'.$conf['user_fields']['id'].' >= 3
2472  AND (TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) >= "'.$conf_UAM_ConfirmMail[1].'")
2473ORDER BY ui.registration_date ASC;';
2474
2475                $result = pwg_query($query);
2476
2477  while ($row = pwg_db_fetch_assoc($result))
2478  {
2479    array_push($users, $row);
2480                }
2481
2482                return $users;
2483}
2484
2485
2486/**
2487 * Function called from UAM_admin.php - Get ghost users
2488 *
2489 * @return : List of users
2490 *
2491 */
2492function get_ghost_user_list()
2493{
2494                global $conf, $page;
2495
2496  $conf_UAM = unserialize($conf['UserAdvManager']);
2497
2498  $users = array();
2499
2500                // Search users depending expiration date
2501  // --------------------------------------
2502  $query = '
2503SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2504                u.'.$conf['user_fields']['username'].' AS username,
2505                u.'.$conf['user_fields']['email'].' AS email,
2506                lv.lastvisit,
2507                lv.reminder
2508FROM '.USERS_TABLE.' AS u
2509  INNER JOIN '.USER_LASTVISIT_TABLE.' AS lv
2510    ON u.'.$conf['user_fields']['id'].' = lv.user_id
2511WHERE (TO_DAYS(NOW()) - TO_DAYS(lv.lastvisit) >= "'.$conf_UAM[16].'")
2512ORDER BY lv.lastvisit ASC;';
2513
2514                $result = pwg_query($query);
2515     
2516  while ($row = pwg_db_fetch_assoc($result))
2517  {
2518                $user = $row;
2519    $user['groups'] = array();
2520
2521    array_push($users, $user);
2522                }
2523
2524                // Add groups list
2525  // ---------------
2526  $user_ids = array();
2527  foreach ($users as $i => $user)
2528  {
2529        $user_ids[$i] = $user['id'];
2530                }
2531
2532                return $users;
2533}
2534
2535
2536/**
2537 * Function called from functions.inc.php - Get all ghost users to delete or downgrade automatically on any user login
2538 *
2539 * @return : List of users to delete or downgrade automatically
2540 *
2541 */
2542function get_ghosts_autotasks()
2543{
2544                global $conf, $page;
2545
2546  $conf_UAM = unserialize($conf['UserAdvManager']);
2547 
2548  $users = array();
2549 
2550                // Search users depending expiration date and reminder sent
2551  // --------------------------------------------------------
2552  $query = '
2553SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2554                lv.lastvisit
2555FROM '.USERS_TABLE.' AS u
2556  INNER JOIN '.USER_LASTVISIT_TABLE.' AS lv
2557    ON u.'.$conf['user_fields']['id'].' = lv.user_id
2558WHERE (TO_DAYS(NOW()) - TO_DAYS(lv.lastvisit) >= "'.$conf_UAM[16].'")
2559ORDER BY lv.lastvisit ASC;';
2560
2561                $result = pwg_query($query);
2562     
2563                while ($row = pwg_db_fetch_assoc($result))
2564  {
2565    array_push($users, $row);
2566                }
2567 
2568                return $users;
2569}
2570
2571
2572/**
2573 * Function called from UAM_admin.php - Get all users to display the number of days since their last visit
2574 *
2575 * @return : List of users
2576 *
2577 */
2578function get_user_list()
2579{
2580                global $conf, $page;
2581 
2582  $users = array();
2583
2584                // Search users depending expiration date with exclusion of Adult_Content generic users
2585  // ------------------------------------------------------------------------------------
2586  $query = '
2587SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2588                u.'.$conf['user_fields']['username'].' AS username,
2589                u.'.$conf['user_fields']['email'].' AS email,
2590                ug.lastvisit
2591FROM '.USERS_TABLE.' AS u
2592  INNER JOIN '.USER_LASTVISIT_TABLE.' AS ug
2593    ON u.'.$conf['user_fields']['id'].' = ug.user_id
2594WHERE u.'.$conf['user_fields']['id'].' >= 3
2595  AND u.username NOT LIKE "16"
2596  AND u.username NOT LIKE "18"
2597ORDER BY ug.lastvisit DESC
2598;';
2599
2600                $result = pwg_query($query);
2601     
2602  while ($row = pwg_db_fetch_assoc($result))
2603  {
2604                $user = $row;
2605    $user['groups'] = array();
2606
2607    array_push($users, $user);
2608                }
2609
2610                // Add groups list
2611  // ---------------
2612  $user_ids = array();
2613  foreach ($users as $i => $user)
2614  {
2615                        $user_ids[$i] = $user['id'];
2616                }
2617
2618                return $users;
2619}
2620
2621
2622/**
2623 * Function called from UAM_admin.php - to determine who is expired or not and giving a different display color
2624 *
2625 * @param : user id
2626 *
2627 * @return : Bool
2628 *
2629 */
2630function expiration($id)
2631{
2632        global $conf, $page;
2633         
2634                // Get ConfirmMail configuration
2635  // -----------------------------
2636  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2637         
2638                // Get UAM configuration
2639  // ---------------------
2640  $conf_UAM = unserialize($conf['UserAdvManager']);
2641       
2642                $query = '
2643SELECT registration_date
2644  FROM '.USER_INFOS_TABLE.'
2645WHERE user_id = '.$id.'
2646;';
2647                list($registration_date) = pwg_db_fetch_row(pwg_query($query));
2648
2649//              Time limit process             
2650// ******************************************** 
2651                if (!empty($registration_date))
2652  {
2653                                // Dates formating and compare
2654                // ---------------------------
2655                                $today = date("d-m-Y"); // Get today's date
2656                                list($day, $month, $year) = explode('-', $today); // explode date of today                                               
2657                        $daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
2658               
2659                list($regdate, $regtime) = explode(' ', $registration_date); // Explode date and time from registration date
2660                                list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
2661                                $regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
2662                       
2663                                $deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps     
2664                                $deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
2665
2666                                // Condition with the value set for time limit
2667    // -------------------------------------------
2668                                if ($deltadays <= $conf_UAM_ConfirmMail[1]) // If Nb of days is less than the limit set
2669                                {
2670                                                return false;
2671                                }
2672                                else
2673                                {
2674                                                return true;
2675                                }
2676                }
2677}
2678
2679
2680/**
2681 * Returns a password's score for password complexity check
2682 *
2683 * @param : password filled by user
2684 *
2685 * @return : Score calculation
2686 *
2687 * Thanx to MathieuGut from http://m-gut.developpez.com
2688 */
2689function testpassword($password) // $password given by user
2690{
2691
2692  // Variables initiation
2693  // --------------------
2694  $points = 0;
2695  $point_lowercase = 0;
2696  $point_uppercase = 0;
2697  $point_numbers = 0;
2698  $point_characters = 0;
2699
2700  // Getting password lengh
2701  // ----------------------
2702  $length = strlen($password);
2703
2704  // Loop to read password characters
2705  for($i = 0; $i < $length; $i++)
2706  {
2707    // Select each letters
2708    // $i is 0 at first turn
2709    // ---------------------
2710    $letters = $password[$i];
2711
2712    if ($letters>='a' && $letters<='z')
2713    {
2714      // Adding 1 point to score for a lowercase
2715      // ---------------------------------------
2716                                $points = $points + 1;
2717
2718                                // Adding bonus points for lowercase
2719      // ---------------------------------
2720                  $point_lowercase = 1;
2721    }
2722    else if ($letters>='A' && $letters <='Z')
2723    {
2724      // Adding 2 points to score for uppercase
2725      // --------------------------------------
2726      $points = $points + 2;
2727               
2728      // Adding bonus points for uppercase
2729      // ---------------------------------
2730      $point_uppercase = 2;
2731    }
2732    else if ($letters>='0' && $letters<='9')
2733    {
2734      // Adding 3 points to score for numbers
2735      // ------------------------------------
2736      $points = $points + 3;
2737               
2738      // Adding bonus points for numbers
2739      // -------------------------------
2740      $point_numbers = 3;
2741    }
2742    else
2743    {
2744      // Adding 5 points to score for special characters
2745      // -----------------------------------------------
2746      $points = $points + 5;
2747               
2748      // Adding bonus points for special characters
2749      // ------------------------------------------
2750      $point_characters = 5;
2751    }
2752  }
2753
2754  // Calculating the coefficient points/length
2755  // -----------------------------------------
2756  $step1 = $points / $length;
2757
2758  // Calculation of the diversity of character types...
2759  // --------------------------------------------------
2760  $step2 = $point_lowercase + $point_uppercase + $point_numbers + $point_characters;
2761
2762  // Multiplying the coefficient of diversity with that of the length
2763  // ----------------------------------------------------------------
2764  $score = $step1 * $step2;
2765
2766  // Multiplying the result by the length of the string
2767  // --------------------------------------------------
2768  $finalscore = $score * $length;
2769
2770  return $finalscore;
2771}
2772
2773
2774/**
2775 * UAM_check_profile - Thx to LucMorizur
2776 * checks if a user id is registered as having already
2777 * visited his profile page.
2778 *
2779 * @uid        : the user id
2780 *
2781 * @user_idsOK : (returned) array of all users ids having already visited
2782 *               their profile.php pages
2783 *
2784 * @returns    : true or false whether the users has already visited his
2785 *               profile.php page or not
2786 *
2787 */
2788function UAM_check_profile($uid, &$user_idsOK)
2789{
2790  $t = array();
2791  $v = false;
2792 
2793  $query = '
2794SELECT value
2795FROM '.CONFIG_TABLE.'
2796WHERE param = "UserAdvManager_Redir"
2797;';
2798 
2799  if ($v = (($t = pwg_db_fetch_row(pwg_query($query))) !== false))
2800  {
2801    $user_idsOK = explode(',', $t[0]);
2802    $v = (in_array($uid, $user_idsOK));
2803  }
2804  return $v;
2805}
2806
2807
2808/**
2809 * UAM_check_pwdreset
2810 * checks if a user id is registered as having already
2811 * changed his password.
2812 *
2813 * @uid        : the user id
2814 *
2815 * @returns    : true or false whether the users has already changed his password
2816 *
2817 */
2818function UAM_check_pwgreset($uid)
2819{
2820  $query = '
2821SELECT UAM_pwdreset
2822FROM '.USERS_TABLE.'
2823WHERE id='.$uid.'
2824;';
2825
2826  $result = pwg_db_fetch_assoc(pwg_query($query));
2827 
2828  if($result['UAM_pwdreset'] == 'true')
2829  {
2830    return true;
2831  }
2832  else return false; 
2833}
2834
2835
2836/**
2837 * UAM_UsrReg_Verif
2838 * Check if the user who logged-in have validate his registration
2839 *
2840 * @returns : True if validation is OK else False
2841 */
2842function UAM_UsrReg_Verif($user_id)
2843{
2844  global $conf;
2845
2846  $query = '
2847SELECT UAM_validated
2848FROM '.USERS_TABLE.'
2849WHERE id='.$user_id.'
2850;';
2851
2852  $result = pwg_db_fetch_assoc(pwg_query($query));
2853
2854  if($result['UAM_validated'] == 'true')
2855  {
2856    return true;
2857  }
2858  else return false;
2859}
2860
2861
2862/**
2863 * SetUnvalidated
2864 * Set UAM_validated field to false in #_users table
2865 *
2866 **/
2867function SetUnvalidated($user_id)
2868{
2869  $query ='
2870UPDATE '.USERS_TABLE.'
2871SET UAM_validated = "false"
2872WHERE id = '.$user_id.'
2873LIMIT 1
2874;';
2875
2876  pwg_query($query);
2877}
2878
2879
2880/**
2881 * UAM_Set_PwdReset
2882 * Action in user_list to set a password reset for a user
2883 */
2884function UAM_Set_PwdReset($uid)
2885{
2886  $query ='
2887UPDATE '.USERS_TABLE.'
2888SET UAM_pwdreset = "true"
2889WHERE id = '.$uid.'
2890LIMIT 1
2891;';
2892
2893  pwg_query($query);
2894}
2895
2896
2897/**
2898 * UAM_loc_visible_user_list
2899 * Adds a new feature in user_list to allow password reset for selected users by admin
2900 *
2901 */
2902function UAM_loc_visible_user_list($visible_user_list)
2903{
2904  global $template;
2905 
2906  $template->append('plugin_user_list_column_titles', l10n('UAM_PwdReset'));
2907 
2908  $user_ids = array();
2909 
2910  foreach ($visible_user_list as $i => $user)
2911  {
2912    $user_ids[$i] = $user['id'];
2913  }
2914 
2915  $user_nums = array_flip($user_ids);
2916
2917  // Query to get informations in database
2918  // -------------------------------------
2919  if (!empty($user_ids))
2920  {
2921    $query = '
2922SELECT DISTINCT id, UAM_pwdreset
2923  FROM '.USERS_TABLE.'
2924  WHERE id IN ('.implode(',', $user_ids).')
2925;';
2926    $result = pwg_query($query);
2927   
2928    while ($row = mysql_fetch_array($result))
2929    {
2930      if ($row['UAM_pwdreset'] == 'false')
2931      {
2932        $pwdreset = l10n('UAM_PwdReset_Done');
2933      }
2934      else if ($row['UAM_pwdreset'] == 'true')
2935      {
2936        $pwdreset = l10n('UAM_PwdReset_Todo');
2937      }
2938      else $pwdreset = l10n('UAM_PwdReset_NA');
2939     
2940                  $visible_user_list[$user_nums[$row['id']]]['plugin_columns'][] = $pwdreset; // Shows users password state in user_list
2941    }
2942  }
2943  return $visible_user_list;
2944}
2945
2946
2947/**
2948 * UAM specific database dump (only for MySql !)
2949 * Creates an SQL dump of UAM specific tables and configuration settings
2950 *
2951 * @returns  : Boolean to manage appropriate message display
2952 *
2953 */
2954function UAM_dump($download)
2955{
2956  global $conf;
2957
2958  $plugin =  PluginInfos(UAM_PATH);
2959  $version = $plugin['version'];
2960
2961  // Initial backup folder creation and file initialisation
2962  // ------------------------------------------------------
2963  if (!is_dir(UAM_PATH.'/include/backup'))
2964    mkdir(UAM_PATH.'/include/backup');
2965
2966  $Backup_File = UAM_PATH.'/include/backup/UAM_dbbackup.sql';
2967
2968  $fp = fopen($Backup_File, 'w');
2969
2970  // Writing plugin version
2971  $insertions = "-- ".$version." --\n\n";
2972  fwrite($fp, $insertions);
2973
2974  // Saving UAM specific tables
2975  // --------------------------
2976  $ListTables = array(USER_CONFIRM_MAIL_TABLE, USER_LASTVISIT_TABLE);
2977  $j=0;
2978
2979  while($j < count($ListTables))
2980  {
2981    $sql = 'SHOW CREATE TABLE '.$ListTables[$j];
2982    $res = pwg_query($sql);
2983
2984    if ($res)
2985    {
2986      $insertions = "-- -------------------------------------------------------\n";
2987      $insertions .= "-- Create ".$ListTables[$j]." table\n";
2988      $insertions .= "-- ------------------------------------------------------\n\n";
2989
2990      $insertions .= "DROP TABLE IF EXISTS ".$ListTables[$j].";\n\n";
2991
2992      $array = mysql_fetch_array($res);
2993      $array[1] .= ";\n\n";
2994      $insertions .= $array[1];
2995
2996      $req_table = pwg_query('SELECT * FROM '.$ListTables[$j]) or die(mysql_error());
2997      $nb_fields = mysql_num_fields($req_table);
2998      while ($line = mysql_fetch_array($req_table))
2999      {
3000        $insertions .= 'INSERT INTO '.$ListTables[$j].' VALUES (';
3001        for ($i=0; $i<$nb_fields; $i++)
3002        {
3003          $insertions .= '\'' . pwg_db_real_escape_string($line[$i]) . '\', ';
3004        }
3005        $insertions = substr($insertions, 0, -2);
3006        $insertions .= ");\n";
3007      }
3008      $insertions .= "\n\n";
3009    }
3010
3011    fwrite($fp, $insertions);   
3012    $j++;
3013  }
3014 
3015  // Saving UAM configuration
3016  // ------------------------
3017  $insertions = "-- -------------------------------------------------------\n";
3018  $insertions .= "-- Insert UAM configuration in ".CONFIG_TABLE."\n";
3019  $insertions .= "-- ------------------------------------------------------\n\n";
3020
3021  fwrite($fp, $insertions);
3022
3023  $pattern = "UserAdvManager%";
3024  $req_table = pwg_query('SELECT * FROM '.CONFIG_TABLE.' WHERE param LIKE "'.$pattern.'";') or die(mysql_error());
3025  $nb_fields = mysql_num_fields($req_table);
3026
3027  while ($line = mysql_fetch_array($req_table))
3028  {
3029    $insertions = 'INSERT INTO '.CONFIG_TABLE.' VALUES (';
3030    for ($i=0; $i<$nb_fields; $i++)
3031    {
3032      $insertions .= '\'' . pwg_db_real_escape_string($line[$i]) . '\', ';
3033    }
3034    $insertions = substr($insertions, 0, -2);
3035    $insertions .= ");\n";
3036
3037    fwrite($fp, $insertions);
3038  }
3039
3040  fclose($fp);
3041
3042  // Download generated dump file
3043  // ----------------------------
3044  if ($download == 'true')
3045  {
3046    if (@filesize($Backup_File))
3047    {
3048      $http_headers = array(
3049        'Content-Length: '.@filesize($Backup_File),
3050        'Content-Type: text/x-sql',
3051        'Content-Disposition: attachment; filename="UAM_dbbackup.sql";',
3052        'Content-Transfer-Encoding: binary',
3053        );
3054
3055      foreach ($http_headers as $header)
3056      {
3057        header($header);
3058      }
3059
3060      @readfile($Backup_File);
3061      exit();
3062    }
3063  }
3064
3065  return true;
3066}
3067
3068
3069/**
3070 * UAM_Restore_backup_file
3071 * Restore backup database file
3072 *
3073 * @returns : Boolean
3074 */
3075function UAM_Restore_backup_file() 
3076{
3077  global $prefixeTable, $dblayer, $conf;
3078 
3079  define('DEFAULT_PREFIX_TABLE', 'piwigo_');
3080 
3081  $Backup_File = UAM_PATH.'/include/backup/UAM_dbbackup.sql';
3082
3083  // Cleanup database before restoring
3084  // ---------------------------------
3085
3086  // Delete UserAdvManager global config in #_config table
3087  $q = '
3088DELETE FROM '.CONFIG_TABLE.'
3089WHERE param="UserAdvManager"
3090;';
3091
3092  pwg_query($q);
3093
3094  // Delete UserAdvManager_ConfirmMail global config in #_config table
3095  $q = '
3096DELETE FROM '.CONFIG_TABLE.'
3097WHERE param="UserAdvManager_ConfirmMail"
3098;';
3099
3100  pwg_query($q);
3101
3102  // Delete UserAdvManager_Redir config in #_config table
3103  $q = '
3104DELETE FROM '.CONFIG_TABLE.'
3105WHERE param="UserAdvManager_Redir"
3106;';
3107
3108  pwg_query($q);
3109
3110  // Delete UserAdvManager_Version config in #_config table
3111  $q = '
3112DELETE FROM '.CONFIG_TABLE.'
3113WHERE param="UserAdvManager_Version"
3114;';
3115
3116  pwg_query($q);
3117
3118  // Restore sql backup file - DROP TABLE queries are executed
3119  // ---------------------------------------------------------
3120  UAM_execute_sqlfile(
3121    $Backup_File,
3122    DEFAULT_PREFIX_TABLE,
3123    $prefixeTable,
3124    $dblayer
3125  );
3126}
3127
3128
3129/**
3130 * loads an sql file and executes all queries / Based on Piwigo's original install file
3131 *
3132 * Before executing a query, $replaced is... replaced by $replacing. This is
3133 * useful when the SQL file contains generic words.
3134 *
3135 * @param string filepath
3136 * @param string replaced
3137 * @param string replacing
3138 * @return void
3139 */
3140function UAM_execute_sqlfile($filepath, $replaced, $replacing, $dblayer)
3141{
3142  $sql_lines = file($filepath);
3143  $query = '';
3144  foreach ($sql_lines as $sql_line)
3145  {
3146    $sql_line = trim($sql_line);
3147    if (preg_match('/(^--|^$)/', $sql_line))
3148    {
3149      continue;
3150    }
3151   
3152    $query.= ' '.$sql_line;
3153   
3154    // if we reached the end of query, we execute it and reinitialize the
3155    // variable "query"
3156    if (preg_match('/;$/', $sql_line))
3157    {
3158      $query = trim($query);
3159      $query = str_replace($replaced, $replacing, $query);
3160      if ('mysql' == $dblayer)
3161      {
3162        if (preg_match('/^(CREATE TABLE .*)[\s]*;[\s]*/im', $query, $matches))
3163        {
3164          $query = $matches[1].' DEFAULT CHARACTER SET utf8'.';';
3165        }
3166      }
3167      pwg_query($query);
3168      $query = '';
3169    }
3170  }
3171}
3172
3173
3174/**
3175 * Delete obsolete files on plugin upgrade
3176 * Obsolete files are listed in file obsolete.list
3177 *
3178 */
3179function clean_obsolete_files()
3180{
3181  if (file_exists(UAM_PATH.'obsolete.list')
3182    and $old_files = file(UAM_PATH.'obsolete.list', FILE_IGNORE_NEW_LINES)
3183    and !empty($old_files))
3184  {
3185    array_push($old_files, 'obsolete.list');
3186    foreach($old_files as $old_file)
3187    {
3188      $path = UAM_PATH.$old_file;
3189      if (is_file($path))
3190      {
3191        @unlink($path);
3192      }
3193      elseif (is_dir($path))
3194      {
3195        @rmdir($path);
3196      }
3197    }
3198  }
3199}
3200
3201
3202/**
3203 * Function called from maintain.inc.php - to check if database upgrade is needed
3204 *
3205 * @param : table name
3206 *
3207 * @return : boolean
3208 *
3209 */
3210function table_exist($table)
3211{
3212  $query = 'DESC '.$table.';';
3213  return (bool)($res=pwg_query($query));
3214}
3215
3216
3217/**
3218 * Function called from UAM_admin.php and main.inc.php to get the plugin version and name
3219 *
3220 * @param : plugin directory
3221 *
3222 * @return : plugin's version and name
3223 *
3224 */
3225function PluginInfos($dir)
3226{
3227  $path = $dir;
3228
3229  $plg_data = implode( '', file($path.'main.inc.php') );
3230  if ( preg_match("|Plugin Name: (.*)|", $plg_data, $val) )
3231  {
3232    $plugin['name'] = trim( $val[1] );
3233  }
3234  if (preg_match("|Version: (.*)|", $plg_data, $val))
3235  {
3236    $plugin['version'] = trim($val[1]);
3237  }
3238  if ( preg_match("|Plugin URI: (.*)|", $plg_data, $val) )
3239  {
3240    $plugin['uri'] = trim($val[1]);
3241  }
3242  if ($desc = load_language('description.txt', $path.'/', array('return' => true)))
3243  {
3244    $plugin['description'] = trim($desc);
3245  }
3246  elseif ( preg_match("|Description: (.*)|", $plg_data, $val) )
3247  {
3248    $plugin['description'] = trim($val[1]);
3249  }
3250  if ( preg_match("|Author: (.*)|", $plg_data, $val) )
3251  {
3252    $plugin['author'] = trim($val[1]);
3253  }
3254  if ( preg_match("|Author URI: (.*)|", $plg_data, $val) )
3255  {
3256    $plugin['author uri'] = trim($val[1]);
3257  }
3258  if (!empty($plugin['uri']) and strpos($plugin['uri'] , 'extension_view.php?eid='))
3259  {
3260    list( , $extension) = explode('extension_view.php?eid=', $plugin['uri']);
3261    if (is_numeric($extension)) $plugin['extension'] = $extension;
3262  }
3263// IMPORTANT SECURITY !
3264// --------------------
3265  $plugin = array_map('htmlspecialchars', $plugin);
3266
3267  return $plugin ;
3268}
3269
3270
3271/**
3272 * Useful for debugging - 4 vars can be set
3273 * Output result to log.txt file
3274 *
3275 */
3276function UAMLog($var1, $var2, $var3, $var4)
3277{
3278   $fo=fopen (UAM_PATH.'log.txt','a') ;
3279   fwrite($fo,"======================\n") ;
3280   fwrite($fo,'le ' . date('D, d M Y H:i:s') . "\r\n");
3281   fwrite($fo,$var1 ."\r\n") ;
3282   fwrite($fo,$var2 ."\r\n") ;
3283   fwrite($fo,$var3 ."\r\n") ;
3284   fwrite($fo,$var4 ."\r\n") ;
3285   fclose($fo) ;
3286}
3287
3288?>
Note: See TracBrowser for help on using the repository browser.