Initial symfony commit

This commit is contained in:
goo
2012-09-19 13:34:22 +10:00
parent 3128a6366b
commit fd1ab5f78e
81 changed files with 10309 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
<?php
namespace BodyRep;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class BodyRep extends Bundle
{
}

View File

@@ -0,0 +1,42 @@
<?php
namespace BodyRep\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use BodyRep\Form\ContactType;
class LandingController extends Controller
{
/**
* @Route("/", name="_landing")
* @Template()
*/
public function indexAction()
{
/*
* The action's view can be rendered using render() method
* or @Template annotation as demonstrated in DemoController.
*
*/
return $this->render('BodyRep:Landing:index.html.twig');
}
/**
* @Route("/about", name="_landing_about")
* @Template()
*/
public function aboutAction()
{
/*
* The action's view can be rendered using render() method
* or @Template annotation as demonstrated in DemoController.
*
*/
return $this->render('BodyRep:Landing:about.html.twig');
}
}

View File

@@ -0,0 +1,214 @@
<?php
namespace BodyRep\Controller;
use BodyRep\Form\Profile;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
# Annotations & templates
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use JMS\SecurityExtraBundle\Annotation\Secure;
class MemberController extends Controller
{
/**
* @Route("/login", name="_login")
* @Template()
*/
public function loginAction()
{
if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error,
);
}
/**
* @Route("/login_check", name="_security_check")
*/
public function securityCheckAction()
{
// The security layer will intercept this request
}
/**
* @Route("/logout", name="_logout")
*/
public function logoutAction()
{
// The security layer will intercept this request
}
/**
* @Route("/", name="_member")
* @Template()
*/
public function indexAction()
{
$username = $this->getUser()->getUsername();
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT m
FROM BodyRep:Member m
WHERE m.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$member = $query->getSingleResult();
return array('name' => $member->getFullName());
}
/**
* @Route("/profile/", name="_member_profile")
* @Template()
*/
public function profileAction()
{
$username = $this->getUser()->getUsername();
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT p
FROM BodyRep:Profile p
WHERE p.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$profile = $query->getSingleResult();
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT m
FROM BodyRep:Member m
WHERE m.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$member = $query->getSingleResult();
return (array('sFullName' => $profile->getFullName(), 'name' => $member->getFullName()));
}
/**
* @Route("/profile/edit", name="_member_profile_edit")
* @Template()
*/
public function editProfileAction()
{
$username = $this->getUser()->getUsername();
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT m
FROM BodyRep:Member m
WHERE m.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$member = $query->getSingleResult();
$form = $this->get('form.factory')->create(new Profile(), array('fullname' => $member->getFullName()));
$error = '';
return array('form' => $form->createView(), 'error' => '');
}
/**
* @Route("/profile/save", name="_member_profile_save")
*/
public function saveAction()
{
$username = $this->getUser()->getUsername();
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT m
FROM BodyRep:Member m
WHERE m.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$member = $query->getSingleResult();
$json = array('result' => 0);
$form = $this->get('form.factory')->create(new Profile());
$request = $this->get('request');
$form->bind($request);
if ($form->isValid())
{
$json['result'] = 1;
$d = $form->getClientData();
$member->setFullName($d['fullname']);
$db->persist($member);
$db->flush();
}
$resp = new Response (json_encode($json));
$resp->headers->set('Content-Type', 'text/plain');
return $resp;
}
/**
* @Route("/search/{param}", name="_member_search", defaults={"param" = 0})
* @Template()
*/
public function searchAction($param='')
{
/*
* Integreted suggester response
*
*/
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery("SELECT m FROM BodyRep:Member m WHERE m.fullname ILIKE '%$param%'");
$res = $query->getResult();
$resc = sizeof($res);
$sugg = array();
/*if ($res > 0)
{
foreach ($res as $member)
{
$text = preg_replace('/<br[^\>]*>/i', "\n", $member->getFullname());
$item['text'] = strip_tags($text);
$item['html'] = $text;
$item['data'] = array('username' => htmlspecialchars($member->getUsername()));
$sugg[] = $item;
}
}
if (!empty($param))
{
$json = array('result' => 1, 'suggestions' => $sugg);
$resp = new Response (json_encode($json));
$resp->headers->set('Content-Type', 'text/plain');
return $resp;
}
else*/
return array('search' => $res);
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace BodyRep\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\RedirectResponse;
use JMS\SecurityExtraBundle\Annotation\Secure;
# Annotations
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class ProfileController extends Controller
{
/**
* @Route("/{username}", name="_profile")
* @Template()
*/
public function indexAction($username)
{
if ($this->getUser()->getUsername() == $username)
return new RedirectResponse($this->generateUrl('_member_profile'));
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT p
FROM BodyRep:Profile p
WHERE p.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$profile = $query->getSingleResult();
$username = $this->getUser()->getUsername();
$db = $this->getDoctrine()->getManager();
$query = $db->createQuery('
SELECT m
FROM BodyRep:Member m
WHERE m.username = :username')
->setParameter('username', $username)
->setMaxResults(1);
if (sizeof($query->getResult()) != 1)
throw $this->createNotFoundException("User '".$username."' not found");
$member = $query->getSingleResult();
return (array('sFullName' => $profile->getFullName(), 'name' => $member->getFullName()));
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace BodyRep\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Config\FileLocator;
class BodyRepExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.xml');
}
public function getAlias()
{
return 'body_rep';
}
}

View File

@@ -0,0 +1,135 @@
<?php
namespace BodyRep\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Bodyrep\Entity\Member
*
* @ORM\Table(name="member")
* @ORM\Entity(repositoryClass="BodyRep\Entity\UserRepository")
*/
class Member implements UserInterface
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=25, unique=true)
*/
private $username;
/**
* @var string $fullname
*
* @ORM\Column(name="fullname", type="string")
*/
private $fullname;
/**
* @ORM\Column(type="string", length=32)
*/
private $salt;
/**
* @ORM\Column(type="string", length=40)
*/
private $password;
/**
* @ORM\Column(type="string", length=60, unique=true)
*/
private $email;
/**
* @ORM\Column(name="active", type="integer")
*/
private $isActive;
private $roles;
public function __construct($username, $password = '', $salt = '', $roles = array())
{
$this->username = $username;
$this->password = $password;
$this->salt = $salt;
$this->roles = $roles;
}
/**
* @inheritDoc
*/
public function getUsername()
{
return $this->username;
}
/**
* @inheritDoc
*/
public function getSalt()
{
return $this->salt;
}
/**
* @inheritDoc
*/
public function getPassword()
{
return $this->password;
}
/**
* @inheritDoc
*/
public function getRoles()
{
return array('ROLE_USER');
}
/**
* @inheritDoc
*/
public function eraseCredentials()
{
}
/**
* Set fullName
*
* @param string $fullname
* @return Member
*/
public function setfullname($fullname)
{
$this->fullname = $fullname;
return $this;
}
/**
* Get fullName
*
* @return string
*/
public function getFullName()
{
return $this->fullname;
}
/**
* Get fullName
*
* @return string
*/
public function getLink()
{
return '/app_dev.php/' . $this->getUsername();
}
}

