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

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

Remove all options related to comments because they are processed in new "Comments Access Manager" plugin.
New version 2.20.8 hard coded for publication.

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