Esempio n. 1
0
 /**
  * 会员编辑
  * $member_id
  * $member_name
  * $password
  * $old_password
  * $signature
  * $avatar file
  * $member_info json
  */
 public function edit()
 {
     $this->input = hg_mermber2members_compatible(array('new_password' => 'password'), $this->input, false);
     $member_id = intval($this->user['user_id']);
     $app_id = $this->input['app_id'];
     //应用id
     if (!$member_id) {
         $this->errorOutput(NO_MEMBER_ID);
     }
     //检测该会员是否存在
     $condition = " AND m.member_id = '" . $member_id . "' ";
     $field = 'm.member_id , m.member_name, m.password, m.salt, m.avatar, m.type,mb.nick_name';
     $_member_info = $this->mMember->get_member_info($condition, $field, ' LEFT JOIN ' . DB_PREFIX . 'member_bind as mb ON mb.member_id = m.member_id');
     $member_info = array();
     $member_info = $_member_info[0];
     if (empty($member_info)) {
         $this->errorOutput(NO_MEMBER);
     }
     $this->ReplaceCheck($member_info);
     //判定是否有值不更新
     $member_name = trim($this->input['member_name']);
     if ($this->input['nick_name']) {
         $nick_name = trim($this->input['nick_name']);
     }
     if (!$nick_name && $this->settings['memberNameToNickName']) {
         $nick_name = $member_name;
         unset($member_name, $this->input['member_name']);
     }
     $password = trim($this->input['password']) ? trim($this->input['password']) : '';
     $old_password = trim($this->input['old_password']);
     $signature = trim($this->input['signature']);
     $mobile = trim($this->input['mobile']);
     $email = trim($this->input['email']) ? trim($this->input['email']) : '';
     $verifycode = trim($this->input['verifycode']);
     $device_token = $this->Members->check_device_token(trim($this->input['device_token']));
     $udid = $this->Members->check_udid(trim($this->input['uuid']));
     //检查唯一设备号
     if ($device_token === 0) {
         $this->errorOutput(ERROR_DEVICE_TOKEN);
     }
     if ($udid === 0) {
         $this->errorOutput(ERROR_UDID);
     }
     //会员名、更新时间
     $data = array('member_id' => $member_id, 'update_time' => TIMENOW);
     $check_bind = new check_Bind();
     if ($mobile) {
         if (!hg_verify_mobile($mobile)) {
             $this->errorOutput(MOBILE_NUMBER_FORMAT_ERROR);
         } else {
             if ($check_bind->checkMobileBind($member_id) != $mobile) {
                 $this->errorOutput(MOBILE_BIND_NOT_UPDATE);
             }
         }
         $data['mobile'] = $mobile;
     }
     if ($email) {
         if (!hg_check_email_format($email)) {
             $this->errorOutput(EMAIL_FORMAT_ERROR);
         } elseif ($check_bind->checkEmailBind($member_id) == $email) {
             $this->errorOutput(EMAIL_BIND_NOT_UPDATE);
         }
         $data['email'] = $email;
     }
     if ($member_name && !$this->mMember->isMemberNameUpdate($member_id)) {
         $this->errorOutput(NOT_EDIT_MEMBERNAME);
     } else {
         if ($member_name) {
             $member_name_exists = $this->mMember->member_name_exists($member_name, $member_id);
             if (!empty($member_name_exists)) {
                 $this->errorOutput(MEMBER_NAME_EXISTS);
             }
             $data['member_name'] = $member_name;
         }
     }
     if ($this->settings['App_banword']) {
         include ROOT_PATH . 'lib/class/banword.class.php';
         $banword = new banword();
         $signature_banword = $banword->exists($signature);
         //个性签名检测
         if ($signature_banword && is_array($signature_banword)) {
             $this->errorOutput(SIGNATURE_INVALID);
         }
         $nick_name_banword = $banword->exists($nick_name);
         //个性签名检测
         if ($nick_name_banword && is_array($nick_name_banword)) {
             $this->errorOutput(NICKNAME_ILLEGAL);
         }
     }
     //如果是m2o注册类型屏蔽字检测
     if (in_array($member_info['type'], array('m2o', 'uc')) && $this->settings['App_banword']) {
         $member_name_banword = $banword->exists($member_name);
         if ($member_name_banword && is_array($member_name_banword)) {
             //$this->errorOutput(var_export($banword,1));
             $this->errorOutput(MEMBER_NAME_INVALID);
         }
     }
     $_old_password = '';
     //用户原始密码
     $is_no_old_password = 1;
     //是否需要旧密码修改资料,不涉及用户密码操作直接修改
     //密码、随机串
     if (isset($this->input['password']) && $password || isset($this->input['verifycode']) && $verifycode) {
         if (!$old_password && !$verifycode) {
             $this->errorOutput(OLD_PASSWORD_ERROR);
         }
         //根据原始密码修改密码
         if ($old_password) {
             $is_no_old_password = 0;
             $_old_password = $old_password;
             //用作uc更改密码
             $old_password = md5(md5($old_password) . $member_info['salt']);
             if ($old_password != $member_info['password']) {
                 $this->errorOutput(OLD_PASSWORD_ERROR);
             }
         }
         //根据验证码修改密码
         if ($verifycode) {
             if ($this->mSmsServer->get_verifycode_info($member_name, $verifycode)) {
                 //验证成功之后删除
                 $this->mSmsServer->mobile_verifycode_delete($member_name, $verifycode);
             } else {
                 $this->errorOutput(VERIFY_FAILED);
             }
         }
     }
     /**
      * 同步UC信息
      */
     if ($this->settings['ucenter']['open'] && in_array($member_info['type'], array('m2o', 'uc'))) {
         $_member_name = $this->user['user_name'];
         $is_password = $this->mMember->uc_user_edit($_member_name, $_old_password, $password, $email, $is_no_old_password);
         if ($is_password < 0) {
             if ($is_password == -1) {
                 $this->errorOutput(OLD_PASSWORD_ERROR);
             } else {
                 if ($is_password == -4) {
                     $this->errorOutput(EMAIL_FORMAT_ERROR);
                 } elseif ($is_password == -5) {
                     $this->errorOutput(EMAIL_NO_REGISTER);
                 } elseif ($is_password == -6) {
                     $this->errorOutput(EMAIL_HAS_BINDED);
                 }
             }
         }
     }
     if ($password) {
         $salt = hg_generate_salt();
         $md5_password = md5(md5($password) . $salt);
         $data['password'] = $md5_password;
         $data['salt'] = $salt;
     }
     //个性签名
     if (isset($this->input['signature'])) {
         $data['signature'] = $signature;
     }
     //头像
     if ($_FILES['avatar']['tmp_name']) {
         $avatar = $_FILES['avatar'];
     } elseif ($this->input['avatar']) {
         $avatar = $this->input['avatar'];
     }
     //背景图
     if ($_FILES['background']['tmp_name']) {
         $background = $_FILES['background'];
     } elseif ($this->input['background']) {
         $background = $this->input['background'];
     }
     $_avatar = array();
     $_background = array();
     //编辑头像
     if (!empty($avatar) && is_array($avatar)) {
         if ($this->input['version'] == CLIENT_VERSION) {
             $avatar['name'] .= '.png';
         }
         $_avatar = $this->mMember->add_material($avatar, $member_id);
     } elseif ($avatar && is_string($avatar) && is_url($avatar)) {
         $_avatar = $this->mMember->update_avatar($avatar, array(), $member_id, true);
     }
     //叮当更换头像时刷新im用户信息
     if ($_avatar && $this->input['platformMark'] && $this->input['platformMark'] == 'dingdone' && $app_id) {
         $param = array('app_id' => $app_id, 'member_id' => $member_id, 'member_name' => $member_info['member_name']);
         $param['avatar_url'] = $_avatar['host'] . $_avatar['dir'] . $_avatar['filepath'] . $_avatar['filename'];
         $imInfo = $this->refreshImInfo($param);
     }
     //编辑背景图
     if (!empty($background) && is_array($background)) {
         $_background = $this->mMember->add_material($background, $member_id);
     }
     if (!empty($_avatar)) {
         $data['avatar'] = serialize($_avatar);
     }
     $bind_info = array();
     if ($nick_name) {
         $bind_info = array('nick_name' => $nick_name);
     }
     if ($_background) {
         $bind_info['background'] = serialize($_background);
     }
     $copywriting_credit = $this->editCreditRules($member_id, $data, $bind_info);
     //判断积分规则
     //会员数据入库
     $ret = $this->mMember->update($data);
     if ($bind_info) {
         $this->mMember->bind_update($bind_info, 'WHERE member_id = \'' . $member_id . '\'');
     }
     if (!$ret['member_id']) {
         $this->errorOutput(EDIT_FAILED);
     }
     //编辑扩展信息
     if ($this->input['platformMark'] && $this->input['platformMark'] == 'dingdone' && $app_id) {
         //为叮当注册根据app配置不同的扩展信息
         $extension = $this->mMemberInfo->extension_editByApp($member_id, $this->input['member_info'], $app_id, $_FILES);
     } else {
         $extension = $this->mMemberInfo->extension_edit($member_id, $this->input['member_info'], $_FILES);
     }
     //会员痕迹
     $member_trace_data = array('member_id' => $member_id, 'member_name' => $member_name ? $member_name : $member_info['member_name'], 'content_id' => $member_id, 'title' => $member_name ? $member_name : $member_info['member_name'], 'type' => 'editmember', 'op_type' => '修改会员资料', 'appid' => $this->user['appid'], 'appname' => $this->user['display_name'], 'create_time' => TIMENOW, 'ip' => hg_getip(), 'device_token' => $device_token, 'udid' => $udid);
     $this->mMember->member_trace_create($member_trace_data);
     $return = array('member_id' => $member_id, 'member_name' => !$member_name ? $member_info['member_name'] : $member_name, 'nick_name' => !$nick_name ? $member_info['nick_name'] : $nick_name, 'type' => $member_info['type'], 'avatar' => !$_avatar ? $member_info['avatar'] : $_avatar, 'access_token' => $this->user['token'], 'update_avatar' => $avatar ? 1 : 0, 'copywriting_credit' => $copywriting_credit, 'background' => $_background ? $_background : array(), 'email' => $email ? $email : '');
     if (isset($this->input['signature'])) {
         $return['signature'] = $signature;
     }
     //获取扩展信息
     if ($app_id) {
         $extension = $this->getExtensionInfo($member_id, $app_id);
         $return['extension'] = $extension;
     }
     //获取会员基本信息返回
     $condition = '';
     $condition = " AND m.member_id = '" . $member_id . "' AND mb.is_primary=1";
     $field = 'm.member_id , m.member_name, m.signature, m.email,m.mobile, mb.background, m.salt, m.avatar, m.type,mb.nick_name';
     $memberBaseInfo = $this->mMember->get_member_info($condition, $field, ' LEFT JOIN ' . DB_PREFIX . 'member_bind as mb ON mb.member_id = m.member_id');
     if (!empty($memberBaseInfo[0])) {
         foreach ($memberBaseInfo[0] as $k => $v) {
             $return[$k] = $v;
         }
     }
     if ($this->input['version'] == CLIENT_VERSION) {
         //头像
         if ($this->input['m_avatar']) {
             $return = $return['avatar'];
         }
         //昵称
         if ($this->input['m_name']) {
             if ($this->input['appid'] == 7 && $this->input['appkey'] == 'upnKAycZKVw4D7QSXH7D8uFrFOpRQyXb') {
                 $return = 'success';
             } else {
                 $return = array('nick_name' => $return['member_name'], 'update_time' => '', 'member_name' => $return['member_name'], 'member_id' => $return['member_id']);
             }
         }
         //密码
         if ($this->input['m_password']) {
             $return = array('member_id' => $return['member_id']);
         }
         //邮箱
         if ($this->input['m_mail'] || $this->input['m_mobile']) {
             $return = "success";
         }
     }
     $this->addItem($return);
     $this->output();
 }