/**
  * Tests for environment detection methods
  * 
  * The tests cover getEnvironment(), isProduction(), isDevelopment() and
  * isTest() with all relevant values for the APPLICATION_ENV environment
  * variable.
  */
 public function testEnvironment()
 {
     // Assume that the tests have been invoked with APPLICATION_ENV set to
     // "test". Otherwise the tests might be incomplete.
     $this->assertEquals('test', getenv('APPLICATION_ENV'));
     $this->assertEquals('test', Application::getEnvironment());
     $this->assertFalse(Application::isProduction());
     $this->assertTrue(Application::isDevelopment());
     $this->assertTrue(Application::isTest());
     // Unset APPLICATION_ENV, equivalent to "production"
     putenv('APPLICATION_ENV');
     $this->assertEquals('production', Application::getEnvironment());
     $this->assertTrue(Application::isProduction());
     $this->assertFalse(Application::isDevelopment());
     $this->assertFalse(Application::isTest());
     // Test "development" environment
     putenv('APPLICATION_ENV=development');
     $this->assertEquals('development', Application::getEnvironment());
     $this->assertFalse(Application::isProduction());
     $this->assertTrue(Application::isDevelopment());
     $this->assertFalse(Application::isTest());
     // Test invalid environment. Ensure that the variable is reset to its
     // default in either case.
     putenv('APPLICATION_ENV=invalid');
     try {
         Application::getEnvironment();
     } catch (\DomainException $expected) {
         $invalidEnvironmmentDetected = true;
     }
     // Reset to default.
     putenv('APPLICATION_ENV=test');
     if (!isset($invalidEnvironmmentDetected)) {
         $this->fail('Invalid environment was undetected.');
     }
 }
Example #2
0
 /**
  * @internal
  */
 public function onBootstrap(\Zend\EventManager\EventInterface $e)
 {
     \Zend\Filter\StaticFilter::getPluginManager()->setInvokableClass('Library\\FixEncodingErrors', 'Library\\Filter\\FixEncodingErrors');
     $serviceManager = $e->getApplication()->getServiceManager();
     // Register form element view helpers
     $formElementHelper = $serviceManager->get('ViewHelperManager')->get('formElement');
     $formElementHelper->addClass('Library\\Form\\Element\\SelectSimple', 'formselectsimple');
     $formElementHelper->addType('select_untranslated', 'formselectuntranslated');
     if (\Locale::getPrimaryLanguage(\Locale::getDefault()) != 'en') {
         $mvcTranslator = $serviceManager->get('MvcTranslator');
         if (Application::isDevelopment()) {
             $translator = $mvcTranslator->getTranslator();
             $translator->enableEventManager();
             $translator->getEventManager()->attach(\Zend\I18n\Translator\Translator::EVENT_MISSING_TRANSLATION, array($this, 'onMissingTranslation'));
         }
         // Validators have no translator by default. Attach translator, but
         // use a different text domain to avoid warnings if the Zend
         // translations are not loaded. For custom messages, the text domain
         // must be reset manually to 'default' for individual validators.
         \Zend\Validator\AbstractValidator::setDefaultTranslator($mvcTranslator);
         \Zend\Validator\AbstractValidator::setDefaultTranslatorTextDomain('Zend');
     }
 }
 /**
  * Download client as XML file
  *
  * @return \Zend\Http\Response Response with downloadable XML content
  */
 public function exportAction()
 {
     $document = $this->_currentClient->toDomDocument();
     if (\Library\Application::isDevelopment()) {
         $document->forceValid();
     }
     $filename = $document->getFilename();
     $xml = $document->saveXml();
     $response = $this->getResponse();
     $response->getHeaders()->addHeaders(array('Content-Type' => 'text/xml; charset="utf-8"', 'Content-Disposition' => "attachment; filename=\"{$filename}\"", 'Content-Length' => strlen($xml)));
     $response->setContent($xml);
     return $response;
 }
Example #4
0
 /**
  * Load vendor database
  *
  * Clears the database and iterates over $input. Each entry of the form
  * "MAC_address[/bits] TAB short_name [whitespace # long_name]" gets parsed
  * and added to the database.
  *
  * @param array|\Traversable $input
  */
 public static function loadVendorDatabase($input)
 {
     self::$_vendorList = array();
     foreach ($input as $line) {
         /* This regular expression matches lines of the following pattern:
         
                        <MAC address><TAB><short name>[<whitespace># <long name>]
         
                        Matching lines leave $data as an array with exaxtly 5 elements:
                        [0] unused
                        [1] MAC address with optional mask suffix ("/36")
                        [2] short vendor name (used if [4] is empty)
                        [3] unused
                        [4] long vendor name or empty string
                     */
         if (!preg_match("/^(\\H+)\t(\\H+)\\h*(# )?(.*)/", $line, $data)) {
             continue;
         }
         // remove ':' and '-' delimiters
         $mac = str_replace(array(':', '-'), '', $data[1]);
         // extract bitmask if present
         $pos = strpos($mac, '/');
         if ($pos !== false) {
             $mask = substr($mac, $pos + 1);
             if ($mask % 4 != 0) {
                 // The precision of this string-based implementation is
                 // limited to 4 bits (1 hex digit). Entries with a number
                 // of mask bits that is not a multiple of 4 cannot be
                 // matched and are ignored.
                 if (\Library\Application::isDevelopment()) {
                     trigger_error("Ignoring MAC address {$data['1']} because mask is not a multiple of 4.", E_USER_NOTICE);
                 }
                 continue;
             }
             $numDigits = $mask / 4;
             $mac = substr($mac, 0, $pos);
             $mac = str_pad($mac, $numDigits, '0');
             // Fill with zeroes if too short
             $mac = substr($mac, 0, $numDigits);
             // Crop to maximun length if too long
         } else {
             $numDigits = strlen($mac);
         }
         self::$_vendorList[] = array('address' => strtoupper($mac), 'length' => $numDigits, 'vendor' => $data[4] ?: $data[2]);
     }
 }
Example #5
0
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 */
// Absence of the controller variable hints an invalid route which requires
// special treatment.
if (!isset($this->controller)) {
    $this->layout()->noRoute = true;
    print "<p class='textcenter'><strong>Error:</strong> No route matched.</p>\n";
    return;
}
print "<h1>An error occurred</h1>\n";
print $this->htmlTag('h2', $this->message);
// @codeCoverageIgnoreStart
if (\Library\Application::isDevelopment() and isset($this->exception)) {
    print "<h3>Exception Message trace:</h3>\n";
    $exception = $this->exception;
    while ($exception) {
        print $this->htmlTag('p', '<strong>Message:</strong> ' . $this->escapeHtml($exception->getMessage()));
        print $this->htmlTag('p', sprintf('<strong>Source:</strong> %s, line %d', $this->escapeHtml($exception->getFile()), $this->escapeHtml($exception->getLine())));
        print "<h4>Stack trace:</h4>\n";
        print $this->htmlTag('pre', $this->escapeHtml($exception->getTraceAsString()));
        $exception = $exception->getPrevious();
    }
    // The additional debug information below might contain sensitive data.
    if ($this->controller == 'login') {
        print 'Details hidden for security reasons.';
        return;
    }
    $request = $this->request;