<?php
/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Enterprise License (PEL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PEL
*/
namespace App\Controller;
use App\Website\LinkGenerator\ResourcesLinkGenerator;
use App\Website\Navigation\BreadcrumbHelperService;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Model\DataObject\Resources;
use Pimcore\Model\DataObject\ResourcesTags;
use Pimcore\Twig\Extension\Templating\HeadTitle;
use Pimcore\Twig\Extension\Templating\Placeholder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Pimcore\Db;
use Pimcore\Model\Document;
class ResourceController extends BaseController
{
const RESOURCE_DEFAULT_DOCUMENT_PROPERTY_NAME = 'resource_default_document';
public function webinarsListingAction(Request $request, \Pimcore\Config\Config $websiteConfig)
{
$listing = new \Pimcore\Model\Document\Listing();
$listing->setCondition("parentId = ". $websiteConfig->get('webinars_parent_page_id'));
return $this->render('resources/webinars_listing.html.twig', [
'items' => $listing->load(),
'webinarsTags' => $this->getTagsList(),
'promoAd' => $this->promoAd()
]);
}
/**
* @Route("resources", name="resources-listing")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param Placeholder $placeholderHelper
* @param ResourcesLinkGenerator $resourcesLinkGenerator
* @param BreadcrumbHelperService $breadcrumbHelperService
*
* @return Response
*/
public function resourceListingAction(Request $request, PaginatorInterface $paginator)
{
// get a list of resourcesentry objects and order them by date
$resourceEntry = new Resources\Listing();
$resourceEntry->setOrderKey('publishDate');
$resourceEntry->setOrder('DESC');
$paginator = $paginator->paginate(
$resourceEntry,
$request->get('page', 1),
6
);
//
return $this->render('resources/listing.html.twig', [
'resources' => $paginator,
'paginationVariables' => $paginator->getPaginationData(),
// 'categories' => $this->getCategoriesCount(),
// 'tags' => $this->getTags(),
'promoAd' => $this->promoAd()
]);
}
/**
* @Route("resources/{resourcetitle}~{resource}", name="resource-detail")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param Placeholder $placeholderHelper
* @param resourcesLinkGenerator $resourcesLinkGenerator
* @param BreadcrumbHelperService $breadcrumbHelperService
*
* @return Response
*/
public function detailAction(Request $request, HeadTitle $headTitleHelper, Placeholder $placeholderHelper, resourcesLinkGenerator $resourcesLinkGenerator, BreadcrumbHelperService $breadcrumbHelperService)
{
$resourcess = new Resources\Listing();
$resourcess->setCondition("o_key = '" . $request->get('resources') . "'");
$post = $resourcess->load();
if (count($post)) {
// get post 0 index
$resources = $post[0];
if (!($resources instanceof Resources)) {
throw new NotFoundHttpException('resources post not found');
}
$headTitleHelper($resources->getTitle());
// $breadcrumbHelperService->enrichresourcesPage($resources);
$placeholderHelper('canonical')->set($resourcesLinkGenerator->generate($resources, ['document' => $this->document->getProperty(self::RESOURCE_DEFAULT_DOCUMENT_PROPERTY_NAME)]));
return $this->render('resources/detail.html.twig', [
'resources' => $resources,
// 'categories' => $this->getCategoriesList(),
// 'featuredPosts' => $this->getFeaturedPost(),
// 'categories' => $this->getCategoriesCount(),
// 'tags' => $this->getTags(),
'promoAd' => $this->promoAd()
]);
} else {
throw new NotFoundHttpException('Resources not found.');
}
}
/**
* @Route("resources/tags/{tag}", name="resource-tag-listing")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param Placeholder $placeholderHelper
* @param resourcesLinkGenerator $resourcesLinkGenerator
* @param BreadcrumbHelperService $breadcrumbHelperService
*
* @return Response
*/
public function tagsListingAction(Request $request, HeadTitle $headTitleHelper, Placeholder $placeholderHelper, resourcesLinkGenerator $resourcesLinkGenerator, BreadcrumbHelperService $breadcrumbHelperService, PaginatorInterface $paginator)
{
// get a list of resourcesentry objects and order them by date
$resourceEntry = new Resources\Listing();
$resourceEntry->setCondition("tags like '%" . $request->get('tag') . "%'");
$resourceEntry->setOrderKey('publishDate');
$resourceEntry->setOrder('DESC');
$paginator = $paginator->paginate(
$resourceEntry,
$request->get('page', 1),
6
);
//
return $this->render('resources/listing.html.twig', [
'resources' => $paginator,
'paginationVariables' => $paginator->getPaginationData(),
// 'categories' => $this->getCategoriesCount(),
// 'tags' => $this->getTags(),
'promoAd' => $this->promoAd()
]);
}
/**
*@Route("resources/tag/{tag}~n{tagId}", name="resources-tag-detail")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param PaginatorInterface $paginator
* @param resourcesTagLinkGenerator $resourcesTagLinkGenerator
* @param BreadcrumbHelperService $breadcrumbHelperService
*
* @return Response
*/
public function resourcesTagAction(Request $request, HeadTitle $headTitleHelper, PaginatorInterface $paginator, BreadcrumbHelperService $breadcrumbHelperService)
{
$resourcess = new Resources\Listing();
$resourcess->setCondition("tags like '%" . $request->get('tagId') . "%'");
$resourcesEntry = $resourcess->load();
$paginator = $paginator->paginate(
$resourcesEntry,
$request->get('page', 1),
6
);
return $this->render('resource/listing.html.twig', [
'resourcess' => $paginator,
'paginationVariables' => $paginator->getPaginationData(),
// 'categories' => $this->getCategoriesList(),
// 'featuredPosts' => $this->getFeaturedPost(),
// 'tags' => $this->getTags(),
'promoAd' => $this->promoAd()
]);
}
public function singleWebinarsAction(Request $request)
{
// $tagList->setCondition("parentId = ?", (int) $request->get("node"));
return $this->render('resources/webinars_single.html.twig', [
// 'categories' => $this->getCategoriesList(),
// 'featuredPosts' => $this->getFeaturedPost(),
// 'categories' => $this->getCategoriesCount(),
'webinarsTags' => $this->getTagsList(),
'promoAd' => $this->promoAd()
]);
}
/**
*@Route("resources/webinars/tag/{tag}", name="resources-webinar-tag-detail")
*
* @param Request $request
*
* @return Response
*/
public function webinarsTagAction(Request $request)
{
$tagId = $request->get('tag');
$tag = \Pimcore\Model\Element\Tag::getById($tagId);
$listing = new \Pimcore\Model\Document\Listing();
$condition = '';
if ($tag) {
//get ID path of tag or filtering the child tags
$tagPath = $tag->getFullIdPath();
$condition = "id IN (
SELECT cId FROM tags_assignment INNER JOIN tags ON tags.id = tags_assignment.tagid
WHERE
ctype = 'document' AND
(id = " . (int) $tagId . " OR idPath LIKE " . $listing->quote(Db::get()->escapeLike($tagPath) . "%") . ")
)";
}
$listing->addConditionParam($condition);
// dd($listing->load());
// $tagList->setCondition("parentId = ?", (int) $request->get("node"));
return $this->render('resources/webinars_listing.html.twig', [
'items' => $listing->load(),
'webinarsTags' => $this->getTagsList(),
'promoAd' => $this->promoAd()
]);
}
public function getTagsList()
{
$tagList = new \Pimcore\Model\Element\Tag\Listing();
$tags = array();
foreach ($tagList->load() as $tag) {
if ('Webinars' == $tag->getName()) {
foreach ($tag->getChildren() as $item) {
$tags[$item->getId()] = $item->getName();
}
}
}
return $tags;
}
public function getTags()
{
return new ResourcesTags\Listing();
}
public function getCategoriesCount()
{
$db = Db::get();
$categories = $db->fetchAll("SELECT oo_id as id, postType, COUNT(*) as count FROM object_23 GROUP BY postType");
$obj = Resources::getById($categories[0]['id']);
$def = $obj->getClass()->getFieldDefinition("postType");
$options = $def->getOptions();
foreach ($categories as $key => $category) {
foreach ($options as $option) {
if ($category['postType'] == $option['value']) {
$categories[$key]['postTypeName'] = $option['key'];
}
}
}
return $categories;
}
public function promoAd()
{
$document = \Pimcore\Model\Document::getById(282);
if ($document) {
$promotitle = $document->getEditable('promotitle');
$promoadimage = $document->getEditable('promoadimage');
$promodescription = $document->getEditable('promodescription');
$promolink = $document->getEditable('promolink');
return ['promotitle' => $promotitle, 'promoadimage' => $promoadimage, 'promodescription' => $promodescription, 'promolink' => $promolink];
}
}
public function subFooterAction()
{
$resourceEntry = new Resources\Listing();
$resourceEntry->setLimit(3);
// $resourceEntry->setCondition("");
// $resourceEntry->setOrderKey('publishDate');
// $resourceEntry->setOrder('DESC');
return $this->render('includes/pages_sub_footer.html.twig', [
'entries' => $resourceEntry->load()
]);
}
}