Ejemplo n.º 1
0
 public function testCompositeFilterCrud()
 {
     $this->markTestSkipped();
     $filterDao = DAORegistry::getDAO('FilterDAO');
     // sub-filter 1
     $subFilter1Settings = array('seq' => 1, 'displayName' => '1st sub-filter');
     $subFilter1 = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $subFilter1Settings, false, 9999, array(), false);
     // sub-sub-filters for sub-filter 2
     $subSubFilter1Settings = array('seq' => 1, 'displayName' => '1st sub-sub-filter');
     $subSubFilter1 = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $subSubFilter1Settings, false, 9999, array(), false);
     $subSubFilter2Settings = array('seq' => 2, 'displayName' => '2nd sub-sub-filter');
     $subSubFilter2 = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $subSubFilter2Settings, false, 9999, array(), false);
     $subSubFilters = array($subSubFilter1, $subSubFilter2);
     // sub-filter 2
     $subFilter2Settings = array('seq' => 2, 'displayName' => '2nd sub-filter');
     $subFilter2 = $filterDao->configureObject('lib.pkp.classes.filter.GenericMultiplexerFilter', 'test-filter-group', $subFilter2Settings, false, 9999, $subSubFilters, false);
     // Instantiate a composite test filter object
     $subFilters = array($subFilter1, $subFilter2);
     $testFilter = $filterDao->configureObject('lib.pkp.classes.filter.GenericSequencerFilter', 'test-filter-group', array('seq' => 1), false, 9999, $subFilters);
     self::assertInstanceOf('GenericSequencerFilter', $testFilter);
     $filterId = $testFilter->getId();
     self::assertTrue(is_numeric($filterId));
     self::assertTrue($filterId > 0);
     // Check that sub-filters were correctly
     // linked to the composite filter.
     $subFilters =& $testFilter->getFilters();
     self::assertEquals(2, count($subFilters));
     foreach ($subFilters as $subFilter) {
         self::assertTrue($subFilter->getId() > 0);
         self::assertEquals($filterId, $subFilter->getParentFilterId());
     }
     $subSubFilters =& $subFilters[2]->getFilters();
     self::assertEquals(2, count($subSubFilters));
     foreach ($subSubFilters as $subSubFilter) {
         self::assertTrue($subSubFilter->getId() > 0);
         self::assertEquals($subFilters[2]->getId(), $subSubFilter->getParentFilterId());
     }
     // Retrieve filter instance by id
     $filterById = $filterDao->getObjectById($filterId);
     self::assertEquals($testFilter, $filterById);
     // Update filter instance
     $testFilter = new GenericSequencerFilter($testFilter->getFilterGroup());
     $testFilter->setDisplayName('composite filter');
     $testFilter->setSeq(9999);
     $testFilter->setId($filterId);
     $testFilter->setIsTemplate(true);
     // leave out (sub-)sub-filter 2 but add a new (sub-)sub-filter 3
     // to test recursive update.
     $testFilter->addFilter($subFilter1);
     $subFilter3 = new GenericMultiplexerFilter($testFilter->getFilterGroup());
     $subFilter3->setDisplayName('3rd sub-filter');
     $subFilter3->addFilter($subSubFilter1);
     $subSubFilter3 = new PersistableTestFilter($testFilter->getFilterGroup());
     $subSubFilter3->setDisplayName('3rd sub-sub-filter');
     $subFilter3->addFilter($subSubFilter3);
     $testFilter->addFilter($subFilter3);
     $filterDao->updateObject($testFilter);
     $filterAfterUpdate = $filterDao->getObject($testFilter);
     self::assertEquals($testFilter, $filterAfterUpdate);
     // Delete filter instance
     $filterDao->deleteObject($testFilter);
     self::assertNull($filterDao->getObjectById($filterId));
 }
 /**
  * Installs filter template entries into the filters table.
  * FIXME: Move this to plug-in installation when moving filters to plug-ins, see #5157.
  */
 function installFilterTemplates()
 {
     // Filters are supported on PHP5+ only.
     if (!checkPhpVersion('5.0.0')) {
         return true;
     }
     $filterDao =& DAORegistry::getDAO('FilterDAO');
     $filtersToBeInstalled = array('lib.pkp.classes.citation.lookup.crossref.CrossrefNlmCitationSchemaFilter', 'lib.pkp.classes.citation.lookup.pubmed.PubmedNlmCitationSchemaFilter', 'lib.pkp.classes.citation.lookup.worldcat.WorldcatNlmCitationSchemaFilter', 'lib.pkp.classes.citation.parser.freecite.FreeciteRawCitationNlmCitationSchemaFilter', 'lib.pkp.classes.citation.parser.paracite.ParaciteRawCitationNlmCitationSchemaFilter', 'lib.pkp.classes.citation.parser.parscit.ParscitRawCitationNlmCitationSchemaFilter', 'lib.pkp.classes.citation.parser.regex.RegexRawCitationNlmCitationSchemaFilter', 'lib.pkp.classes.citation.output.abnt.NlmCitationSchemaAbntFilter', 'lib.pkp.classes.citation.output.apa.NlmCitationSchemaApaFilter', 'lib.pkp.classes.citation.output.mla.NlmCitationSchemaMlaFilter', 'lib.pkp.classes.citation.output.vancouver.NlmCitationSchemaVancouverFilter', 'lib.pkp.classes.importexport.nlm.PKPSubmissionNlmXmlFilter');
     import('lib.pkp.classes.citation.output.PlainTextReferencesListFilter');
     foreach ($filtersToBeInstalled as $filterToBeInstalled) {
         // Instantiate filter.
         $filter =& instantiate($filterToBeInstalled, 'Filter');
         // Install citation output filters as non-configurable site-wide filter instances.
         if (is_a($filter, 'NlmCitationSchemaCitationOutputFormatFilter') || is_a($filter, 'PKPSubmissionNlmXmlFilter')) {
             $filter->setIsTemplate(false);
             // Check whether the filter instance has been
             // installed before.
             $existingFilters =& $filterDao->getObjectsByClass($filterToBeInstalled, 0, false);
             // Install other filter as configurable templates.
         } else {
             $filter->setIsTemplate(true);
             // Check whether the filter template has been
             // installed before.
             $existingFilters =& $filterDao->getObjectsByClass($filterToBeInstalled, 0, true);
         }
         // Guarantee idempotence.
         if ($existingFilters->getCount()) {
             continue;
         }
         // Install the filter or template.
         $filterDao->insertObject($filter, 0);
         // If this is a citation output filter then also install a corresponding references list filter.
         if (is_a($filter, 'NlmCitationSchemaCitationOutputFormatFilter')) {
             // Only Vancouver Style listings require numerical ordering.
             if (is_a($filter, 'NlmCitationSchemaVancouverFilter')) {
                 $ordering = REFERENCES_LIST_ORDERING_NUMERICAL;
             } else {
                 $ordering = REFERENCES_LIST_ORDERING_ALPHABETICAL;
             }
             // Instantiate the filter.
             $referencesListFilter = new PlainTextReferencesListFilter($filter->getDisplayName(), $filter->getClassName(), $ordering);
             $referencesListFilter->setIsTemplate(false);
             // Install the filter.
             $filterDao->insertObject($referencesListFilter, 0);
             unset($referencesListFilter);
         }
         unset($filter);
     }
     // Composite filters are more complex to install because they
     // need to be constructed first:
     // 1) Check and install the ISBNdb filter template.
     $alreadyInstalled = false;
     $existingTemplatesFactory =& $filterDao->getObjectsByClass('lib.pkp.classes.filter.GenericSequencerFilter', 0, true);
     $existingTemplates =& $existingTemplatesFactory->toArray();
     foreach ($existingTemplates as $existingTemplate) {
         $subFilters =& $existingTemplate->getFilters();
         if (count($subFilters) != 2) {
             continue;
         }
         if (!(isset($subFilters[1]) && is_a($subFilters[1], 'IsbndbNlmCitationSchemaIsbnFilter'))) {
             continue;
         }
         if (!(isset($subFilters[2]) && is_a($subFilters[2], 'IsbndbIsbnNlmCitationSchemaFilter'))) {
             continue;
         }
         $alreadyInstalled = true;
         break;
     }
     if (!$alreadyInstalled) {
         // Instantiate the filter as a configurable template.
         $isbndbTransformation = array('metadata::lib.pkp.classes.metadata.nlm.NlmCitationSchema(CITATION)', 'metadata::lib.pkp.classes.metadata.nlm.NlmCitationSchema(CITATION)');
         import('lib.pkp.classes.filter.GenericSequencerFilter');
         $isbndbFilter = new GenericSequencerFilter('ISBNdb', $isbndbTransformation);
         $isbndbFilter->setIsTemplate(true);
         // Instantiate and add the NLM-to-ISBN filter.
         import('lib.pkp.classes.citation.lookup.isbndb.IsbndbNlmCitationSchemaIsbnFilter');
         $nlmToIsbnFilter = new IsbndbNlmCitationSchemaIsbnFilter();
         $isbndbFilter->addFilter($nlmToIsbnFilter);
         // Instantiate and add the ISBN-to-NLM filter.
         import('lib.pkp.classes.citation.lookup.isbndb.IsbndbIsbnNlmCitationSchemaFilter');
         $isbnToNlmFilter = new IsbndbIsbnNlmCitationSchemaFilter();
         $isbndbFilter->addFilter($isbnToNlmFilter);
         // Add the settings mapping.
         $isbndbFilter->setSettingsMapping(array('apiKey' => array('seq' . $nlmToIsbnFilter->getSeq() . '_apiKey', 'seq' . $isbnToNlmFilter->getSeq() . '_apiKey'), 'isOptional' => array('seq' . $nlmToIsbnFilter->getSeq() . '_isOptional', 'seq' . $isbnToNlmFilter->getSeq() . '_isOptional')));
         // Persist the composite filter.
         $filterDao->insertObject($isbndbFilter, 0);
     }
     // 3) Check and install the NLM XML 2.3 output filter.
     $alreadyInstalled = false;
     $existingTemplatesFactory =& $filterDao->getObjectsByClass('lib.pkp.classes.filter.GenericSequencerFilter', 0, false);
     $existingTemplates =& $existingTemplatesFactory->toArray();
     foreach ($existingTemplates as $existingTemplate) {
         $subFilters =& $existingTemplate->getFilters();
         if (count($subFilters) != 2) {
             continue;
         }
         if (!(isset($subFilters[1]) && is_a($subFilters[1], 'PKPSubmissionNlmXmlFilter'))) {
             continue;
         }
         if (!(isset($subFilters[2]) && is_a($subFilters[2], 'XSLTransformationFilter'))) {
             continue;
         }
         $alreadyInstalled = true;
         break;
     }
     if (!$alreadyInstalled) {
         // Instantiate the filter as a non-configurable filter instance.
         $nlm23Transformation = array('class::lib.pkp.classes.submission.Submission', 'xml::*');
         $nlm23Filter = new GenericSequencerFilter('NLM Journal Publishing V2.3 ref-list', $nlm23Transformation);
         $nlm23Filter->setIsTemplate(false);
         // Instantiate and add the NLM 3.0 export filter.
         import('lib.pkp.classes.importexport.nlm.PKPSubmissionNlmXmlFilter');
         $nlm30Filter = new PKPSubmissionNlmXmlFilter();
         $nlm23Filter->addFilter($nlm30Filter);
         // Instantiate, configure and add the NLM 3.0 to 2.3 downgrade XSL transformation.
         import('lib.pkp.classes.xslt.XSLTransformationFilter');
         $downgradeFilter = new XSLTransformationFilter('NLM 3.0 to 2.3 ref-list downgrade', array('xml::*', 'xml::*'));
         $downgradeFilter->setXSLFilename('lib/pkp/classes/importexport/nlm/nlm-ref-list-30-to-23.xsl');
         $nlm23Filter->addFilter($downgradeFilter);
         // Persist the composite filter.
         $filterDao->insertObject($nlm23Filter, 0);
     }
     return true;
 }