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

Last change on this file since 17987 was 17987, checked in by flop25, 12 years ago

one correction

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