PageRenderTime 54ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/upload/src/service/design/srv/model/user/PwDesignUserDataService.php

https://gitlab.com/wuhang2003/phpwind
PHP | 311 lines | 215 code | 18 blank | 78 comment | 28 complexity | fa2b8e82a8344f59d39d5a8cc3e7c4da MD5 | raw file
  1. <?php
  2. Wind::import('SRV:design.srv.model.PwDesignModelBase');
  3. Wind::import('SRV:education.srv.helper.PwEducationHelper');
  4. /**
  5. * 用户设置
  6. * <note>
  7. * decorateAddProperty 为插入表单值修饰
  8. * decorateEditProperty 为修改表单值修饰
  9. * getData 获取数据
  10. * </note>
  11. *
  12. * @author xiaoxia.xu <xiaoxia.xuxx@aliyun-inc.com>
  13. * @copyright ©2003-2103 phpwind.com
  14. * @license http://www.windframework.com
  15. * @version $Id: PwDesignUserDataService.php 24726 2013-02-18 06:15:04Z gao.wanggao $
  16. * @package src.service.design.srv.model.user
  17. */
  18. class PwDesignUserDataService extends PwDesignModelBase {
  19. /**
  20. * (non-PHPdoc)
  21. * @see src/service/design/srv/model/PwDesignModelBase::decorateAddProperty()
  22. */
  23. public function decorateAddProperty($model) {
  24. $data = array();
  25. $data['gidOptions'] = $this->_buildGids(-1);
  26. return $data;
  27. }
  28. /**
  29. * (non-PHPdoc)
  30. * @see src/service/design/srv/model/PwDesignModelBase::decorateEditProperty()
  31. */
  32. public function decorateEditProperty($moduleBo) {
  33. $property = $moduleBo->getProperty();
  34. $data = array();
  35. !isset($property['gid']) && $property['gid'] = -1;
  36. $data['gidOptions'] = $this->_buildGids($property['gid']);
  37. return $data;
  38. }
  39. /**
  40. * (non-PHPdoc)
  41. * @see src/service/design/srv/model/PwDesignModelBase::decorateSaveProperty()
  42. */
  43. public function decorateSaveProperty($property, $moduleid) {
  44. //用户名
  45. if (trim($property['usernames'])) {
  46. $usernames = array_unique(explode(' ', trim($property['usernames'])));
  47. $userList = $this->_getDs()->fetchUserByName($usernames);
  48. $clear = $uids = array();
  49. foreach ($userList as $_k => $_i) {
  50. $clear[] = $_i['username'];
  51. $uids[] = $_i['uid'];
  52. }
  53. $property['usernames'] = implode(' ', $clear);
  54. $property['uids'] = $uids;
  55. }
  56. //居住地/家乡
  57. $property['hometown'] = $this->_buildArea($property['hometown']['id']);
  58. $property['location'] = $this->_buildArea($property['location']['id']);
  59. return $property;
  60. }
  61. /* (non-PHPdoc)
  62. * @see PwDesignModelBase::getData()
  63. */
  64. protected function getData($field, $order, $limit, $offset) {
  65. Wind::import('SRV:user.vo.PwUserSo');
  66. $so = new PwUserSo();
  67. $field['uids'] && $so->setUid($field['uids']);
  68. $field['gid'] != '-1' && $so->setGid($field['gid']);
  69. if ($field['gender']) {
  70. if (in_array(0, $field['gender']) && !in_array(1, $field['gender'])) {
  71. $so->setGender(0);
  72. } elseif (!in_array(0, $field['gender']) && in_array(1, $field['gender'])) {
  73. $so->setGender(1);
  74. }
  75. }
  76. $field['hometown']['id'] && $so->setHometown($field['hometown']['id']);
  77. $field['location']['id'] && $so->setLocation($field['location']['id']);
  78. $orderby = $field['orderby'];
  79. switch($orderby) {
  80. case '2': //按主题数倒序,
  81. $so->orderbyPostnum(false);
  82. break;
  83. case '3' : //按发帖时间倒序,
  84. $so->orderbyLastpost(false);
  85. break;
  86. case '4' : //按被喜欢数倒序,
  87. break;
  88. case '5': //按注册时间倒序,
  89. $so->orderbyRegdate(false);
  90. break;
  91. case '6' :// 按访问时间倒序,
  92. $so->orderbyLastvisit(false);
  93. break;
  94. case '1'://系统推荐排序
  95. default:
  96. break;
  97. }
  98. $list = Wekit::load('user.PwUserSearch')->searchUserAllData($so, $limit, $offset);
  99. return $this->_buildSignKey($list);
  100. }
  101. /**
  102. * 用于推送时的指定数据获取
  103. * @see src/service/design/srv/model/PwDesignModelBase::_fetchData()
  104. */
  105. protected function fetchData($ids) {
  106. Wind::import('SRV:user.vo.PwUserSo');
  107. $so = new PwUserSo();
  108. $so->setUid($ids);
  109. $list = Wekit::load('user.PwUserSearch')->searchUserAllData($so);
  110. return $this->_buildSignKey($list);
  111. }
  112. /**
  113. * 构建模板用的标签
  114. *
  115. * @param array $list
  116. * @return string
  117. */
  118. private function _buildSignKey($list) {
  119. $clear = array();
  120. /* @var $userGroupSrv PwUserGroupsService */
  121. $userGroupSrv = Wekit::load('usergroup.srv.PwUserGroupsService');
  122. /* @var $workDs PwWork */
  123. $workDs = Wekit::load('work.PwWork');
  124. /* @var $educateDs PwEducation */
  125. $educateDs = Wekit::load('education.PwEducation');
  126. $location = $hometown = $schoolids = $_areaid = array();
  127. foreach ($list as $_uid => $_item) {
  128. $_one = array();
  129. $_one['uid'] = $_item['uid'];
  130. $_one['username'] = $_item['username'];
  131. $_one['url'] = WindUrlHelper::createUrl('space/index/run', array('uid' => $_item['uid']), '', 'pw');
  132. $_one['smallavatar'] = Pw::getAvatar($_uid, 'small');
  133. $_one['middleavatar'] = Pw::getAvatar($_uid, 'middle');
  134. $_one['bigavatar'] = Pw::getAvatar($_uid, 'big');
  135. $_one['regdate'] = $this->_formatTime($_item['regdate']);
  136. $_one['lastvisit'] = $this->_formatTime($_item['lastvisit']);
  137. $_one['posts'] = $_item['postnum'];
  138. $_one['topics'] = $_item['postnum'];//主题数
  139. $_one['digests'] =$_item['digest'];
  140. $_one['compositePoint'] = $userGroupSrv->getCredit($_item);
  141. $_one['realname'] = $_item['realname'];
  142. $_one['sex'] = !in_array($_item['gender'], array(0, 1)) ? '未知' : ($_item['gender'] == 0 ? '男' : '女');
  143. $_one['birthYear'] = $_item['byear'];
  144. $_one['birthMonth'] = $_item['bmonth'];
  145. $_one['birthDay'] = $_item['bday'];
  146. $_one['homepage'] = $_item['homepage'];
  147. $_one['profile'] = $_item['profile'];
  148. $_one['alipay'] = $_item['alipay'];
  149. $_one['mobile'] = $_item['mobile'];
  150. $_one['telphone'] = $_item['telphone'];
  151. $_one['address'] = $_item['address'];
  152. $_one['zipcode'] = $_item['zipcode'];
  153. $_one['email'] = $_item['email'];
  154. $_one['aliww'] = $_item['aliww'];
  155. $_one['qq'] = $_item['qq'];
  156. $_one['msn'] = $_item['msn'];
  157. $_one['worklist'] = $this->_buildWork($workDs, $_uid);
  158. list($_schoolids, $_one['educationlist']) = $this->_buildEducation($educateDs, $_uid);
  159. $schoolids += $_schoolids;
  160. $_one['home_province'] = $_one['home_city'] = $_one['home_area'] = '';
  161. $_one['locate_province'] = $_one['locate_city'] = $_one['locate_area'] = '';
  162. $location[$_uid] = $_item['location'];
  163. $hometown[$_uid] = $_item['hometown'];
  164. $_areaid[] = $_item['location'];
  165. $_areaid[] = $_item['hometown'];
  166. $clear[$_uid] = $_one;
  167. }
  168. //家庭和居住地
  169. $areaSrv = WindidApi::api('area');
  170. $areaList = $areaSrv->fetchAreaInfo(array_unique($_areaid));
  171. //学校列表
  172. $schoolSrv = WindidApi::api('school');
  173. $schoolList = $schoolSrv->fetchSchool($schoolids);
  174. foreach ($clear as $_uid => $_item) {
  175. if ($hometown[$_uid] && isset($areaList[$hometown[$_uid]])) {
  176. $_temp = explode(' ', $areaList[$hometown[$_uid]], 3);
  177. $clear[$_uid]['home_province'] = $_temp[0];
  178. isset($_temp[1]) && $clear[$_uid]['home_city'] = $_temp[1];
  179. isset($_temp[2]) && $clear[$_uid]['home_area'] = $_temp[2];
  180. }
  181. if ($location[$_uid] && isset($areaList[$location[$_uid]])) {
  182. $_temp = explode(' ', $areaList[$location[$_uid]], 3);
  183. $clear[$_uid]['locate_province'] = $_temp[0];
  184. isset($_temp[1]) && $clear[$_uid]['locate_city'] = $_temp[1];
  185. isset($_temp[2]) && $clear[$_uid]['locate_area'] = $_temp[2];
  186. }
  187. if ($_item['educationlist']) {
  188. $_temp = array();
  189. foreach ($_item['educationlist'] as $_i) {
  190. if (isset($schoolList[$_i['schoolid']])) {
  191. $_i['school'] = $schoolList[$_i['schoolid']]['name'];
  192. unset($_i['schoolid']);
  193. $_temp[] = $_i;
  194. }
  195. }
  196. $clear[$_uid]['educationlist'] = $_temp;
  197. }
  198. }
  199. return $clear;
  200. }
  201. /**
  202. * 用户工作经历
  203. *
  204. * @param PwWork $ds
  205. * @param int $uid
  206. * @return array
  207. */
  208. private function _buildWork(PwWork $ds, $uid) {
  209. $list = $ds->getByUid($uid, 10, 0);
  210. $workList = array();
  211. foreach ($list as $id => $_item) {
  212. $_one = array();
  213. $_one['company'] = $_item['company'];
  214. $_one['start'] = $_item['starty'] . '-' . $_item['startm'];
  215. $_one['end'] = $_item['endy'] . '-' . $_item['endm'];
  216. $workList[] = $_one;
  217. }
  218. return $workList;
  219. }
  220. /**
  221. * 用户教育经历
  222. *
  223. * @param PwEducation $ds
  224. * @param int $uid
  225. * @return array
  226. */
  227. private function _buildEducation(PwEducation $ds, $uid) {
  228. $list = $ds->getByUid($uid, 10, 0);
  229. $educateList = $schoolids = array();
  230. $degree = PwEducationHelper::getDegrees();
  231. foreach ($list as $id => $_item) {
  232. $_one = array();
  233. $schoolids[] = $_item['schoolid'];
  234. $_one['school'] = '';
  235. $_one['schoolid'] = $_item['schoolid'];
  236. $_one['degree'] = $degree[$_item['degree']];
  237. $_one['start'] = $_item['start_time'];
  238. $educateList[] = $_one;
  239. }
  240. return array($schoolids, $educateList);
  241. }
  242. /**
  243. * 构造用户组
  244. *
  245. * @param string $gid
  246. * @return string
  247. */
  248. private function _buildGids($gid) {
  249. $gidOptions = '<option value="-1" ' . Pw::isSelected($gid == -1) . '>全部用户组</option>';
  250. $gidOptions .= '<option value="0" ' . Pw::isSelected($gid == 0) . '>会员组</option>';
  251. /* @var $groupDs PwUserGroups */
  252. $groupDs = Wekit::load('usergroup.PwUserGroups');
  253. $groups = $groupDs->getClassifiedGroups();
  254. if (!$groups) return $gidOptions;
  255. $types = $groupDs->getTypeNames();
  256. unset($types['member']);
  257. foreach($types as $_k => $_v) {
  258. if (!isset($groups[$_k])) continue;
  259. $option = '<optgroup label="' . $_v . '">';
  260. foreach ($groups[$_k] as $_item) {
  261. $option .= '<option value="' . $_item['gid'] . '" ' . Pw::isSelected($gid == $_item['gid']) . '>' . $_item['name'] . '</option>';
  262. }
  263. $gidOptions .= $option;
  264. }
  265. return $gidOptions;
  266. }
  267. /**
  268. * 构建推送的地区库---获取地区库的省/市/区
  269. *
  270. * @param int $areaid
  271. * @return array
  272. */
  273. private function _buildArea($areaid) {
  274. $areaSrv = WindidApi::api('area');
  275. $_rout = $areaSrv->getAreaRout($areaid);
  276. $_return = array('id' => '', 'rout' => array(array('', ''), array('', ''), array('', '')));
  277. if (!$_rout) return $_return;
  278. foreach ($_rout as $_k => $_r) {
  279. $_return['rout'][$_k] = array($_r['areaid'], $_r['name']);
  280. }
  281. $_return['id'] = $areaid;
  282. return $_return;
  283. }
  284. /**
  285. * 用户DS
  286. *
  287. * @return PwUser
  288. */
  289. private function _getDs() {
  290. return Wekit::load('user.PwUser');
  291. }
  292. }
  293. ?>