public function generateSubdefs(\record_adapter $record, array $wanted_subdefs = null) { if (null === ($subdefs = $record->get_databox()->get_subdef_structure()->getSubdefGroup($record->get_type()))) { $this->logger->info(sprintf('Nothing to do for %s', $record->get_type())); return; } foreach ($subdefs as $subdef) { $subdefname = $subdef->get_name(); if ($wanted_subdefs && !in_array($subdefname, $wanted_subdefs)) { continue; } $pathdest = null; if ($record->has_subdef($subdefname) && $record->get_subdef($subdefname)->is_physically_present()) { $pathdest = $record->get_subdef($subdefname)->get_pathfile(); $record->get_subdef($subdefname)->remove_file(); $this->logger->info(sprintf('Removed old file for %s', $subdefname)); $record->clearSubdefCache($subdefname); } $pathdest = $this->generateSubdefPathname($record, $subdef, $pathdest); $this->logger->addInfo(sprintf('Generating subdef %s to %s', $subdefname, $pathdest)); $this->generateSubdef($record, $subdef, $pathdest); if ($this->filesystem->exists($pathdest)) { $media = $this->mediavorus->guess($pathdest); \media_subdef::create($this->app, $record, $subdef->get_name(), $media); } $record->clearSubdefCache($subdefname); $this->app['dispatcher']->dispatch(RecordEvents::SUB_DEFINITION_CREATED, new RecordSubDefinitionCreatedEvent($record, $subdefname)); } return $this; }
public function replaceMetadata($metadataCollection, \record_adapter $record) { $metadatas = []; $tagnameToFieldnameMapping = []; $arrayStructure = iterator_to_array($record->get_databox()->get_meta_structure()); array_walk($arrayStructure, function ($databoxField) use(&$tagnameToFieldnameMapping) { $tagname = $databoxField->get_tag()->getTagname(); $tagnameToFieldnameMapping[$tagname][] = $databoxField->get_name(); }); array_walk($metadataCollection, function (Metadata $metadata) use(&$metadatas, $tagnameToFieldnameMapping) { $tagname = $metadata->getTag()->getTagname(); if (!isset($tagnameToFieldnameMapping[$tagname])) { return; } foreach ($tagnameToFieldnameMapping[$tagname] as $fieldname) { if (!isset($metadatas[$fieldname])) { $metadatas[$fieldname] = []; } $metadatas[$fieldname] = array_merge($metadatas[$fieldname], $metadata->getValue()->asArray()); } }); $metas = []; array_walk($arrayStructure, function (\databox_field $field) use(&$metas, $metadatas, $record) { $fieldname = $field->get_name(); if (!isset($metadatas[$fieldname])) { return; } $values = $metadatas[$fieldname]; if ($record->get_caption()->has_field($fieldname)) { foreach ($record->get_caption()->get_field($fieldname)->get_values() as $value) { $value->delete(); } } if ($field->is_multi()) { $tmpValues = []; foreach ($values as $value) { $tmpValues = array_merge($tmpValues, \caption_field::get_multi_values($value, $field->get_separator())); } $values = array_unique($tmpValues); foreach ($values as $value) { if (trim($value) === '') { continue; } $metas[] = ['meta_struct_id' => $field->get_id(), 'meta_id' => null, 'value' => $value]; } } else { $value = array_pop($values); if (trim($value) === '') { return; } $metas[] = ['meta_struct_id' => $field->get_id(), 'meta_id' => null, 'value' => $value]; } }); if (count($metas) > 0) { $record->set_metadatas($metas, true); } }
public function substitute(\record_adapter $record, $name, MediaInterface $media) { $newfilename = $record->get_record_id() . '_0_' . $name . '.' . $media->getFile()->getExtension(); $subdef_def = false; if ($name == 'document') { $baseprefs = $record->get_databox()->get_sxml_structure(); $pathhd = \p4string::addEndSlash((string) $baseprefs->path); $filehd = $record->get_record_id() . "_document." . strtolower($media->getFile()->getExtension()); $pathhd = \databox::dispatch($this->fs, $pathhd); $this->fs->copy($media->getFile()->getRealPath(), $pathhd . $filehd, true); $subdefFile = $pathhd . $filehd; $meta_writable = true; } else { $type = $record->isStory() ? 'image' : $record->get_type(); $subdef_def = $record->get_databox()->get_subdef_structure()->get_subdef($type, $name); if ($record->has_subdef($name) && $record->get_subdef($name)->is_physically_present()) { $path_file_dest = $record->get_subdef($name)->get_pathfile(); $record->get_subdef($name)->remove_file(); $record->clearSubdefCache($name); } else { $path = \databox::dispatch($this->fs, $subdef_def->get_path()); $this->fs->mkdir($path, 0750); $path_file_dest = $path . $newfilename; } try { $this->alchemyst->turnInto($media->getFile()->getRealPath(), $path_file_dest, $subdef_def->getSpecs()); } catch (MediaAlchemystException $e) { return; } $subdefFile = $path_file_dest; $meta_writable = $subdef_def->meta_writeable(); } $this->fs->chmod($subdefFile, 0760); $media = $this->mediavorus->guess($subdefFile); \media_subdef::create($this->app, $record, $name, $media); $record->delete_data_from_cache(\record_adapter::CACHE_SUBDEFS); if ($meta_writable) { $record->write_metas(); } if ($name == 'document') { $record->rebuild_subdefs(); } $this->dispatcher->dispatch(RecordEvents::MEDIA_SUBSTITUTED, new RecordMediaSubstitutedEvent($record)); }
private function logView(\record_adapter $record, Request $request) { try { $logger = $this->getDataboxLogger($record->get_databox()); $log_id = $logger->get_id(); $record->log_view($log_id, $request->headers->get('referer', 'NO REFERRER'), $this->app['phraseanet.configuration']['main']['key']); } catch (\Exception $e) { // Ignore exception } }
public function deliverContent(Request $request, \record_adapter $record, $subdef, $watermark, $stamp, Application $app) { $file = $record->get_subdef($subdef); $pathOut = $file->get_pathfile(); if ($watermark === true && $file->get_type() === \media_subdef::TYPE_IMAGE) { $pathOut = \recordutils_image::watermark($app, $file); } elseif ($stamp === true && $file->get_type() === \media_subdef::TYPE_IMAGE) { $pathOut = \recordutils_image::stamp($app, $file); } $log_id = null; try { $logger = $app['phraseanet.logger']($record->get_databox()); $log_id = $logger->get_id(); $referrer = 'NO REFERRER'; if (isset($_SERVER['HTTP_REFERER'])) { $referrer = $_SERVER['HTTP_REFERER']; } $record->log_view($log_id, $referrer, $app['conf']->get(['main', 'key'])); } catch (\Exception $e) { } $disposition = $request->query->get('download') ? DeliverDataInterface::DISPOSITION_ATTACHMENT : DeliverDataInterface::DISPOSITION_INLINE; $response = $app['phraseanet.file-serve']->deliverFile($pathOut, $file->get_file(), $disposition, $file->get_mime()); $response->setPrivate(); /* @var $response \Symfony\Component\HttpFoundation\Response */ if ($file->getEtag()) { $response->setEtag($file->getEtag()); $response->setLastModified($file->get_modification_date()); } if (false === $record->is_grouping() && $subdef !== 'document') { try { if ($file->getDataboxSubdef()->get_class() == \databox_subdef::CLASS_THUMBNAIL) { // default expiration is 5 days $expiration = 60 * 60 * 24 * 5; $response->setExpires(new \DateTime(sprintf('+%d seconds', $expiration))); $response->setMaxAge($expiration); $response->setSharedMaxAge($expiration); $response->setPublic(); } } catch (\Exception $e) { } } $response->isNotModified($request); return $response; }
/** * * @param int $angle * @param Alchemyst $alchemyst * @param MediaVorus $mediavorus * * @return media_subdef */ public function rotate($angle, Alchemyst $alchemyst, MediaVorus $mediavorus) { if (!$this->is_physically_present()) { throw new \Alchemy\Phrasea\Exception\RuntimeException('You can not rotate a substitution'); } $specs = new \MediaAlchemyst\Specification\Image(); $specs->setRotationAngle($angle); try { $alchemyst->turnInto($this->get_pathfile(), $this->get_pathfile(), $specs); } catch (\MediaAlchemyst\Exception\ExceptionInterface $e) { return $this; } $media = $mediavorus->guess($this->get_pathfile()); $sql = "UPDATE subdef\n SET height = :height , width = :width, updated_on = NOW()\n WHERE record_id = :record_id AND name = :name"; $params = [':width' => $media->getWidth(), ':height' => $media->getHeight(), ':record_id' => $this->get_record_id(), ':name' => $this->get_name()]; $stmt = $this->record->get_databox()->get_connection()->prepare($sql); $stmt->execute($params); $stmt->closeCursor(); $this->width = $media->getWidth(); $this->height = $media->getHeight(); $this->delete_data_from_cache(); unset($media); 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; }
private function createQueryParams($query, SearchEngineOptions $options, \record_adapter $record = null) { $params = ['index' => $this->indexName, 'type' => 'record', 'body' => ['fields' => ['databox_id', 'record_id'], 'sort' => $this->createSortQueryParams($options)]]; $ESquery = $this->createESQuery($query, $options); $filters = $this->createFilters($options); if ($record) { $filters[] = ['term' => ['_id' => sprintf('%s-%s', $record->get_sbas_id(), $record->get_record_id())]]; $fields = []; foreach ($record->get_databox()->get_meta_structure() as $dbField) { $fields['caption.' . $dbField->get_name()] = new \stdClass(); } $params['body']['highlight'] = ["pre_tags" => ["[[em]]"], "post_tags" => ["[[/em]]"], "fields" => $fields]; } if (count($filters) > 0) { $ESquery = ['filtered' => ['query' => $ESquery, 'filter' => ['and' => $filters]]]; } $params['body']['query'] = $ESquery; return $params; }
protected function editRecord($string2add, \record_adapter &$record, $indexable = true, $business = false) { $toupdate = []; $field = null; foreach ($record->get_databox()->get_meta_structure()->get_elements() as $field) { if ($indexable !== $field->is_indexable() || $field->isBusiness() !== $business) { continue; } try { $values = $record->get_caption()->get_field($field->get_name())->get_values(); $value = array_pop($values); $meta_id = $value->getId(); } catch (\Exception $e) { $meta_id = null; } $toupdate[$field->get_id()] = ['meta_id' => $meta_id, 'meta_struct_id' => $field->get_id(), 'value' => $string2add]; break; } $record->set_metadatas($toupdate); return $field; }
public function connect(Application $app) { $app['controller.prod.story'] = $this; $controllers = $app['controllers_factory']; $app['firewall']->addMandatoryAuthentication($controllers); $controllers->get('/create/', function (Application $app) { return $app['twig']->render('prod/Story/Create.html.twig', []); })->bind('prod_stories_create'); $controllers->post('/', function (Application $app, Request $request) { /* @var $request \Symfony\Component\HttpFoundation\Request */ $collection = \collection::get_from_base_id($app, $request->request->get('base_id')); if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_base($collection->get_base_id(), 'canaddrecord')) { throw new AccessDeniedHttpException('You can not create a story on this collection'); } $Story = \record_adapter::createStory($app, $collection); $records = RecordsRequest::fromRequest($app, $request, true); foreach ($records as $record) { if ($Story->hasChild($record)) { continue; } $Story->appendChild($record); } $metadatas = []; foreach ($collection->get_databox()->get_meta_structure() as $meta) { if ($meta->get_thumbtitle()) { $value = $request->request->get('name'); } else { continue; } $metadatas[] = ['meta_struct_id' => $meta->get_id(), 'meta_id' => null, 'value' => $value]; break; } $Story->set_metadatas($metadatas)->rebuild_subdefs(); $StoryWZ = new StoryWZ(); $StoryWZ->setUser($app['authentication']->getUser()); $StoryWZ->setRecord($Story); $app['EM']->persist($StoryWZ); $app['EM']->flush(); if ($request->getRequestFormat() == 'json') { $data = ['success' => true, 'message' => $app->trans('Story created'), 'WorkZone' => $StoryWZ->getId(), 'story' => ['sbas_id' => $Story->get_sbas_id(), 'record_id' => $Story->get_record_id()]]; return $app->json($data); } else { return $app->redirectPath('prod_stories_story', ['sbas_id' => $StoryWZ->getSbasId(), 'record_id' => $StoryWZ->getRecordId()]); } })->bind('prod_stories_do_create'); $controllers->get('/{sbas_id}/{record_id}/', function (Application $app, $sbas_id, $record_id) { $Story = new \record_adapter($app, $sbas_id, $record_id); $html = $app['twig']->render('prod/WorkZone/Story.html.twig', ['Story' => $Story]); return new Response($html); })->bind('prod_stories_story')->assert('sbas_id', '\\d+')->assert('record_id', '\\d+'); $controllers->post('/{sbas_id}/{record_id}/addElements/', function (Application $app, Request $request, $sbas_id, $record_id) { $Story = new \record_adapter($app, $sbas_id, $record_id); if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_base($Story->get_base_id(), 'canmodifrecord')) { throw new AccessDeniedHttpException('You can not add document to this Story'); } $n = 0; $records = RecordsRequest::fromRequest($app, $request, true); foreach ($records as $record) { if ($Story->hasChild($record)) { continue; } $Story->appendChild($record); $n++; } $data = ['success' => true, 'message' => $app->trans('%quantity% records added', ['%quantity%' => $n])]; if ($request->getRequestFormat() == 'json') { return $app->json($data); } else { return $app->redirectPath('prod_stories_story', ['sbas_id' => $sbas_id, 'record_id' => $record_id]); } })->assert('sbas_id', '\\d+')->assert('record_id', '\\d+'); $controllers->post('/{sbas_id}/{record_id}/delete/{child_sbas_id}/{child_record_id}/', function (Application $app, Request $request, $sbas_id, $record_id, $child_sbas_id, $child_record_id) { $Story = new \record_adapter($app, $sbas_id, $record_id); $record = new \record_adapter($app, $child_sbas_id, $child_record_id); if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_base($Story->get_base_id(), 'canmodifrecord')) { throw new AccessDeniedHttpException('You can not add document to this Story'); } $Story->removeChild($record); $data = ['success' => true, 'message' => $app->trans('Record removed from story')]; if ($request->getRequestFormat() == 'json') { return $app->json($data); } else { return $app->redirectPath('prod_stories_story', ['sbas_id' => $sbas_id, 'record_id' => $record_id]); } })->bind('prod_stories_story_remove_element')->assert('sbas_id', '\\d+')->assert('record_id', '\\d+')->assert('child_sbas_id', '\\d+')->assert('child_record_id', '\\d+'); /** * Get the Basket reorder form */ $controllers->get('/{sbas_id}/{record_id}/reorder/', function (Application $app, $sbas_id, $record_id) { $story = new \record_adapter($app, $sbas_id, $record_id); if (!$story->is_grouping()) { throw new \Exception('This is not a story'); } return new Response($app['twig']->render('prod/Story/Reorder.html.twig', ['story' => $story])); })->bind('prod_stories_story_reorder')->assert('sbas_id', '\\d+')->assert('record_id', '\\d+'); $controllers->post('/{sbas_id}/{record_id}/reorder/', function (Application $app, $sbas_id, $record_id) { $ret = ['success' => false, 'message' => $app->trans('An error occured')]; try { $story = new \record_adapter($app, $sbas_id, $record_id); if (!$story->is_grouping()) { throw new \Exception('This is not a story'); } if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_base($story->get_base_id(), 'canmodifrecord')) { throw new ControllerException($app->trans('You can not edit this story')); } $sql = 'UPDATE regroup SET ord = :ord WHERE rid_parent = :parent_id AND rid_child = :children_id'; $stmt = $story->get_databox()->get_connection()->prepare($sql); foreach ($app['request']->request->get('element') as $record_id => $ord) { $params = [':ord' => $ord, ':parent_id' => $story->get_record_id(), ':children_id' => $record_id]; $stmt->execute($params); } $stmt->closeCursor(); $ret = ['success' => true, 'message' => $app->trans('Story updated')]; } catch (ControllerException $e) { $ret = ['success' => false, 'message' => $e->getMessage()]; } catch (\Exception $e) { } return $app->json($ret); })->assert('sbas_id', '\\d+')->assert('record_id', '\\d+'); return $controllers; }
/** * {@inheritdoc} */ public function removeRecord(\record_adapter $record) { $connbas = $record->get_databox()->get_connection(); $sql = "DELETE FROM prop WHERE record_id = :record_id"; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $record->get_record_id()]); $stmt->closeCursor(); $sql = "DELETE FROM idx WHERE record_id = :record_id"; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $record->get_record_id()]); $stmt->closeCursor(); $sql = "DELETE FROM thit WHERE record_id = :record_id"; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $record->get_record_id()]); $stmt->closeCursor(); unset($stmt, $connbas); return $this; }
public static function create(Application $app, \record_adapter $record, $name, MediaInterface $media) { $databox = $record->get_databox(); $connbas = $databox->get_connection(); $path = $media->getFile()->getPath(); $newname = $media->getFile()->getFilename(); $params = [':path' => $path, ':file' => $newname, ':width' => 0, ':height' => 0, ':mime' => $media->getFile()->getMimeType(), ':size' => $media->getFile()->getSize(), ':dispatched' => 1]; if (method_exists($media, 'getWidth') && null !== $media->getWidth()) { $params[':width'] = $media->getWidth(); } if (method_exists($media, 'getHeight') && null !== $media->getHeight()) { $params[':height'] = $media->getHeight(); } try { $sql = 'SELECT subdef_id FROM subdef WHERE record_id = :record_id AND name = :name'; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $record->get_record_id(), ':name' => $name]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); if (!$row) { throw new \Exception_Media_SubdefNotFound('Require the real one'); } $sql = "UPDATE subdef\n SET path = :path, file = :file\n , width = :width , height = :height, mime = :mime\n , size = :size, dispatched = :dispatched, updated_on = NOW()\n WHERE subdef_id = :subdef_id"; $params[':subdef_id'] = $row['subdef_id']; } catch (\Exception_Media_SubdefNotFound $e) { $sql = "INSERT INTO subdef\n (record_id, name, path, file, width\n , height, mime, size, dispatched, created_on, updated_on)\n VALUES (:record_id, :name, :path, :file, :width, :height\n , :mime, :size, :dispatched, NOW(), NOW())"; $params[':record_id'] = $record->get_record_id(); $params[':name'] = $name; } $stmt = $connbas->prepare($sql); $stmt->execute($params); $stmt->closeCursor(); $subdef = new self($app, $record, $name); $subdef->delete_data_from_cache(); if ($subdef->get_permalink() instanceof media_Permalink_Adapter) { $subdef->get_permalink()->delete_data_from_cache(); } if ($name === 'thumbnail') { $app['phraseanet.thumb-symlinker']->symlink($subdef->get_pathfile()); } unset($media); return $subdef; }
/** * {@inheritdoc} */ public function removeRecord(\record_adapter $record) { if (!$this->rt_conn) { throw new RuntimeException('Unable to connect to sphinx real-time index'); } $CRCdatabox = $this->CRCdatabox($record->get_databox()); $indexes = ["metadatas" . $CRCdatabox, "metadatas" . $CRCdatabox . "_stemmed_en", "metadatas" . $CRCdatabox . "_stemmed_fr", "metadatas" . $CRCdatabox . "_stemmed_de", "metadatas" . $CRCdatabox . "_stemmed_nl"]; $RTindexes = ["metas_realtime" . $CRCdatabox, "metas_realtime_stemmed_fr_" . $CRCdatabox, "metas_realtime_stemmed_en_" . $CRCdatabox, "metas_realtime_stemmed_nl_" . $CRCdatabox, "metas_realtime_stemmed_de_" . $CRCdatabox]; foreach ($record->get_caption()->get_fields(null, true) as $field) { foreach ($field->get_values() as $value) { foreach ($indexes as $index) { $this->sphinx->UpdateAttributes($index, ["deleted"], [$value->getId() => [1]]); } foreach ($RTindexes as $index) { $this->rt_conn->exec("DELETE FROM " . $index . " WHERE id = " . $value->getId()); } } } $indexes = ["documents" . $CRCdatabox, "documents" . $CRCdatabox . "_stemmed_fr", "documents" . $CRCdatabox . "_stemmed_en", "documents" . $CRCdatabox . "_stemmed_de", "documents" . $CRCdatabox . "_stemmed_nl"]; $RTindexes = ["docs_realtime" . $CRCdatabox, "docs_realtime_stemmed_fr_" . $CRCdatabox, "docs_realtime_stemmed_en_" . $CRCdatabox, "docs_realtime_stemmed_nl_" . $CRCdatabox, "docs_realtime_stemmed_de_" . $CRCdatabox]; foreach ($indexes as $index) { $this->sphinx->UpdateAttributes($index, ["deleted"], [$record->get_record_id() => [1]]); } foreach ($RTindexes as $index) { $this->rt_conn->exec("DELETE FROM " . $index . " WHERE id = " . $record->get_record_id()); } return $this; }
/** * {@inheritdoc} */ public function excerpt($query, $fields, \record_adapter $record, SearchEngineOptions $options = null) { if (null === $options) { $options = new SearchEngineOptions(); } $this->applyOptions($options); $index = ''; // in this case search is done on metas if ($options->getFields() || $options->getBusinessFieldsOn()) { if ($options->isStemmed() && $options->getLocale()) { $index = 'metadatas' . $this->CRCdatabox($record->get_databox()) . '_stemmed_' . $options->getLocale(); } else { $index = 'metadatas' . $this->CRCdatabox($record->get_databox()); } } else { if ($options->isStemmed() && $options->getLocale()) { $index = 'documents' . $this->CRCdatabox($record->get_databox()) . '_stemmed_' . $options->getLocale(); } else { $index = 'documents' . $this->CRCdatabox($record->get_databox()); } } $opts = ['before_match' => "[[em]]", 'after_match' => "[[/em]]"]; $fields_to_send = []; foreach ($fields as $k => $f) { $fields_to_send[$k] = $f['value']; } return $this->sphinx->BuildExcerpts($fields_to_send, $index, $query, $opts); }
/** * Update the metadatas of a record * * @param \record_adapter $record * @param string $xml */ protected function updateMetadatas(\record_adapter $record, $xml) { $metas = $record->get_databox()->get_meta_structure(); $datas = $metadatas = []; if (false !== ($sxe = simplexml_load_string($xml))) { $fields = $sxe->xpath('/record/description'); if ($fields && is_array($fields)) { foreach ($fields[0] as $fieldname => $value) { $fieldname = trim($fieldname); $value = trim($value); if (null === ($databox_field = $metas->get_element_by_name($fieldname))) { continue; } if ($databox_field->is_multi()) { $new_value = \caption_field::get_multi_values($value, $databox_field->get_separator()); if (isset($datas[$databox_field->get_id()])) { $value = array_unique(array_merge($datas[$databox_field->get_id()], $new_value)); } else { $value = $new_value; } } else { $new_value = $value; if (isset($datas[$databox_field->get_id()])) { $value = $datas[$databox_field->get_id()] . ' ' . $new_value; } else { $value = $new_value; } } $datas[$databox_field->get_id()] = $value; } } } foreach ($datas as $meta_struct_id => $values) { if (is_array($values)) { foreach ($values as $value) { $metadatas[] = ['meta_struct_id' => $meta_struct_id, 'meta_id' => null, 'value' => $value]; } } else { $metadatas[] = ['meta_struct_id' => $meta_struct_id, 'meta_id' => null, 'value' => $values]; } } $record->set_metadatas($metadatas, true); }
protected function injectMetadatas(\record_adapter $record) { foreach ($record->get_databox()->get_meta_structure()->get_elements() as $field) { try { $values = $record->get_caption()->get_field($field->get_name())->get_values(); $value = array_pop($values); $meta_id = $value->getId(); } catch (\Exception $e) { $meta_id = null; } $toupdate[$field->get_id()] = ['meta_id' => $meta_id, 'meta_struct_id' => $field->get_id(), 'value' => 'podom pom pom ' . $field->get_id()]; } $record->set_metadatas($toupdate); }
public function reorderAction(Request $request, $sbas_id, $record_id) { try { $story = new \record_adapter($this->app, $sbas_id, $record_id); if (!$story->isStory()) { throw new \Exception('This is not a story'); } if (!$this->getAclForUser()->has_right_on_base($story->get_base_id(), 'canmodifrecord')) { throw new ControllerException($this->app->trans('You can not edit this story')); } $sql = 'UPDATE regroup SET ord = :ord WHERE rid_parent = :parent_id AND rid_child = :children_id'; $stmt = $story->get_databox()->get_connection()->prepare($sql); foreach ($request->request->get('element') as $record_id => $ord) { $params = [':ord' => $ord, ':parent_id' => $story->get_record_id(), ':children_id' => $record_id]; $stmt->execute($params); } $stmt->closeCursor(); $this->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($story)); $ret = ['success' => true, 'message' => $this->app->trans('Story updated')]; } catch (ControllerException $e) { $ret = ['success' => false, 'message' => $e->getMessage()]; } catch (\Exception $e) { $ret = ['success' => false, 'message' => $this->app->trans('An error occured')]; } return $this->app->json($ret); }