저자: Thomas Müller (t_mueller_stolzenhain@yahoo.de)
예제 #1
0
 /**
  * @param \Psr\Log\LoggerInterface $logger
  * @param string                   $buildFolder
  * @param string|null              $file
  *
  * @return \Browscap\Writer\WriterCollection
  */
 public function createCollection(LoggerInterface $logger, $buildFolder, $file = null)
 {
     $writerCollection = new WriterCollection();
     if (null === $file) {
         $file = $buildFolder . '/full_php_browscap.ini';
     }
     $fullFilter = new FullFilter();
     $fullPhpWriter = new IniWriter($file);
     $formatter = new PhpFormatter();
     $fullPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter);
     return $writerCollection->addWriter($fullPhpWriter);
 }
예제 #2
0
 /**
  * @param \Psr\Log\LoggerInterface $logger
  * @param string                   $buildFolder
  *
  * @return \Browscap\Writer\WriterCollection
  */
 public function createCollection(LoggerInterface $logger, $buildFolder)
 {
     $writerCollection = new WriterCollection();
     $fullFilter = new FullFilter();
     $stdFilter = new StandardFilter();
     $liteFilter = new LiteFilter();
     $fullAspWriter = new IniWriter($buildFolder . '/full_asp_browscap.ini');
     $formatter = new AspFormatter();
     $fullAspWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter);
     $writerCollection->addWriter($fullAspWriter);
     $fullPhpWriter = new IniWriter($buildFolder . '/full_php_browscap.ini');
     $formatter = new PhpFormatter();
     $fullPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter);
     $writerCollection->addWriter($fullPhpWriter);
     $stdAspWriter = new IniWriter($buildFolder . '/browscap.ini');
     $formatter = new AspFormatter();
     $stdAspWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter);
     $writerCollection->addWriter($stdAspWriter);
     $stdPhpWriter = new IniWriter($buildFolder . '/php_browscap.ini');
     $formatter = new PhpFormatter();
     $stdPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter);
     $writerCollection->addWriter($stdPhpWriter);
     $liteAspWriter = new IniWriter($buildFolder . '/lite_asp_browscap.ini');
     $formatter = new AspFormatter();
     $liteAspWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter);
     $writerCollection->addWriter($liteAspWriter);
     $litePhpWriter = new IniWriter($buildFolder . '/lite_php_browscap.ini');
     $formatter = new PhpFormatter();
     $litePhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter);
     $writerCollection->addWriter($litePhpWriter);
     $csvWriter = new CsvWriter($buildFolder . '/browscap.csv');
     $formatter = new CsvFormatter();
     $csvWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter);
     $writerCollection->addWriter($csvWriter);
     $xmlWriter = new XmlWriter($buildFolder . '/browscap.xml');
     $formatter = new XmlFormatter();
     $xmlWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter);
     $writerCollection->addWriter($xmlWriter);
     $jsonWriter = new JsonWriter($buildFolder . '/browscap.json');
     $formatter = new JsonFormatter();
     $jsonWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter);
     $writerCollection->addWriter($jsonWriter);
     $liteJsonWriter = new JsonWriter($buildFolder . '/lite_browscap.json');
     $formatter = new JsonFormatter();
     $liteJsonWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter);
     $writerCollection->addWriter($liteJsonWriter);
     return $writerCollection;
 }
예제 #3
0
 /**
  * @param \Psr\Log\LoggerInterface $logger
  * @param string                   $buildFolder
  *
  * @return \Browscap\Writer\WriterCollection
  */
 public function createCollection(LoggerInterface $logger, $buildFolder)
 {
     $writerCollection = new WriterCollection();
     $fullFilter = new FullFilter();
     $stdFilter = new StandardFilter();
     $liteFilter = new LiteFilter();
     $fullPhpWriter = new IniWriter($buildFolder . '/full_php_browscap.ini');
     $formatter = new PhpFormatter();
     $fullPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter);
     $writerCollection->addWriter($fullPhpWriter);
     $stdPhpWriter = new IniWriter($buildFolder . '/php_browscap.ini');
     $formatter = new PhpFormatter();
     $stdPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter);
     $writerCollection->addWriter($stdPhpWriter);
     $litePhpWriter = new IniWriter($buildFolder . '/lite_php_browscap.ini');
     $formatter = new PhpFormatter();
     $litePhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter);
     $writerCollection->addWriter($litePhpWriter);
     return $writerCollection;
 }
