/** * @covers Alchemy\Phrasea\Controller\Prod\Property::changeStatus */ public function testChangeStatus() { $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/cestlafete.jpg'), self::$DI['collection']); $record = \record_adapter::createFromFile($file, self::$DI['app']); $record2 = \record_adapter::createFromFile($file, self::$DI['app']); $story = \record_adapter::createStory(self::$DI['app'], self::$DI['collection']); $story->appendChild($record2); self::$DI['client']->request('POST', '/prod/records/property/status/', ['apply_to_children' => [$story->get_sbas_id() => true], 'status' => [$record->get_sbas_id() => [6 => true, 8 => true, 11 => true]], 'lst' => implode(';', [$record->get_serialize_key(), $story->get_serialize_key()])]); $response = self::$DI['client']->getResponse(); $datas = (array) json_decode($response->getContent()); $this->assertArrayHasKey('success', $datas); $this->assertTrue($datas['success']); $this->assertArrayHasKey('updated', $datas); $record = new \record_adapter(self::$DI['app'], $record->get_sbas_id(), $record->get_record_id()); $story = new \record_adapter(self::$DI['app'], $story->get_sbas_id(), $story->get_record_id()); $recordStatus = strrev($record->get_status()); $storyStatus = strrev($story->get_status()); $this->assertEquals(1, substr($recordStatus, 6, 1)); $this->assertEquals(1, substr($recordStatus, 8, 1)); $this->assertEquals(1, substr($recordStatus, 11, 1)); $this->assertEquals(1, substr($storyStatus, 6, 1)); $this->assertEquals(1, substr($storyStatus, 8, 1)); $this->assertEquals(1, substr($storyStatus, 11, 1)); foreach ($story->get_children() as $child) { $childStatus = strrev($child->get_status()); $this->assertEquals(1, substr($childStatus, 6, 1)); $this->assertEquals(1, substr($childStatus, 8, 1)); $this->assertEquals(1, substr($childStatus, 11, 1)); } $record->delete(); $record2->delete(); $story->delete(); unset($response, $datas, $story, $record, $record2, $story, $file); }
/** * @covers Alchemy\Phrasea\Controller\Prod\Property::changeStatus */ public function testChangeStatus() { $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/cestlafete.jpg'), self::$DI['collection']); $record = \record_adapter::createFromFile($file, self::$DI['app']); $record2 = \record_adapter::createFromFile($file, self::$DI['app']); $story = \record_adapter::createStory(self::$DI['app'], self::$DI['collection']); $story->appendChild($record2); $acl = $this->getMockBuilder('ACL')->disableOriginalConstructor()->getMock(); $acl->expects($this->any())->method('has_access_to_record')->with($this->isInstanceOf('\\record_adapter'))->will($this->returnValue(true)); $acl->expects($this->any())->method('has_right_on_base')->with($this->isType(\PHPUnit_Framework_Constraint_IsType::TYPE_INT), $this->equalTo('chgstatus'))->will($this->returnValue(true)); $acl->expects($this->any())->method('has_right_on_sbas')->with($this->isType(\PHPUnit_Framework_Constraint_IsType::TYPE_INT), $this->equalTo('chgstatus'))->will($this->returnValue(true)); $aclProvider = $this->getMockBuilder('Alchemy\\Phrasea\\Authentication\\ACLProvider')->disableOriginalConstructor()->getMock(); $aclProvider->expects($this->any())->method('get')->will($this->returnValue($acl)); self::$DI['app']['acl'] = $aclProvider; self::$DI['client']->request('POST', '/prod/records/property/status/', ['apply_to_children' => [$story->get_sbas_id() => true], 'status' => [$record->get_sbas_id() => [6 => true, 8 => true, 11 => true]], 'lst' => implode(';', [$record->get_serialize_key(), $story->get_serialize_key()])]); $response = self::$DI['client']->getResponse(); $datas = (array) json_decode($response->getContent()); $this->assertArrayHasKey('success', $datas); $this->assertTrue($datas['success']); $this->assertArrayHasKey('updated', $datas); $record = new \record_adapter(self::$DI['app'], $record->get_sbas_id(), $record->get_record_id()); $story = new \record_adapter(self::$DI['app'], $story->get_sbas_id(), $story->get_record_id()); $recordStatus = strrev($record->get_status()); $storyStatus = strrev($story->get_status()); $this->assertEquals(1, substr($recordStatus, 6, 1)); $this->assertEquals(1, substr($recordStatus, 8, 1)); $this->assertEquals(1, substr($recordStatus, 11, 1)); $this->assertEquals(1, substr($storyStatus, 6, 1)); $this->assertEquals(1, substr($storyStatus, 8, 1)); $this->assertEquals(1, substr($storyStatus, 11, 1)); foreach ($story->get_children() as $child) { $childStatus = strrev($child->get_status()); $this->assertEquals(1, substr($childStatus, 6, 1)); $this->assertEquals(1, substr($childStatus, 8, 1)); $this->assertEquals(1, substr($childStatus, 11, 1)); } $record->delete(); $record2->delete(); $story->delete(); unset($response, $datas, $story, $record, $record2, $story, $file); }
public function serialize(\record_adapter $record) { $technicalInformation = $caption = $business = $status = []; foreach ($record->get_technical_infos() as $name => $value) { $technicalInformation[$name] = $value; } foreach ($record->get_caption()->get_fields(null, true) as $field) { $isDate = $field->get_databox_field()->get_type() === \databox_field::TYPE_DATE; $isBusiness = $field->get_databox_field()->isBusiness(); $vi = $field->get_values(); if ($field->is_multi()) { $values = []; foreach ($vi as $value) { $values[] = $this->sanitizeSerializedValue($value->getValue()); } $value = implode(' ' . $field->get_databox_field()->get_separator(false) . ' ', $values); } else { $value = $this->sanitizeSerializedValue(array_pop($vi)->getValue()); } if ($isDate) { try { $date = new \DateTime($value); $value = $date->format(DATE_ATOM); } catch (\Exception $e) { continue; } } if ($isBusiness) { $business[$field->get_databox_field()->get_name()] = $value; } $caption[$field->get_databox_field()->get_name()] = $value; } $i = 0; foreach (preg_split('//', strrev($record->get_status()), -1, PREG_SPLIT_NO_EMPTY) as $val) { $status['status-' . $i] = (int) $val; $i++; } return ['databox_id' => $record->get_sbas_id(), 'record_id' => $record->get_record_id(), 'collection_id' => $record->get_collection()->get_coll_id(), 'base_id' => $record->get_base_id(), 'mime_type' => $record->get_mime(), 'title' => $record->get_title(), 'original_name' => $record->get_original_name(), 'updated_on' => $record->get_modification_date()->format(DATE_ATOM), 'created_on' => $record->get_creation_date()->format(DATE_ATOM), 'sha256' => $record->get_sha256(), 'technical_informations' => $technicalInformation, 'phrasea_type' => $record->get_type(), 'type' => $record->is_grouping() ? 'story' : 'record', 'uuid' => $record->get_uuid(), 'caption' => $caption, 'status' => $status, 'caption-business' => $business]; }
public function has_status_access_to_record(record_adapter $record) { return 0 === ((bindec($record->get_status()) ^ $this->get_mask_xor($record->get_base_id())) & $this->get_mask_and($record->get_base_id())); }
protected function evaluateRecordsStatusResponse(\record_adapter $record, $content) { $statusStructure = $record->get_databox()->getStatusStructure(); $r_status = strrev($record->get_status()); $this->assertArrayHasKey('status', $content['response']); $this->assertEquals(count((array) $content['response']['status']), count($statusStructure->toArray())); foreach ($content['response']['status'] as $status) { $this->assertTrue(is_array($status)); $this->assertArrayHasKey('bit', $status); $this->assertArrayHasKey('state', $status); $this->assertTrue(is_int($status['bit'])); $this->assertTrue(is_bool($status['state'])); $retrieved = !!substr($r_status, $status['bit'], 1); $this->assertEquals($retrieved, $status['state']); } }
/** * {@inheritdoc} */ public function addRecord(\record_adapter $record) { if (!$this->rt_conn) { throw new RuntimeException('Unable to connect to sphinx real-time index'); } $all_datas = []; $status = []; $binStatus = strrev($record->get_status()); for ($i = 4; $i < 32; $i++) { if ($binStatus[$i]) { $status[] = sprintf("%u", crc32($record->get_databox()->get_sbas_id() . '_' . $i)); } } $sql_date_fields = $this->getSqlDateFields($record); $indexes = ["metas_realtime" . $this->CRCdatabox($record->get_databox()), "metas_realtime_stemmed_fr_" . $this->CRCdatabox($record->get_databox()), "metas_realtime_stemmed_nl_" . $this->CRCdatabox($record->get_databox()), "metas_realtime_stemmed_de_" . $this->CRCdatabox($record->get_databox()), "metas_realtime_stemmed_en_" . $this->CRCdatabox($record->get_databox())]; foreach ($record->get_caption()->get_fields(null, true) as $field) { if (!$field->is_indexable()) { continue; } if (!$field->get_databox_field()->isBusiness()) { $all_datas[] = $field->get_serialized_values(); } foreach ($field->get_values() as $value) { foreach ($indexes as $index) { $this->rt_conn->exec("REPLACE INTO " . $index . " VALUES (\n '" . $value->getId() . "'\n ,'" . str_replace("'", "\\'", $value->getValue()) . "'\n ,'" . $value->getDatabox_field()->get_id() . "'\n ," . $record->get_record_id() . "\n ," . $record->get_sbas_id() . "\n ," . $record->get_collection()->get_coll_id() . "\n ," . (int) $record->is_grouping() . "\n ," . sprintf("%u", crc32($record->get_sbas_id() . '_' . $value->getDatabox_field()->get_id())) . "\n ," . sprintf("%u", crc32($record->get_sbas_id() . '_' . $record->get_collection()->get_coll_id())) . "\n ," . sprintf("%u", crc32($record->get_sbas_id() . '_' . $record->get_record_id())) . "\n ," . sprintf("%u", crc32($record->get_type())) . "\n ,0\n ," . (int) $value->getDatabox_field()->isBusiness() . "\n ," . sprintf("%u", crc32($record->get_collection()->get_coll_id() . '_' . (int) $value->getDatabox_field()->isBusiness())) . "\n ," . $record->get_creation_date()->format('U') . "\n " . $sql_date_fields . "\n ,(" . implode(',', $status) . ")\n )"); } } } $indexes = ["docs_realtime" . $this->CRCdatabox($record->get_databox()), "docs_realtime_stemmed_fr_" . $this->CRCdatabox($record->get_databox()), "docs_realtime_stemmed_nl_" . $this->CRCdatabox($record->get_databox()), "docs_realtime_stemmed_en_" . $this->CRCdatabox($record->get_databox()), "docs_realtime_stemmed_de_" . $this->CRCdatabox($record->get_databox())]; foreach ($indexes as $index) { $this->rt_conn->exec("REPLACE INTO " . $index . " VALUES (\n '" . $record->get_record_id() . "'\n ,'" . str_replace("'", "\\'", implode(' ', $all_datas)) . "'\n ," . $record->get_record_id() . "\n ," . $record->get_sbas_id() . "\n ," . $record->get_collection()->get_coll_id() . "\n ," . (int) $record->is_grouping() . "\n ," . sprintf("%u", crc32($record->get_sbas_id() . '_' . $record->get_collection()->get_coll_id())) . "\n ," . sprintf("%u", crc32($record->get_sbas_id() . '_' . $record->get_record_id())) . "\n ," . sprintf("%u", crc32($record->get_type())) . "\n ,0\n ," . $record->get_creation_date()->format('U') . "\n " . $sql_date_fields . "\n ,(" . implode(',', $status) . ")\n )"); } return $this; }
/** * Set new status to selected record * * @param \record_adapter $record * @param array $postStatus * @return array|null */ private function updateRecordStatus(\record_adapter $record, array $postStatus) { $sbasId = $record->get_databox()->get_sbas_id(); if (isset($postStatus[$sbasId]) && is_array($postStatus[$sbasId])) { $postStatus = $postStatus[$sbasId]; $currentStatus = strrev($record->get_status()); $newStatus = ''; foreach (range(0, 31) as $i) { $newStatus .= isset($postStatus[$i]) ? $postStatus[$i] ? '1' : '0' : $currentStatus[$i]; } $record->set_binary_status(strrev($newStatus)); return ['current_status' => $currentStatus, 'new_status' => $newStatus]; } return null; }
/** * @covers Alchemy\Phrasea\Controller\Prod\Upload::upload */ public function testUploadRecordStatus() { self::$DI['app']['phraseanet.SE'] = $this->createSearchEngineMock(); $params = ['base_id' => self::$DI['collection']->get_base_id(), 'forceAction' => Manager::FORCE_RECORD, 'status' => [self::$DI['collection']->get_base_id() => [4 => 1]]]; $files = ['files' => [new UploadedFile($this->tmpFile, 'KIKOO.JPG')]]; self::$DI['client']->request('POST', '/prod/upload/', $params, $files, ['HTTP_Accept' => 'application/json']); $response = self::$DI['client']->getResponse(); $this->checkJsonResponse($response); $datas = json_decode($response->getContent(), true); $this->assertTrue($datas['success']); $this->assertEquals('record', $datas['element']); $this->assertEquals(Manager::RECORD_CREATED, $datas['code']); $id = explode('_', $datas['id']); $record = new \record_adapter(self::$DI['app'], $id[0], $id[1]); $this->assertFalse($record->isStory()); $this->assertEquals(1, substr(strrev($record->get_status()), 4, 1)); $this->assertEquals([], $datas['reasons']); }
public function testSetStatus() { $record_1 = $this->getRecord1(); $record = new \record_adapter($this->getApplication(), $record_1->get_sbas_id(), $record_1->get_record_id()); $record->set_binary_status('1001001001010101'); $this->assertSame('00000000000000001001001001010101', $record->get_status()); }
public function testSetStatus() { $record = new \record_adapter(self::$DI['app'], self::$DI['record_1']->get_sbas_id(), self::$DI['record_1']->get_record_id()); $record->set_binary_status('1001001001010101'); $this->assertSame('00000000000000001001001001010101', $record->get_status()); }
/** * {@inheritdoc} */ public function updateRecord(\record_adapter $record) { $record->set_binary_status(\databox_status::dec2bin($this->app, bindec($record->get_status()) & ~7 | 4)); return $this; }