/** * Set the field values * * @param array $values * @return Unsubscribe */ public function setFieldValues(array $values = null) { parent::setFieldValues($values); if ($_POST && null !== $this->email) { $member = Table\Users::findBy(['email' => $this->email]); if (!isset($member->id)) { $this->getElement('email')->addValidator(new Validator\NotEqual($this->email, 'That email does not exist.')); } else { if (null !== $member->role_id) { $sess = \Pop\Web\Session::getInstance(); $requireLogin = true; $role = Table\Roles::findById($member->role_id); if (isset($role->id) && null !== $role->permissions) { $permissions = unserialize($role->permissions); if (isset($permissions['deny'])) { foreach ($permissions['deny'] as $deny) { if ($deny['resource'] == 'member-login') { $requireLogin = false; } } } } if ($requireLogin) { if (!isset($sess->member) || isset($sess->member) && $sess->member->id != $member->id) { $memberAdmin = new \Phire\Members\Model\MembersAdmin(); $memberAdmin->getByRoleId($member->role_id); $memberUri = isset($memberAdmin->uri) ? $memberAdmin->uri : APP_URI; $this->getElement('email')->addValidator(new Validator\NotEqual($this->email, 'You must <a href="' . BASE_PATH . $memberUri . '/login">log in</a> to unsubscribe.')); } } } } } return $this; }
/** * Register action method * * @param int $id * @return void */ public function register($id) { $role = new Model\Role(); if ($id == $this->memberRoleId && $role->canRegister($id, 'member-register')) { $this->prepareView('members/register.phtml'); $this->view->title = $this->memberName . ' : Register'; $captcha = isset($this->application->config()['registration_captcha']) && $this->application->config()['registration_captcha']; $csrf = isset($this->application->config()['registration_csrf']) && $this->application->config()['registration_csrf']; $role->getById($id); if ($role->email_as_username) { $fields = $this->application->config()['forms']['Phire\\Form\\RegisterEmail']; $fields[2]['role_id']['value'] = $id; $this->view->form = new Form\RegisterEmail($captcha, $csrf, $fields); } else { $fields = $this->application->config()['forms']['Phire\\Form\\Register']; $fields[2]['role_id']['value'] = $id; if ($role->email_required) { $fields[1]['email']['required'] = true; } $this->view->form = new Form\Register($captcha, $csrf, $fields); } if ($this->request->isPost()) { $this->view->form->addFilter('strip_tags')->addFilter('htmlentities', [ENT_QUOTES, 'UTF-8'])->setFieldValues($this->request->getPost()); if ($this->view->form->isValid()) { $this->view->form->clearFilters()->addFilter('html_entity_decode', [ENT_QUOTES, 'UTF-8'])->filter(); $fields = $this->view->form->getFields(); $role->getById($id); $fields['active'] = (int) (!$role->approval); $fields['verified'] = (int) (!$role->verification); $member = new \Phire\Members\Model\MembersAdmin(); $member->getByRoleId($id); $memberUri = isset($member->uri) ? $member->uri : APP_URI; $user = new Model\User(); $user->save($fields, $memberUri); $this->view->id = $user->id; $this->view->success = true; $this->view->verified = $user->verified; } } $this->send(); } else { $this->redirect(BASE_PATH . '/'); } }
/** * Record logout/session end * * @param \Pop\Application $application * @return void */ public static function logout(Application $application) { $sess = $application->getService('session'); $userUri = APP_URI; $key = 'user'; if (isset($sess->member) && $application->isRegistered('phire-members')) { $key = 'member'; $memberAdmin = new \Phire\Members\Model\MembersAdmin(); $memberAdmin->getByRoleId($sess->member->role_id); if (isset($memberAdmin->uri)) { $userUri = $memberAdmin->uri; } } if ($application->router()->getRouteMatch()->getRoute() == $userUri . '/logout') { $path = BASE_PATH . APP_URI; if ($path == '') { $path = '/'; } $cookie = Cookie::getInstance(['path' => $path]); $cookie->delete('phire_session_timeout'); $cookie->delete('phire_session_path'); $cookie->delete('phire_session_warning_dismiss'); $sess = $application->getService('session'); if (isset($sess[$key]) && isset($sess[$key]->session)) { $session = Table\UserSessions::findById((int) $sess[$key]->session->id); if (isset($session->id)) { $session->delete(); } } } }