예제 #4
0
 /**
  * @param \Psr\Log\LoggerInterface $logger
  * @param string                   $buildFolder
  * @param string|null              $file
  * @param array                    $fields
  * @param string                   $format
  *
  * @return \Browscap\Writer\WriterCollection
  */
 public function createCollection(LoggerInterface $logger, $buildFolder, $file = null, $fields = array(), $format = self::OUTPUT_FORMAT_PHP)
 {
     $writerCollection = new WriterCollection();
     if (null === $file) {
         switch ($format) {
             case self::OUTPUT_FORMAT_ASP:
                 $file = $buildFolder . '/full_browscap.ini';
                 break;
             case self::OUTPUT_FORMAT_CSV:
                 $file = $buildFolder . '/browscap.csv';
                 break;
             case self::OUTPUT_FORMAT_XML:
                 $file = $buildFolder . '/browscap.xml';
                 break;
             case self::OUTPUT_FORMAT_JSON:
                 $file = $buildFolder . '/browscap.json';
                 break;
             case self::OUTPUT_FORMAT_PHP:
             default:
                 $file = $buildFolder . '/full_php_browscap.ini';
                 break;
         }
     }
     $filter = new CustomFilter($fields);
     switch ($format) {
         case self::OUTPUT_FORMAT_ASP:
             $writer = new Writer\IniWriter($file);
             $formatter = new Formatter\AspFormatter();
             break;
         case self::OUTPUT_FORMAT_CSV:
             $writer = new Writer\CsvWriter($file);
             $formatter = new Formatter\CsvFormatter();
             break;
         case self::OUTPUT_FORMAT_XML:
             $writer = new Writer\XmlWriter($file);
             $formatter = new Formatter\XmlFormatter();
             break;
         case self::OUTPUT_FORMAT_JSON:
             $writer = new Writer\JsonWriter($file);
             $formatter = new Formatter\JsonFormatter();
             break;
         case self::OUTPUT_FORMAT_PHP:
         default:
             $writer = new Writer\IniWriter($file);
             $formatter = new Formatter\PhpFormatter();
             break;
     }
     $writer->setLogger($logger)->setFormatter($formatter->setFilter($filter))->setFilter($filter);
     $writerCollection->addWriter($writer);
     return $writerCollection;
 }
예제 #5
0
 /**
  * tests rendering the footer after all divisions
  *
  * @group writer
  * @group sourcetest
  */
 public function testRenderAllDivisionsFooter()
 {
     $mockWriter = $this->getMock('\\Browscap\\Writer\\CsvWriter', array(), array(), '', false);
     self::assertSame($this->object, $this->object->addWriter($mockWriter));
     self::assertSame($this->object, $this->object->renderAllDivisionsFooter());
 }