View File

@@ -0,0 +1,127 @@
<?php
namespace BodyRep\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Bodyrep\Entity\Profile
*
* @ORM\Table(name="member")
* @ORM\Entity
*/
class Profile
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $fullname
*
* @ORM\Column(name="fullname", type="string")
*/
private $fullname;
/**
* @var string $username
*
* @ORM\Column(name="username", type="string")
*/
private $username;
/**
* @var float $currentweight
*
* @ORM\Column(name="currentweight", type="float")
*/
private $currentweight;
/**
* Get id
*
* @return integer
*/
public function getid()
{
return $this->id;
}
/**
* Set fullName
*
* @param string $fullname
* @return Profile
*/
public function setfullname($fullname)
{
$this->fullname = $fullname;
return $this;
}
/**
* Get fullName
*
* @return string
*/
public function getFullName()
{
return $this->fullname;
}
/**
* Set userName
*
* @param string $username
* @return Profile
*/
public function setUserName($username)
{
$this->username = $userName;
return $this;
}
/**
* Get userName
*
* @return string
*/
public function getUserName()
{
return $this->username;
}
/**
* Set currentWeight
*
* @param float $currentWeight
* @return Profile
*/
public function setCurrentWeight($currentWeight)
{
$this->currentweight = $currentWeight;
return $this;
}
/**
* Get currentWeight
*
* @return float
*/
public function getCurrentWeight()
{
return $this->currentweight;
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace BodyRep\EventListener;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use BodyRep\Twig\Extension\TemplateExtension;
class ControllerListener
{
protected $extension;
public function __construct(TemplateExtension $extension)
{
$this->extension = $extension;
}
public function onKernelController(FilterControllerEvent $event)
{
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
$this->extension->setController($event->getController());
}
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace BodyRep\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class Profile extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('fullname', 'text');
//$builder->add('newpass1', 'text');
//$builder->add('newpass2', 'text');
}
public function getName()
{
return 'profile';
}
}

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="twig.extension.bodyrep" class="BodyRep\Twig\Extension\TemplateExtension" public="false">
<tag name="twig.extension" />
<argument type="service" id="twig.loader" />
</service>
<service id="bodyrep.listener" class="BodyRep\EventListener\ControllerListener">
<tag name="kernel.event_listener" event="kernel.controller" method="onKernelController" />
<argument type="service" id="twig.extension.bodyrep" />
</service>
</services>
</container>

