/** * @depends testAbstractEntityConstructor */ public function testAbstractEntitySet(User $user) { $user->set('email', '*****@*****.**'); $this->assertEquals('*****@*****.**', $user->get('email')); $user->set('email', null); $this->assertNull($user->get('email')); $user->set('invalid', 'something', false); $this->assertNull($user->get('invalid')); }
public function __invoke(User $user, $search = null) { $view = $this->getView(); $html = ''; switch ($user->need('status')) { case 'placeholder': $attr = ' class="gray"'; break; default: $attr = null; break; } $html .= sprintf('<tr %s>', $attr); $html .= sprintf('<td>%s</td>', $user->need('uid')); $html .= sprintf('<td>%s</td>', $user->need('alias')); $html .= sprintf('<td>%s</td>', $view->t($user->getStatus())); /* Email col */ $email = $user->get('email'); if ($email) { $email = '<a href="mailto:' . $email . '" class="unlined" style="color: #333; opacity: 1.0;">' . $email . '</a>'; } else { $email = '-'; } $html .= sprintf('<td class="email-col">%s</td>', $email); /* Notes col */ $notes = $user->getMeta('notes'); if ($notes) { if (strlen($notes) > 48) { $notes = substr($notes, 0, 48) . '…'; } $notes = '<span class="small-text">' . $notes . '</span>'; } else { $notes = '-'; } $html .= sprintf('<td class="notes-col">%s</td>', $notes); /* Actions col */ $html .= sprintf('<td class="actions-col no-print"><a href="%s" class="unlined gray symbolic symbolic-edit">%s</a> <a href="%s" class="unlined gray symbolic symbolic-booking">%s</a></td>', $view->url('backend/user/edit', ['uid' => $user->need('uid')], ['query' => ['search' => $search]]), $view->t('Edit'), $view->url('backend/booking', [], ['query' => ['search' => '(uid = ' . $user->need('uid') . ')']]), $view->t('Bookings')); $html .= '</tr>'; return $html; }
/** * Saves (updates or creates) a user. * * @param User $user * @throws Exception * @return User */ public function save(User $user) { $connection = $this->userTable->getAdapter()->getDriver()->getConnection(); if (!$connection->inTransaction()) { $connection->beginTransaction(); $transaction = true; } else { $transaction = false; } try { if ($user->get('uid')) { /* Update existing user */ /* Determine updated properties */ $updates = array(); foreach ($user->need('updatedProperties') as $property) { $updates[$property] = $user->get($property); } if ($updates) { $this->userTable->update($updates, array('uid' => $user->get('uid'))); } /* Determine new meta properties */ foreach ($user->need('insertedMetaProperties') as $metaProperty) { $this->userMetaTable->insert(array('uid' => $user->get('uid'), 'key' => $metaProperty, 'value' => $user->needMeta($metaProperty))); } /* Determine updated meta properties */ foreach ($user->need('updatedMetaProperties') as $metaProperty) { $this->userMetaTable->update(array('value' => $user->needMeta($metaProperty)), array('uid' => $user->get('uid'), 'key' => $metaProperty)); } /* Determine removed meta properties */ foreach ($user->need('removedMetaProperties') as $metaProperty) { $this->userMetaTable->delete(array('uid' => $user->get('uid'), 'key' => $metaProperty)); } $user->reset(); $this->getEventManager()->trigger('save.update', $user); } else { /* Insert user */ $created = date('Y-m-d H:i:s'); if ($user->getExtra('nuid')) { $uid = $user->getExtra('nuid'); } else { $uid = null; } $this->userTable->insert(array('uid' => $uid, 'alias' => $user->need('alias'), 'status' => $user->need('status'), 'email' => $user->get('email'), 'pw' => $user->get('pw'), 'login_attempts' => $user->get('login_attempts'), 'login_detent' => $user->get('login_detent'), 'last_activity' => $user->get('last_activity'), 'last_ip' => $user->get('last_ip'), 'created' => $user->get('created', $created))); $uid = $this->userTable->getLastInsertValue(); if (!(is_numeric($uid) && $uid > 0)) { throw new RuntimeException('Failed to save user'); } foreach ($user->need('meta') as $key => $value) { $this->userMetaTable->insert(array('uid' => $uid, 'key' => $key, 'value' => $value)); if (!$this->userMetaTable->getLastInsertValue()) { throw new RuntimeException(sprintf('Failed to save user meta key "%s"', $key)); } } $user->add('uid', $uid); if (!$user->get('created')) { $user->add('created', $created); } $this->getEventManager()->trigger('save.insert', $user); } if ($transaction) { $connection->commit(); } $this->getEventManager()->trigger('save', $user); return $user; } catch (Exception $e) { if ($transaction) { $connection->rollback(); } throw $e; } }
public function editAction() { $sessionUser = $this->authorize('admin.user'); $serviceManager = $this->getServiceLocator(); $userManager = $serviceManager->get('User\\Manager\\UserManager'); $formElementManager = $serviceManager->get('FormElementManager'); $uid = $this->params()->fromRoute('uid'); $search = $this->params()->fromQuery('search'); if ($uid) { $user = $userManager->get($uid); } else { $user = null; } $editUserForm = $formElementManager->get('Backend\\Form\\User\\EditForm'); if ($this->getRequest()->isPost()) { $editUserForm->setData($this->params()->fromPost()); if ($editUserForm->isValid()) { $eud = $editUserForm->getData(); if (!$user) { $user = new User(); } if ($user->get('status') == 'admin') { if (!$sessionUser->can('admin')) { $this->flashMessenger()->addInfoMessage('Admin users can only be edited by admins'); return $this->redirect()->toRoute('backend/user/edit', ['uid' => $uid]); } } /* Account data */ $user->set('alias', $eud['euf-alias']); $status = $eud['euf-status']; if ($status == 'admin') { if ($sessionUser->can('admin')) { $user->set('status', $status); } else { $this->flashMessenger()->addInfoMessage('Admin status can only be given by admins'); if (!$user->get('uid')) { return $this->redirect()->toRoute('backend/user/edit', ['uid' => $uid]); } } } else { $user->set('status', $status); } if ($eud['euf-privileges']) { if ($sessionUser->can('admin')) { foreach (User::$privileges as $privilege => $privilegeLabel) { if (in_array($privilege, $eud['euf-privileges'])) { $user->setMeta('allow.' . $privilege, 'true'); } else { $user->setMeta('allow.' . $privilege, null); } } } else { $this->flashMessenger()->addInfoMessage('Privileges can only be edited by admins'); } } $user->set('email', $eud['euf-email']); $pw = $eud['euf-pw']; if ($pw) { $bcrypt = new Bcrypt(); $bcrypt->setCost(6); $user->set('pw', $bcrypt->create($pw)); } /* Personal data */ $user->setMeta('gender', $eud['euf-gender']); switch ($eud['euf-gender']) { case 'family': case 'firm': $user->setMeta('name', $eud['euf-firstname']); break; default: $user->setMeta('firstname', $eud['euf-firstname']); $user->setMeta('lastname', $eud['euf-lastname']); } $user->setMeta('street', $eud['euf-street']); $user->setMeta('zip', $eud['euf-zip']); $user->setMeta('city', $eud['euf-city']); $user->setMeta('phone', $eud['euf-phone']); $user->setMeta('birthdate', $eud['euf-birthdate']); $user->setMeta('notes', $eud['euf-notes']); $userManager->save($user); $this->flashMessenger()->addSuccessMessage('User has been saved'); if ($search) { return $this->redirect()->toRoute('backend/user', [], ['query' => ['usf-search' => $search]]); } else { return $this->redirect()->toRoute('frontend'); } } } else { if ($user) { $privileges = array(); foreach (User::$privileges as $privilege => $privilegeLabel) { if ($user->getMeta('allow.' . $privilege) == 'true') { $privileges[] = $privilege; } } $editUserForm->setData(array('euf-uid' => $user->need('uid'), 'euf-alias' => $user->need('alias'), 'euf-status' => $user->need('status'), 'euf-privileges' => $privileges, 'euf-email' => $user->get('email'), 'euf-gender' => $user->getMeta('gender'), 'euf-firstname' => $user->getMeta('firstname', $user->getMeta('name')), 'euf-lastname' => $user->getMeta('lastname'), 'euf-street' => $user->getMeta('street'), 'euf-zip' => $user->getMeta('zip'), 'euf-city' => $user->getMeta('city'), 'euf-phone' => $user->getMeta('phone'), 'euf-birthdate' => $user->getMeta('birthdate'), 'euf-notes' => $user->getMeta('notes'))); } } return array('editUserForm' => $editUserForm, 'user' => $user, 'search' => $search); }