Example #1
0
 /**
  * @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'));
 }
Example #2
0
 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) . '&hellip;';
         }
         $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> &nbsp; <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;
 }
Example #3
0
 /**
  * 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;
     }
 }
Example #4
0
 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);
 }