Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions Controller/CategoryController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

use Stfalcon\Bundle\PortfolioBundle\Entity\Project;
use Stfalcon\Bundle\PortfolioBundle\Entity\Category;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

/**
* Category Controller
Expand All @@ -19,10 +20,13 @@ class CategoryController extends Controller
/**
* View category
*
* @param Category $category Category object
* @param int $page Page number
* @param string $slug Category slug
* @param int $page Page number
*
* @return array
*
* @throws NotFoundHttpException
*
* @Route(
* "/portfolio/{slug}/{page}",
* name="portfolio_category_view",
Expand All @@ -31,10 +35,15 @@ class CategoryController extends Controller
* )
* @Template()
*/
public function viewAction(Category $category, $page = 1)
public function viewAction($slug, $page)
{
$query = $this->get('doctrine.orm.entity_manager')
->getRepository("StfalconPortfolioBundle:Project")
$category = $this->get('stfalcon_portfolio.category.repository')->findOneBy(array('slug' => $slug));

if (!$category) {
throw new NotFoundHttpException('Category not found');
}

$query = $this->get('stfalcon_portfolio.project.repository')
->getQueryForSelectProjectsByCategory($category);

$paginator = $this->get('knp_paginator')->paginate($query, $page, 6);
Expand Down Expand Up @@ -63,8 +72,7 @@ public function viewAction(Category $category, $page = 1)
public function servicesAction(Category $category, $project = null)
{
// @todo помоему этот блок отключен
$categories = $this->get('doctrine.orm.entity_manager')
->getRepository("StfalconPortfolioBundle:Category")->getAllCategories();
$categories = $this->get('stfalcon_portfolio.category.repository')->findAll();

return array('categories' => $categories, 'currentProject' => $project, 'currentCategory' => $category);
}
Expand All @@ -80,10 +88,11 @@ public function orderProjects()
{
// @todo переименовать метод и роут
// @todo перенести сортировку проектов в админку
$em = $this->getDoctrine()->getManager();
$projects = $this->getRequest()->get('projects');
$em = $this->get('doctrine')->getEntityManager();
$projectManager = $this->get('stfalcon_portfolio.project.repository');
foreach ($projects as $projectInfo) {
$project = $em->getRepository("StfalconPortfolioBundle:Project")->find($projectInfo['id']);
$project = $projectManager->find($projectInfo['id']);
$project->setOrdernum($projectInfo['index']);
$em->persist($project);
}
Expand Down
73 changes: 23 additions & 50 deletions Controller/ProjectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ class ProjectController extends Controller
* @param string $projectSlug Slug of project
*
* @return array
*
* @throws NotFoundHttpException
*
* @Route("/portfolio/{categorySlug}/{projectSlug}", name="portfolio_project_view")
* @Template()
*/
Expand All @@ -30,10 +33,15 @@ public function viewAction($categorySlug, $projectSlug)
// @todo упростить когда что-то разрулят с этим PR https://github.com/sensio/SensioFrameworkExtraBundle/pull/42

// try find category by slug
$category = $this->_findCategoryBySlug($categorySlug);

$category = $this->get('stfalcon_portfolio.category.repository')->findOneBy(array('slug' => $categorySlug));
if (!$category) {
throw new NotFoundHttpException('Category not found');
}
// try find project by slug
$project = $this->_findProjectBySlug($projectSlug);
$project = $this->get('stfalcon_portfolio.project.repository')->findOneBy(array('slug' => $projectSlug));
if (!$project) {
throw new NotFoundHttpException('Project not found');
}

if ($this->has('application_default.menu.breadcrumbs')) {
$breadcrumbs = $this->get('application_default.menu.breadcrumbs');
Expand All @@ -57,21 +65,26 @@ public function viewAction($categorySlug, $projectSlug)
* @param string $projectSlug Object of project
*
* @return array
*
* @throws NotFoundHttpException
*
* @Template()
*/
public function nearbyProjectsAction($categorySlug, $projectSlug)
{
// try find category by slug
$category = $this->_findCategoryBySlug($categorySlug);
$category = $this->get('stfalcon_portfolio.category.repository')->findOneBy(array('slug' => $categorySlug));

if (!$category) {
throw new NotFoundHttpException('Category not found');
}
// try find project by slug
$project = $this->_findProjectBySlug($projectSlug);

$em = $this->get('doctrine')->getEntityManager();
$project = $this->get('stfalcon_portfolio.project.repository')->findOneBy(array('slug' => $projectSlug));

if (!$project) {
throw new NotFoundHttpException('Project not found');
}
// get all projects from this category
$projects = $em->getRepository("StfalconPortfolioBundle:Project")
->getProjectsByCategory($category);
$projects = $this->get('stfalcon_portfolio.project.repository')->findProjectsByCategory($category);

// get next and previous projects from this category
$i = 0; $previousProject = null; $nextProject = null;
Expand All @@ -86,44 +99,4 @@ public function nearbyProjectsAction($categorySlug, $projectSlug)

return array('category' => $category, 'previousProject' => $previousProject, 'nextProject' => $nextProject);
}

/**
* Try find category by slug
*
* @param string $slug Slug of category
*
* @return Category
*/
private function _findCategoryBySlug($slug)
{
$em = $this->get('doctrine')->getEntityManager();
$category = $em->getRepository("StfalconPortfolioBundle:Category")
->findOneBy(array('slug' => $slug));

if (!$category) {
throw new NotFoundHttpException('The category does not exist.');
}

return $category;
}

/**
* Try find project by slug
*
* @param string $slug Slug of project
*
* @return Project
*/
private function _findProjectBySlug($slug)
{
$em = $this->get('doctrine')->getEntityManager();
$project = $em->getRepository("StfalconPortfolioBundle:Project")
->findOneBy(array('slug' => $slug));

if (!$project) {
throw new NotFoundHttpException('The project does not exist.');
}

return $project;
}
}
39 changes: 33 additions & 6 deletions DependencyInjection/StfalconPortfolioExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\FileLocator;

/**
Expand All @@ -25,15 +26,41 @@ class StfalconPortfolioExtension extends Extension
*/
public function load(array $configs, ContainerBuilder $container)
{
$config = array();
foreach ($configs as $c) {
$config = array_merge($config, $c);
}
$config = $configs[0];


$container->setParameter('stfalcon_portfolio.config', $config);

$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.xml');
$loader->load('orm.xml');

if (isset($config['project']['entity'])) {
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так само тут. без цього ніяк?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это сделано для того чтоб можно было переопределить менеджер, сущность и админ классы

$container->setParameter('stfalcon_portfolio.project.entity', $config['project']['entity']);
}
if (isset($config['category']['entity'])) {
$container->setParameter('stfalcon_portfolio.category.entity', $config['category']['entity']);
}

if (isset($config['project']['repository'])) {
$container->setParameter('stfalcon_portfolio.project.repository', $config['project']['repository']);
}
if (isset($config['category']['repository'])) {
$container->setParameter('stfalcon_portfolio.category.repository', $config['category']['repository']);
}

$loader->load('admin.xml');

if (isset($config['category']['admin']['class'])) {
$container->setParameter('stfalcon_portfolio.category.admin.class', $config['category']['admin']['class']);
}
if (isset($config['category']['admin']['controller'])) {
$container->setParameter('stfalcon_portfolio.category.admin.controller', $config['category']['admin']['controller']);
}
if (isset($config['project']['admin']['class'])) {
$container->setParameter('stfalcon_portfolio.project.admin.class', $config['project']['admin']['class']);
}
if (isset($config['project']['admin']['controller'])) {
$container->setParameter('stfalcon_portfolio.project.admin.controller', $config['project']['admin']['controller']);
}
}

}
158 changes: 158 additions & 0 deletions Entity/BaseCategory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
<?php

namespace Stfalcon\Bundle\PortfolioBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
* Category entity. It groups projects in portfolio
*
* @ORM\MappedSuperclass
*/
class BaseCategory
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var string $name
*
* @Assert\NotBlank()
* @Assert\MinLength(3)
* @ORM\Column(name="name", type="string", length=255)
*/
protected $name = '';

/**
* @var string $slug
*
* @Assert\NotBlank()
* @Assert\MinLength(3)
* @ORM\Column(name="slug", type="string", length=128, unique=true)
*/
protected $slug;

/**
* @var string $description
*
* @Assert\NotBlank()
* @Assert\MinLength(10)
* @ORM\Column(name="description", type="text")
*/
protected $description;

/**
* @var ArrayCollection
*/
protected $projects;

/**
* @return mixed
*/
public function getId()
{
return $this->id;
}

/**
* Set category name
*
* @param string $name Text for category name
*
* @return void
*/
public function setName($name)
{
$this->name = $name;
}

/**
* Get category name
*
* @return string
*/
public function getName()
{
return $this->name;
}

/**
* Set category slug
*
* @param string $slug Unique text identifier
*
* @return void
*/
public function setSlug($slug)
{
$this->slug = $slug;
}

/**
* Get category slug
*
* @return string
*/
public function getSlug()
{
return $this->slug;
}

/**
* Set category description
*
* @param string $description Text for category description
*
* @return void
*/
public function setDescription($description)
{
$this->description = $description;
}

/**
* Get category description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}

/**
* Get category projects
*
* @return ArrayCollection
*/
public function getProjects()
{
return $this->projects;
}

/**
* Set projects
*
* @param ArrayCollection $projects Array collection of projects
*/
public function setProjects($projects)
{
$this->projects = $projects;
}

/**
* This method allows a class to decide how it will react when it is treated like a string
*
* @return string
*/
public function __toString()
{
return $this->getName();
}
}
Loading