source: extensions/UserAdvManager/branches/2.30/include/functions.inc.php @ 17511

Revision 17511, 84.4 KB checked in by Eric, 7 years ago (diff)

r17510 merged from trunk to branch 2.30

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