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

Revision 17989, 90.8 KB checked in by Eric, 7 years ago (diff)

fix svn conflict

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