View File

@@ -0,0 +1,9 @@
{% extends "BodyRep::layout.html.twig" %}
{% block title "BodyRep - About Us" %}
{% block content %}
{% include 'BodyRep:Landing:navbar.html.twig' %}
About
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends 'BodyRep::layout.html.twig' %}
{% block title %}BodyRep - Welcome{% endblock %}
{% block content_header '' %}
{% block content %}
{% include 'BodyRep:Landing:navbar.html.twig' %}
Landing Page
{% endblock %}

View File

@@ -0,0 +1,18 @@
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<img src="/img/logo-nav.png" class='pull-left' style='padding-right : 5px; margin-top : 10px;' />
<a class="brand" href="#">BODY<b>REP</b></a>
<div class="btn-group pull-right">
<a class="btn " href="{{ path('_member') }}" style="background : transparent; color : white; text-shadow : none; border : none; box-shadow : 0 0 0 #fff;">
<i class="icon-user icon-white"></i> Login
</a>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
{% block content %}
<h1>Update Profile</h1>
<form action="{{ path('_member_profile_save') }}" method="post" id="profile">
<div>
{{ form_errors(form) }}
</div>
<div>
<label for="fullname">Name</label>
{{ form_row(form.fullname) }}
</div>
<div>&nbsp;</div>
<div>
<label for="newpass1">New Password:</label><br />
<input type="password" id="newpass1" name="_newpass1" /> <br />
<input type="password" id="newpass2" name="_newpass2" />
</div>
<div>&nbsp;</div>
{{ form_rest(form) }}
<input type="submit" class="btn btn-primary btn-mini" value="Save" />
</form>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "BodyRep:Member:layout.html.twig" %}
{% block title "Hello " ~ name %}
{% block content %}
{% include 'BodyRep:Member:navbar.html.twig' %}
<h1>Member landing page</h1>
{{name}}
{% endblock %}

View File

@@ -0,0 +1,4 @@
{% extends 'BodyRep::layout.html.twig' %}
{% block content_header '' %}

View File

@@ -0,0 +1,25 @@
{% extends 'BodyRep::layout.html.twig' %}
{% block content %}
{% include 'BodyRep:Landing:navbar.html.twig' %}
<h1>Login</h1>
{% if error %}
<div class="error">{{ error.message }}</div>
{% endif %}
<form action="{{ path("_security_check") }}" method="post" id="login">
<div>
<label for="username">Username</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
</div>
<div>
<label for="password">Password</label>
<input type="password" id="password" name="_password" />
</div>
<input type="submit" class="btn btn-primary btn-mini" value="LOGIN" />
</form>
{% endblock %}

View File

@@ -0,0 +1,35 @@
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<img src="/img/logo-nav.png" class='pull-left' style='padding-right : 5px; margin-top : 10px;' />
<a class="brand" href="#">BODY<b>REP</b></a>
<div class="btn-group pull-right">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#" style="background : transparent; color : white; text-shadow : none; border : none; box-shadow : 0 0 0 #fff;">
<i class="icon-user icon-white"></i> {{name}}
<span class="caret" style='border-top-color : white; border-bottom-color : white;'></span>
</a>
<ul class="dropdown-menu">
<li><a href="{{ path('_member_profile') }}">Profile</a></li>
<li class="divider"></li>
<li><a href="{{ path('_logout') }}">Sign Out</a></li>
</ul>
</div>
<div class='offset2'>
<form class="navbar-search pull-left" id='topsearch' action="{{ path('_member_search') }}">
<input type="text" class="search-query span4" id="topsearch" style='height : 28px;' placeholder="Search"><span id='msg_topsearch'></span>
</form>
</div>
<a class="btn dropdown-toggle pull-right" data-toggle="dropdown" href="#" style="margin : 0; background : transparent; color : white; text-shadow : none; border : none; box-shadow : 0 0 0 #fff;">
<i class='licon-calendar licon-white'></i>
</a>
<a class="btn dropdown-toggle pull-right" data-toggle="dropdown" href="#" style="margin : 0; background : transparent; color : white; text-shadow : none; border : none; box-shadow : 0 0 0 #fff;">
<i class='licon-mail-new licon-white'></i>
</a>
</div>
</div>
</div>

