Esempio n. 1
0
 /**
  * Creates the user and rights group tables, adds a user into both as
  * admin, then adds that user to the session.
  *
  * @since 2.0
  */
 protected function setUp()
 {
     $_POST = array();
     $_GET = array();
     $_COOKIE = array();
     $config = ConfigProvider::getInstance();
     $config->set('session.provider.name', 'Alpha\\Util\\Http\\Session\\SessionProviderArray');
     $action = new ActionLog();
     $action->rebuildTable();
     $person = new Person();
     $person->rebuildTable();
     $rights = new Rights();
     $rights->rebuildTable();
     $rights->set('name', 'Standard');
     $rights->save();
     $rights = new Rights();
     $rights->set('name', 'Admin');
     $rights->save();
     $person = $this->createPersonObject('loggedin');
     $person->save();
     if (!$person->inGroup('Admin')) {
         $adminGroup = new Rights();
         $adminGroup->loadByAttribute('name', 'Admin');
         $lookup = $adminGroup->getMembers()->getLookup();
         $lookup->setValue(array($person->getID(), $adminGroup->getID()));
         $lookup->save();
     }
     $sessionProvider = $config->get('session.provider.name');
     $session = SessionProviderFactory::getInstance($sessionProvider);
     $session->set('currentUser', $person);
 }
Esempio n. 2
0
 /**
  * Handle GET requests.
  *
  * @param Alpha\Util\Http\Request $request
  *
  * @return Alpha\Util\Http\Response
  *
  * @since 1.0
  */
 public function doGET($request)
 {
     self::$logger->debug('>>doGET($request=[' . var_export($request, true) . '])');
     $config = ConfigProvider::getInstance();
     $sessionProvider = $config->get('session.provider.name');
     $session = SessionProviderFactory::getInstance($sessionProvider);
     // if there is nobody logged in, we will send them off to the Login controller to do so before coming back here
     if ($session->get('currentUser') === false) {
         self::$logger->info('Nobody logged in, invoking Login controller...');
         $controller = new LoginController();
         $controller->setName('LoginController');
         $controller->setRequest($request);
         $controller->setUnitOfWork(array('Alpha\\Controller\\LoginController', 'Alpha\\Controller\\InstallController'));
         self::$logger->debug('<<__construct');
         return $controller->doGET($request);
     }
     $params = $request->getParams();
     $sessionProvider = $config->get('session.provider.name');
     $session = SessionProviderFactory::getInstance($sessionProvider);
     $body = View::displayPageHead($this);
     $body .= '<h1>Installing the ' . $config->get('app.title') . ' application</h1>';
     try {
         $body .= $this->createApplicationDirs();
     } catch (\Exception $e) {
         $body .= View::displayErrorMessage($e->getMessage());
         $body .= View::displayErrorMessage('Aborting.');
         return new Response(500, $body, array('Content-Type' => 'text/html'));
     }
     // start a new database transaction
     ActiveRecord::begin();
     /*
      * Create DEnum tables
      */
     $DEnum = new DEnum();
     $DEnumItem = new DEnumItem();
     try {
         $body .= '<p>Attempting to create the DEnum tables...';
         if (!$DEnum->checkTableExists()) {
             $DEnum->makeTable();
         }
         self::$logger->info('Created the [' . $DEnum->getTableName() . '] table successfully');
         if (!$DEnumItem->checkTableExists()) {
             $DEnumItem->makeTable();
         }
         self::$logger->info('Created the [' . $DEnumItem->getTableName() . '] table successfully');
         // create a default article DEnum category
         $DEnum = new DEnum('Alpha\\Model\\Article::section');
         $DEnumItem = new DEnumItem();
         $DEnumItem->set('value', 'Main');
         $DEnumItem->set('DEnumID', $DEnum->getID());
         $DEnumItem->save();
         $body .= View::displayUpdateMessage('DEnums set up successfully.');
     } catch (\Exception $e) {
         $body .= View::displayErrorMessage($e->getMessage());
         $body .= View::displayErrorMessage('Aborting.');
         self::$logger->error($e->getMessage());
         ActiveRecord::rollback();
         return new Response(500, $body, array('Content-Type' => 'text/html'));
     }
     /*
      * Loop over each business object in the system, and create a table for it
      */
     $classNames = ActiveRecord::getBOClassNames();
     $loadedClasses = array();
     foreach ($classNames as $classname) {
         array_push($loadedClasses, $classname);
     }
     foreach ($loadedClasses as $classname) {
         try {
             $body .= '<p>Attempting to create the table for the class [' . $classname . ']...';
             try {
                 $BO = new $classname();
                 if (!$BO->checkTableExists()) {
                     $BO->makeTable();
                 } else {
                     if ($BO->checkTableNeedsUpdate()) {
                         $missingFields = $BO->findMissingFields();
                         $count = count($missingFields);
                         for ($i = 0; $i < $count; ++$i) {
                             $BO->addProperty($missingFields[$i]);
                         }
                     }
                 }
             } catch (FailedIndexCreateException $eice) {
                 // this are safe to ignore for now as they will be auto-created later once all of the tables are in place
                 self::$logger->warn($eice->getMessage());
             } catch (FailedLookupCreateException $elce) {
                 // this are safe to ignore for now as they will be auto-created later once all of the tables are in place
                 self::$logger->warn($elce->getMessage());
             }
             self::$logger->info('Created the [' . $BO->getTableName() . '] table successfully');
             $body .= View::displayUpdateMessage('Created the [' . $BO->getTableName() . '] table successfully');
         } catch (\Exception $e) {
             $body .= View::displayErrorMessage($e->getMessage());
             $body .= View::displayErrorMessage('Aborting.');
             self::$logger->error($e->getMessage());
             ActiveRecord::rollback();
             return new Response(500, $body, array('Content-Type' => 'text/html'));
         }
     }
     $body .= View::displayUpdateMessage('All business object tables created successfully!');
     /*
      * Create the Admin and Standard groups
      */
     $adminGroup = new Rights();
     $adminGroup->set('name', 'Admin');
     $standardGroup = new Rights();
     $standardGroup->set('name', 'Standard');
     try {
         try {
             $body .= '<p>Attempting to create the Admin and Standard groups...';
             $adminGroup->save();
             $standardGroup->save();
             self::$logger->info('Created the Admin and Standard rights groups successfully');
             $body .= View::displayUpdateMessage('Created the Admin and Standard rights groups successfully');
         } catch (FailedIndexCreateException $eice) {
             // this are safe to ignore for now as they will be auto-created later once all of the tables are in place
             self::$logger->warn($eice->getMessage());
         } catch (FailedLookupCreateException $elce) {
             // this are safe to ignore for now as they will be auto-created later once all of the tables are in place
             self::$logger->warn($elce->getMessage());
         }
     } catch (\Exception $e) {
         $body .= View::displayErrorMessage($e->getMessage());
         $body .= View::displayErrorMessage('Aborting.');
         self::$logger->error($e->getMessage());
         ActiveRecord::rollback();
         return new Response(500, $body, array('Content-Type' => 'text/html'));
     }
     /*
      * Save the admin user to the database in the right group
      */
     try {
         try {
             $body .= '<p>Attempting to save the Admin account...';
             $admin = new Person();
             $admin->set('displayName', 'Admin');
             $admin->set('email', $session->get('currentUser')->get('email'));
             $admin->set('password', $session->get('currentUser')->get('password'));
             $admin->save();
             self::$logger->info('Created the admin user account [' . $session->get('currentUser')->get('email') . '] successfully');
             $adminGroup->loadByAttribute('name', 'Admin');
             $lookup = $adminGroup->getMembers()->getLookup();
             $lookup->setValue(array($admin->getID(), $adminGroup->getID()));
             $lookup->save();
             self::$logger->info('Added the admin account to the Admin group successfully');
             $body .= View::displayUpdateMessage('Added the admin account to the Admin group successfully');
         } catch (FailedIndexCreateException $eice) {
             // this are safe to ignore for now as they will be auto-created later once all of the tables are in place
             self::$logger->warn($eice->getMessage());
         } catch (FailedLookupCreateException $elce) {
             // this are safe to ignore for now as they will be auto-created later once all of the tables are in place
             self::$logger->warn($elce->getMessage());
         }
     } catch (\Exception $e) {
         $body .= View::displayErrorMessage($e->getMessage());
         $body .= View::displayErrorMessage('Aborting.');
         self::$logger->error($e->getMessage());
         ActiveRecord::rollback();
         return new Response(500, $body, array('Content-Type' => 'text/html'));
     }
     $body .= '<br><p align="center"><a href="' . FrontController::generateSecureURL('act=Alpha\\Controller\\ListActiveRecordsController') . '">Administration Home Page</a></p><br>';
     $body .= View::displayPageFoot($this);
     // commit
     ActiveRecord::commit();
     self::$logger->info('Finished installation!');
     self::$logger->action('Installed the application');
     self::$logger->debug('<<doGET');
     return new Response(200, $body, array('Content-Type' => 'text/html'));
 }
