/** * 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; }