View File

@@ -0,0 +1,313 @@
{% extends 'BodyRep::layout.html.twig' %}
{% block title %}BodyRep{% endblock %}
{% block content_header '' %}
{% block content %}
{% include 'BodyRep:Member:navbar.html.twig' %}
<div class="row-fluid">
<div class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Profile</li>
<li class="active"><a href="#">Body Stats</a></li>
<li><a href="#">Body Reputation</a></li>
<li><a href="#">Challenges</a></li>
<li class="nav-header">Workouts</li>
<li class="nav-header">Meals</li>
<li class="nav-header">Community</li>
<li class="nav-header">Learning</li>
<li class="nav-header">Apps</li>
<li class="nav-header">Shopping</li>
</ul>
</div><!--/.well -->
</div><!--/span-->
<div class="span6" id='mcnt'>
<div class="row-fluid">
<h2 class="pull-left">{{ sFullName }}</h2>
<a class="pull-right btn btn-primary btn-mini" id='edprf' href="#"><i class="icon-cog icon-white"></i> Edit Profile</a>
</div>
<div class="row-fluid" style='font-size : 12px;'>
<i class="icon-signal"></i><span> Weight: 100kg ( <div class='arrowup'></div> 0)</span>
<span>Bodyfat: 20% ( <div class='arrowup'></div> 2)</span>
<span>Measurements: 400cm ( <div class='arrowup'></div> 15)</span>
</div>
<div class="row-fluid" style='font-size : 12px;'>
<i class="icon-home"></i><span> Lives in </span><a>Calgary, Alberta</a>
<i class="icon-signal"></i><span> Trains at </span><a>Talisman Center,Fitness First</a>
<i class="icon-signal"></i><span> Hobbies: </span><a>Skiing,</a><span> and </span><a>(5) other</a><span> ...</span>
<i class="icon-signal"></i><span> Professionals: </span><a>Heath Spence</a><span>,</span><a>Steve Baudo</a><a> see more...</a>
</div>
<hr />
<div class="row-fluid">
<h5 class="pull-left">Filters:</h5>
<div class="pull-left">
<div class="block_type_small redbg redbd pull-left">
<i class="icon-user icon-white"></i>
</div>
<div class="block_type_small bluebg bluebd pull-left">
<i class="icon-wrench icon-white"></i>
</div>
<div class="block_type_small orangebg orangebd pull-left">
<i class="icon-magnet icon-white"></i>
</div>
<div class="block_type_small tealbg tealbd pull-left">
<i class="icon-heart icon-white"></i>
</div>
<div class="block_type_small purplebg purplebd pull-left">
<i class="icon-th icon-white"></i>
</div>
<div class="block_type_small greenbg greenbd pull-left">
<i class="icon-book icon-white"></i>
</div>
<div class="block_type_small graybg graybd pull-left">
<i class="icon-file icon-white"></i>
</div>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type redbd">
<i class="gicon-magnet"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-signal"></i>
565
</div>
<div class="basic-comment">
<b>Breakfast:</b><span> 30g Oats, 1x Banana, 5x Egg Whites</span>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>14 minutes ago</span>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user1'></div>
<a>Brian Goff</a>
<p>Good to see you're keeping up the good work mate. Keep us posted ;)</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:05pm</span>
</div>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user2'></div>
<a>Alex Zborowski</a>
<p>Well it's not easy but you do your best every day and you judge every action.</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:05pm</span>
</div>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type greenbd">
<i class="gicon-search"></i>
</div>
<div class="block_type orangebd">
<i class="gicon-screen"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-time"></i>
45
<i class="icon-signal"></i>
900
</div>
<div class="basic-comment">
Workout at <a>Talisman Center</a> with <a>Brian Goff</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>37 minutes ago</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type greenbd">
<i class="gicon-search"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-time"></i>
90
<i class="icon-signal"></i>
720
</div>
<div class="basic-comment">
Workout at <a>Talisman Center</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 4 at 7:00pm</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type bluebd">
<i class="gicon-profile"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
</div>
<div class="basic-comment">
You commented on <a>Brian Goff's workout</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 4 at 6:30pm</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type purplebd">
<i class="gicon-profile"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
</div>
<div class="basic-comment">
Your read <a>"Fatigue Recovery & Supercompensation Theory"</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 2 at 8:00am</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type greenbd">
<i class="gicon-search"></i>
</div>
<div class="block_type orangebd">
<i class="gicon-screen"></i>
</div>
<div class="block_type tealbd">
<i class="gicon-line"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-time"></i>
30
<i class="icon-signal"></i>
450
</div>
<div class="basic-comment">
<a>Workout</a> using <a>Runtracker</a> with <a>Brian Goff</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 2 at 6:00am</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type orangebd">
<i class="gicon-screen"></i>
</div>
</div>
</div>
<div class="user-comment">
<div class='avatar user1'></div>
<a>Brian Goff</a>
<p>Hey "mate"! Want to train at the <a>Talisman</a> again tonight?</p>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:00pm</span>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user2'></div>
<a>Alex Zborowski</a>
<p>Sorry Brian, working on the BodyREP pitch tonight.</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:05pm</span>
</div>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user1'></div>
<a>Brian Goff</a>
<p>No worries "mate", maybe next time.</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:07pm</span>
</div>
</div>
</div>
</div>
<div class="span4">
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p>
<p><a class="btn btn-primary btn-large">Learn more &raquo;</a></p>
</div>
<div class="row-fluid">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
<div class="row-fluid">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
</div><!--/span-->
</div><!--/row-->
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% block content %}
<h1>Search Results</h1>
{% for result in search %}
<li>
<a href="{{ result.getLink() }}">
{{ result.getFullName() }}
</a>
</li>
{% endfor %}
{% endblock %}