Esempio n. 3
0
 /**
  * Checks to see if the person is in the rights group specified.
  *
  * @param string $groupName
  *
  * @return bool
  *
  * @since 1.0
  */
 public function inGroup($groupName)
 {
     if (self::$logger == null) {
         self::$logger = new Logger('Person');
     }
     self::$logger->debug('>>inGroup(groupName=[' . $groupName . '])');
     $group = new Rights();
     try {
         $group->loadByAttribute('name', $groupName);
     } catch (RecordNotFoundException $e) {
         self::$logger->error('Unable to load the group named [' . $groupName . ']');
         self::$logger->debug('<<inGroup [false]');
         return false;
     }
     $rel = $group->getMembers();
     try {
         // load all person2rights RelationLookup objects for this person
         $lookUps = $rel->getLookup()->loadAllByAttribute('leftID', $this->getID());
         foreach ($lookUps as $lookUp) {
             // the rightID (i.e. Rights OID) will be on the right side of the value array
             $ids = $lookUp->getValue();
             // if we have found a match, return true right away
             if ($ids[1] == $group->getID()) {
                 self::$logger->debug('<<inGroup [true]');
                 return true;
             }
         }
     } catch (RecordNotFoundException $e) {
         self::$logger->debug('<<inGroup [false]');
         return false;
     }
     self::$logger->debug('<<inGroup [false]');
     return false;
 }