/**
  * @param $params
  */
 public function __invoke($params)
 {
     $serviceManager = ServiceManager::getServiceManager();
     $service = new CategoryService();
     $service->setServiceManager($serviceManager);
     $serviceManager->register(CategoryService::SERVICE_ID, $service);
 }
 /**
  * Test CategoryService#getItemCategories
  */
 public function testGetItemCategories()
 {
     $fooClass = new RdfClass('foo');
     $eligibleProp1 = $this->prophesize('\\core_kernel_classes_Property');
     $eligibleProp1->getWidget()->willReturn(new RdfResource(CategoryService::$supportedWidgetUris[0]));
     $eligibleProp1->getUri()->willReturn('p1');
     $eligibleProp2 = $this->prophesize('\\core_kernel_classes_Property');
     $eligibleProp2->getWidget()->willReturn(new RdfResource(CategoryService::$supportedWidgetUris[2]));
     $eligibleProp2->getUri()->willReturn('p2');
     $p2Value = $this->prophesize('\\core_kernel_classes_Resource');
     $p2Value->getLabel()->willReturn('Yeah Moo');
     $item = $this->prophesize('\\core_kernel_classes_Resource');
     $item->getPropertiesValues(Argument::any())->willReturn(['p1' => ['Foo', 'Yo _Bar '], 'p2' => [$p2Value->reveal()]]);
     $item->getTypes()->willReturn([$fooClass]);
     $itemService = $this->prophesize('\\taoItems_models_classes_ItemsService');
     $itemService->getClazzProperties($fooClass, Argument::any())->willReturn(['p1' => $eligibleProp1->reveal(), 'p2' => $eligibleProp2->reveal()]);
     $categoryService = new CategoryService();
     $categoryService->setItemService($itemService->reveal());
     $categories = $categoryService->getItemCategories($item->reveal());
     $this->assertEquals(3, count($categories), "We have 3 categories");
     $this->assertEquals('foo', $categories[0], "The category matches");
     $this->assertEquals('yo-bar', $categories[1], "The category matches");
     $this->assertEquals('yeah-moo', $categories[2], "The category matches");
 }
 /**
  *
  * @param string $currentVersion
  * @return string $versionUpdatedTo
  */
 public function update($initialVersion)
 {
     //migrate from 2.6 to 2.6.1
     if ($this->isVersion('2.6')) {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_6_1.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             ${$this}->setVerion('2.6.1');
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($this->isVersion('2.6.1')) {
         // double check
         $index = new core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAOItem.rdf#ItemContentIndex');
         $default = $index->getPropertyValues(new core_kernel_classes_Property('http://www.tao.lu/Ontologies/TAO.rdf#IndexDefaultSearch'));
         if (count($default) == 0) {
             //no default search set, import
             $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_6_2.rdf';
             $adapter = new tao_helpers_data_GenerisAdapterRdf();
             if ($adapter->import($file)) {
                 $this->setVerion('2.6.2');
             } else {
                 common_Logger::w('Import failed for ' . $file);
             }
         } else {
             common_Logger::w('Defautl Search already set');
             ${$this}->setVerion('2.6.2');
         }
     }
     if ($this->isVersion('2.6.2')) {
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_6_1.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_6_2.rdf');
         $this->setVerion('2.6.3');
     }
     if ($this->isVersion('2.6.3')) {
         // update user roles
         $class = new core_kernel_classes_Class(CLASS_TAO_USER);
         $itemManagers = $class->searchInstances(array(PROPERTY_USER_ROLES => 'http://www.tao.lu/Ontologies/TAOItem.rdf#ItemsManagerRole'), array('recursive' => true, 'like' => false));
         foreach ($itemManagers as $user) {
             $user->setPropertyValue(new core_kernel_classes_Property(PROPERTY_USER_ROLES), ItemAuthorRole::INSTANCE_URI);
         }
         $this->setVerion('2.6.4');
     }
     if ($this->isBetween('2.6.4', '2.8')) {
         $this->setVersion('2.8');
     }
     // fix itemModelLabelProp
     if ($this->isVersion('2.8')) {
         $fakeProperty = new core_kernel_classes_Property('itemModelLabel');
         $iterator = new core_kernel_classes_ResourceIterator(array(taoItems_models_classes_ItemsService::singleton()->getRootClass()));
         foreach ($iterator as $resource) {
             $resource->removePropertyValues($fakeProperty);
         }
         $this->setVersion('2.8.1');
     }
     $this->skip('2.8.1', '2.14.0');
     if ($this->isVersion('2.14.0')) {
         OntologyUpdater::syncModels();
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAOItem.rdf#AbstractItemAuthor', 'taoItems_actions_ItemContent'));
         $this->setVersion('2.15.0');
     }
     $this->skip('2.15.0', '2.22.3');
     if ($this->isVersion('2.22.3')) {
         OntologyUpdater::syncModels();
         $categoryService = new CategoryService();
         $categoryService->setServiceManager($this->getServiceManager());
         $this->getServiceManager()->register(CategoryService::SERVICE_ID, $categoryService);
         $this->setVersion('2.23.0');
     }
     if ($this->isVersion('2.23.0')) {
         OntologyUpdater::syncModels();
         $this->setVersion('2.24.0');
     }
     $this->skip('2.24.0', '2.24.1');
 }