View File

@@ -0,0 +1,312 @@
{% extends 'BodyRep::layout.html.twig' %}
{% block title %}BodyRep{% endblock %}
{% block content_header '' %}
{% block content %}
{% include 'BodyRep:Member:navbar.html.twig' %}
<div class="row-fluid">
<div class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Profile</li>
<li class="active"><a href="#">Body Stats</a></li>
<li><a href="#">Body Reputation</a></li>
<li><a href="#">Challenges</a></li>
<li class="nav-header">Workouts</li>
<li class="nav-header">Meals</li>
<li class="nav-header">Community</li>
<li class="nav-header">Learning</li>
<li class="nav-header">Apps</li>
<li class="nav-header">Shopping</li>
</ul>
</div><!--/.well -->
</div><!--/span-->
<div class="span6" id='mcnt'>
<div class="row-fluid">
<h2 class="pull-left">{{ sFullName }}</h2>
</div>
<div class="row-fluid" style='font-size : 12px;'>
<i class="icon-signal"></i><span> Weight: 100kg ( <div class='arrowup'></div> 0)</span>
<span>Bodyfat: 20% ( <div class='arrowup'></div> 2)</span>
<span>Measurements: 400cm ( <div class='arrowup'></div> 15)</span>
</div>
<div class="row-fluid" style='font-size : 12px;'>
<i class="icon-home"></i><span> Lives in </span><a>Calgary, Alberta</a>
<i class="icon-signal"></i><span> Trains at </span><a>Talisman Center,Fitness First</a>
<i class="icon-signal"></i><span> Hobbies: </span><a>Skiing,</a><span> and </span><a>(5) other</a><span> ...</span>
<i class="icon-signal"></i><span> Professionals: </span><a>Heath Spence</a><span>,</span><a>Steve Baudo</a><a> see more...</a>
</div>
<hr />
<div class="row-fluid">
<h5 class="pull-left">Filters:</h5>
<div class="pull-left">
<div class="block_type_small redbg redbd pull-left">
<i class="icon-user icon-white"></i>
</div>
<div class="block_type_small bluebg bluebd pull-left">
<i class="icon-wrench icon-white"></i>
</div>
<div class="block_type_small orangebg orangebd pull-left">
<i class="icon-magnet icon-white"></i>
</div>
<div class="block_type_small tealbg tealbd pull-left">
<i class="icon-heart icon-white"></i>
</div>
<div class="block_type_small purplebg purplebd pull-left">
<i class="icon-th icon-white"></i>
</div>
<div class="block_type_small greenbg greenbd pull-left">
<i class="icon-book icon-white"></i>
</div>
<div class="block_type_small graybg graybd pull-left">
<i class="icon-file icon-white"></i>
</div>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type redbd">
<i class="gicon-magnet"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-signal"></i>
565
</div>
<div class="basic-comment">
<b>Breakfast:</b><span> 30g Oats, 1x Banana, 5x Egg Whites</span>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>14 minutes ago</span>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user1'></div>
<a>Brian Goff</a>
<p>Good to see you're keeping up the good work mate. Keep us posted ;)</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:05pm</span>
</div>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user2'></div>
<a>Alex Zborowski</a>
<p>Well it's not easy but you do your best every day and you judge every action.</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:05pm</span>
</div>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type greenbd">
<i class="gicon-search"></i>
</div>
<div class="block_type orangebd">
<i class="gicon-screen"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-time"></i>
45
<i class="icon-signal"></i>
900
</div>
<div class="basic-comment">
Workout at <a>Talisman Center</a> with <a>Brian Goff</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>37 minutes ago</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type greenbd">
<i class="gicon-search"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-time"></i>
90
<i class="icon-signal"></i>
720
</div>
<div class="basic-comment">
Workout at <a>Talisman Center</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 4 at 7:00pm</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type bluebd">
<i class="gicon-profile"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
</div>
<div class="basic-comment">
You commented on <a>Brian Goff's workout</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 4 at 6:30pm</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type purplebd">
<i class="gicon-profile"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
</div>
<div class="basic-comment">
Your read <a>"Fatigue Recovery & Supercompensation Theory"</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 2 at 8:00am</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type greenbd">
<i class="gicon-search"></i>
</div>
<div class="block_type orangebd">
<i class="gicon-screen"></i>
</div>
<div class="block_type tealbd">
<i class="gicon-line"></i>
</div>
</div>
</div>
<div class="tnc-blurb">
<i class="icon-time"></i>
30
<i class="icon-signal"></i>
450
</div>
<div class="basic-comment">
<a>Workout</a> using <a>Runtracker</a> with <a>Brian Goff</a>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 2 at 6:00am</span>
</div>
</div>
<div class="stats">
<div class="comment_block">
<div class="block_types">
<div class="block_type orangebd">
<i class="gicon-screen"></i>
</div>
</div>
</div>
<div class="user-comment">
<div class='avatar user1'></div>
<a>Brian Goff</a>
<p>Hey "mate"! Want to train at the <a>Talisman</a> again tonight?</p>
</div>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:00pm</span>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user2'></div>
<a>Alex Zborowski</a>
<p>Sorry Brian, working on the BodyREP pitch tonight.</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:05pm</span>
</div>
</div>
<div class="user-sub-comment">
<div class='sub-avatar user1'></div>
<a>Brian Goff</a>
<p>No worries "mate", maybe next time.</p>
<div class="like-comment-time">
<i class="icon-thumbs-up"></i>
<i class="icon-comment"></i>
<span>April 3 at 2:07pm</span>
</div>
</div>
</div>
</div>
<div class="span4">
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p>
<p><a class="btn btn-primary btn-large">Learn more &raquo;</a></p>
</div>
<div class="row-fluid">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
<div class="row-fluid">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
</div><!--/span-->
</div><!--/row-->
{% endblock %}

