b2evolution

Multilingual multiuser multiblog engine

b2evolution Technical Documentation (0.9.x) [ class tree: admin ] [ index: admin ] [ all elements ]

Source for file b2users.php

Documentation is available at b2users.php

  1. <?php
  2. /**
  3.  * Groups/Users editing
  4.  *
  5.  * b2evolution - {@link http://b2evolution.net/}
  6.  * Released under GNU GPL License - {@link http://b2evolution.net/about/license.html}
  7.  * @copyright (c)2003-2005 by Francois PLANQUE - {@link http://fplanque.net/}
  8.  *
  9.  * @package admin
  10.  */
  11.  
  12. /**
  13.  * Includes:
  14.  */
  15. require_oncedirname(__FILE__)'/_header.php' );
  16. $admin_tab 'users';
  17. $admin_pagetitle T_('User management');
  18.  
  19. param'action''string' );
  20. param'user''integer');
  21. param'group''integer');
  22.  
  23.  
  24. // show the top menu
  25. if$action != 'userupdate' )
  26. // perhaps we'll have to set a cookie later
  27.     requiredirname(__FILE__).'/_menutop.php' );
  28.     requiredirname(__FILE__).'/_menutop_end.php' );
  29. }
  30.  
  31.  
  32. $errors array();
  33.  
  34.  
  35. $user_profile_only 0;
  36. // Check permission:
  37. if!$current_User->check_perm'users''edit'false ) )
  38. {
  39.     // allow profile editing/viewing only
  40.     $user_profile_only 1;
  41.  
  42.     if( ($action && $action != 'userupdate') )
  43.     {    // This should be prevented un the UI
  44.         errors_add'You have no permission to edit other users or groups!' );
  45.         $action ''// don't show group form (we have no group ID)
  46.     }
  47.     elseif$demo_mode && $action && $current_User->login == 'demouser' )
  48.     {
  49.         errors_addT_('You cannot change the demouser profile in demo mode!') );
  50.     }
  51. }
  52. elseif$demo_mode && !empty($action&& $current_User->ID == || $current_User->get('login'== 'demouser' )  )
  53. {
  54.     errors_addT_('You cannot change the demouser profile in demo mode!') );
  55. }
  56.  
  57.  
  58. iferrors() )
  59. {
  60.     if$action == 'userupdate' )
  61.     {    // display top menu that was suppressed before
  62.         requiredirname(__FILE__).'/_menutop.php' );
  63.         requiredirname(__FILE__).'/_menutop_end.php' );
  64.     }
  65. }
  66. else switch ($action)
  67. // actions only when editing users is allowed
  68.     case 'newuser':
  69.         param'template''integer'-);
  70.  
  71.         if$template > -)
  72.         // we use a template
  73.             $edited_User new Userget_userdata($template) );
  74.             $edited_User->set('ID'0);
  75.         }
  76.         else
  77.         // we use an empty user
  78.             $edited_User new User();
  79.         }
  80.  
  81.         break;
  82.  
  83.  
  84.     case 'newgroup':
  85.         param'template''integer'-);
  86.  
  87.         if$template > -)
  88.         // we use a template
  89.             $edited_Group $GroupCache->get_by_ID$template );
  90.             $edited_Group->set('ID'0);
  91.         }
  92.         else
  93.         // we use an empty user
  94.             $edited_Group new Group();
  95.         }
  96.  
  97.         break;
  98.  
  99.  
  100.     case 'userupdate':
  101.         param'edited_user_ID''integer'true );
  102.         if$edited_user_ID == )
  103.         // we create a new user
  104.             $edited_User new User();
  105.             $edited_User->set_datecreated$localtimenow );
  106.         }
  107.         else
  108.         {
  109.             $edited_User new Userget_userdata$edited_user_ID ) );
  110.         }
  111.  
  112.         if$user_profile_only && $edited_user_ID != $current_User->ID )
  113.         // user is only allowed to update him/herself
  114.             errors_addT_('You are only allowed to update your own profile!') );
  115.  
  116.             // display menu
  117.             requiredirname(__FILE__).'/_menutop.php' );
  118.             requiredirname(__FILE__).'/_menutop_end.php' );
  119.             break;
  120.         }
  121.  
  122.         param'edited_user_oldlogin''string'true );
  123.         param'edited_user_login''string'true );
  124.         $edited_user_login strtolower$edited_user_login );
  125.  
  126.         ifempty($edited_user_login) )
  127.         {
  128.             errors_addT_('You must provide an unique login!') );
  129.         }
  130.  
  131.         if!$user_profile_only )
  132.         // allow changing level/group not for profile mode
  133.             param'edited_user_level''integer'true );
  134.             if$edited_user_level || $edited_user_level 10 )
  135.             {
  136.                 errors_addsprintfT_('User level must be between %d and %d.')010 ) );
  137.             }
  138.             else
  139.             {
  140.                 $edited_User->set'level'$edited_user_level );
  141.             }
  142.  
  143.             param'edited_user_grp_ID''integer'true );
  144.             if$edited_user_grp_ID )
  145.             {
  146.                 $edited_user_Group $GroupCache->get_by_ID$edited_user_grp_ID );
  147.             }
  148.             else $edited_user_Group new Group();
  149.  
  150.             $edited_User->setGroup$edited_user_Group );
  151.             // echo 'new group = ';
  152.             // $edited_User->Group->disp('name');
  153.         }
  154.  
  155.         // check if new login already exists for another user_ID
  156.         $query "SELECT ID FROM $tableusers WHERE user_login = '$edited_user_login' AND ID != $edited_user_ID";
  157.         $q $DB->get_var$query );
  158.  
  159.         if$q !== NULL )
  160.         {
  161.             errors_addsprintfT_('This login already exists. Do you want to <a %s>edit the existing user</a>?')'href="b2users.php?user='.$q.'"' ));
  162.         }
  163.  
  164.         $edited_User->set'login'$edited_user_login );
  165.         param'edited_user_firstname''string'true );
  166.         $edited_User->set'firstname'$edited_user_firstname );
  167.         param'edited_user_lastname''string'true );
  168.         $edited_User->set'lastname'$edited_user_lastname );
  169.         param'edited_user_nickname''string'true );
  170.         $edited_User->set'nickname'$edited_user_nickname );
  171.         param'edited_user_idmode''string'true );
  172.         $edited_User->set'idmode'$edited_user_idmode );
  173.         param'edited_user_locale''string'true );
  174.         $edited_User->set'locale'$edited_user_locale );
  175.         param'edited_user_email''string'true );
  176.         $edited_User->set'email'$edited_user_email );
  177.         param'edited_user_url''string'true );
  178.         $edited_User->set'url'$edited_user_url );
  179.         param'edited_user_icq''string'true );
  180.         $edited_User->set'icq'$edited_user_icq );
  181.         param'edited_user_aim''string'true );
  182.         $edited_User->set'aim'$edited_user_aim );
  183.         param'edited_user_msn''string'true );
  184.         $edited_User->set'msn'$edited_user_msn );
  185.         param'edited_user_yim''string'true );
  186.         $edited_User->set'yim'$edited_user_yim );
  187.         param'edited_user_notify''integer');
  188.         $edited_User->set'notify'$edited_user_notify );
  189.  
  190.         param'edited_user_pass1''string'true );
  191.         param'edited_user_pass2''string'true );
  192.         if$edited_user_pass1 != '' || $edited_user_pass2 != '' || $edited_user_ID == )
  193.         // update password, explicit for new users
  194.             if$edited_user_pass1 != $edited_user_pass2 )
  195.             {
  196.                 errors_addT_('You typed two different passwords.') );
  197.             }
  198.             else
  199.             {
  200.                 ifstrlen($edited_user_pass2$Settings->get('user_minpwdlen') )
  201.                 {
  202.                     errors_addsprintfT_('The mimimum password length is %d characters.')$Settings->get('user_minpwdlen')) );
  203.                 }
  204.                 else
  205.                 {
  206.                     $new_pass md5$edited_user_pass2 );
  207.                     $edited_User->set'pass'$new_pass )// set password
  208.                 }
  209.             }
  210.         }
  211.  
  212.         if!errors() )
  213.         // ---- NO UPDATE ON ERRORS
  214.  
  215.             if$edited_User->get('ID'!= )
  216.             {    // Commit update to the DB:
  217.                 $edited_User->dbupdate();
  218.  
  219.                 $update_status '<div class="panelinfo"><p>' T_('User updated.''</p></div>';
  220.  
  221.                 // Commit changes in cache:
  222.                 // not ready: $UserCache->add( $edited_Group );
  223.                 unset$cache_userdata )// until better
  224.             }
  225.             else
  226.             // Insert user into DB
  227.                 $edited_User->dbinsert();
  228.                 $update_status '<div class="panelinfo"><p>' T_('New user created.''</p></div>';
  229.             }
  230.  
  231.             // Update cookies
  232.             if$edited_user_ID == $current_User->ID )
  233.             // current user updates him/herself - we have to set cookies to keep him logged in
  234.                 ifisset($new_pass&& $current_User->pass != $new_pass )
  235.                 {
  236.                     setcookie$cookie_pass$new_pass$cookie_expires$cookie_path$cookie_domain);
  237.                 }
  238.  
  239.                 if$current_User->login != $edited_User->login )
  240.                 {
  241.                     setcookie$cookie_user$edited_User->login$cookie_expires$cookie_path$cookie_domain );
  242.                 }
  243.             }
  244.         }
  245.  
  246.         // display menu
  247.         requiredirname(__FILE__).'/_menutop.php' );
  248.         requiredirname(__FILE__).'/_menutop_end.php' );
  249.  
  250.         ifisset($update_status) )
  251.         {
  252.             echo $update_status;
  253.         }
  254.  
  255.         break;
  256.  
  257.  
  258.     case 'promote':
  259.         param'prom''string'true );
  260.         param'id''integer'true );
  261.  
  262.         $user_data get_userdata$id );
  263.         $usertopromote_level get_user_info'level'$user_data );
  264.  
  265.         echo '<div class="panelinfo">';
  266.  
  267.         ifin_array($promarray('up''down'))
  268.                 || ($prom == 'up' && $usertopromote_level 9)
  269.                 || ($prom == 'down' && $usertopromote_level 1)
  270.             )
  271.         {
  272.             echo '<p class="error">' T_('Invalid promotion.');
  273.         }
  274.         else
  275.         {
  276.  
  277.             if$prom == 'up' )
  278.             {
  279.                 $sql "UPDATE $tableusers SET user_level=user_level+1 WHERE ID = $id";
  280.             }
  281.             elseif$prom == 'down' )
  282.             {
  283.                 $sql "UPDATE $tableusers SET user_level=user_level-1 WHERE ID = $id";
  284.             }
  285.             $result $DB->query$sql );
  286.  
  287.             if$result )
  288.                 echo '<p>'.T_('User level changed.').'</p>';
  289.             else
  290.                 echo '<p class="error">'.sprintf'Couldn\'t change %s\'s level.'$user_data['user_login').'</p>';
  291.  
  292.             // reset cache
  293.             $cache_userdata$id '';
  294.  
  295.         }
  296.         echo '</div>';
  297.  
  298.         break;
  299.  
  300.  
  301.     case 'deleteuser':
  302.         /*
  303.          * Delete user
  304.          */
  305.         param'id''integer'true );
  306.         param'confirm''integer');
  307.  
  308.         if$id == $current_User->ID )
  309.         {
  310.             errors_addT_('You can\'t delete yourself!') );
  311.         }
  312.         if$id == )
  313.         {
  314.             errors_addT_('You can\'t delete User #1!') );
  315.         }
  316.  
  317.         if$errors )
  318.         {
  319.             break;
  320.         }
  321.  
  322.         $user_data get_userdata$id );
  323.         $deleted_User new User$user_data );
  324.  
  325.         if!$confirm )
  326.         {?>
  327.         <div class="panelinfo">
  328.             <h3><?php printfT_('Delete User %s?')$deleted_User->get'firstname' ).' '.$deleted_User->get'lastname' ).' ['.$deleted_User->get'login' ).']' )?></h3>
  329.  
  330.             <p><?php echo T_('Warning').': '.T_('deleting an user also deletes all posts made by this user.'?></p>
  331.  
  332.             <p><?php echo T_('THIS CANNOT BE UNDONE!'?></p>
  333.  
  334.             <p>
  335.                 <form action="b2users.php" method="get" class="inline">
  336.                     <input type="hidden" name="action" value="deleteuser" />
  337.                     <input type="hidden" name="id" value="<?php $deleted_User->ID(?>" />
  338.                     <input type="hidden" name="confirm" value="1" />
  339.  
  340.                     <input type="submit" value="<?php echo T_('I am sure!'?>" class="search" />
  341.                 </form>
  342.                 <form action="b2users.php" method="get" class="inline">
  343.                     <input type="submit" value="<?php echo T_('CANCEL'?>" class="search" />
  344.                 </form>
  345.             </p>
  346.  
  347.         </div>
  348.     <?php
  349.         }
  350.         else
  351.         // confirmed
  352.             // Delete from DB:
  353.             echo '<div class="panelinfo"><h3>'.T_('Deleting User...').'</h3>';
  354.             $deleted_User->dbdeletetrue );
  355.             echo '</div>';
  356.         }
  357.  
  358.         break;
  359.  
  360.  
  361.     case 'deletegroup':
  362.         /*
  363.          * Delete group
  364.          */
  365.         param'id''integer'true );
  366.         param'confirm''integer');
  367.  
  368.         if$id == )
  369.         {
  370.             errors_addT_('You can\'t delete Group #1!') );
  371.         }
  372.         if$id == $Settings->get('newusers_grp_ID' ) )
  373.         {
  374.             errors_addT_('You can\'t delete the default group for new users!') );
  375.         }
  376.  
  377.         if$errors )
  378.         {
  379.             break;
  380.         }
  381.  
  382.         $del_Group $GroupCache->get_by_ID$id );
  383.  
  384.         if!$confirm )
  385.         {?>
  386.         <div class="panelinfo">
  387.             <h3><?php printfT_('Delete group [%s]?')$del_Group->get'name' ) )?></h3>
  388.  
  389.             <p><?php echo T_('THIS CANNOT BE UNDONE!'?></p>
  390.  
  391.             <p>
  392.                 <form action="b2users.php" method="get" class="inline">
  393.                     <input type="hidden" name="action" value="deletegroup" />
  394.                     <input type="hidden" name="id" value="<?php $del_Group->ID(?>" />
  395.                     <input type="hidden" name="confirm" value="1" />
  396.  
  397.                     <input type="submit" value="<?php echo T_('I am sure!'?>" class="search" />
  398.                 </form>
  399.                 <form action="b2users.php" method="get" class="inline">
  400.                     <input type="submit" value="<?php echo T_('CANCEL'?>" class="search" />
  401.                 </form>
  402.             </p>
  403.  
  404.         </div>
  405.     <?php
  406.         }
  407.         else
  408.         // confirmed
  409.             // Delete from DB:
  410.             $del_Group->dbdeletetrue );
  411.             echo '<div class="panelinfo"><p>'.T_('Group deleted...').'</p></div>';
  412.         }
  413.  
  414.         break;
  415.  
  416.  
  417.     case 'groupupdate':
  418.         param'edited_grp_ID''integer'true );
  419.         param'edited_grp_oldname''string'true );
  420.         param'edited_grp_name''string'true );
  421.  
  422.         // check if the group name already exists for another group
  423.         $query "SELECT grp_ID FROM $tablegroups WHERE grp_name = '$edited_grp_name' AND grp_ID != $edited_grp_ID";
  424.         $q $DB->get_var$query );
  425.  
  426.         if$q !== NULL )
  427.         {
  428.             errors_addsprintfT_('This group name already exists! Do you want to <a %s>edit the existing group</a>?')'href="b2users.php?group='.$q.'"' ));
  429.         }
  430.  
  431.         if$edited_grp_ID == )
  432.         {
  433.             $edited_Group new Group();
  434.         }
  435.         else
  436.         {
  437.             $edited_Group $GroupCache->get_by_ID$edited_grp_ID );
  438.         }
  439.  
  440.         $edited_Group->set'name'$edited_grp_name );
  441.  
  442.         param'edited_grp_perm_blogs''string'true );
  443.         $edited_Group->set'perm_blogs'$edited_grp_perm_blogs );
  444.  
  445.         param'edited_grp_perm_stats''string'true );
  446.         $edited_Group->set'perm_stats'$edited_grp_perm_stats );
  447.  
  448.         param'edited_grp_perm_spamblacklist''string'true );
  449.         $edited_Group->set'perm_spamblacklist'$edited_grp_perm_spamblacklist );
  450.  
  451.         param'edited_grp_perm_options''string'true );
  452.         $edited_Group->set'perm_options'$edited_grp_perm_options );
  453.  
  454.         param'edited_grp_perm_templates''integer');
  455.         $edited_Group->set'perm_templates'$edited_grp_perm_templates );
  456.  
  457.         if$edited_grp_ID != )
  458.         {    // Groups others than #1 can be prevented from editing users
  459.             param'edited_grp_perm_users''string'true );
  460.             $edited_Group->set'perm_users'$edited_grp_perm_users );
  461.         }
  462.  
  463.         ifcount($errors) )
  464.         {
  465.             break;
  466.         }
  467.  
  468.         if$edited_grp_ID == )
  469.         {    // Insert into the DB:
  470.             $edited_Group->dbinsert();
  471.         }
  472.         else
  473.         // Commit update to the DB:
  474.             $edited_Group->dbupdate();
  475.         }
  476.         // Commit changes in cache:
  477.         $GroupCache->add$edited_Group );
  478.  
  479.         // remember to display the forms
  480.         $group $edited_grp_ID;
  481.  
  482.         echo '<div class="panelinfo"><p>' T_('Group updated.''</p></div>';
  483.         break;
  484. }
  485.  
  486.  
  487. ifcount($errors) )
  488. {
  489.     echo '<div class="panelinfo">';
  490.         (isset$edited_user_ID ?
  491.             (($edited_user_ID == 0T_('The user was not created:'T_('The user was not updated:'))
  492.         : (isset$edited_grp_ID?
  493.             (($edited_grp_ID == 0T_('The group was not created:'T_('The group was not updated:'))
  494.             : '')
  495.         )'');
  496.     echo '</div>';
  497. }
  498.  
  499.  
  500. if$current_User->check_perm'users''view'false ) )
  501. {
  502.     // get the userlist
  503.     $request "SELECT $tableusers.*, grp_ID, grp_name
  504.                             FROM $tableusers RIGHT JOIN $tablegroups ON user_grp_ID = grp_ID
  505.                             ORDER BY grp_name, user_login";
  506.     $userlist $DB->get_results$requestARRAY_A );
  507.  
  508.  
  509.     if( ($group != 0|| in_array($actionarray'newgroup''groupupdate' ))  )
  510.     // display group form
  511.         if!isset($edited_Group) )
  512.         {
  513.             $edited_Group $GroupCache->get_by_ID$group );
  514.         }
  515.         require(dirname(__FILE__)'/_users_groupform.php');
  516.     }
  517. }
  518. else
  519. // user is not allowed to view users
  520.     if$user == )
  521.     // display only current user's form
  522.         $user $current_User->ID;
  523.     }
  524.     elseif$user != $current_User->ID )
  525.     // another user requested -> error
  526.         echo '<div class="panelinfo"><p class="error">'.T_('You are not allowed to view other users.').'</p></div>';
  527.         $user $current_User->ID;
  528.     }
  529. }
  530.  
  531.  
  532. // user form
  533. if$user != || in_array($actionarray'newuser''userupdate' )) )
  534. // Display user form
  535.     if!isset($edited_User) )
  536.     {
  537.         $edited_User new Userget_userdata($user) );
  538.     }
  539.  
  540.     require(dirname(__FILE__)'/_users_form.php');
  541. }
  542.  
  543.  
  544. // users list
  545. if$current_User->check_perm'users''view'false ) )
  546. {    // Display user list:
  547.     requiredirname(__FILE__)'/_users_list.php' );
  548. }
  549.  
  550.  
  551. requiredirname(__FILE__)'/_footer.php' );
  552. ?>

Documentation generated on Tue, 20 May 2008 01:51:31 +0200 by phpDocumentor 1.4.2