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

Last change on this file since 17988 was 17988, checked in by Eric, 12 years ago

Using pwg_mail_notification_admins() to send validation link to admins and webmaster

  • Property svn:eol-style set to LF
File size: 91.8 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<<<<<<< .mine
1184                         $keyargs_content = array();
1185                $keyargs_content[] = get_l10n_args('Manual validation needed for %s', $username);
1186                $keyargs_content[] = get_l10n_args('UAM_Link: %s', AddConfirmMail($id, $email));
1187                pwg_mail_notification_admins(get_l10n_args('Manual validation for %s',$username),$keyargs_content,false);
1188#               $admins = array();
1189#      $query = '
1190#    SELECT
1191#        u.'.$conf['user_fields']['username'].' AS username,
1192#        u.'.$conf['user_fields']['email'].' AS mail_address
1193#      FROM '.USERS_TABLE.' AS u
1194#        JOIN '.USER_INFOS_TABLE.' AS i ON i.user_id =  u.'.$conf['user_fields']['id'].'
1195#      WHERE i.status in (\'webmaster\',  \'admin\')
1196#        AND '.$conf['user_fields']['email'].' IS NOT NULL
1197#        AND i.user_id <> '.$user['id'].'
1198#      ORDER BY username
1199#    ;';
1200#   
1201#      $datas = pwg_query($query);
1202#      if (!empty($datas))
1203#      {
1204#        while ($admin = pwg_db_fetch_assoc($datas))
1205#        {
1206#          if (!empty($admin['mail_address']))
1207#          {
1208#            array_push($admins, format_email($admin['username'], $admin['mail_address']));
1209#          }
1210#        }
1211#      }
1212#      pwg_mail(implode(', ', $admins), array(
1213#               'subject' => $subject,
1214#      'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1215#    ));
1216=======
1217                $admins = array();
1218      $query = '
1219    SELECT
1220        u.'.$conf['user_fields']['username'].' AS username,
1221        u.'.$conf['user_fields']['email'].' AS mail_address
1222      FROM '.USERS_TABLE.' AS u
1223        JOIN '.USER_INFOS_TABLE.' AS i ON i.user_id =  u.'.$conf['user_fields']['id'].'
1224      WHERE i.status in (\'webmaster\',  \'admin\')
1225        AND '.$conf['user_fields']['email'].' IS NOT NULL
1226      ORDER BY username
1227    ;';
1228   
1229      $datas = pwg_query($query);
1230      if (!empty($datas))
1231      {
1232        while ($admin = pwg_db_fetch_assoc($datas))
1233        {
1234          if (!empty($admin['mail_address']))
1235          {
1236            array_push($admins, format_email($admin['username'], $admin['mail_address']));
1237          }
1238        }
1239      }
1240      pwg_mail(implode(', ', $admins), array(
1241                'subject' => $subject,
1242      'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1243    ));
1244>>>>>>> .r17987
1245                }
1246                else
1247                {
1248                pwg_mail($email, array(
1249                'subject' => $subject,
1250                'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1251                ));
1252                }
1253// Switching back to default language
1254// ----------------------------------
1255switch_lang_back();
1256}
1257
1258
1259/**
1260 * Function called from UAM_admin.php to resend validation email with or without new validation key
1261 *
1262 * @param : Type of email, user id, username, email address, confirmation (optional)
1263 *
1264 */
1265function ResendMail2User($typemail, $user_id, $username, $email, $confirm)
1266{
1267  global $conf;
1268 
1269  $subject = "";
1270
1271  $conf_UAM = unserialize($conf['UserAdvManager']);
1272
1273  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
1274 
1275                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1276 
1277// We have to get the user's language in database
1278// ----------------------------------------------
1279  $query ='
1280SELECT user_id, language
1281FROM '.USER_INFOS_TABLE.'
1282WHERE user_id = '.$user_id.'
1283;';
1284  $data = pwg_db_fetch_assoc(pwg_query($query));
1285  $language = $data['language'];
1286 
1287// And switch gallery to this language before using personalized and multilangual contents
1288// ---------------------------------------------------------------------------------------
1289  switch_lang_to($data['language']);
1290   
1291  load_language('plugin.lang', UAM_PATH);
1292
1293  switch($typemail)
1294  {
1295    case 1: //Generating email content for remind with a new key
1296      if (isset($conf_UAM[42]) and $conf_UAM[42] <> '')
1297      {
1298        // Management of Extension flags ([username], [mygallery])
1299        // -------------------------------------------------------
1300        $patterns[] = '#\[username\]#i';
1301        $replacements[] = $username;
1302        $patterns[] = '#\[mygallery\]#i';
1303        $replacements[] = $conf['gallery_title'];
1304   
1305        if (function_exists('get_user_language_desc'))
1306        {
1307          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n";
1308        }
1309        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n"; 
1310      }
1311     
1312      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)
1313      {
1314                // Management of Extension flags ([username], [mygallery], [myurl], [Kdays])
1315        // -------------------------------------------------------------------------
1316        $patterns[] = '#\[username\]#i';
1317        $replacements[] = $username;
1318        $patterns[] = '#\[mygallery\]#i';
1319        $replacements[] = $conf['gallery_title'];
1320        $patterns[] = '#\[myurl\]#i';
1321        $replacements[] = get_gallery_home_url();
1322
1323        if (isset($conf_UAM_ConfirmMail[0]) and $conf_UAM_ConfirmMail[0] == 'true') // [Kdays] replacement only if related option is active
1324        {
1325          $patterns[] = '#\[Kdays\]#i';
1326          $replacements[] = $conf_UAM_ConfirmMail[1];
1327        }
1328
1329        if (function_exists('get_user_language_desc'))
1330        {
1331          $infos1 = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[2]))."\n\n";
1332        }
1333                                else $infos1 = l10n(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[2]))."\n\n";
1334
1335        $infos2 = array
1336        (
1337          get_l10n_args('UAM_Link: %s', ResetConfirmMail($user_id)),
1338          get_l10n_args('', ''),
1339        );       
1340                                                }
1341
1342// Set reminder true
1343// -----------------     
1344      $query = '
1345UPDATE '.USER_CONFIRM_MAIL_TABLE.'
1346SET reminder = "true"
1347WHERE user_id = '.$user_id.'
1348;';
1349      pwg_query($query);
1350     
1351                                break;
1352     
1353    case 2: //Generating email content for remind without a new key
1354      if (isset($conf_UAM[42]) and $conf_UAM[42] <> '')
1355      {
1356        // Management of Extension flags ([username], [mygallery])
1357        // -------------------------------------------------------
1358        $patterns[] = '#\[username\]#i';
1359        $replacements[] = $username;
1360        $patterns[] = '#\[mygallery\]#i';
1361        $replacements[] = $conf['gallery_title'];
1362   
1363        if (function_exists('get_user_language_desc'))
1364        {
1365          $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n";
1366        }
1367        else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[42]))."\n\n"; 
1368      }
1369     
1370      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)
1371      {
1372        // Management of Extension flags ([username], [mygallery], [myurl], [Kdays])
1373        // -------------------------------------------------------------------------
1374        $patterns[] = '#\[username\]#i';
1375        $replacements[] = $username;
1376        $patterns[] = '#\[mygallery\]#i';
1377        $replacements[] = $conf['gallery_title'];
1378        $patterns[] = '#\[myurl\]#i';
1379        $replacements[] = get_gallery_home_url();
1380
1381        if (isset($conf_UAM_ConfirmMail[0]) and $conf_UAM_ConfirmMail[0] == 'true') // [Kdays] replacement only if related option is active
1382        {
1383          $patterns[] = '#\[Kdays\]#i';
1384          $replacements[] = $conf_UAM_ConfirmMail[1];
1385        }
1386       
1387        if (function_exists('get_user_language_desc'))
1388        {
1389          $infos1 = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[4]))."\n\n";
1390        }
1391        else $infos1 = l10n(preg_replace($patterns, $replacements, $conf_UAM_ConfirmMail[4]))."\n\n";
1392      }
1393     
1394// Set reminder true
1395// -----------------
1396      $query = '
1397UPDATE '.USER_CONFIRM_MAIL_TABLE.'
1398SET reminder = "true"
1399WHERE user_id = '.$user_id.'
1400;';
1401      pwg_query($query);
1402     
1403    break;
1404        }
1405 
1406  pwg_mail($email, array(
1407    'subject' => $subject,
1408    'content' => ($infos1."\n\n").(isset($infos2) ? l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
1409  ));
1410
1411                // Switching back to default language
1412                // ----------------------------------
1413                switch_lang_back();
1414}
1415
1416
1417/**
1418 * Function called from UAM_admin.php to send a reminder mail for ghost users
1419 *
1420 * @param : User id, username, email address
1421 *
1422 */
1423function ghostreminder($user_id, $username, $email)
1424{
1425  global $conf;
1426
1427  $conf_UAM = unserialize($conf['UserAdvManager']);
1428  $subject = "";
1429 
1430                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1431
1432// We have to get the user's language in database
1433// ----------------------------------------------
1434  $query ='
1435SELECT user_id, language
1436FROM '.USER_INFOS_TABLE.'
1437WHERE user_id = '.$user_id.'
1438;';
1439  $data = pwg_db_fetch_assoc(pwg_query($query));
1440  $language = $data['language'];
1441
1442// And switch gallery to this language before using personalized and multilangual contents
1443// ---------------------------------------------------------------------------------------
1444  switch_lang_to($data['language']);
1445   
1446  load_language('plugin.lang', UAM_PATH);
1447
1448  if (isset($conf_UAM[45]) and $conf_UAM[45] <> '')
1449  {
1450    // Management of Extension flags ([username], [mygallery])
1451    // -------------------------------------------------------
1452    $patterns[] = '#\[username\]#i';
1453    $replacements[] = $username;
1454    $patterns[] = '#\[mygallery\]#i';
1455    $replacements[] = $conf['gallery_title'];
1456
1457    if (function_exists('get_user_language_desc'))
1458    {
1459      $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[45]))."\n\n";
1460    }
1461    else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[45]))."\n\n"; 
1462  }
1463
1464  if (isset($conf_UAM[17]) and $conf_UAM[17] <> '' and isset($conf_UAM[15]) and $conf_UAM[15] == 'true')
1465  {
1466    // Management of Extension flags ([username], [mygallery], [myurl], [days])
1467    // ------------------------------------------------------------------------
1468    $patterns[] = '#\[username\]#i';
1469    $replacements[] = $username;
1470    $patterns[] = '#\[mygallery\]#i';
1471    $replacements[] = $conf['gallery_title'];
1472    $patterns[] = '#\[myurl\]#i';
1473    $replacements[] = get_gallery_home_url();
1474    $patterns[] = '#\[days\]#i';
1475    $replacements[] = $conf_UAM[16];
1476
1477    if (function_exists('get_user_language_desc'))
1478    {
1479      $infos1 = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[17]))."\n\n";
1480    }
1481    else
1482    {
1483      $infos1 = l10n(preg_replace($patterns, $replacements, $conf_UAM[17]))."\n\n";
1484    }
1485
1486    resetlastvisit($user_id);
1487  }
1488
1489  pwg_mail($email, array(
1490    'subject' => $subject,
1491    'content' => $infos1.get_absolute_root_url(),
1492  ));
1493
1494                // Switching back to default language
1495                // ----------------------------------
1496                switch_lang_back();
1497}
1498
1499
1500/**
1501 * Function called from functions.inc.php to send notification email when user have been downgraded
1502 *
1503 * @param : user id, username, email address
1504 *
1505 */
1506function demotion_mail($id, $username, $email)
1507{
1508  global $conf;
1509
1510  $conf_UAM = unserialize($conf['UserAdvManager']);
1511 
1512                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1513 
1514                $custom_txt = "";
1515                $subject = "";
1516
1517// We have to get the user's language in database
1518// ----------------------------------------------
1519  $query = '
1520SELECT user_id, language
1521FROM '.USER_INFOS_TABLE.'
1522WHERE user_id = '.$id.'
1523;';
1524  $data = pwg_db_fetch_assoc(pwg_query($query));
1525
1526// Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language
1527// -------------------------------------------------------------------------------------------------------------------------------
1528  if (empty($data))
1529  {
1530// And switch gallery to this language before using personalized and multilangual contents
1531// ---------------------------------------------------------------------------------------
1532    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
1533    switch_lang_to($language);
1534  }
1535  else
1536  {
1537// And switch gallery to this language before using personalized and multilangual contents
1538// ---------------------------------------------------------------------------------------
1539    $language = $data['language']; // Usefull for debugging
1540    switch_lang_to($data['language']);
1541    load_language('plugin.lang', UAM_PATH);
1542  }
1543
1544  if (isset($conf_UAM[44]) and $conf_UAM[44] <> '')
1545  {
1546    // Management of Extension flags ([username], [mygallery])
1547    // -------------------------------------------------------
1548    $patterns[] = '#\[username\]#i';
1549    $replacements[] = $username;
1550    $patterns[] = '#\[mygallery\]#i';
1551    $replacements[] = $conf['gallery_title'];
1552
1553    if (function_exists('get_user_language_desc'))
1554    {
1555      $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[44]))."\n\n";
1556    }
1557    else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[44]))."\n\n"; 
1558  }
1559     
1560  if (isset($conf_UAM[24]) and $conf_UAM[24] <> '')
1561  {
1562    // Management of Extension flags ([username], [mygallery], [myurl])
1563    // ----------------------------------------------------------------
1564    $patterns[] = '#\[username\]#i';
1565    $replacements[] = stripslashes($username);
1566    $patterns[] = '#\[mygallery\]#i';
1567    $replacements[] = $conf['gallery_title'];
1568    $patterns[] = '#\[myurl\]#i';
1569    $replacements[] = get_gallery_home_url();
1570
1571    if (function_exists('get_user_language_desc'))
1572    {
1573      $custom_txt = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[24]))."\n\n";
1574    }
1575    else $custom_txt = l10n(preg_replace($patterns, $replacements, $conf_UAM[24]))."\n\n"; 
1576  }
1577
1578  $infos1 = array(
1579    get_l10n_args('UAM_User: %s', stripslashes($username)),
1580    get_l10n_args('Email: %s', $email),
1581    get_l10n_args('', ''),
1582  );
1583
1584  $infos2 = array
1585  (
1586    get_l10n_args('UAM_Link: %s', ResetConfirmMail($id)),
1587    get_l10n_args('', ''),
1588  ); 
1589
1590  resetlastvisit($id);
1591
1592// Sending the email with subject and contents
1593// -------------------------------------------
1594  pwg_mail($email, array(
1595    'subject' => $subject,
1596    'content' => ($custom_txt.l10n_args($infos1)."\n\n".l10n_args($infos2)."\n\n").get_absolute_root_url(),
1597  ));
1598
1599                // Switching back to default language
1600                // ----------------------------------
1601                switch_lang_back();
1602}
1603
1604
1605/**
1606 * Function called from UAM_admin.php to send notification email when user registration have been manually validated by admin
1607 *
1608 * @param : user id
1609 *
1610 */
1611function validation_mail($id)
1612{
1613  global $conf;
1614
1615  $conf_UAM = unserialize($conf['UserAdvManager']);
1616 
1617                include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
1618 
1619                $custom_txt = "";
1620  $subject = "";
1621
1622// We have to get the user's language in database
1623// ----------------------------------------------
1624  $query ='
1625SELECT user_id, language
1626FROM '.USER_INFOS_TABLE.'
1627WHERE user_id = '.$id.'
1628;';
1629  $data = pwg_db_fetch_assoc(pwg_query($query));
1630
1631// Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language
1632// -------------------------------------------------------------------------------------------------------------------------------
1633  if (empty($data))
1634  {
1635// And switch gallery to this language before using personalized and multilangual contents
1636// ---------------------------------------------------------------------------------------
1637    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
1638    switch_lang_to($language);
1639  }
1640  else
1641  {
1642// And switch gallery to this language before using personalized and multilangual contents
1643// ---------------------------------------------------------------------------------------
1644    $language = $data['language']; // Usefull for debugging
1645    switch_lang_to($data['language']);
1646    load_language('plugin.lang', UAM_PATH);
1647  }
1648
1649// Retreive users email and user name from id
1650// ------------------------------------------
1651  $query ='
1652SELECT id, username, mail_address
1653FROM '.USERS_TABLE.'
1654WHERE id = '.$id.'
1655;';
1656  $result = pwg_db_fetch_assoc(pwg_query($query));
1657
1658  if (isset($conf_UAM[46]) and $conf_UAM[46] <> '')
1659  {
1660    // Management of Extension flags ([username], [mygallery])
1661    // -------------------------------------------------------
1662    $patterns[] = '#\[username\]#i';
1663    $replacements[] = $result['username'];
1664    $patterns[] = '#\[mygallery\]#i';
1665    $replacements[] = $conf['gallery_title'];
1666    if (function_exists('get_user_language_desc'))
1667    {
1668      $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[46]))."\n\n";
1669    }
1670    else $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM[46]))."\n\n";
1671  }
1672     
1673  if (isset($conf_UAM[27]) and $conf_UAM[27] <> '')
1674  {
1675    // Management of Extension flags ([username], [mygallery], [myurl])
1676    // ----------------------------------------------------------------
1677    $patterns[] = '#\[username\]#i';
1678    $replacements[] = $result['username'];
1679    $patterns[] = '#\[mygallery\]#i';
1680    $replacements[] = $conf['gallery_title'];
1681    $patterns[] = '#\[myurl\]#i';
1682    $replacements[] = get_gallery_home_url();
1683    if (function_exists('get_user_language_desc'))
1684    {
1685      $custom_txt = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM[27]))."\n\n";
1686    }
1687    else $custom_txt = l10n(preg_replace($patterns, $replacements, $conf_UAM[27]))."\n\n";
1688  }
1689
1690  $infos = array(
1691    get_l10n_args('UAM_User: %s', stripslashes($result['username'])),
1692    get_l10n_args('Email: %s', $result['mail_address']),
1693    get_l10n_args('', ''),
1694  );
1695
1696// Sending the email with subject and contents
1697// -------------------------------------------
1698  pwg_mail($result['mail_address'], array(
1699    'subject' => $subject,
1700    'content' => (l10n_args($infos)."\n\n".$custom_txt),
1701  ));
1702
1703                // Switching back to default language
1704                // ----------------------------------
1705                switch_lang_back();
1706}
1707
1708
1709/**
1710 * Function called from functions AddConfirmMail and ResetConfirmMail for validation key generation
1711 *
1712 * @return : validation key
1713 *
1714 */
1715function FindAvailableConfirmMailID()
1716{
1717  while (true)
1718  {
1719    $id = generate_key(16);
1720    $query = '
1721SELECT COUNT(*)
1722  FROM '.USER_CONFIRM_MAIL_TABLE.'
1723WHERE id = "'.$id.'"
1724;';
1725    list($count) = pwg_db_fetch_row(pwg_query($query));
1726
1727    if ($count == 0)
1728      return $id;
1729  }
1730}
1731
1732
1733/**
1734 * Function called from functions SendMail2User to process unvalidated users and generate validation key link
1735 *
1736 * @param : User id, email address
1737 *
1738 * @return : Build validation key in URL
1739 *
1740 */
1741function AddConfirmMail($user_id, $email)
1742{
1743  global $conf;
1744
1745  $conf_UAM = unserialize($conf['UserAdvManager']);
1746  $Confirm_Mail_ID = FindAvailableConfirmMailID();
1747
1748  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
1749 
1750  if (isset($Confirm_Mail_ID))
1751  {
1752    $query = '
1753SELECT status
1754  FROM '.USER_INFOS_TABLE.'
1755WHERE user_id = '.$user_id.'
1756;';
1757    list($status) = pwg_db_fetch_row(pwg_query($query));
1758   
1759    $query = '
1760INSERT INTO '.USER_CONFIRM_MAIL_TABLE.'
1761  (id, user_id, mail_address, status, date_check)
1762VALUES
1763  ("'.$Confirm_Mail_ID.'", '.$user_id.', "'.$email.'", "'.$status.'", null)
1764;';
1765    pwg_query($query);
1766
1767    // Delete user from all groups
1768    // ---------------------------
1769    $query = '
1770DELETE FROM '.USER_GROUP_TABLE.'
1771WHERE user_id = '.$user_id.'
1772  AND (
1773    group_id = '.$conf_UAM[2].'
1774  OR
1775    group_id = '.$conf_UAM[3].'
1776  )
1777;';
1778    pwg_query($query);
1779
1780    // Set user unvalidated status
1781    // ---------------------------
1782    if (!is_admin() and $conf_UAM[7] <> -1)
1783    {
1784      $query = '
1785UPDATE '.USER_INFOS_TABLE.'
1786SET status = "'.$conf_UAM[7].'"
1787WHERE user_id = '.$user_id.'
1788;';
1789      pwg_query($query);
1790    }
1791
1792    // Set user unvalidated group
1793    // --------------------------
1794    if (!is_admin() and $conf_UAM[2] <> -1)
1795    {
1796      $query = '
1797INSERT INTO '.USER_GROUP_TABLE.'
1798  (user_id, group_id)
1799VALUES
1800  ('.$user_id.', '.$conf_UAM[2].')
1801;';
1802      pwg_query($query);
1803    }
1804
1805    // Set user unvalidated privacy level
1806    // ----------------------------------
1807    if (!is_admin() and $conf_UAM[35] <> -1)
1808    {
1809      $query = '
1810UPDATE '.USER_INFOS_TABLE.'
1811SET level = "'.$conf_UAM[35].'"
1812WHERE user_id = '.$user_id.'
1813;';
1814      pwg_query($query);
1815    }
1816   
1817    // Set UAM_validated field to false in #_users table
1818    // -------------------------------------------------
1819    SetUnvalidated($user_id);
1820   
1821    return get_absolute_root_url().UAM_PATH.'ConfirmMail.php?key='.$Confirm_Mail_ID.'&userid='.$user_id;
1822  }
1823}
1824
1825
1826/**
1827 * Function called from UAM_Adduser() to set group/status/level to new users if manual validation is set
1828 *
1829 * @param : User id
1830 *
1831 *
1832 */
1833function SetPermission($user_id)
1834{
1835  global $conf;
1836 
1837  $conf_UAM = unserialize($conf['UserAdvManager']);
1838
1839// Groups cleanup
1840// --------------
1841  $query = '
1842DELETE FROM '.USER_GROUP_TABLE.'
1843WHERE user_id = '.$user_id.'
1844  AND (
1845    group_id = '.$conf_UAM[2].'
1846  OR
1847    group_id = '.$conf_UAM[3].'
1848  )
1849;';
1850  pwg_query($query);
1851
1852  if (!is_admin() and $conf_UAM[7] <> -1) // Set status
1853  {
1854    $query = '
1855UPDATE '.USER_INFOS_TABLE.'
1856SET status = "'.$conf_UAM[7].'"
1857WHERE user_id = '.$user_id.'
1858;';
1859    pwg_query($query);
1860  }
1861
1862  if (!is_admin() and $conf_UAM[2] <> -1) // Set group
1863  {
1864    $query = '
1865INSERT INTO '.USER_GROUP_TABLE.'
1866  (user_id, group_id)
1867VALUES
1868  ('.$user_id.', '.$conf_UAM[2].')
1869;';
1870    pwg_query($query);
1871  }
1872
1873  if (!is_admin() and $conf_UAM[35] <> -1) // Set privacy level
1874  {
1875    $query = '
1876INSERT INTO '.USER_INFOS_TABLE.'
1877  (user_id, level)
1878VALUES
1879  ('.$user_id.', "'.$conf_UAM[35].'")
1880;';
1881    pwg_query($query);
1882  }
1883}
1884
1885
1886/**
1887 * Function called from UAM_admin.php to reset validation key
1888 *
1889 * @param : User id
1890 *
1891 * @return : Build validation key in URL
1892 *
1893 */
1894function ResetConfirmMail($user_id)
1895{
1896  global $conf;
1897 
1898  $Confirm_Mail_ID = FindAvailableConfirmMailID();
1899
1900  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
1901 
1902  if (isset($Confirm_Mail_ID))
1903  { 
1904    $query = '
1905UPDATE '.USER_CONFIRM_MAIL_TABLE.'
1906SET id = "'.$Confirm_Mail_ID.'"
1907WHERE user_id = '.$user_id.'
1908;';
1909    pwg_query($query);
1910
1911                                $query = '
1912UPDATE '.USER_INFOS_TABLE.'
1913SET registration_date = "'.$dbnow.'"
1914WHERE user_id = '.$user_id.'
1915;';
1916                                pwg_query($query);
1917   
1918    return get_absolute_root_url().UAM_PATH.'ConfirmMail.php?key='.$Confirm_Mail_ID.'&userid='.$user_id;
1919  }
1920}
1921
1922
1923/**
1924 * Function called from functions.inc.php to reset last visit date after sending a reminder
1925 *
1926 * @param : User id
1927 *
1928 */
1929function resetlastvisit($user_id)
1930{
1931  global $conf;
1932
1933  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
1934
1935  $query = '
1936UPDATE '.USER_LASTVISIT_TABLE.'
1937SET lastvisit = "'.$dbnow.'", reminder = "true"
1938WHERE user_id = '.$user_id.'
1939;';
1940  pwg_query($query);
1941}
1942
1943
1944/**
1945 * Function called from main.inc.php - Triggered on user deletion
1946 *
1947 */
1948function DeleteConfirmMail($user_id)
1949{
1950  $query = '
1951DELETE FROM '.USER_CONFIRM_MAIL_TABLE.'
1952WHERE user_id = '.$user_id.'
1953;';
1954  pwg_query($query);
1955}
1956
1957/**
1958 * Function called from main.inc.php - Triggered on user deletion
1959 *
1960 */
1961function DeleteLastVisit($user_id)
1962{
1963  $query = '
1964DELETE FROM '.USER_LASTVISIT_TABLE.'
1965WHERE user_id = '.$user_id.'
1966;';
1967  pwg_query($query);
1968}
1969
1970
1971/**
1972 * Function called from main.inc.php - Triggered on user deletion
1973 *
1974 * @param : User id
1975 *
1976 */
1977function DeleteRedir($user_id)
1978{
1979  $tab = array();
1980
1981  $query = '
1982SELECT value
1983FROM '.CONFIG_TABLE.'
1984WHERE param = "UserAdvManager_Redir"
1985;';
1986
1987  $tab = pwg_db_fetch_row(pwg_query($query));
1988 
1989  $values = explode(',', $tab[0]);
1990
1991  unset($values[array_search($user_id, $values)]);
1992     
1993  $query = '
1994UPDATE '.CONFIG_TABLE.'
1995SET value = "'.implode(',', $values).'"
1996WHERE param = "UserAdvManager_Redir";';
1997
1998  pwg_query($query);
1999}
2000
2001
2002/**
2003 * Function called from ConfirmMail.php to verify validation key used by user according time limit
2004 * Return true is key validation is OK else return false
2005 *
2006 * @param : User id
2007 *
2008 * @return : Bool
2009 *
2010 */
2011function VerifyConfirmMail($id)
2012{
2013  global $conf;
2014
2015  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
2016 
2017  $conf_UAM = unserialize($conf['UserAdvManager']);
2018
2019  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2020
2021  $query = '
2022SELECT COUNT(*)
2023FROM '.USER_CONFIRM_MAIL_TABLE.'
2024WHERE id = "'.$id.'"
2025;';
2026  list($count) = pwg_db_fetch_row(pwg_query($query));
2027
2028  if ($count == 1)
2029  {
2030    $query = '
2031SELECT user_id, status, date_check
2032FROM '.USER_CONFIRM_MAIL_TABLE.'
2033WHERE id = "'.$id.'"
2034;';
2035    $data = pwg_db_fetch_assoc(pwg_query($query));
2036
2037    if (!empty($data) and isset($data['user_id']) and is_null($data['date_check']))
2038    {
2039      $query = '
2040SELECT registration_date
2041FROM '.USER_INFOS_TABLE.'
2042WHERE user_id = '.$data['user_id'].'
2043;';
2044      list($registration_date) = pwg_db_fetch_row(pwg_query($query));
2045
2046//              Time limit process             
2047// ******************************************** 
2048      if (!empty($registration_date))
2049      {
2050                                                                // Verify Confirmmail with time limit ON
2051                                // -------------------------------------
2052                                                                if (isset ($conf_UAM_ConfirmMail[1]))
2053                                                                {
2054                                                                                // Dates formating and compare
2055                                        // ---------------------------
2056                                                                                $today = date("d-m-Y"); // Get today's date
2057                                                                                list($day, $month, $year) = explode('-', $today); // explode date of today                                               
2058                                                                        $daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
2059
2060                                                                list($regdate, $regtime) = explode(' ', $registration_date); // Explode date and time from registration date
2061                                                                                list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
2062                                                                                $regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
2063
2064                                                                                $deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps     
2065                                                                                $deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
2066
2067                                                                                // Condition with the value set for time limit
2068                                        // -------------------------------------------
2069                                                                                if ($deltadays <= $conf_UAM_ConfirmMail[1]) // If Nb of days is less than the limit set
2070                                                                                {
2071                                                                                                list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
2072
2073                                        // Update ConfirmMail table
2074                                        // ------------------------
2075                                                                                                $query = '
2076UPDATE '.USER_CONFIRM_MAIL_TABLE.'
2077SET date_check="'.$dbnow.'", reminder="false"
2078WHERE id = "'.$id.'"
2079;';
2080                                                                                                pwg_query($query);
2081
2082                                        // Update LastVisit table - Force reminder field to false
2083                                        // Usefull when a user has been automatically downgraded and revalidate its registration
2084                                        // -------------------------------------------------------------------------------------
2085                                                                                                $query = '
2086UPDATE '.USER_LASTVISIT_TABLE.'
2087SET reminder="false"
2088WHERE user_id = "'.$data['user_id'].'"
2089;';
2090                                                                                                pwg_query($query);
2091     
2092                                                                                                if ($conf_UAM[2] <> -1) // Delete user from unvalidated users group
2093                                                                                                {
2094                                                                                                                $query = '
2095DELETE FROM '.USER_GROUP_TABLE.'
2096WHERE user_id = '.$data['user_id'].'
2097  AND group_id = '.$conf_UAM[2].'
2098;';
2099                                                                                                                pwg_query($query);
2100                                                                                                }
2101
2102                                                                                                if ($conf_UAM[3] <> -1) // Add user to validated users group
2103                                                                                                {
2104                                                                                                                $query = '
2105INSERT INTO '.USER_GROUP_TABLE.'
2106  (user_id, group_id)
2107VALUES
2108  ('.$data['user_id'].', '.$conf_UAM[3].')
2109;';
2110                                                                                                                pwg_query($query);
2111                                                                                                }
2112
2113                                                                                                if ($conf_UAM[4] <> -1) // Change user's status
2114                                                                                                {
2115                                                                                                                $query = '
2116UPDATE '.USER_INFOS_TABLE.'
2117SET status = "'.$conf_UAM[4].'"
2118WHERE user_id = '.$data['user_id'].'
2119;';
2120                                                                                                                pwg_query($query);
2121                                                                                                }
2122
2123                                                                                                if ($conf_UAM[36] <> -1) // Change user's privacy level
2124                                                                                                {
2125                                                                                                                $query = '
2126UPDATE '.USER_INFOS_TABLE.'
2127SET level = "'.$conf_UAM[36].'"
2128WHERE user_id = '.$data['user_id'].'
2129;';
2130                                                                                                                pwg_query($query);
2131                                                                                                }
2132
2133                                                                                                // Set UAM_validated field to True in #_users table
2134                                                                                                $query = '
2135UPDATE '.USERS_TABLE.'
2136SET UAM_validated = "true"
2137WHERE id = '.$data['user_id'].'
2138;';
2139                                                                                                pwg_query($query);
2140
2141                                                                                                // Refresh user's category cache
2142                                                // -----------------------------
2143                                                                                                invalidate_user_cache();
2144
2145                                                                                                return true;
2146                                                                                }
2147                                                                                elseif ($deltadays > $conf_UAM_ConfirmMail[1]) // If timelimit exeeds
2148                                                                                {
2149                                                                                                return false;
2150                                                                                }
2151                                                                }
2152                                                                // Verify Confirmmail with time limit OFF
2153                                // --------------------------------------
2154                                                                else
2155                                                                {
2156                                                                                list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
2157
2158                                // Update ConfirmMail table
2159                                // ------------------------
2160                                                                                $query = '
2161UPDATE '.USER_CONFIRM_MAIL_TABLE.'
2162SET date_check="'.$dbnow.'"
2163WHERE id = "'.$id.'"
2164;';
2165                                                                                pwg_query($query);
2166
2167                                // Update LastVisit table - Force reminder field to false
2168                                // Usefull when a user has been automatically downgraded and revalidate its registration
2169                                // -------------------------------------------------------------------------------------
2170                                                                                $query = '
2171UPDATE '.USER_LASTVISIT_TABLE.'
2172SET reminder="false"
2173WHERE user_id = "'.$data['user_id'].'"
2174;';
2175                                pwg_query($query);
2176
2177                                                                                if ($conf_UAM[2] <> -1) // Delete user from unvalidated users group
2178                                                                                {
2179                                                                                                $query = '
2180DELETE FROM '.USER_GROUP_TABLE.'
2181WHERE user_id = '.$data['user_id'].'
2182AND group_id = '.$conf_UAM[2].'
2183;';
2184                                                                                                pwg_query($query);
2185                                                                                }
2186
2187                                                                                if ($conf_UAM[3] <> -1)
2188                                                                                {
2189                                                                                                $query = '
2190DELETE FROM '.USER_GROUP_TABLE.'
2191WHERE user_id = '.$data['user_id'].'
2192AND group_id = '.$conf_UAM[3].'
2193;';
2194                                                                                                pwg_query($query);
2195
2196                                                                                                $query = '
2197INSERT INTO '.USER_GROUP_TABLE.'
2198  (user_id, group_id)
2199VALUES
2200  ('.$data['user_id'].', '.$conf_UAM[3].')
2201;';
2202                                                                                                pwg_query($query);
2203                                                                                }
2204
2205                                                                                if ($conf_UAM[4] <> -1) // Change user's status
2206                                                                                {
2207                                                                                                $query = '
2208UPDATE '.USER_INFOS_TABLE.'
2209SET status = "'.$conf_UAM[4].'"
2210WHERE user_id = '.$data['user_id'].'
2211;';
2212                                                                                                pwg_query($query);
2213                                                                                }
2214
2215                                                                                if ($conf_UAM[36] <> -1) // Change user's privacy level
2216                                                                                {
2217                                                                                                $query = '
2218UPDATE '.USER_INFOS_TABLE.'
2219SET level = "'.$conf_UAM[36].'"
2220WHERE user_id = '.$data['user_id'].'
2221;';
2222                                                                                                pwg_query($query);
2223                                                                                }
2224
2225                                                                                // Set UAM_validated field to True in #_users table
2226                                                                                $query = '
2227UPDATE '.USERS_TABLE.'
2228SET UAM_validated = "true"
2229WHERE id = '.$data['user_id'].'
2230;';
2231                                                                                pwg_query($query);
2232
2233                                                                                // Refresh user's category cache
2234                                // -----------------------------
2235                                                                                invalidate_user_cache();
2236
2237                                                                                return true;
2238                                                                }
2239                                                }
2240                                }
2241    else if (!empty($data) and !is_null($data['date_check']))
2242    {
2243      return false;
2244    }
2245                }
2246  else
2247    return false;
2248}
2249
2250
2251/**
2252 * Function called from UAM_admin.php for manual validation by admin
2253 *
2254 * @param : User id
2255 *
2256 */
2257function ManualValidation($id)
2258{
2259                global $conf;
2260
2261                $conf_UAM = unserialize($conf['UserAdvManager']);
2262
2263                if (isset($conf_UAM[1]) and $conf_UAM[1] == 'true') // Set date of validation
2264                {
2265                                list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
2266
2267                                $query = '
2268UPDATE '.USER_CONFIRM_MAIL_TABLE.'
2269SET date_check="'.$dbnow.'"
2270WHERE user_id = '.$id.'
2271;';
2272                                pwg_query($query);
2273                }
2274
2275                if ($conf_UAM[2] <> -1) // Delete user from waiting group
2276                {
2277                                $query = '
2278DELETE FROM '.USER_GROUP_TABLE.'
2279WHERE user_id = '.$id.'
2280                AND group_id = '.$conf_UAM[2].'
2281;';
2282                                pwg_query($query);
2283                }
2284 
2285                if ($conf_UAM[3] <> -1) // Set user's valid group
2286                {
2287                                $query = '
2288DELETE FROM '.USER_GROUP_TABLE.'
2289WHERE user_id = '.$id.'
2290                AND group_id = '.$conf_UAM[3].'
2291;';
2292                                pwg_query($query);
2293       
2294                                $query = '
2295INSERT INTO '.USER_GROUP_TABLE.'
2296                (user_id, group_id)
2297VALUES
2298                ('.$id.', '.$conf_UAM[3].')
2299;';
2300                                pwg_query($query);
2301                }
2302
2303                if ($conf_UAM[4] <> -1) // Set user's valid status
2304                {
2305                                $query = '
2306UPDATE '.USER_INFOS_TABLE.'
2307SET status = "'.$conf_UAM[4].'"
2308WHERE user_id = '.$id.'
2309;';
2310                                pwg_query($query);
2311                }
2312
2313                if ($conf_UAM[36] <> -1) // Set user's valid privacy level
2314                {
2315                                $query = '
2316UPDATE '.USER_INFOS_TABLE.'
2317SET level = "'.$conf_UAM[36].'"
2318WHERE user_id = '.$id.'
2319;';
2320                                pwg_query($query);
2321                }
2322
2323                // Set UAM_validated field to True in #_users table
2324                $query = '
2325UPDATE '.USERS_TABLE.'
2326SET UAM_validated = "true"
2327WHERE id = '.$id.'
2328;';
2329                pwg_query($query);
2330}
2331
2332
2333/**
2334 * Function called from functions.inc.php - Check if username matches forbidden caracters
2335 *
2336 * @param : User login
2337 *
2338 * @return : Bool
2339 *
2340 */
2341function ValidateUsername($login)
2342{
2343  global $conf;
2344
2345  $conf_UAM = unserialize($conf['UserAdvManager']);
2346
2347  if (isset($login) and isset($conf_UAM[6]) and $conf_UAM[6] <> '')
2348  {
2349    $conf_CharExclusion = preg_split("/,/",$conf_UAM[6]);
2350    for ($i = 0 ; $i < count($conf_CharExclusion) ; $i++)
2351    {
2352      $pattern = '/'.$conf_CharExclusion[$i].'/i';
2353      if (preg_match($pattern, $login))
2354      {
2355        return true;
2356      }
2357    }
2358  }
2359  else
2360  {
2361    return false;
2362  }
2363}
2364
2365
2366/**
2367 * Function called from main.inc.php - Check if user's email is in excluded email providers list
2368 * Doesn't work on call - Must be copied in main.inc.php to work
2369 *
2370 * @param : Email address
2371 *
2372 * @return : Bool
2373 *
2374 */
2375function ValidateEmailProvider($email)
2376{
2377  global $conf;
2378
2379  $conf_UAM = unserialize($conf['UserAdvManager']);
2380 
2381                if (isset($email) and isset($conf_UAM[11]) and $conf_UAM[11] <> '')
2382                {
2383                                $conf_MailExclusion = preg_split("/[\s,]+/",$conf_UAM[11]);
2384                                for ($i = 0 ; $i < count($conf_MailExclusion) ; $i++)
2385                                {
2386                                                $pattern = '/'.$conf_MailExclusion[$i].'/i';
2387                                                if (preg_match($pattern, $email))
2388      {
2389                return true;
2390      }
2391                                }
2392                }
2393  else
2394  {
2395    return false;
2396  }
2397}
2398
2399
2400/**
2401 * Function called from UAM_admin.php - Get unvalidated users according time limit
2402 *
2403 * @return : List of users
2404 *
2405 */
2406function get_unvalid_user_list()
2407{
2408                global $conf, $page;
2409         
2410                // Get ConfirmMail configuration
2411  // -----------------------------
2412  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2413  // Get UAM configuration
2414  // ---------------------
2415  $conf_UAM = unserialize($conf['UserAdvManager']);
2416 
2417  $users = array();
2418
2419                // Search users depending expiration date
2420  // --------------------------------------
2421  $query = '
2422SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2423                u.'.$conf['user_fields']['username'].' AS username,
2424                u.'.$conf['user_fields']['email'].' AS email,
2425                ui.status,
2426                ui.enabled_high,
2427                ui.level,
2428                ui.registration_date
2429FROM '.USERS_TABLE.' AS u
2430  INNER JOIN '.USER_INFOS_TABLE.' AS ui
2431    ON u.'.$conf['user_fields']['id'].' = ui.user_id
2432  LEFT JOIN '.USER_GROUP_TABLE.' AS ug
2433    ON u.'.$conf['user_fields']['id'].' = ug.user_id
2434WHERE u.'.$conf['user_fields']['id'].' >= 3
2435  AND (TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) >= "'.$conf_UAM_ConfirmMail[1].'"
2436  OR TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) < "'.$conf_UAM_ConfirmMail[1].'")
2437                AND u.UAM_validated = "false"
2438ORDER BY ui.registration_date ASC
2439;';
2440
2441                $result = pwg_query($query);
2442     
2443  while ($row = pwg_db_fetch_assoc($result))
2444  {
2445                $user = $row;
2446    $user['groups'] = array();
2447
2448    array_push($users, $user);
2449                }
2450
2451                // Add groups list
2452  // ---------------
2453  $user_ids = array();
2454  foreach ($users as $i => $user)
2455  {
2456                $user_ids[$i] = $user['id'];
2457                }
2458
2459                $user_nums = array_flip($user_ids);
2460
2461  if (count($user_ids) > 0)
2462  {
2463                $query = '
2464SELECT user_id, group_id
2465  FROM '.USER_GROUP_TABLE.'
2466WHERE user_id IN ('.implode(',', $user_ids).')
2467;';
2468       
2469                                $result = pwg_query($query);
2470       
2471    while ($row = pwg_db_fetch_assoc($result))
2472    {
2473                array_push(
2474                $users[$user_nums[$row['user_id']]]['groups'],
2475        $row['group_id']
2476                                                );
2477                                }
2478                }
2479
2480                return $users;
2481}
2482
2483
2484/**
2485 * Function called from functions.inc.php - Get all users who haven't validate their registration in configured time
2486 * to delete or remail them automatically
2487 *
2488 * @return : List of users
2489 *
2490 */
2491function get_unvalid_user_autotasks()
2492{
2493                global $conf, $page;
2494         
2495                // Get ConfirmMail configuration
2496  // -----------------------------
2497  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2498 
2499  $users = array();
2500
2501                // search users depending expiration date
2502  // --------------------------------------
2503  $query = '
2504SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2505                ui.registration_date
2506FROM '.USERS_TABLE.' AS u
2507  INNER JOIN '.USER_INFOS_TABLE.' AS ui
2508    ON u.'.$conf['user_fields']['id'].' = ui.user_id
2509WHERE u.'.$conf['user_fields']['id'].' >= 3
2510  AND (TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) >= "'.$conf_UAM_ConfirmMail[1].'")
2511ORDER BY ui.registration_date ASC;';
2512
2513                $result = pwg_query($query);
2514
2515  while ($row = pwg_db_fetch_assoc($result))
2516  {
2517    array_push($users, $row);
2518                }
2519
2520                return $users;
2521}
2522
2523
2524/**
2525 * Function called from UAM_admin.php - Get ghost users
2526 *
2527 * @return : List of users
2528 *
2529 */
2530function get_ghost_user_list()
2531{
2532                global $conf, $page;
2533
2534  $conf_UAM = unserialize($conf['UserAdvManager']);
2535
2536  $users = array();
2537
2538                // Search users depending expiration date
2539  // --------------------------------------
2540  $query = '
2541SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2542                u.'.$conf['user_fields']['username'].' AS username,
2543                u.'.$conf['user_fields']['email'].' AS email,
2544                lv.lastvisit,
2545                lv.reminder
2546FROM '.USERS_TABLE.' AS u
2547  INNER JOIN '.USER_LASTVISIT_TABLE.' AS lv
2548    ON u.'.$conf['user_fields']['id'].' = lv.user_id
2549WHERE (TO_DAYS(NOW()) - TO_DAYS(lv.lastvisit) >= "'.$conf_UAM[16].'")
2550ORDER BY lv.lastvisit ASC;';
2551
2552                $result = pwg_query($query);
2553     
2554  while ($row = pwg_db_fetch_assoc($result))
2555  {
2556                $user = $row;
2557    $user['groups'] = array();
2558
2559    array_push($users, $user);
2560                }
2561
2562                // Add groups list
2563  // ---------------
2564  $user_ids = array();
2565  foreach ($users as $i => $user)
2566  {
2567        $user_ids[$i] = $user['id'];
2568                }
2569
2570                return $users;
2571}
2572
2573
2574/**
2575 * Function called from functions.inc.php - Get all ghost users to delete or downgrade automatically on any user login
2576 *
2577 * @return : List of users to delete or downgrade automatically
2578 *
2579 */
2580function get_ghosts_autotasks()
2581{
2582                global $conf, $page;
2583
2584  $conf_UAM = unserialize($conf['UserAdvManager']);
2585 
2586  $users = array();
2587 
2588                // Search users depending expiration date and reminder sent
2589  // --------------------------------------------------------
2590  $query = '
2591SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2592                lv.lastvisit
2593FROM '.USERS_TABLE.' AS u
2594  INNER JOIN '.USER_LASTVISIT_TABLE.' AS lv
2595    ON u.'.$conf['user_fields']['id'].' = lv.user_id
2596WHERE (TO_DAYS(NOW()) - TO_DAYS(lv.lastvisit) >= "'.$conf_UAM[16].'")
2597ORDER BY lv.lastvisit ASC;';
2598
2599                $result = pwg_query($query);
2600     
2601                while ($row = pwg_db_fetch_assoc($result))
2602  {
2603    array_push($users, $row);
2604                }
2605 
2606                return $users;
2607}
2608
2609
2610/**
2611 * Function called from UAM_admin.php - Get all users to display the number of days since their last visit
2612 *
2613 * @return : List of users
2614 *
2615 */
2616function get_user_list()
2617{
2618                global $conf, $page;
2619 
2620  $users = array();
2621
2622                // Search users depending expiration date with exclusion of Adult_Content generic users
2623  // ------------------------------------------------------------------------------------
2624  $query = '
2625SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
2626                u.'.$conf['user_fields']['username'].' AS username,
2627                u.'.$conf['user_fields']['email'].' AS email,
2628                ug.lastvisit
2629FROM '.USERS_TABLE.' AS u
2630  INNER JOIN '.USER_LASTVISIT_TABLE.' AS ug
2631    ON u.'.$conf['user_fields']['id'].' = ug.user_id
2632WHERE u.'.$conf['user_fields']['id'].' >= 3
2633  AND u.username NOT LIKE "16"
2634  AND u.username NOT LIKE "18"
2635ORDER BY ug.lastvisit DESC
2636;';
2637
2638                $result = pwg_query($query);
2639     
2640  while ($row = pwg_db_fetch_assoc($result))
2641  {
2642                $user = $row;
2643    $user['groups'] = array();
2644
2645    array_push($users, $user);
2646                }
2647
2648                // Add groups list
2649  // ---------------
2650  $user_ids = array();
2651  foreach ($users as $i => $user)
2652  {
2653                        $user_ids[$i] = $user['id'];
2654                }
2655
2656                return $users;
2657}
2658
2659
2660/**
2661 * Function called from UAM_admin.php - to determine who is expired or not and giving a different display color
2662 *
2663 * @param : user id
2664 *
2665 * @return : Bool
2666 *
2667 */
2668function expiration($id)
2669{
2670        global $conf, $page;
2671         
2672                // Get ConfirmMail configuration
2673  // -----------------------------
2674  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
2675         
2676                // Get UAM configuration
2677  // ---------------------
2678  $conf_UAM = unserialize($conf['UserAdvManager']);
2679       
2680                $query = '
2681SELECT registration_date
2682  FROM '.USER_INFOS_TABLE.'
2683WHERE user_id = '.$id.'
2684;';
2685                list($registration_date) = pwg_db_fetch_row(pwg_query($query));
2686
2687//              Time limit process             
2688// ******************************************** 
2689                if (!empty($registration_date))
2690  {
2691                                // Dates formating and compare
2692                // ---------------------------
2693                                $today = date("d-m-Y"); // Get today's date
2694                                list($day, $month, $year) = explode('-', $today); // explode date of today                                               
2695                        $daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
2696               
2697                list($regdate, $regtime) = explode(' ', $registration_date); // Explode date and time from registration date
2698                                list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
2699                                $regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
2700                       
2701                                $deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps     
2702                                $deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
2703
2704                                // Condition with the value set for time limit
2705    // -------------------------------------------
2706                                if ($deltadays <= $conf_UAM_ConfirmMail[1]) // If Nb of days is less than the limit set
2707                                {
2708                                                return false;
2709                                }
2710                                else
2711                                {
2712                                                return true;
2713                                }
2714                }
2715}
2716
2717
2718/**
2719 * Returns a password's score for password complexity check
2720 *
2721 * @param : password filled by user
2722 *
2723 * @return : Score calculation
2724 *
2725 * Thanx to MathieuGut from http://m-gut.developpez.com
2726 */
2727function testpassword($password) // $password given by user
2728{
2729
2730  // Variables initiation
2731  // --------------------
2732  $points = 0;
2733  $point_lowercase = 0;
2734  $point_uppercase = 0;
2735  $point_numbers = 0;
2736  $point_characters = 0;
2737
2738  // Getting password lengh
2739  // ----------------------
2740  $length = strlen($password);
2741
2742  // Loop to read password characters
2743  for($i = 0; $i < $length; $i++)
2744  {
2745    // Select each letters
2746    // $i is 0 at first turn
2747    // ---------------------
2748    $letters = $password[$i];
2749
2750    if ($letters>='a' && $letters<='z')
2751    {
2752      // Adding 1 point to score for a lowercase
2753      // ---------------------------------------
2754                                $points = $points + 1;
2755
2756                                // Adding bonus points for lowercase
2757      // ---------------------------------
2758                  $point_lowercase = 1;
2759    }
2760    else if ($letters>='A' && $letters <='Z')
2761    {
2762      // Adding 2 points to score for uppercase
2763      // --------------------------------------
2764      $points = $points + 2;
2765               
2766      // Adding bonus points for uppercase
2767      // ---------------------------------
2768      $point_uppercase = 2;
2769    }
2770    else if ($letters>='0' && $letters<='9')
2771    {
2772      // Adding 3 points to score for numbers
2773      // ------------------------------------
2774      $points = $points + 3;
2775               
2776      // Adding bonus points for numbers
2777      // -------------------------------
2778      $point_numbers = 3;
2779    }
2780    else
2781    {
2782      // Adding 5 points to score for special characters
2783      // -----------------------------------------------
2784      $points = $points + 5;
2785               
2786      // Adding bonus points for special characters
2787      // ------------------------------------------
2788      $point_characters = 5;
2789    }
2790  }
2791
2792  // Calculating the coefficient points/length
2793  // -----------------------------------------
2794  $step1 = $points / $length;
2795
2796  // Calculation of the diversity of character types...
2797  // --------------------------------------------------
2798  $step2 = $point_lowercase + $point_uppercase + $point_numbers + $point_characters;
2799
2800  // Multiplying the coefficient of diversity with that of the length
2801  // ----------------------------------------------------------------
2802  $score = $step1 * $step2;
2803
2804  // Multiplying the result by the length of the string
2805  // --------------------------------------------------
2806  $finalscore = $score * $length;
2807
2808  return $finalscore;
2809}
2810
2811
2812/**
2813 * UAM_check_profile - Thx to LucMorizur
2814 * checks if a user id is registered as having already
2815 * visited his profile page.
2816 *
2817 * @uid        : the user id
2818 *
2819 * @user_idsOK : (returned) array of all users ids having already visited
2820 *               their profile.php pages
2821 *
2822 * @returns    : true or false whether the users has already visited his
2823 *               profile.php page or not
2824 *
2825 */
2826function UAM_check_profile($uid, &$user_idsOK)
2827{
2828  $t = array();
2829  $v = false;
2830 
2831  $query = '
2832SELECT value
2833FROM '.CONFIG_TABLE.'
2834WHERE param = "UserAdvManager_Redir"
2835;';
2836 
2837  if ($v = (($t = pwg_db_fetch_row(pwg_query($query))) !== false))
2838  {
2839    $user_idsOK = explode(',', $t[0]);
2840    $v = (in_array($uid, $user_idsOK));
2841  }
2842  return $v;
2843}
2844
2845
2846/**
2847 * UAM_check_pwdreset
2848 * checks if a user id is registered as having already
2849 * changed his password.
2850 *
2851 * @uid        : the user id
2852 *
2853 * @returns    : true or false whether the users has already changed his password
2854 *
2855 */
2856function UAM_check_pwgreset($uid)
2857{
2858  $query = '
2859SELECT UAM_pwdreset
2860FROM '.USERS_TABLE.'
2861WHERE id='.$uid.'
2862;';
2863
2864  $result = pwg_db_fetch_assoc(pwg_query($query));
2865 
2866  if($result['UAM_pwdreset'] == 'true')
2867  {
2868    return true;
2869  }
2870  else return false; 
2871}
2872
2873
2874/**
2875 * UAM_UsrReg_Verif
2876 * Check if the user who logged-in have validate his registration
2877 *
2878 * @returns : True if validation is OK else False
2879 */
2880function UAM_UsrReg_Verif($user_id)
2881{
2882  global $conf;
2883
2884  $query = '
2885SELECT UAM_validated
2886FROM '.USERS_TABLE.'
2887WHERE id='.$user_id.'
2888;';
2889
2890  $result = pwg_db_fetch_assoc(pwg_query($query));
2891
2892  if($result['UAM_validated'] == 'true')
2893  {
2894    return true;
2895  }
2896  else return false;
2897}
2898
2899
2900/**
2901 * SetUnvalidated
2902 * Set UAM_validated field to false in #_users table
2903 *
2904 **/
2905function SetUnvalidated($user_id)
2906{
2907  $query ='
2908UPDATE '.USERS_TABLE.'
2909SET UAM_validated = "false"
2910WHERE id = '.$user_id.'
2911LIMIT 1
2912;';
2913
2914  pwg_query($query);
2915}
2916
2917
2918/**
2919 * UAM_Set_PwdReset
2920 * Action in user_list to set a password reset for a user
2921 */
2922function UAM_Set_PwdReset($uid)
2923{
2924  $query ='
2925UPDATE '.USERS_TABLE.'
2926SET UAM_pwdreset = "true"
2927WHERE id = '.$uid.'
2928LIMIT 1
2929;';
2930
2931  pwg_query($query);
2932}
2933
2934
2935/**
2936 * UAM_loc_visible_user_list
2937 * Adds a new feature in user_list to allow password reset for selected users by admin
2938 *
2939 */
2940function UAM_loc_visible_user_list($visible_user_list)
2941{
2942  global $template;
2943 
2944  $template->append('plugin_user_list_column_titles', l10n('UAM_PwdReset'));
2945 
2946  $user_ids = array();
2947 
2948  foreach ($visible_user_list as $i => $user)
2949  {
2950    $user_ids[$i] = $user['id'];
2951  }
2952 
2953  $user_nums = array_flip($user_ids);
2954
2955  // Query to get informations in database
2956  // -------------------------------------
2957  if (!empty($user_ids))
2958  {
2959    $query = '
2960SELECT DISTINCT id, UAM_pwdreset
2961  FROM '.USERS_TABLE.'
2962  WHERE id IN ('.implode(',', $user_ids).')
2963;';
2964    $result = pwg_query($query);
2965   
2966    while ($row = mysql_fetch_array($result))
2967    {
2968      if ($row['UAM_pwdreset'] == 'false')
2969      {
2970        $pwdreset = l10n('UAM_PwdReset_Done');
2971      }
2972      else if ($row['UAM_pwdreset'] == 'true')
2973      {
2974        $pwdreset = l10n('UAM_PwdReset_Todo');
2975      }
2976      else $pwdreset = l10n('UAM_PwdReset_NA');
2977     
2978                  $visible_user_list[$user_nums[$row['id']]]['plugin_columns'][] = $pwdreset; // Shows users password state in user_list
2979    }
2980  }
2981  return $visible_user_list;
2982}
2983
2984
2985/**
2986 * UAM specific database dump (only for MySql !)
2987 * Creates an SQL dump of UAM specific tables and configuration settings
2988 *
2989 * @returns  : Boolean to manage appropriate message display
2990 *
2991 */
2992function UAM_dump($download)
2993{
2994  global $conf;
2995
2996  $plugin =  PluginInfos(UAM_PATH);
2997  $version = $plugin['version'];
2998
2999  // Initial backup folder creation and file initialisation
3000  // ------------------------------------------------------
3001  if (!is_dir(UAM_PATH.'/include/backup'))
3002    mkdir(UAM_PATH.'/include/backup');
3003
3004  $Backup_File = UAM_PATH.'/include/backup/UAM_dbbackup.sql';
3005
3006  $fp = fopen($Backup_File, 'w');
3007
3008  // Writing plugin version
3009  $insertions = "-- ".$version." --\n\n";
3010  fwrite($fp, $insertions);
3011
3012  // Saving UAM specific tables
3013  // --------------------------
3014  $ListTables = array(USER_CONFIRM_MAIL_TABLE, USER_LASTVISIT_TABLE);
3015  $j=0;
3016
3017  while($j < count($ListTables))
3018  {
3019    $sql = 'SHOW CREATE TABLE '.$ListTables[$j];
3020    $res = pwg_query($sql);
3021
3022    if ($res)
3023    {
3024      $insertions = "-- -------------------------------------------------------\n";
3025      $insertions .= "-- Create ".$ListTables[$j]." table\n";
3026      $insertions .= "-- ------------------------------------------------------\n\n";
3027
3028      $insertions .= "DROP TABLE IF EXISTS ".$ListTables[$j].";\n\n";
3029
3030      $array = mysql_fetch_array($res);
3031      $array[1] .= ";\n\n";
3032      $insertions .= $array[1];
3033
3034      $req_table = pwg_query('SELECT * FROM '.$ListTables[$j]) or die(mysql_error());
3035      $nb_fields = mysql_num_fields($req_table);
3036      while ($line = mysql_fetch_array($req_table))
3037      {
3038        $insertions .= 'INSERT INTO '.$ListTables[$j].' VALUES (';
3039        for ($i=0; $i<$nb_fields; $i++)
3040        {
3041          $insertions .= '\'' . pwg_db_real_escape_string($line[$i]) . '\', ';
3042        }
3043        $insertions = substr($insertions, 0, -2);
3044        $insertions .= ");\n";
3045      }
3046      $insertions .= "\n\n";
3047    }
3048
3049    fwrite($fp, $insertions);   
3050    $j++;
3051  }
3052 
3053  // Saving UAM configuration
3054  // ------------------------
3055  $insertions = "-- -------------------------------------------------------\n";
3056  $insertions .= "-- Insert UAM configuration in ".CONFIG_TABLE."\n";
3057  $insertions .= "-- ------------------------------------------------------\n\n";
3058
3059  fwrite($fp, $insertions);
3060
3061  $pattern = "UserAdvManager%";
3062  $req_table = pwg_query('SELECT * FROM '.CONFIG_TABLE.' WHERE param LIKE "'.$pattern.'";') or die(mysql_error());
3063  $nb_fields = mysql_num_fields($req_table);
3064
3065  while ($line = mysql_fetch_array($req_table))
3066  {
3067    $insertions = 'INSERT INTO '.CONFIG_TABLE.' VALUES (';
3068    for ($i=0; $i<$nb_fields; $i++)
3069    {
3070      $insertions .= '\'' . pwg_db_real_escape_string($line[$i]) . '\', ';
3071    }
3072    $insertions = substr($insertions, 0, -2);
3073    $insertions .= ");\n";
3074
3075    fwrite($fp, $insertions);
3076  }
3077
3078  fclose($fp);
3079
3080  // Download generated dump file
3081  // ----------------------------
3082  if ($download == 'true')
3083  {
3084    if (@filesize($Backup_File))
3085    {
3086      $http_headers = array(
3087        'Content-Length: '.@filesize($Backup_File),
3088        'Content-Type: text/x-sql',
3089        'Content-Disposition: attachment; filename="UAM_dbbackup.sql";',
3090        'Content-Transfer-Encoding: binary',
3091        );
3092
3093      foreach ($http_headers as $header)
3094      {
3095        header($header);
3096      }
3097
3098      @readfile($Backup_File);
3099      exit();
3100    }
3101  }
3102
3103  return true;
3104}
3105
3106
3107/**
3108 * UAM_Restore_backup_file
3109 * Restore backup database file
3110 *
3111 * @returns : Boolean
3112 */
3113function UAM_Restore_backup_file() 
3114{
3115  global $prefixeTable, $dblayer, $conf;
3116 
3117  define('DEFAULT_PREFIX_TABLE', 'piwigo_');
3118 
3119  $Backup_File = UAM_PATH.'/include/backup/UAM_dbbackup.sql';
3120
3121  // Cleanup database before restoring
3122  // ---------------------------------
3123
3124  // Delete UserAdvManager global config in #_config table
3125  $q = '
3126DELETE FROM '.CONFIG_TABLE.'
3127WHERE param="UserAdvManager"
3128;';
3129
3130  pwg_query($q);
3131
3132  // Delete UserAdvManager_ConfirmMail global config in #_config table
3133  $q = '
3134DELETE FROM '.CONFIG_TABLE.'
3135WHERE param="UserAdvManager_ConfirmMail"
3136;';
3137
3138  pwg_query($q);
3139
3140  // Delete UserAdvManager_Redir config in #_config table
3141  $q = '
3142DELETE FROM '.CONFIG_TABLE.'
3143WHERE param="UserAdvManager_Redir"
3144;';
3145
3146  pwg_query($q);
3147
3148  // Delete UserAdvManager_Version config in #_config table
3149  $q = '
3150DELETE FROM '.CONFIG_TABLE.'
3151WHERE param="UserAdvManager_Version"
3152;';
3153
3154  pwg_query($q);
3155
3156  // Restore sql backup file - DROP TABLE queries are executed
3157  // ---------------------------------------------------------
3158  UAM_execute_sqlfile(
3159    $Backup_File,
3160    DEFAULT_PREFIX_TABLE,
3161    $prefixeTable,
3162    $dblayer
3163  );
3164}
3165
3166
3167/**
3168 * loads an sql file and executes all queries / Based on Piwigo's original install file
3169 *
3170 * Before executing a query, $replaced is... replaced by $replacing. This is
3171 * useful when the SQL file contains generic words.
3172 *
3173 * @param string filepath
3174 * @param string replaced
3175 * @param string replacing
3176 * @return void
3177 */
3178function UAM_execute_sqlfile($filepath, $replaced, $replacing, $dblayer)
3179{
3180  $sql_lines = file($filepath);
3181  $query = '';
3182  foreach ($sql_lines as $sql_line)
3183  {
3184    $sql_line = trim($sql_line);
3185    if (preg_match('/(^--|^$)/', $sql_line))
3186    {
3187      continue;
3188    }
3189   
3190    $query.= ' '.$sql_line;
3191   
3192    // if we reached the end of query, we execute it and reinitialize the
3193    // variable "query"
3194    if (preg_match('/;$/', $sql_line))
3195    {
3196      $query = trim($query);
3197      $query = str_replace($replaced, $replacing, $query);
3198      if ('mysql' == $dblayer)
3199      {
3200        if (preg_match('/^(CREATE TABLE .*)[\s]*;[\s]*/im', $query, $matches))
3201        {
3202          $query = $matches[1].' DEFAULT CHARACTER SET utf8'.';';
3203        }
3204      }
3205      pwg_query($query);
3206      $query = '';
3207    }
3208  }
3209}
3210
3211
3212/**
3213 * Delete obsolete files on plugin upgrade
3214 * Obsolete files are listed in file obsolete.list
3215 *
3216 */
3217function clean_obsolete_files()
3218{
3219  if (file_exists(UAM_PATH.'obsolete.list')
3220    and $old_files = file(UAM_PATH.'obsolete.list', FILE_IGNORE_NEW_LINES)
3221    and !empty($old_files))
3222  {
3223    array_push($old_files, 'obsolete.list');
3224    foreach($old_files as $old_file)
3225    {
3226      $path = UAM_PATH.$old_file;
3227      if (is_file($path))
3228      {
3229        @unlink($path);
3230      }
3231      elseif (is_dir($path))
3232      {
3233        @rmdir($path);
3234      }
3235    }
3236  }
3237}
3238
3239
3240/**
3241 * Function called from maintain.inc.php - to check if database upgrade is needed
3242 *
3243 * @param : table name
3244 *
3245 * @return : boolean
3246 *
3247 */
3248function table_exist($table)
3249{
3250  $query = 'DESC '.$table.';';
3251  return (bool)($res=pwg_query($query));
3252}
3253
3254
3255/**
3256 * Function called from UAM_admin.php and main.inc.php to get the plugin version and name
3257 *
3258 * @param : plugin directory
3259 *
3260 * @return : plugin's version and name
3261 *
3262 */
3263function PluginInfos($dir)
3264{
3265  $path = $dir;
3266
3267  $plg_data = implode( '', file($path.'main.inc.php') );
3268  if ( preg_match("|Plugin Name: (.*)|", $plg_data, $val) )
3269  {
3270    $plugin['name'] = trim( $val[1] );
3271  }
3272  if (preg_match("|Version: (.*)|", $plg_data, $val))
3273  {
3274    $plugin['version'] = trim($val[1]);
3275  }
3276  if ( preg_match("|Plugin URI: (.*)|", $plg_data, $val) )
3277  {
3278    $plugin['uri'] = trim($val[1]);
3279  }
3280  if ($desc = load_language('description.txt', $path.'/', array('return' => true)))
3281  {
3282    $plugin['description'] = trim($desc);
3283  }
3284  elseif ( preg_match("|Description: (.*)|", $plg_data, $val) )
3285  {
3286    $plugin['description'] = trim($val[1]);
3287  }
3288  if ( preg_match("|Author: (.*)|", $plg_data, $val) )
3289  {
3290    $plugin['author'] = trim($val[1]);
3291  }
3292  if ( preg_match("|Author URI: (.*)|", $plg_data, $val) )
3293  {
3294    $plugin['author uri'] = trim($val[1]);
3295  }
3296  if (!empty($plugin['uri']) and strpos($plugin['uri'] , 'extension_view.php?eid='))
3297  {
3298    list( , $extension) = explode('extension_view.php?eid=', $plugin['uri']);
3299    if (is_numeric($extension)) $plugin['extension'] = $extension;
3300  }
3301// IMPORTANT SECURITY !
3302// --------------------
3303  $plugin = array_map('htmlspecialchars', $plugin);
3304
3305  return $plugin ;
3306}
3307
3308
3309/**
3310 * Useful for debugging - 4 vars can be set
3311 * Output result to log.txt file
3312 *
3313 */
3314function UAMLog($var1, $var2, $var3, $var4)
3315{
3316   $fo=fopen (UAM_PATH.'log.txt','a') ;
3317   fwrite($fo,"======================\n") ;
3318   fwrite($fo,'le ' . date('D, d M Y H:i:s') . "\r\n");
3319   fwrite($fo,$var1 ."\r\n") ;
3320   fwrite($fo,$var2 ."\r\n") ;
3321   fwrite($fo,$var3 ."\r\n") ;
3322   fwrite($fo,$var4 ."\r\n") ;
3323   fclose($fo) ;
3324}
3325
3326?>
Note: See TracBrowser for help on using the repository browser.