[ Index ]
 

Code source de XOOPS 2.0.17.1

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/htdocs/kernel/ -> member.php (source)

   1  <?php
   2  // $Id: member.php 961 2007-08-07 16:17:12Z malanciault $

   3  //  ------------------------------------------------------------------------ //

   4  //                XOOPS - PHP Content Management System                      //

   5  //                    Copyright (c) 2000 XOOPS.org                           //

   6  //                       <http://www.xoops.org/>                             //

   7  //  ------------------------------------------------------------------------ //

   8  //  This program is free software; you can redistribute it and/or modify     //

   9  //  it under the terms of the GNU General Public License as published by     //

  10  //  the Free Software Foundation; either version 2 of the License, or        //

  11  //  (at your option) any later version.                                      //

  12  //                                                                           //

  13  //  You may not change or alter any portion of this comment or credits       //

  14  //  of supporting developers from this source code or any supporting         //

  15  //  source code which is considered copyrighted (c) material of the          //

  16  //  original comment or credit authors.                                      //

  17  //                                                                           //

  18  //  This program is distributed in the hope that it will be useful,          //

  19  //  but WITHOUT ANY WARRANTY; without even the implied warranty of           //

  20  //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            //

  21  //  GNU General Public License for more details.                             //

  22  //                                                                           //

  23  //  You should have received a copy of the GNU General Public License        //

  24  //  along with this program; if not, write to the Free Software              //

  25  //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA //

  26  //  ------------------------------------------------------------------------ //

  27  // Author: Kazumi Ono (AKA onokazu)                                          //

  28  // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ //

  29  // Project: The XOOPS Project                                                //

  30  // ------------------------------------------------------------------------- //

  31  
  32  if (!defined('XOOPS_ROOT_PATH')) {
  33      exit();
  34  }
  35  require_once XOOPS_ROOT_PATH.'/kernel/user.php';
  36  require_once XOOPS_ROOT_PATH.'/kernel/group.php';
  37  
  38  /**

  39  * XOOPS member handler class.

  40  * This class provides simple interface (a facade class) for handling groups/users/

  41  * membership data.

  42  *

  43  *

  44  * @author  Kazumi Ono <onokazu@xoops.org>

  45  * @copyright copyright (c) 2000-2003 XOOPS.org

  46  * @package kernel

  47  */
  48  
  49  class XoopsMemberHandler{
  50  
  51      /**#@+

  52      * holds reference to group handler(DAO) class

  53      * @access private

  54      */
  55      var $_gHandler;
  56  
  57      /**

  58      * holds reference to user handler(DAO) class

  59      */
  60      var $_uHandler;
  61  
  62      /**

  63      * holds reference to membership handler(DAO) class

  64      */
  65      var $_mHandler;
  66  
  67      /**

  68      * holds temporary user objects

  69      */
  70      var $_members = array();
  71      /**#@-*/

  72  
  73      /**

  74       * constructor

  75       *

  76       */
  77      function XoopsMemberHandler(&$db)
  78      {
  79          $this->_gHandler = new XoopsGroupHandler($db);
  80          $this->_uHandler = new XoopsUserHandler($db);
  81          $this->_mHandler = new XoopsMembershipHandler($db);
  82      }
  83  
  84      /**

  85       * create a new group

  86       *

  87       * @return object XoopsGroup reference to the new group

  88       */
  89      function &createGroup()
  90      {
  91          $inst =& $this->_gHandler->create();
  92          return $inst;
  93      }
  94  
  95      /**

  96       * create a new user

  97       *

  98       * @return object XoopsUser reference to the new user

  99       */
 100      function &createUser()
 101      {
 102          $inst =& $this->_uHandler->create();
 103          return $inst;
 104      }
 105  
 106      /**

 107       * retrieve a group

 108       *

 109       * @param int $id ID for the group

 110       * @return object XoopsGroup reference to the group

 111       */
 112      function getGroup($id)
 113      {
 114          return $this->_gHandler->get($id);
 115      }
 116  
 117      /**

 118       * retrieve a user

 119       *

 120       * @param int $id ID for the user

 121       * @return object XoopsUser reference to the user

 122       */
 123      function &getUser($id)
 124      {
 125          if (!isset($this->_members[$id])) {
 126              $this->_members[$id] =& $this->_uHandler->get($id);
 127          }
 128          return $this->_members[$id];
 129      }
 130  
 131      /**

 132       * delete a group

 133       *

 134       * @param object $group reference to the group to delete

 135       * @return bool FALSE if failed

 136       */
 137      function deleteGroup(&$group)
 138      {
 139          $this->_gHandler->delete($group);
 140          $this->_mHandler->deleteAll(new Criteria('groupid', $group->getVar('groupid')));
 141          return true;
 142      }
 143  
 144      /**

 145       * delete a user

 146       *

 147       * @param object $user reference to the user to delete

 148       * @return bool FALSE if failed

 149       */
 150      function deleteUser(&$user)
 151      {
 152          $this->_uHandler->delete($user);
 153          $this->_mHandler->deleteAll(new Criteria('uid', $user->getVar('uid')));
 154          return true;
 155      }
 156  
 157      /**

 158       * insert a group into the database

 159       *

 160       * @param object $group reference to the group to insert

 161       * @return bool TRUE if already in database and unchanged

 162       * FALSE on failure

 163       */
 164      function insertGroup(&$group)
 165      {
 166          return $this->_gHandler->insert($group);
 167      }
 168  
 169      /**

 170       * insert a user into the database

 171       *

 172       * @param object $user reference to the user to insert

 173       * @return bool TRUE if already in database and unchanged

 174       * FALSE on failure

 175       */
 176      function insertUser(&$user, $force = false)
 177      {
 178          return $this->_uHandler->insert($user, $force);
 179      }
 180  
 181      /**

 182       * retrieve groups from the database

 183       *

 184       * @param object $criteria {@link CriteriaElement}

 185       * @param bool $id_as_key use the group's ID as key for the array?

 186       * @return array array of {@link XoopsGroup} objects

 187       */
 188      function getGroups($criteria = null, $id_as_key = false)
 189      {
 190          return $this->_gHandler->getObjects($criteria, $id_as_key);
 191      }
 192  
 193      /**

 194       * retrieve users from the database

 195       *

 196       * @param object $criteria {@link CriteriaElement}

 197       * @param bool $id_as_key use the group's ID as key for the array?

 198       * @return array array of {@link XoopsUser} objects

 199       */
 200      function getUsers($criteria = null, $id_as_key = false)
 201      {
 202          return $this->_uHandler->getObjects($criteria, $id_as_key);
 203      }
 204  
 205      /**

 206       * get a list of groupnames and their IDs

 207       *

 208       * @param object $criteria {@link CriteriaElement} object

 209       * @return array associative array of group-IDs and names

 210       */
 211      function getGroupList($criteria = null)
 212      {
 213          $groups = $this->_gHandler->getObjects($criteria, true);
 214          $ret = array();
 215          foreach (array_keys($groups) as $i) {
 216              $ret[$i] = $groups[$i]->getVar('name');
 217          }
 218          return $ret;
 219      }
 220  
 221      /**

 222       * get a list of usernames and their IDs

 223       *

 224       * @param object $criteria {@link CriteriaElement} object

 225       * @return array associative array of user-IDs and names

 226       */
 227      function getUserList($criteria = null)
 228      {
 229          $users = $this->_uHandler->getObjects($criteria, true);
 230          $ret = array();
 231          foreach (array_keys($users) as $i) {
 232              $ret[$i] = $users[$i]->getVar('uname');
 233          }
 234          return $ret;
 235      }
 236  
 237      /**

 238       * add a user to a group

 239       *

 240       * @param int $group_id ID of the group

 241       * @param int $user_id ID of the user

 242       * @return object XoopsMembership

 243       */
 244      function addUserToGroup($group_id, $user_id)
 245      {
 246          $mship =& $this->_mHandler->create();
 247          $mship->setVar('groupid', $group_id);
 248          $mship->setVar('uid', $user_id);
 249          return $this->_mHandler->insert($mship);
 250      }
 251  
 252      /**

 253       * remove a list of users from a group

 254       *

 255       * @param int $group_id ID of the group

 256       * @param array $user_ids array of user-IDs

 257       * @return bool success?

 258       */
 259      function removeUsersFromGroup($group_id, $user_ids = array())
 260      {
 261          $criteria = new CriteriaCompo();
 262          $criteria->add(new Criteria('groupid', $group_id));
 263          $criteria2 = new CriteriaCompo();
 264          foreach ($user_ids as $uid) {
 265              $criteria2->add(new Criteria('uid', $uid), 'OR');
 266          }
 267          $criteria->add($criteria2);
 268          return $this->_mHandler->deleteAll($criteria);
 269      }
 270  
 271      /**

 272       * get a list of users belonging to a group

 273       *

 274       * @param int $group_id ID of the group

 275       * @param bool $asobject return the users as objects?

 276       * @param int $limit number of users to return

 277       * @param int $start index of the first user to return

 278       * @return array Array of {@link XoopsUser} objects (if $asobject is TRUE)

 279       * or of associative arrays matching the record structure in the database.

 280       */
 281      function getUsersByGroup($group_id, $asobject = false, $limit = 0, $start = 0)
 282      {
 283          $user_ids = $this->_mHandler->getUsersByGroup($group_id, $limit, $start);
 284          if (!$asobject) {
 285             return $user_ids;
 286          } else {
 287             $ret = array();
 288             foreach ($user_ids as $u_id) {
 289                 $user =& $this->getUser($u_id);
 290                  if (is_object($user)) {
 291                      $ret[] =& $user;
 292                  }
 293                  unset($user);
 294             }
 295             return $ret;
 296          }
 297      }
 298  
 299      /**

 300       * get a list of groups that a user is member of

 301       *

 302       * @param int $user_id ID of the user

 303       * @param bool $asobject return groups as {@link XoopsGroup} objects or arrays?

 304       * @return array array of objects or arrays

 305       */
 306      function getGroupsByUser($user_id, $asobject = false)
 307      {
 308          $group_ids = $this->_mHandler->getGroupsByUser($user_id);
 309          if (!$asobject) {
 310             return $group_ids;
 311          } else {
 312             foreach ($group_ids as $g_id) {
 313                 $ret[] =& $this->getGroup($g_id);
 314             }
 315             return $ret;
 316          }
 317      }
 318  
 319      /**

 320       * log in a user

 321       *

 322       * @param string $uname username as entered in the login form

 323       * @param string $pwd password entered in the login form

 324       * @return object XoopsUser reference to the logged in user. FALSE if failed to log in

 325       */
 326      function &loginUser($uname, $pwd)
 327      {
 328          $criteria = new CriteriaCompo(new Criteria('uname', $uname));
 329          $criteria->add(new Criteria('pass', md5($pwd)));
 330          $user = $this->_uHandler->getObjects($criteria, false);
 331          if (!$user || count($user) != 1) {
 332              $user = false;
 333              return $user;
 334          }
 335          return $user[0];
 336      }
 337  
 338      /**

 339       * logs in a user with an nd5 encrypted password

 340       *

 341       * @param string $uname username

 342       * @param string $md5pwd password encrypted with md5

 343       * @return object XoopsUser reference to the logged in user. FALSE if failed to log in

 344       */
 345      function &loginUserMd5($uname, $md5pwd)
 346      {
 347          $criteria = new CriteriaCompo(new Criteria('uname', $uname));
 348          $criteria->add(new Criteria('pass', $md5pwd));
 349          $user = $this->_uHandler->getObjects($criteria, false);
 350          if (!$user || count($user) != 1) {
 351              $user = false;
 352              return $user;
 353          }
 354          return $user[0];
 355      }
 356  
 357      /**

 358       * count users matching certain conditions

 359       *

 360       * @param object $criteria {@link CriteriaElement} object

 361       * @return int

 362       */
 363      function getUserCount($criteria = null)
 364      {
 365          return $this->_uHandler->getCount($criteria);
 366      }
 367  
 368      /**

 369       * count users belonging to a group

 370       *

 371       * @param int $group_id ID of the group

 372       * @return int

 373       */
 374      function getUserCountByGroup($group_id)
 375      {
 376          return $this->_mHandler->getCount(new Criteria('groupid', $group_id));
 377      }
 378  
 379      /**

 380       * updates a single field in a users record

 381       *

 382       * @param object $user reference to the {@link XoopsUser} object

 383       * @param string $fieldName name of the field to update

 384       * @param string $fieldValue updated value for the field

 385       * @return bool TRUE if success or unchanged, FALSE on failure

 386       */
 387      function updateUserByField(&$user, $fieldName, $fieldValue)
 388      {
 389          $user->setVar($fieldName, $fieldValue);
 390          return $this->insertUser($user);
 391      }
 392  
 393      /**

 394       * updates a single field in a users record

 395       *

 396       * @param string $fieldName name of the field to update

 397       * @param string $fieldValue updated value for the field

 398       * @param object $criteria {@link CriteriaElement} object

 399       * @return bool TRUE if success or unchanged, FALSE on failure

 400       */
 401      function updateUsersByField($fieldName, $fieldValue, $criteria = null)
 402      {
 403          return $this->_uHandler->updateAll($fieldName, $fieldValue, $criteria);
 404      }
 405  
 406      /**

 407       * activate a user

 408       *

 409       * @param object $user reference to the {@link XoopsUser} object

 410       * @return bool successful?

 411       */
 412      function activateUser(&$user)
 413      {
 414          if ($user->getVar('level') != 0) {
 415              return true;
 416          }
 417          $user->setVar('level', 1);
 418          return $this->_uHandler->insert($user, true);
 419      }
 420  
 421      /**

 422       * Get a list of users belonging to certain groups and matching criteria

 423       * Temporary solution

 424       *

 425       * @param int $groups IDs of groups

 426       * @param object $criteria {@link CriteriaElement} object

 427       * @param bool $asobject return the users as objects?

 428       * @param bool $id_as_key use the UID as key for the array if $asobject is TRUE

 429       * @return array Array of {@link XoopsUser} objects (if $asobject is TRUE)

 430       * or of associative arrays matching the record structure in the database.

 431       */
 432      function getUsersByGroupLink($groups, $criteria = null, $asobject = false, $id_as_key = false)
 433      {
 434          $ret = array();
 435  
 436          $select = $asobject ? "u.*" : "u.uid";
 437          $sql[] = "    SELECT DISTINCT {$select} ".
 438                  "    FROM " . $this->_uHandler->db->prefix("users") . " AS u".
 439                  "        LEFT JOIN ". $this->_mHandler->db->prefix("groups_users_link") . " AS m ON m.uid = u.uid".
 440                  "    WHERE 1 = 1";
 441          if (!empty($groups)) {
 442              $sql[] = "m.groupid IN (".implode(", ", $groups).")";
 443          }
 444          $limit = $start = 0;
 445          if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
 446              $sql_criteria = $criteria->render();
 447              if ($criteria->getSort() != '') {
 448                  $sql_criteria .= ' ORDER BY '.$criteria->getSort().' '.$criteria->getOrder();
 449              }
 450              $limit = $criteria->getLimit();
 451              $start = $criteria->getStart();
 452              if ($sql_criteria) {
 453                  $sql[] = $sql_criteria;
 454              }
 455          }
 456          $sql_string = implode(" AND ", array_filter($sql));
 457          if (!$result = $this->_uHandler->db->query($sql_string, $limit, $start)) {
 458              return $ret;
 459          }
 460          while ($myrow = $this->_uHandler->db->fetchArray($result)) {
 461              if ($asobject) {
 462                  $user = new XoopsUser();
 463                  $user->assignVars($myrow);
 464                  if (!$id_as_key) {
 465                      $ret[] =& $user;
 466                  } else {
 467                      $ret[$myrow['uid']] =& $user;
 468                  }
 469                  unset($user);
 470              } else {
 471                  $ret[] = $myrow['uid'];
 472              }
 473          }
 474          return $ret;
 475      }
 476  
 477      /**

 478       * Get count of users belonging to certain groups and matching criteria

 479       * Temporary solution

 480       *

 481       * @param int $groups IDs of groups

 482       * @return int count of users

 483       */
 484      function getUserCountByGroupLink($groups, $criteria = null)
 485      {
 486          $ret = 0;
 487  
 488          $sql[] = "    SELECT COUNT(DISTINCT u.uid) ".
 489                  "    FROM " . $this->_uHandler->db->prefix("users") . " AS u".
 490                  "        LEFT JOIN ". $this->_mHandler->db->prefix("groups_users_link") . " AS m ON m.uid = u.uid".
 491                  "    WHERE 1 = 1";
 492          if (!empty($groups)) {
 493              $sql[] = "m.groupid IN (".implode(", ", $groups).")";
 494          }
 495          if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
 496              $sql[] = $criteria->render();
 497          }
 498          $sql_string = implode(" AND ", array_filter($sql));
 499          if (!$result = $this->_uHandler->db->query($sql_string)) {
 500              return $ret;
 501          }
 502          list($ret) = $this->_uHandler->db->fetchRow($result);
 503          return $ret;
 504      }
 505  
 506  }
 507  ?>


Généré le : Sun Nov 25 11:44:32 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics