/** * Returns an array of additional template variables which are specific to the object type treated by this repository. * * @param string $context Usage context (allowed values: controllerAction, api, actionHandler, block, contentType). * @param array $args Additional arguments. * * @return array List of template variables to be assigned. */ public function getAdditionalTemplateParameters($context = '', $args = array()) { if (!in_array($context, array('controllerAction', 'api', 'actionHandler', 'block', 'contentType'))) { $context = 'controllerAction'; } $templateParameters = array(); if ($context == 'controllerAction') { $serviceManager = ServiceUtil::getManager(); if (!isset($args['action'])) { $args['action'] = FormUtil::getPassedValue('func', 'main', 'GETPOST'); } if (in_array($args['action'], array('main', 'view'))) { $templateParameters = $this->getViewQuickNavParameters($context, $args); $listHelper = new MUVideo_Util_ListEntries(ServiceUtil::getManager()); $templateParameters['workflowStateItems'] = $listHelper->getEntries('movie', 'workflowState'); } // initialise Imagine preset instances $imageHelper = new MUVideo_Util_Image($serviceManager); $objectType = 'movie'; $templateParameters[$objectType . 'ThumbPresetUploadOfMovie'] = $imageHelper->getPreset($objectType, 'uploadOfMovie', $context, $args); $templateParameters[$objectType . 'ThumbPresetPoster'] = $imageHelper->getPreset($objectType, 'poster', $context, $args); if (in_array($args['action'], array('display', 'view'))) { // use separate preset for images in related items $templateParameters['relationThumbPreset'] = $imageHelper->getCustomPreset('', '', 'MUVideo_relateditem', $context, $args); } } // in the concrete child class you could do something like // $parameters = parent::getAdditionalTemplateParameters($context, $args); // $parameters['myvar'] = 'myvalue'; // return $parameters; return $templateParameters; }
/** * Searches for entities for auto completion usage. * * @param string $ot Treated object type. * @param string $fragment The fragment of the entered item name. * @param string $exclude Comma separated list with ids of other items (to be excluded from search). * * @return Zikula_Response_Ajax_Plain */ public function getItemListAutoCompletion() { if (!SecurityUtil::checkPermission($this->name . '::Ajax', '::', ACCESS_EDIT)) { return true; } $objectType = 'collection'; if ($this->request->isPost() && $this->request->request->has('ot')) { $objectType = $this->request->request->filter('ot', 'collection', FILTER_SANITIZE_STRING); } elseif ($this->request->isGet() && $this->request->query->has('ot')) { $objectType = $this->request->query->filter('ot', 'collection', FILTER_SANITIZE_STRING); } $controllerHelper = new MUVideo_Util_Controller($this->serviceManager); $utilArgs = array('controller' => 'ajax', 'action' => 'getItemListAutoCompletion'); if (!in_array($objectType, $controllerHelper->getObjectTypes('controllerAction', $utilArgs))) { $objectType = $controllerHelper->getDefaultObjectType('controllerAction', $utilArgs); } $entityClass = 'MUVideo_Entity_' . ucfirst($objectType); $repository = $this->entityManager->getRepository($entityClass); $idFields = ModUtil::apiFunc($this->name, 'selection', 'getIdFields', array('ot' => $objectType)); $fragment = ''; $exclude = ''; if ($this->request->isPost() && $this->request->request->has('fragment')) { $fragment = $this->request->request->get('fragment', ''); $exclude = $this->request->request->get('exclude', ''); } elseif ($this->request->isGet() && $this->request->query->has('fragment')) { $fragment = $this->request->query->get('fragment', ''); $exclude = $this->request->query->get('exclude', ''); } $exclude = !empty($exclude) ? array($exclude) : array(); // parameter for used sorting field $sort = $this->request->query->get('sort', ''); if (empty($sort) || !in_array($sort, $repository->getAllowedSortingFields())) { $sort = $repository->getDefaultSortingField(); } $sortParam = $sort . ' asc'; $currentPage = 1; $resultsPerPage = 20; // get objects from database list($entities, $objectCount) = $repository->selectSearch($fragment, $exclude, $sortParam, $currentPage, $resultsPerPage); $out = '<ul>'; if ((is_array($entities) || is_object($entities)) && count($entities) > 0) { $descriptionFieldName = $repository->getDescriptionFieldName(); $previewFieldName = $repository->getPreviewFieldName(); if (!empty($previewFieldName)) { $imageHelper = new MUVideo_Util_Image($this->serviceManager); $imagineManager = $imageHelper->getManager($objectType, $previewFieldName, 'controllerAction', $utilArgs); } foreach ($entities as $item) { // class="informal" --> show in dropdown, but do nots copy in the input field after selection $itemTitle = $item->getTitleFromDisplayPattern(); $itemTitleStripped = str_replace('"', '', $itemTitle); $itemDescription = isset($item[$descriptionFieldName]) && !empty($item[$descriptionFieldName]) ? $item[$descriptionFieldName] : ''; //$this->__('No description yet.'); $itemId = $item->createCompositeIdentifier(); $out .= '<li id="' . $itemId . '" title="' . $itemTitleStripped . '">'; $out .= '<div class="itemtitle">' . $itemTitle . '</div>'; if (!empty($itemDescription)) { $out .= '<div class="itemdesc informal">' . substr($itemDescription, 0, 50) . '…</div>'; } // check for preview image if (!empty($previewFieldName) && !empty($item[$previewFieldName]) && isset($item[$previewFieldName . 'FullPath'])) { $fullObjectId = $objectType . '-' . $itemId; $thumbImagePath = $imagineManager->getThumb($item[$previewFieldName], $fullObjectId); $preview = '<img src="' . $thumbImagePath . '" width="50" height="50" alt="' . $itemTitleStripped . '" />'; $out .= '<div id="itemPreview' . $itemId . '" class="itempreview informal">' . $preview . '</div>'; } $out .= '</li>'; } } $out .= '</ul>'; // return response return new Zikula_Response_Ajax_Plain($out); }