PageRenderTime 26ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/rbac/engine/classes/model/RbacUsers.php

https://bitbucket.org/ferOnti/processmaker
PHP | 288 lines | 192 code | 16 blank | 80 comment | 53 complexity | 817ac4b3746fa1ebb9738b3ff6238201 MD5 | raw file
  1. <?php
  2. /**
  3. * RbacUsers.php
  4. * @package rbac-classes-model
  5. *
  6. * ProcessMaker Open Source Edition
  7. * Copyright (C) 2004 - 2011 Colosa Inc.
  8. *
  9. * This program is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU Affero General Public License as
  11. * published by the Free Software Foundation, either version 3 of the
  12. * License, or (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU Affero General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Affero General Public License
  20. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21. *
  22. * For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
  23. * Coral Gables, FL, 33134, USA, or email info@colosa.com.
  24. *
  25. */
  26. /**
  27. * @access public
  28. */
  29. require_once 'classes/model/om/BaseRbacUsers.php';
  30. /**
  31. * Skeleton subclass for representing a row from the 'USERS' table.
  32. *
  33. *
  34. *
  35. * You should add additional methods to this class to meet the
  36. * application requirements. This class will only be generated as
  37. * long as it does not already exist in the output directory.
  38. *
  39. * @package rbac-classes-model
  40. */
  41. class RbacUsers extends BaseRbacUsers
  42. {
  43. /**
  44. * Autentificacion de un usuario a traves de la clase RBAC_user
  45. *
  46. * verifica que un usuario tiene derechos de iniciar una aplicacion
  47. *
  48. * @author Fernando Ontiveros Lira <fernando@colosa.com>
  49. * access public
  50. * Function verifyLogin
  51. *
  52. * @param string $strUser UserId (login) de usuario
  53. * @param string $strPass Password
  54. * @return
  55. * -1: no existe usuario
  56. * -2: password errado
  57. * -3: usuario inactivo
  58. * -4: usuario vencido
  59. * n : uid de usuario
  60. */
  61. public function verifyLogin($sUsername, $sPassword)
  62. {
  63. //invalid user
  64. if ($sUsername == '') {
  65. return -1;
  66. }
  67. //invalid password
  68. if ($sPassword == '') {
  69. return -2;
  70. }
  71. $con = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  72. try {
  73. $c = new Criteria('rbac');
  74. $c->add(RbacUsersPeer::USR_USERNAME, $sUsername);
  75. $rs = RbacUsersPeer::doSelect($c);
  76. if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') {
  77. $aFields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME);
  78. //verify password with md5, and md5 format
  79. //if ( $aFields['USR_PASSWORD'] == md5 ($sPassword ) ) {
  80. if (mb_strtoupper($sUsername, 'utf-8') === mb_strtoupper($aFields['USR_USERNAME'], 'utf-8')) {
  81. if ($aFields['USR_PASSWORD'] == md5($sPassword) ||
  82. 'md5:' . $aFields['USR_PASSWORD'] === $sPassword) {
  83. if ($aFields['USR_DUE_DATE'] < date('Y-m-d')) {
  84. return -4;
  85. }
  86. if ($aFields['USR_STATUS'] != 1) {
  87. return -3;
  88. }
  89. return $aFields['USR_UID'];
  90. } else {
  91. return -2;
  92. }
  93. } else {
  94. return -1;
  95. }
  96. } else {
  97. return -1;
  98. }
  99. } catch (Exception $oError) {
  100. throw($oError);
  101. }
  102. return -1;
  103. }
  104. public function verifyUser($sUsername)
  105. {
  106. //invalid user
  107. if ($sUsername == '') {
  108. return 0;
  109. }
  110. $con = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  111. try {
  112. $c = new Criteria('rbac');
  113. $c->add(RbacUsersPeer::USR_USERNAME, $sUsername);
  114. $rs = RbacUsersPeer::doSelect($c);
  115. if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') {
  116. //return the row for futher check of which Autentificacion method belongs this user
  117. $this->fields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME);
  118. ;
  119. return 1;
  120. } else {
  121. return 0;
  122. }
  123. } catch (Exception $oError) {
  124. throw($oError);
  125. }
  126. }
  127. public function getByUsername($sUsername)
  128. {
  129. //invalid user
  130. if ($sUsername == '') {
  131. return 0;
  132. }
  133. $con = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  134. try {
  135. $c = new Criteria('rbac');
  136. $c->add(RbacUsersPeer::USR_USERNAME, $sUsername);
  137. $rs = RbacUsersPeer::doSelect($c);
  138. if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') {
  139. $aFields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME);
  140. return $aFields;
  141. } else {
  142. return false;
  143. }
  144. } catch (Exception $oError) {
  145. throw($oError);
  146. }
  147. }
  148. public function verifyUserId($sUserId)
  149. {
  150. //invalid user
  151. if ($sUserId == '') {
  152. return 0;
  153. }
  154. $con = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  155. try {
  156. $c = new Criteria('rbac');
  157. $c->add(RbacUsersPeer::USR_UID, $sUserId);
  158. $rs = RbacUsersPeer::doSelect($c);
  159. if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') {
  160. return 1;
  161. } else {
  162. return 0;
  163. }
  164. } catch (Exception $oError) {
  165. throw($oError);
  166. }
  167. }
  168. public function load($sUsrUid)
  169. {
  170. $con = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  171. try {
  172. $c = new Criteria('rbac');
  173. $c->add(RbacUsersPeer::USR_UID, $sUsrUid);
  174. $rs = RbacUsersPeer::doSelect($c);
  175. if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') {
  176. $aFields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME);
  177. return $aFields;
  178. }
  179. return false;
  180. } catch (Exception $oError) {
  181. throw($oError);
  182. }
  183. return $res;
  184. }
  185. public function create($aData)
  186. {
  187. $oConnection = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  188. try {
  189. $oRBACUsers = new RbacUsers();
  190. do {
  191. $aData['USR_UID'] = G::generateUniqueID();
  192. } while ($oRBACUsers->load($aData['USR_UID']));
  193. $oRBACUsers->fromArray($aData, BasePeer::TYPE_FIELDNAME);
  194. //if ($oRBACUsers->validate()) {
  195. //$oConnection->begin();
  196. $iResult = $oRBACUsers->save();
  197. //$oConnection->commit();
  198. return $aData['USR_UID'];
  199. /* }
  200. else {
  201. $sMessage = '';
  202. $aValidationFailures = $oRBACUsers->getValidationFailures();
  203. foreach($aValidationFailures as $oValidationFailure) {
  204. $sMessage .= $oValidationFailure->getMessage() . '<br />';
  205. }
  206. throw(new Exception('The registry cannot be created!<br />' . $sMessage));
  207. } */
  208. } catch (Exception $oError) {
  209. $oConnection->rollback();
  210. throw($oError);
  211. }
  212. }
  213. public function update($aData)
  214. {
  215. $oConnection = Propel::getConnection(RbacUsersPeer::DATABASE_NAME);
  216. try {
  217. $this->fromArray($aData, BasePeer::TYPE_FIELDNAME);
  218. $this->setNew(false);
  219. $iResult = $this->save();
  220. } catch (Exception $oError) {
  221. $oConnection->rollback();
  222. throw($oError);
  223. }
  224. }
  225. public function remove($sUserUID = '')
  226. {
  227. $this->setUsrUid($sUserUID);
  228. $this->delete();
  229. }
  230. //Added by Qennix at Feb 14th, 2011
  231. //Gets an associative array with total users by authentication sources
  232. public function getAllUsersByAuthSource()
  233. {
  234. $oCriteria = new Criteria('rbac');
  235. $oCriteria->addSelectColumn(RbacUsersPeer::UID_AUTH_SOURCE);
  236. $oCriteria->addSelectColumn('COUNT(*) AS CNT');
  237. $oCriteria->add(RbacUsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL);
  238. $oCriteria->addGroupByColumn(RbacUsersPeer::UID_AUTH_SOURCE);
  239. $oDataset = RbacUsersPeer::doSelectRS($oCriteria);
  240. $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
  241. $aAuth = Array();
  242. while ($oDataset->next()) {
  243. $row = $oDataset->getRow();
  244. $aAuth[$row['UID_AUTH_SOURCE']] = $row['CNT'];
  245. }
  246. return $aAuth;
  247. }
  248. //Returns all users with auth_source
  249. public function getListUsersByAuthSource($auth_source)
  250. {
  251. $oCriteria = new Criteria('rbac');
  252. $oCriteria->addSelectColumn(RbacUsersPeer::USR_UID);
  253. if ($auth_source == '00000000000000000000000000000000') {
  254. $oCriteria->add(
  255. $oCriteria->getNewCriterion(RbacUsersPeer::UID_AUTH_SOURCE, $auth_source, Criteria::EQUAL)->addOr(
  256. $oCriteria->getNewCriterion(RbacUsersPeer::UID_AUTH_SOURCE, '', Criteria::EQUAL)
  257. ));
  258. } else {
  259. $oCriteria->add(RbacUsersPeer::UID_AUTH_SOURCE, $auth_source, Criteria::EQUAL);
  260. }
  261. $oCriteria->add(RbacUsersPeer::USR_STATUS, 0, Criteria::NOT_EQUAL);
  262. $oDataset = RbacUsersPeer::doSelectRS($oCriteria);
  263. $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
  264. $aUsers = array();
  265. while ($oDataset->next()) {
  266. $row = $oDataset->getRow();
  267. $aUsers[] = $row['USR_UID'];
  268. }
  269. return $aUsers;
  270. }
  271. }
  272. // Users