View File

@@ -0,0 +1,54 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<title>{% block title %}BodyRep{% endblock %}</title>
<link rel="stylesheet" href="{{ asset('css/bootstrap.css') }}" media="all" />
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
.sidebar-nav {
padding: 9px 0;
}
</style>
<link rel="stylesheet" href="{{ asset('css/bootstrap-responsive.css') }}" />
<link rel="stylesheet" href="{{ asset('css/site.css') }}" />
<link rel="stylesheet" href="{{ asset('css/chosen.css') }}" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js"></script>
<script type="text/javascript" src="{{ asset('js/application.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/jquery.chosen.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/bootstrap.js') }}"></script>
</head>
<body>
<div class="container-fluid symfony-content">
{% block content %}
{% endblock %}
<hr>
<footer>
<p>&copy; BodyRep 2012</p>
</footer>
</div><!--/.fluid-container-->
</body>
</html>

View File

@@ -0,0 +1,33 @@
<?php
namespace BodyRep\Twig\Extension;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Bundle\TwigBundle\Loader\FilesystemLoader;
use CG\Core\ClassUtils;
class TemplateExtension extends \Twig_Extension
{
protected $loader;
protected $controller;
public function __construct(FilesystemLoader $loader)
{
$this->loader = $loader;
}
public function setController($controller)
{
$this->controller = $controller;
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return 'demo';
}
}