PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/baser/models/user_group.php

https://github.com/hashing/basercms
PHP | 211 lines | 115 code | 7 blank | 89 comment | 13 complexity | 2e18fc3fc4ce7b56a8cbe84a46d58836 MD5 | raw file
Possible License(s): MIT
  1. <?php
  2. /* SVN FILE: $Id$ */
  3. /**
  4. * ユーザーグループモデル
  5. *
  6. * PHP versions 5
  7. *
  8. * baserCMS : Based Website Development Project <http://basercms.net>
  9. * Copyright 2008 - 2012, baserCMS Users Community <http://sites.google.com/site/baserusers/>
  10. *
  11. * @copyright Copyright 2008 - 2012, baserCMS Users Community
  12. * @link http://basercms.net baserCMS Project
  13. * @package baser.models
  14. * @since baserCMS v 0.1.0
  15. * @version $Revision$
  16. * @modifiedby $LastChangedBy$
  17. * @lastmodified $Date$
  18. * @license http://basercms.net/license/index.html
  19. */
  20. /**
  21. * Include files
  22. */
  23. /**
  24. * ユーザーグループモデル
  25. *
  26. * @package baser.models
  27. */
  28. class UserGroup extends AppModel {
  29. /**
  30. * クラス名
  31. *
  32. * @var string
  33. * @access public
  34. */
  35. var $name = 'UserGroup';
  36. /**
  37. * ビヘイビア
  38. *
  39. * @var array
  40. * @access public
  41. */
  42. var $actsAs = array('BcCache');
  43. /**
  44. * データベース接続
  45. *
  46. * @var string
  47. * @access public
  48. */
  49. var $useDbConfig = 'baser';
  50. /**
  51. * hasMany
  52. *
  53. * @var array
  54. * @access public
  55. */
  56. var $hasMany = array('Permission'=>
  57. array('className'=>'Permission',
  58. 'order'=>'id',
  59. 'foreignKey'=>'user_group_id',
  60. 'dependent'=>true,
  61. 'exclusive'=>false,
  62. 'finderQuery'=>''),
  63. 'User'=>
  64. array('className'=>'User',
  65. 'order'=>'id',
  66. 'foreignKey'=>'user_group_id',
  67. 'dependent'=>false,
  68. 'exclusive'=>false,
  69. 'finderQuery'=>''));
  70. /**
  71. * バリデーション
  72. *
  73. * @var array
  74. * @access public
  75. */
  76. var $validate = array(
  77. 'name' => array(
  78. array( 'rule' => array('notEmpty'),
  79. 'message' => 'ユーザーグループ名を入力してください。'),
  80. array( 'rule' => array('halfText'),
  81. 'message' => 'ユーザーグループ名は半角のみで入力してください。'),
  82. array( 'rule' => array('duplicate','name'),
  83. 'message' => '既に登録のあるユーザーグループ名です。'),
  84. array( 'rule' => array('maxLength', 50),
  85. 'message' => 'ユーザーグループ名は50文字以内で入力してください。')
  86. ),
  87. 'title' => array(
  88. array( 'rule' => array('notEmpty'),
  89. 'message' => '表示名を入力してください。'),
  90. array( 'rule' => array('maxLength', 50),
  91. 'message' => '表示名は50文字以内で入力してください。')
  92. ),
  93. 'auth_prefix' => array(
  94. array( 'rule' => array('notEmpty'),
  95. 'message' => '認証プレフィックスを入力してください。')
  96. )
  97. );
  98. /**
  99. * 関連するユーザーを管理者グループに変更し保存する
  100. *
  101. * @param boolean $cascade
  102. * @return boolean
  103. * @access public
  104. */
  105. function beforeDelete($cascade = true) {
  106. parent::beforeDelete($cascade);
  107. $ret = true;
  108. if(!empty($this->data['UserGroup']['id'])){
  109. $id = $this->data['UserGroup']['id'];
  110. $this->User->unBindModel(array('belongsTo'=>array('UserGroup')));
  111. $datas = $this->User->find('all',array('conditions'=>array('User.user_group_id'=>$id)));
  112. if($datas) {
  113. foreach($datas as $data) {
  114. $data['User']['user_group_id'] = 1;
  115. $this->User->set($data);
  116. if(!$this->User->save()) {
  117. $ret = false;
  118. }
  119. }
  120. }
  121. }
  122. return $ret;
  123. }
  124. /**
  125. * 管理者グループ以外のグループが存在するかチェックする
  126. * @return boolean
  127. * @access void
  128. */
  129. function checkOtherAdmins(){
  130. if($this->find('first',array('conditions'=>array('UserGroup.id <>'=>1)))) {
  131. return true;
  132. }else {
  133. return false;
  134. }
  135. }
  136. /**
  137. * 認証プレフィックスを取得する
  138. *
  139. * @param int $id
  140. * @return string
  141. * @access public
  142. */
  143. function getAuthPrefix($id) {
  144. $data = $this->find('first', array(
  145. 'conditions'=>array('UserGroup.id'=>$id),
  146. 'fields'=>array('UserGroup.auth_prefix'),
  147. 'recursive'=>-1
  148. ));
  149. if(isset($data['UserGroup']['auth_prefix'])) {
  150. return $data['UserGroup']['auth_prefix'];
  151. } else {
  152. return '';
  153. }
  154. }
  155. /**
  156. * ユーザーグループデータをコピーする
  157. *
  158. * @param int $id
  159. * @param array $data
  160. * @return mixed UserGroup Or false
  161. */
  162. function copy($id, $data = array(), $recursive = true) {
  163. if($id) {
  164. $data = $this->find('first', array('conditions' => array('UserGroup.id' => $id), 'recursive' => -1));
  165. }
  166. $data['UserGroup']['name'] .= '_copy';
  167. $data['UserGroup']['title'] .= '_copy';
  168. unset($data['UserGroup']['id']);
  169. unset($data['UserGroup']['modified']);
  170. unset($data['UserGroup']['created']);
  171. $this->create($data);
  172. $result = $this->save();
  173. if($result) {
  174. $result['UserGroup']['id'] = $this->getInsertID();
  175. if($recursive) {
  176. $permissions = $this->Permission->find('all', array('conditions' => array('Permission.user_group_id' => $id), 'recursive' => -1));
  177. if($permissions) {
  178. foreach($permissions as $permission) {
  179. $permission['Permission']['user_group_id'] = $result['UserGroup']['id'];
  180. $this->Permission->copy(null, $permission);
  181. }
  182. }
  183. }
  184. return $result;
  185. } else {
  186. if(isset($this->validationErrors['name'])) {
  187. return $this->copy(null, $data, $recursive);
  188. } else {
  189. return false;
  190. }
  191. }
  192. }
  193. /**
  194. * グローバルメニューを利用可否確認
  195. *
  196. * @param string $id
  197. * @return boolean
  198. * @access public
  199. */
  200. function isAdminGlobalmenuUsed($id) {
  201. return $this->field('use_admin_globalmenu', array('UserGroup.id' => $id));
  202. }
  203. }
  204. ?>