Example #1
0
 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
     }
 }
Example #5
0
 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;
 }
Example #6
0
 /**
  *
  * @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;
 }
Example #7
0
 /**
  * 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;
 }
Example #10
0
 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;
 }
Example #11
0
 /**
  * {@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;
 }
Example #12
0
 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;
 }
Example #13
0
 /**
  * {@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);
 }
Example #15
0
 /**
  * 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);
 }
Example #16
0
 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);
 }
Example #17
0
 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);
 }