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

Last change on this file since 14651 was 14651, checked in by Eric, 9 years ago

Bug 2620 fixed - Display of ConfirmMail, rejected and del_account pages have been improved
Bug 2621 fixed - Display of ConfirmMail, rejected and del_account pages have been improved for IE8 and IE9 render
Bug 2631 fixed - Piwigo 2.4 compliance : $confgallery_url replaced by get_gallery_home_url() for [myurl] tag

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