/** * 用户修改信息 * * @param array $params 用户修改的信息 * @return array */ public function modify($params) { $date = []; if (empty($params['open_id'])) { return responseArray(1001, 'id_not_find', '用户open_id丢失'); } $genderArr = [UserBaseInfo::GENDER_UNKNOWN, UserBaseInfo::GENDER_MALE, UserBaseInfo::GENDER_FEMALE]; $date['birthday'] = ''; if (isset($params['year'], $params['month'], $params['day']) && $params['year'] && $params['month'] && $params['day']) { if (!is_numeric($params['year'])) { return responseArray(2002, 'year_illegal_modify', '年份非法修改'); } $month = str_pad(intval($params['month']), 2, "0", STR_PAD_LEFT); $day = str_pad(intval($params['day']), 2, "0", STR_PAD_LEFT); if (checkdate($month, $day, $params['year'])) { if ($params['year'] <= date('Y', time()) && $params['year'] >= 1950) { $date['birthday'] = $params['year'] . '-' . $month . '-' . $day; } else { return responseArray(2003, 'date_not_whithin_specified_time', '日期不在规定时间之内'); } } else { return responseArray(2004, 'date_illegal_modify', '非法日期'); } } foreach ($params as $key => $value) { $date[$key] = $value; if ($key === 'username') { $preg = '/^((?!^\\d+$)(?!^\\-+$)(?!^\\_+$)[\\x{4e00}-\\x{9fa5}a-zA-Z0-9\\_\\-]{2,20})$/u'; $res = preg_match($preg, $value); if (!$res) { return responseArray(2101, 'username_format_error', '昵称格式错误'); } } if ($key === 'gender') { if (!in_array($value, $genderArr)) { return responseArray(2201, 'sex_illegally_modified', '性别非法修改'); } } if ($key === 'city' && !empty($value)) { $district = new District(); $city = $district->getByName($value); if (!$city) { return responseArray(2104, 'city_not_found', '城市不存在'); } $date[$key] = $city['id']; } if ($key === 'industry' && !empty($value)) { $industry = \Yii::$app->util->loadConfig('user-industry', '/platform_i/config/'); if (!isset($industry[$value])) { return responseArray(2103, 'industry_information_not_exist', '行业信息不存在'); } } if ($key === 'company') { $comStrLength = mb_strlen($value, 'utf8'); if ($comStrLength < 0 || $comStrLength > 50) { return responseArray(2105, 'company_too_long', '公司名称过长'); } $date['company'] = strip_tags($value); } if ($key === 'position') { $posStrLength = mb_strlen($value, 'utf8'); if ($posStrLength < 0 || $posStrLength > 30) { return responseArray(2016, 'job_title_too_long', '就任职位名称过长'); } $date['position'] = strip_tags($value); } if ($key === 'avatar') { $avatar = new Avatar(); $picture = $avatar->uploadByUrl($value); if ($picture === 1) { return responseArray(1701, 'type_not_allowed', '上传图片类型不允许'); } $date['avatar'] = $picture; } } unset($date['year']); unset($date['month']); unset($date['day']); $date['update_time'] = time(); $user = UserBaseInfo::find()->where('open_id=:open_id', [':open_id' => $params['open_id']])->one(); if (!$user) { return responseArray(1101, 'user_not_found', '没找到用户'); } $field = ['password', 'password_salt', 'mobile', 'email']; $attributes = $user->getAttributes(); foreach ($date as $key => $value) { if ($value === '' || in_array($key, $field) || !array_key_exists($key, $attributes)) { unset($date[$key]); } else { $user->{$key} = $value; } } if (!$user->username) { $user->username = UserBaseInfo::genUsername($user->id); } if ($user->save()) { $res = array_merge($this->generateToken(), $date); $res['realname'] = $user->realname; return responseArray(0, 'success', '修改用户信息成功', $res); } else { return responseArray(2106, 'modify_password_failure', '修改用户信息失败'); } }