PageRenderTime 51ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/includes/UserGroups.php

https://gitlab.com/safeservicejt/noblessecms
PHP | 738 lines | 434 code | 250 blank | 54 comment | 50 complexity | 444d7037b11d7cbd2a08b0904b301de6 MD5 | raw file
Possible License(s): MIT, LGPL-2.1
  1. <?php
  2. /*
  3. UserGroups::addPermission($_SESSION['userid'],array(
  4. 'can_view_me'=>'no'
  5. ));
  6. UserGroups::removePermission($_SESSION['userid'],array(
  7. 'can_view_me'
  8. ));
  9. UserGroups::addPermissionToAll(array(
  10. 'can_view_me'=>'no'
  11. ));
  12. UserGroups::updatePermissionToAll(array(
  13. 'can_view_me'=>'no'
  14. ));
  15. UserGroups::removePermissionToAll(array(
  16. 'can_view_me'
  17. ));
  18. $text=UserGroups::getPermission($_SESSION['userid'],'can_view_me');
  19. */
  20. class UserGroups
  21. {
  22. public static $groupData=array();
  23. public function get($inputData=array())
  24. {
  25. $limitQuery="";
  26. $limitShow=isset($inputData['limitShow'])?$inputData['limitShow']:0;
  27. $limitPage=isset($inputData['limitPage'])?$inputData['limitPage']:0;
  28. $limitPage=((int)$limitPage > 0)?$limitPage:0;
  29. $limitPosition=$limitPage*(int)$limitShow;
  30. $limitQuery=((int)$limitShow==0)?'':" limit $limitPosition,$limitShow";
  31. $limitQuery=isset($inputData['limitQuery'])?$inputData['limitQuery']:$limitQuery;
  32. $field="groupid,group_title,groupdata";
  33. $selectFields=isset($inputData['selectFields'])?$inputData['selectFields']:$field;
  34. $whereQuery=isset($inputData['where'])?$inputData['where']:'';
  35. $orderBy=isset($inputData['orderby'])?$inputData['orderby']:'order by groupid desc';
  36. $result=array();
  37. $command="select $selectFields from usergroups $whereQuery";
  38. $command.=" $orderBy";
  39. $queryCMD=isset($inputData['query'])?$inputData['query']:$command;
  40. $queryCMD.=$limitQuery;
  41. $cache=isset($inputData['cache'])?$inputData['cache']:'yes';
  42. $cacheTime=isset($inputData['cacheTime'])?$inputData['cacheTime']:15;
  43. if($cache=='yes')
  44. {
  45. // Load dbcache
  46. $loadCache=DBCache::get($queryCMD,$cacheTime,'system/usergroup');
  47. if($loadCache!=false)
  48. {
  49. return $loadCache;
  50. }
  51. // end load
  52. }
  53. $query=Database::query($queryCMD);
  54. if(isset(Database::$error[5]))
  55. {
  56. return false;
  57. }
  58. $inputData['isHook']=isset($inputData['isHook'])?$inputData['isHook']:'yes';
  59. if((int)$query->num_rows > 0)
  60. {
  61. while($row=Database::fetch_assoc($query))
  62. {
  63. if(isset($row['date_added']))
  64. $row['date_addedFormat']=Render::dateFormat($row['date_added']);
  65. if(isset($row['groupdata']))
  66. $row['groupdata']=self::arrayToLine($row['groupdata']);
  67. $result[]=$row;
  68. }
  69. }
  70. else
  71. {
  72. return false;
  73. }
  74. // Save dbcache
  75. $addPostid='';
  76. $saveName='';
  77. $saveName=md5($queryCMD);
  78. // if(!isset($result[1]) && isset($result[0]['groupid']))
  79. // {
  80. // $saveName=$addPostid.'_'.md5($queryCMD);
  81. // }
  82. // else
  83. // {
  84. // $saveName=md5($queryCMD);
  85. // }
  86. DBCache::make($saveName,$result,'system/usergroup');
  87. // DBCache::makeIDCache($saveName,$result,'groupid','system/usergroup');
  88. // end save
  89. return $result;
  90. }
  91. public function api($action)
  92. {
  93. Model::load('api/usergroups');
  94. try {
  95. loadApi($action);
  96. } catch (Exception $e) {
  97. throw new Exception($e->getMessage());
  98. }
  99. }
  100. public function loadGroup($groupid)
  101. {
  102. if(!$loadData=Cache::loadKey('userGroup1_'.$groupid,-1))
  103. {
  104. $loadData=self::get(array(
  105. 'cache'=>'no',
  106. 'where'=>"where groupid='$groupid'"
  107. ));
  108. if(!isset($loadData[0]['groupid']))
  109. {
  110. return false;
  111. }
  112. $loadData[0]['groupdata']=unserialize(self::lineToArray($loadData[0]['groupdata']));
  113. self::$groupData=$loadData[0];
  114. }
  115. }
  116. public function updatePermission($groupid,$inputData=array())
  117. {
  118. $loadData=self::get(array(
  119. 'cache'=>'no',
  120. 'where'=>"where groupid='$groupid'"
  121. ));
  122. if(!isset($loadData[0]['groupid']))
  123. {
  124. return false;
  125. }
  126. if(!is_array($loadData[0]['groupdata']))
  127. {
  128. $loadData[0]['groupdata']=unserialize(self::lineToArray($loadData[0]['groupdata']));
  129. }
  130. $total=count($inputData);
  131. $listKeys=array_keys($inputData);
  132. // print_r($loadData);die();
  133. for ($i=0; $i < $total; $i++) {
  134. $theKey=$listKeys[$i];
  135. $loadData[0]['groupdata'][$theKey]=$inputData[$theKey];
  136. }
  137. $loadData[0]['groupdata']=self::arrayToLine($loadData[0]['groupdata']);
  138. $updateData=array(
  139. 'groupdata'=>$loadData[0]['groupdata']
  140. );
  141. self::update($groupid,$updateData);
  142. }
  143. public function updatePermissionToAll($inputData=array())
  144. {
  145. $loadData=self::get(array(
  146. 'cache'=>'no'
  147. ));
  148. if(!isset($loadData[0]['groupid']))
  149. {
  150. return false;
  151. }
  152. $total=count($loadData);
  153. $totalKeys=count($inputData);
  154. $listKeys=array_keys($inputData);
  155. for ($i=0; $i < $total; $i++) {
  156. $row=$loadData[$i];
  157. $groupid=$row['groupid'];
  158. if(!is_array($row['groupdata']))
  159. {
  160. $row['groupdata']=unserialize(self::lineToArray($row['groupdata']));
  161. }
  162. // print_r($loadData);die();
  163. for ($j=0; $j < $totalKeys; $j++) {
  164. $theKey=$listKeys[$j];
  165. $row['groupdata'][$theKey]=$inputData[$theKey];
  166. }
  167. $row['groupdata']=self::arrayToLine($row['groupdata']);
  168. $updateData=array(
  169. 'groupdata'=>$row['groupdata']
  170. );
  171. self::update($groupid,$updateData);
  172. }
  173. }
  174. public function removePermissionToAll($inputData=array())
  175. {
  176. $loadData=self::get(array(
  177. 'cache'=>'no'
  178. ));
  179. if(!isset($loadData[0]['groupid']))
  180. {
  181. return false;
  182. }
  183. $total=count($loadData);
  184. $totalKeys=count($inputData);
  185. for ($i=0; $i < $total; $i++) {
  186. $row=$loadData[$i];
  187. $groupid=$row['groupid'];
  188. $groupdata=unserialize(self::lineToArray($row['groupdata']));
  189. // $listKeys=array_keys($inputData);
  190. for ($j=0; $j < $totalKeys; $j++) {
  191. $keyName=$inputData[$j];
  192. // $groupdata[$keyName]=$inputData[$keyName];
  193. if(isset($groupdata[$keyName]))
  194. {
  195. unset($groupdata[$keyName]);
  196. }
  197. }
  198. // $groupdata=serialize(self::arrayToLine($groupdata));
  199. $groupdata=self::arrayToLine($groupdata);
  200. $updateData=array(
  201. 'groupdata'=>$groupdata
  202. );
  203. self::update($groupid,$updateData);
  204. }
  205. }
  206. public function removePermission($groupid,$inputData=array())
  207. {
  208. $loadData=self::get(array(
  209. 'cache'=>'no',
  210. 'where'=>"where groupid='$groupid'"
  211. ));
  212. if(!isset($loadData[0]['groupid']))
  213. {
  214. return false;
  215. }
  216. $total=count($inputData);
  217. if($total==0)
  218. {
  219. return false;
  220. }
  221. $groupdata=unserialize(self::lineToArray($loadData[0]['groupdata']));
  222. // $listKeys=array_keys($inputData);
  223. for ($i=0; $i < $total; $i++) {
  224. $keyName=$inputData[$i];
  225. // $groupdata[$keyName]=$inputData[$keyName];
  226. if(isset($groupdata[$keyName]))
  227. {
  228. unset($groupdata[$keyName]);
  229. }
  230. }
  231. // $groupdata=serialize(self::arrayToLine($groupdata));
  232. $groupdata=self::arrayToLine($groupdata);
  233. $updateData=array(
  234. 'groupdata'=>$groupdata
  235. );
  236. self::update($groupid,$updateData);
  237. }
  238. public function addPermissionToAll($inputData=array())
  239. {
  240. $loadData=self::get(array(
  241. 'cache'=>'no'
  242. ));
  243. if(!isset($loadData[0]['groupid']))
  244. {
  245. return false;
  246. }
  247. $total=count($loadData);
  248. $totalKey=count($inputData);
  249. $listKeys=array_keys($inputData);
  250. if($total==0)
  251. {
  252. return false;
  253. }
  254. for ($i=0; $i < $total; $i++) {
  255. $row=$loadData[$i];
  256. $groupid=$row['groupid'];
  257. $groupdata=unserialize(self::lineToArray($row['groupdata']));
  258. // print_r($groupdata);die();
  259. for ($j=0; $j < $totalKey; $j++) {
  260. $keyName=$listKeys[$j];
  261. $groupdata[$keyName]=$inputData[$keyName];
  262. }
  263. // $groupdata=serialize(self::arrayToLine($groupdata));
  264. $groupdata=self::arrayToLine($groupdata);
  265. $updateData=array(
  266. 'groupdata'=>$groupdata
  267. );
  268. self::update($groupid,$updateData);
  269. }
  270. }
  271. public function addPermission($groupid,$inputData=array())
  272. {
  273. $loadData=self::get(array(
  274. 'cache'=>'no',
  275. 'where'=>"where groupid='$groupid'"
  276. ));
  277. if(!isset($loadData[0]['groupid']))
  278. {
  279. return false;
  280. }
  281. $total=count($inputData);
  282. if($total==0)
  283. {
  284. return false;
  285. }
  286. $groupdata=unserialize(self::lineToArray($loadData[0]['groupdata']));
  287. $listKeys=array_keys($inputData);
  288. for ($i=0; $i < $total; $i++) {
  289. $keyName=$listKeys[$i];
  290. $groupdata[$keyName]=$inputData[$keyName];
  291. }
  292. // $groupdata=serialize(self::arrayToLine($groupdata));
  293. $groupdata=self::arrayToLine($groupdata);
  294. $updateData=array(
  295. 'groupdata'=>$groupdata
  296. );
  297. self::update($groupid,$updateData);
  298. }
  299. public function getPermission($groupid,$keyName='')
  300. {
  301. $loadData=array();
  302. if(!isset(self::$groupData['groupdata']))
  303. {
  304. if(!$loadData=Cache::loadKey('userGroup1_'.$groupid,-1))
  305. {
  306. $loadData=self::get(array(
  307. 'cache'=>'no',
  308. 'where'=>"where groupid='$groupid'"
  309. ));
  310. if(!isset($loadData[0]['groupid']))
  311. {
  312. return false;
  313. }
  314. $loadData[0]['groupdata']=unserialize(self::lineToArray($loadData[0]['groupdata']));
  315. $loadData=$loadData[0];
  316. }
  317. else
  318. {
  319. $loadData=unserialize($loadData);
  320. $loadData['groupdata']=unserialize($loadData['groupdata']);
  321. }
  322. self::$groupData=$loadData;
  323. $groupData=$loadData['groupdata'];
  324. }
  325. else
  326. {
  327. $groupData=self::$groupData['groupdata'];
  328. }
  329. $value=isset($groupData[$keyName])?$groupData[$keyName]:false;
  330. return $value;
  331. }
  332. public function arrayToLine($data)
  333. {
  334. if(!is_array($data))
  335. {
  336. if(!isset($data[5]))
  337. {
  338. return '';
  339. }
  340. $data=unserialize($data);
  341. }
  342. $total=count($data);
  343. $listKeys=array_keys($data);
  344. $li='';
  345. for ($i=0; $i < $total; $i++) {
  346. $theKey=$listKeys[$i];
  347. $theValue=$data[$theKey];
  348. $li.=$theKey.'|'.$theValue."\r\n";
  349. }
  350. return $li;
  351. }
  352. public function lineToArray($data)
  353. {
  354. $data=trim($data);
  355. $resultData=array();
  356. $parse=explode("\r\n", $data);
  357. if(!isset($parse[0][1]))
  358. {
  359. return '';
  360. }
  361. $total=count($parse);
  362. for ($i=0; $i < $total; $i++) {
  363. if(!isset($parse[$i][5]))
  364. {
  365. continue;
  366. }
  367. $theLine=explode('|', $parse[$i]);
  368. if(!isset($theLine[1]))
  369. {
  370. continue;
  371. }
  372. $theKey=trim($theLine[0]);
  373. $theValue=trim($theLine[1]);
  374. $resultData[$theKey]=$theValue;
  375. }
  376. $resultData=serialize($resultData);
  377. return $resultData;
  378. }
  379. public function insert($inputData=array())
  380. {
  381. // End addons
  382. // $totalArgs=count($inputData);
  383. //groupdata: can_edit_post|yes/no
  384. // can_loggedin_to_admincp|yes/no
  385. // can_view_front_end|yes/no
  386. $addMultiAgrs='';
  387. if(isset($inputData[0]['group_title']))
  388. {
  389. foreach ($inputData as $theRow) {
  390. $theRow['groupdata']=self::lineToArray($theRow['groupdata']);
  391. $keyNames=array_keys($theRow);
  392. $insertKeys=implode(',', $keyNames);
  393. $keyValues=array_values($theRow);
  394. $insertValues="'".implode("','", $keyValues)."'";
  395. $addMultiAgrs.="($insertValues), ";
  396. }
  397. $addMultiAgrs=substr($addMultiAgrs, 0,strlen($addMultiAgrs)-2);
  398. }
  399. else
  400. {
  401. $inputData['groupdata']=self::lineToArray($inputData['groupdata']);
  402. $keyNames=array_keys($inputData);
  403. $insertKeys=implode(',', $keyNames);
  404. $keyValues=array_values($inputData);
  405. $insertValues="'".implode("','", $keyValues)."'";
  406. $addMultiAgrs="($insertValues)";
  407. }
  408. Database::query("insert into usergroups($insertKeys) values".$addMultiAgrs);
  409. DBCache::removeDir('system/usergroup');
  410. if(!$error=Database::hasError())
  411. {
  412. $id=Database::insert_id();
  413. $inputData['groupdata']=self::lineToArray($inputData['groupdata']);
  414. Cache::saveKey('userGroup_'.$id,serialize($inputData));
  415. return $id;
  416. }
  417. return false;
  418. }
  419. public function remove($post=array(),$whereQuery='',$addWhere='')
  420. {
  421. if(is_numeric($post))
  422. {
  423. $id=$post;
  424. unset($post);
  425. $post=array($id);
  426. }
  427. $total=count($post);
  428. $listID="'".implode("','",$post)."'";
  429. $whereQuery=isset($whereQuery[5])?$whereQuery:"groupid in ($listID)";
  430. $addWhere=isset($addWhere[5])?$addWhere:"";
  431. $command="delete from usergroups where $whereQuery $addWhere";
  432. Database::query($command);
  433. // DBCache::removeDir('system/usergroup');
  434. DBCache::removeCache($listID,'system/usergroup');
  435. for ($i=0; $i < $total; $i++) {
  436. $id=$post[$i];
  437. Cache::removeKey('userGroup_'.$id);
  438. }
  439. return true;
  440. }
  441. public function update($listID,$post=array(),$whereQuery='',$addWhere='')
  442. {
  443. if(isset($post['groupdata']) && !is_array($post['groupdata']))
  444. {
  445. $post['groupdata']=self::lineToArray($post['groupdata']);
  446. }
  447. if(is_numeric($listID))
  448. {
  449. $catid=$listID;
  450. unset($listID);
  451. $listID=array($catid);
  452. }
  453. $listIDs="'".implode("','",$listID)."'";
  454. $keyNames=array_keys($post);
  455. $total=count($post);
  456. $setUpdates='';
  457. for($i=0;$i<$total;$i++)
  458. {
  459. $keyName=$keyNames[$i];
  460. $setUpdates.="$keyName='$post[$keyName]', ";
  461. }
  462. $setUpdates=substr($setUpdates,0,strlen($setUpdates)-2);
  463. $whereQuery=isset($whereQuery[5])?$whereQuery:"groupid in ($listIDs)";
  464. $addWhere=isset($addWhere[5])?$addWhere:"";
  465. Database::query("update usergroups set $setUpdates where $whereQuery $addWhere");
  466. // DBCache::removeDir('system/usergroup');
  467. DBCache::removeCache($listIDs,'system/usergroup');
  468. if(!$error=Database::hasError())
  469. {
  470. $loadData=self::get(array(
  471. 'where'=>"where groupid IN ($listIDs)"
  472. ));
  473. $total=count($loadData);
  474. for ($i=0; $i < $total; $i++) {
  475. $loadData[$i]['groupdata']=self::lineToArray($loadData[$i]['groupdata']);
  476. Cache::saveKey('userGroup_'.$loadData[$i]['groupid'],serialize($loadData[$i]));
  477. }
  478. return true;
  479. }
  480. return false;
  481. }
  482. }
  483. ?>