Пример #1
0
 /**
  * Add a new user
  *
  * @param array $formData
  *      string nick_name required
  *      string slug optional
  *      string email required
  *      string password required
  *      string time_zone optional
  * @param string $language
  * @param boolean $statusApproved
  * @param array $avatar
  * @param boolean $retArray
  * @return array|integer|string
  */
 public function addUser(array $formData, $language, $statusApproved = true, array $avatar = [], $retArray = false)
 {
     $insertId = 0;
     try {
         $this->adapter->getDriver()->getConnection()->beginTransaction();
         if (!$formData['time_zone']) {
             $formData['time_zone'] = null;
         }
         $insert = $this->insert()->into('user_list')->values(array_merge($formData, ['role' => AclBaseModel::DEFAULT_ROLE_MEMBER, 'status' => $statusApproved ? self::STATUS_APPROVED : self::STATUS_DISAPPROVED, 'language' => $language, 'registered' => time(), 'password' => $this->generatePassword($formData['password']), 'api_secret' => $this->generateRandString(), 'activation_code' => !$statusApproved ? $this->generateRandString() : null, 'date_edited' => date('Y-m-d')]));
         $statement = $this->prepareStatementForSqlObject($insert);
         $statement->execute();
         $insertId = $this->adapter->getDriver()->getLastGeneratedValue();
         // generate a new api key
         $updateFields = ['api_key' => $insertId . '_' . $this->generateRandString()];
         // generate slug automatically
         if (empty($formData['slug'])) {
             $updateFields['slug'] = $this->generateSlug($insertId, $formData['nick_name'], 'user_list', 'user_id', self::USER_SLUG_LENGTH);
         }
         // update some fields
         $update = $this->update()->table('user_list')->set($updateFields)->where(['user_id' => $insertId]);
         $statement = $this->prepareStatementForSqlObject($update);
         $statement->execute();
         // upload the user's avatar
         $this->uploadAvatar($insertId, $avatar);
         $this->clearActiveUsersCache();
         $this->adapter->getDriver()->getConnection()->commit();
     } catch (Exception $e) {
         $this->adapter->getDriver()->getConnection()->rollback();
         ApplicationErrorLogger::log($e);
         return $e->getMessage();
     }
     if ($retArray) {
         $userInfo = (array) $this->getUserInfo($insertId);
         // fire the add user event
         UserEvent::fireUserAddEvent($insertId, $userInfo);
         return $userInfo;
     }
     // fire the add user event
     UserEvent::fireUserAddEvent($insertId);
     return $insertId;
 }