예제 #6
0
 /**
  * Entry point for generating builds for a specified version
  *
  * @param string                             $version
  * @param string                             $resourceFolder
  * @param \Psr\Log\LoggerInterface           $logger
  * @param \Browscap\Writer\WriterCollection  $writerCollection
  * @param \Browscap\Helper\CollectionCreator $collectionCreator
  *
  * @throws \Exception
  */
 public static function run($version, $resourceFolder, LoggerInterface $logger, WriterCollection $writerCollection, CollectionCreator $collectionCreator)
 {
     $logger->info('started creating a data collection');
     $dataCollection = new DataCollection($version);
     $dataCollection->setLogger($logger);
     $collectionCreator->setLogger($logger)->setDataCollection($dataCollection);
     $collection = $collectionCreator->createDataCollection($resourceFolder);
     $logger->info('finished creating a data collection');
     $logger->info('started initialisation of writers');
     $expander = new Expander();
     $expander->setDataCollection($collection)->setLogger($logger);
     $logger->info('finished initialisation of writers');
     $logger->info('started output of header and version');
     $comments = ['Provided courtesy of http://browscap.org/', 'Created on ' . $collection->getGenerationDate()->format('l, F j, Y \\a\\t h:i A T'), 'Keep up with the latest goings-on with the project:', 'Follow us on Twitter <https://twitter.com/browscap>, or...', 'Like us on Facebook <https://facebook.com/browscap>, or...', 'Collaborate on GitHub <https://github.com/browscap>, or...', 'Discuss on Google Groups <https://groups.google.com/forum/#!forum/browscap>.'];
     $writerCollection->setExpander($expander)->fileStart()->renderHeader($comments)->renderVersion($version, $collection);
     $logger->info('finished output of header and version');
     $output = [];
     $logger->info('started output of divisions');
     $division = $collection->getDefaultProperties();
     $logger->info('handle division ' . $division->getName());
     $writerCollection->renderAllDivisionsHeader($collection)->renderDivisionHeader($division->getName());
     $ua = $division->getUserAgents();
     $sections = [$ua[0]['userAgent'] => $ua[0]['properties']];
     foreach (array_keys($sections) as $sectionName) {
         $section = $sections[$sectionName];
         $writerCollection->setSilent($division)->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sections, $sectionName)->renderSectionFooter($sectionName);
     }
     $writerCollection->renderDivisionFooter();
     foreach ($collection->getDivisions() as $division) {
         /** @var \Browscap\Data\Division $division */
         // run checks on division before expanding versions because the checked properties do not change between
         // versions
         $sections = $expander->expand($division, $division->getName());
         $logger->info('checking division ' . $division->getName());
         foreach (array_keys($sections) as $sectionName) {
             $section = $sections[$sectionName];
             $collection->checkProperty($sectionName, $section);
         }
         $writerCollection->setSilent($division);
         $versions = $division->getVersions();
         foreach ($versions as $version) {
             list($majorVer, $minorVer) = $expander->getVersionParts($version);
             $divisionName = $expander->parseProperty($division->getName(), $majorVer, $minorVer);
             $logger->info('handle division ' . $divisionName);
             $encodedSections = json_encode($sections);
             $encodedSections = $expander->parseProperty($encodedSections, $majorVer, $minorVer);
             $sectionsWithVersion = json_decode($encodedSections, true);
             $firstElement = current($sectionsWithVersion);
             $writerCollection->renderDivisionHeader($divisionName, $firstElement['Parent']);
             foreach (array_keys($sectionsWithVersion) as $sectionName) {
                 if (array_key_exists($sectionName, $output)) {
                     $logger->error('tried to add section "' . $sectionName . '" more than once -> skipped');
                     continue;
                 }
                 $section = $sectionsWithVersion[$sectionName];
                 $writerCollection->setSilentSection($section);
                 $writerCollection->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sectionsWithVersion, $sectionName)->renderSectionFooter($sectionName);
                 $output[$sectionName] = $sectionName;
             }
             $writerCollection->renderDivisionFooter();
             unset($divisionName, $majorVer, $minorVer);
         }
     }
     $division = $collection->getDefaultBrowser();
     $logger->info('handle division ' . $division->getName());
     $writerCollection->renderDivisionHeader($division->getName());
     $ua = $division->getUserAgents();
     $sections = [$ua[0]['userAgent'] => array_merge(['Parent' => 'DefaultProperties'], $ua[0]['properties'])];
     foreach (array_keys($sections) as $sectionName) {
         $section = $sections[$sectionName];
         $writerCollection->setSilent($division)->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sections, $sectionName)->renderSectionFooter($sectionName);
     }
     $writerCollection->renderDivisionFooter()->renderAllDivisionsFooter();
     $logger->info('finished output of divisions');
     $logger->info('started closing writers');
     $writerCollection->fileEnd()->close();
     $logger->info('finished closing writers');
 }
예제 #7
0
 /**
  * tests rendering the footer after all divisions
  *
  * @group writer
  * @group sourcetest
  */
 public function testRenderAllDivisionsFooter()
 {
     $mockWriter = $this->createMock(\Browscap\Writer\CsvWriter::class);
     self::assertSame($this->object, $this->object->addWriter($mockWriter));
     self::assertSame($this->object, $this->object->renderAllDivisionsFooter());
 }