/** * Display Status property * * @param Application $app * @param Request $request * @return Response */ public function displayStatusProperty(Application $app, Request $request) { if (!$request->isXmlHttpRequest()) { $app->abort(400); } $records = RecordsRequest::fromRequest($app, $request, false, ['chgstatus']); $databoxStatus = \databox_status::getDisplayStatus($app); $statusBit = $nRec = []; foreach ($records as $record) { //perform logic $sbasId = $record->get_databox()->get_sbas_id(); if (!isset($nRec[$sbasId])) { $nRec[$sbasId] = ['stories' => 0, 'records' => 0]; } $nRec[$sbasId]['records']++; if ($record->is_grouping()) { $nRec[$sbasId]['stories']++; } if (!isset($statusBit[$sbasId])) { $statusBit[$sbasId] = isset($databoxStatus[$sbasId]) ? $databoxStatus[$sbasId] : []; foreach (array_keys($statusBit[$sbasId]) as $bit) { $statusBit[$sbasId][$bit]['nset'] = 0; } } $status = strrev($record->get_status()); foreach (array_keys($statusBit[$sbasId]) as $bit) { $statusBit[$sbasId][$bit]["nset"] += substr($status, $bit, 1) !== "0" ? 1 : 0; } } foreach ($records->databoxes() as $databox) { $sbasId = $databox->get_sbas_id(); foreach ($statusBit[$sbasId] as $bit => $values) { $statusBit[$sbasId][$bit]["status"] = $values["nset"] == 0 ? 0 : ($values["nset"] == $nRec[$sbasId]['records'] ? 1 : 2); } } return new Response($app['twig']->render('prod/actions/Property/index.html.twig', ['records' => $records, 'statusBit' => $statusBit, 'nRec' => $nRec])); }
/** * * @return string */ public function get_status_icons() { $dstatus = databox_status::getDisplayStatus($this->app); $sbas_id = $this->get_sbas_id(); $status = ''; if (isset($dstatus[$sbas_id])) { foreach ($dstatus[$sbas_id] as $n => $statbit) { if ($statbit['printable'] == '0' && !$this->app['acl']->get($this->app['authentication']->getUser())->has_right_on_base($this->base_id, 'chgstatus')) { continue; } $x = substr(strrev($this->get_status()), $n, 1); $source0 = "/skins/icons/spacer.gif"; $style0 = "visibility:hidden;display:none;"; $source1 = "/skins/icons/spacer.gif"; $style1 = "visibility:hidden;display:none;"; if ($statbit["img_on"]) { $source1 = $statbit["img_on"]; $style1 = "visibility:auto;display:none;"; } if ($statbit["img_off"]) { $source0 = $statbit["img_off"]; $style0 = "visibility:auto;display:none;"; } if ($x == '1') { if ($statbit["img_on"]) { $style1 = "visibility:auto;display:inline;"; } } else { if ($statbit["img_off"]) { $style0 = "visibility:auto;display:inline;"; } } $status .= '<img style="margin:1px;' . $style1 . '" ' . 'class="STAT_' . $this->base_id . '_' . $this->record_id . '_' . $n . '_1" ' . 'src="' . $source1 . '" title="' . $statbit['labels_on_i18n'][$this->app['locale']] . '"/>'; $status .= '<img style="margin:1px;' . $style0 . '" ' . 'class="STAT_' . $this->base_id . '_' . $this->record_id . '_' . $n . '_0" ' . 'src="' . $source0 . '" title="' . $statbit['labels_off_i18n'][$this->app['locale']] . '"/>'; } } return $status; }
public function connect(Application $app) { $app['controller.prod.edit'] = $this; $controllers = $app['controllers_factory']; $app['firewall']->addMandatoryAuthentication($controllers); $controllers->before(function (Request $request) use($app) { $app['firewall']->requireNotGuest()->requireRight('modifyrecord'); }); $controllers->post('/', function (Application $app, Request $request) { $records = RecordsRequest::fromRequest($app, $request, RecordsRequest::FLATTEN_YES_PRESERVE_STORIES, ['canmodifrecord']); $thesaurus = false; $status = $ids = $elements = $suggValues = $fields = $JSFields = []; $databox = null; $multipleDataboxes = count($records->databoxes()) > 1; if (1 === count($records->databoxes())) { $databoxes = $records->databoxes(); $databox = array_pop($databoxes); /** * generate javascript fields */ foreach ($databox->get_meta_structure() as $meta) { $fields[] = $meta; $separator = $meta->get_separator(); /** @Ignore */ $JSFields[$meta->get_id()] = ['meta_struct_id' => $meta->get_id(), 'name' => $meta->get_name(), '_status' => 0, '_value' => '', '_sgval' => [], 'required' => $meta->is_required(), 'label' => $meta->get_label($app['locale']), 'readonly' => $meta->is_readonly(), 'type' => $meta->get_type(), 'format' => '', 'explain' => '', 'tbranch' => $meta->get_tbranch(), 'maxLength' => $meta->get_tag()->getMaxLength(), 'minLength' => $meta->get_tag()->getMinLength(), 'multi' => $meta->is_multi(), 'separator' => $separator, 'vocabularyControl' => $meta->getVocabularyControl() ? $meta->getVocabularyControl()->getType() : null, 'vocabularyRestricted' => $meta->getVocabularyControl() ? $meta->isVocabularyRestricted() : false]; if (trim($meta->get_tbranch()) !== '') { $thesaurus = true; } } /** * generate javascript sugg values */ foreach ($records->collections() as $collection) { /* @var $record record_adapter */ $suggValues['b' . $collection->get_base_id()] = []; if ($sxe = simplexml_load_string($collection->get_prefs())) { $z = $sxe->xpath('/baseprefs/sugestedValues'); if (!$z || !is_array($z)) { continue; } foreach ($z[0] as $ki => $vi) { // les champs $field = $databox->get_meta_structure()->get_element_by_name($ki); if (!$field || !$vi) { continue; } $suggValues['b' . $collection->get_base_id()][$field->get_id()] = []; foreach ($vi->value as $oneValue) { $suggValues['b' . $collection->get_base_id()][$field->get_id()][] = (string) $oneValue; } } } unset($collection); } /** * generate javascript status */ if ($app['acl']->get($app['authentication']->getUser())->has_right('changestatus')) { $dbstatus = \databox_status::getDisplayStatus($app); if (isset($dbstatus[$databox->get_sbas_id()])) { foreach ($dbstatus[$databox->get_sbas_id()] as $n => $statbit) { $status[$n] = []; $status[$n]['label0'] = $statbit['labels_off_i18n'][$app['locale']]; $status[$n]['label1'] = $statbit['labels_on_i18n'][$app['locale']]; $status[$n]['img_off'] = $statbit['img_off']; $status[$n]['img_on'] = $statbit['img_on']; $status[$n]['_value'] = 0; } } } /** * generate javascript elements */ foreach ($databox->get_meta_structure() as $field) { $databox_fields[$field->get_id()] = ['dirty' => false, 'meta_struct_id' => $field->get_id(), 'values' => []]; } foreach ($records as $record) { $indice = $record->get_number(); $elements[$indice] = ['bid' => $record->get_base_id(), 'rid' => $record->get_record_id(), 'sselcont_id' => null, '_selected' => false, 'fields' => $databox_fields]; $elements[$indice]['statbits'] = []; if ($app['acl']->get($app['authentication']->getUser())->has_right_on_base($record->get_base_id(), 'chgstatus')) { foreach ($status as $n => $s) { $tmp_val = substr(strrev($record->get_status()), $n, 1); $elements[$indice]['statbits'][$n]['value'] = $tmp_val == '1' ? '1' : '0'; $elements[$indice]['statbits'][$n]['dirty'] = false; } } $elements[$indice]['originalname'] = $record->get_original_name(); foreach ($record->get_caption()->get_fields(null, true) as $field) { $meta_struct_id = $field->get_meta_struct_id(); if (!isset($JSFields[$meta_struct_id])) { continue; } $values = []; foreach ($field->get_values() as $value) { $type = $id = null; if ($value->getVocabularyType()) { $type = $value->getVocabularyType()->getType(); $id = $value->getVocabularyId(); } $values[$value->getId()] = ['meta_id' => $value->getId(), 'value' => $value->getValue(), 'vocabularyId' => $id, 'vocabularyType' => $type]; } $elements[$indice]['fields'][$meta_struct_id] = ['dirty' => false, 'meta_struct_id' => $meta_struct_id, 'values' => $values]; } $elements[$indice]['subdefs'] = []; $thumbnail = $record->get_thumbnail(); $elements[$indice]['subdefs']['thumbnail'] = ['url' => $thumbnail->get_url(), 'w' => $thumbnail->get_width(), 'h' => $thumbnail->get_height()]; $elements[$indice]['preview'] = $app['twig']->render('common/preview.html.twig', ['record' => $record]); $elements[$indice]['type'] = $record->get_type(); } } $params = ['multipleDataboxes' => $multipleDataboxes, 'recordsRequest' => $records, 'databox' => $databox, 'JSonStatus' => json_encode($status), 'JSonRecords' => json_encode($elements), 'JSonFields' => json_encode($JSFields), 'JSonIds' => json_encode(array_keys($elements)), 'status' => $status, 'fields' => $fields, 'JSonSuggValues' => json_encode($suggValues), 'thesaurus' => $thesaurus]; return $app['twig']->render('prod/actions/edit_default.html.twig', $params); }); $controllers->get('/vocabulary/{vocabulary}/', function (Application $app, Request $request, $vocabulary) { $datas = ['success' => false, 'message' => '', 'results' => []]; $sbas_id = (int) $request->query->get('sbas_id'); try { if ($sbas_id === 0) { throw new \Exception('Invalid sbas_id'); } $VC = VocabularyController::get($app, $vocabulary); $databox = $app['phraseanet.appbox']->get_databox($sbas_id); } catch (\Exception $e) { $datas['message'] = $app->trans('Vocabulary not found'); return $app->json($datas); } $query = $request->query->get('query'); $results = $VC->find($query, $app['authentication']->getUser(), $databox); $list = []; foreach ($results as $Term) { /* @var $Term \Alchemy\Phrasea\Vocabulary\Term */ $list[] = ['id' => $Term->getId(), 'context' => $Term->getContext(), 'value' => $Term->getValue()]; } $datas['success'] = true; $datas['results'] = $list; return $app->json($datas); }); $controllers->post('/apply/', function (Application $app, Request $request) { $records = RecordsRequest::fromRequest($app, $request, RecordsRequest::FLATTEN_YES_PRESERVE_STORIES, ['canmodifrecord']); if (count($records->databoxes()) !== 1) { throw new \Exception('Unable to edit on multiple databoxes'); } if ($request->request->get('act_option') == 'SAVEGRP' && $request->request->get('newrepresent') && $records->isSingleStory()) { try { $reg_record = $records->singleStory(); $newsubdef_reg = new \record_adapter($app, $reg_record->get_sbas_id(), $request->request->get('newrepresent')); if ($newsubdef_reg->get_type() !== 'image') { throw new \Exception('A reg image must come from image data'); } foreach ($newsubdef_reg->get_subdefs() as $name => $value) { if (!in_array($name, ['thumbnail', 'preview'])) { continue; } $media = $app['mediavorus']->guess($value->get_pathfile()); $app['subdef.substituer']->substitute($reg_record, $name, $media); $app['phraseanet.logger']($reg_record->get_databox())->log($reg_record, \Session_Logger::EVENT_SUBSTITUTE, $name == 'document' ? 'HD' : $name, ''); } } catch (\Exception $e) { } } if (!is_array($request->request->get('mds'))) { return $app->json(['message' => '', 'error' => false]); } $databoxes = $records->databoxes(); $databox = array_pop($databoxes); $meta_struct = $databox->get_meta_structure(); $write_edit_el = false; $date_obj = new \DateTime(); foreach ($meta_struct->get_elements() as $meta_struct_el) { if ($meta_struct_el->get_tag() instanceof TfEditdate) { $write_edit_el = $meta_struct_el; } } $elements = $records->toArray(); foreach ($request->request->get('mds') as $rec) { try { $record = $databox->get_record($rec['record_id']); } catch (\Exception $e) { continue; } $key = $record->get_serialize_key(); if (!array_key_exists($key, $elements)) { continue; } $statbits = $rec['status']; $editDirty = $rec['edit']; if ($editDirty == '0') { $editDirty = false; } else { $editDirty = true; } if (is_array($rec['metadatas'])) { $record->set_metadatas($rec['metadatas']); } /** * todo : this should not work */ if ($write_edit_el instanceof \databox_field) { $fields = $record->get_caption()->get_fields([$write_edit_el->get_name()], true); $field = array_pop($fields); $meta_id = null; if ($field && !$field->is_multi()) { $values = $field->get_values(); $meta_id = array_pop($values)->getId(); } $metas = [['meta_struct_id' => $write_edit_el->get_id(), 'meta_id' => $meta_id, 'value' => $date_obj->format('Y-m-d h:i:s')]]; $record->set_metadatas($metas, true); } $newstat = $record->get_status(); $statbits = ltrim($statbits, 'x'); if (!in_array($statbits, ['', 'null'])) { $mask_and = ltrim(str_replace(['x', '0', '1', 'z'], ['1', 'z', '0', '1'], $statbits), '0'); if ($mask_and != '') { $newstat = \databox_status::operation_and_not($app, $newstat, $mask_and); } $mask_or = ltrim(str_replace('x', '0', $statbits), '0'); if ($mask_or != '') { $newstat = \databox_status::operation_or($app, $newstat, $mask_or); } $record->set_binary_status($newstat); } $record->write_metas()->get_collection()->reset_stamp($record->get_record_id()); if ($statbits != '') { $app['phraseanet.logger']($record->get_databox())->log($record, \Session_Logger::EVENT_STATUS, '', ''); } if ($editDirty) { $app['phraseanet.logger']($record->get_databox())->log($record, \Session_Logger::EVENT_EDIT, '', ''); } } return $app->json(['success' => true]); }); return $controllers; }