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

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

Fix bug on manual validation
changelog.txt.php updated for remind

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