diff options
author | Christophe Coevoet <stof@notk.org> | 2011-06-07 02:01:21 +0200 |
---|---|---|
committer | Christophe Coevoet <stof@notk.org> | 2011-06-07 02:01:21 +0200 |
commit | dd5f4005639489cc27779778481420520553df9c (patch) | |
tree | 10644f03b88c827ebcdcb0440e4fef5047d285b5 | |
parent | 6633957f20c1fe86021f9c0fa1ed8a8648ca3f05 (diff) |
-rw-r--r-- | app/AppKernel.php | 23 | ||||
-rw-r--r-- | app/bootstrap.php.cache | 159 | ||||
-rw-r--r-- | app/bootstrap_cache.php.cache | 197 | ||||
-rw-r--r-- | app/config/config.yml | 6 | ||||
m--------- | src/Sde/BduBundle | 0 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Entity/Association.php | 21 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Entity/Mandate.php | 23 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Entity/Position.php | 25 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Entity/StandardPosition.php | 13 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Entity/Student.php | 15 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Repository/AssociationRepository.php | 2 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Repository/MandateRepository.php | 2 | ||||
-rw-r--r-- | src/Sde/WebserviceBundle/Util/Api.php | 22 | ||||
m--------- | vendor/bdu-api | 0 | ||||
m--------- | vendor/doctrine | 0 | ||||
m--------- | vendor/doctrine-common | 0 | ||||
m--------- | vendor/doctrine-dbal | 0 | ||||
m--------- | vendor/monolog | 0 | ||||
m--------- | vendor/symfony | 0 | ||||
m--------- | vendor/twig | 0 | ||||
-rw-r--r-- | web/app.php | 1 | ||||
-rw-r--r-- | web/app_dev.php | 1 |
22 files changed, 291 insertions, 219 deletions
diff --git a/app/AppKernel.php b/app/AppKernel.php index ffcc399..b4bc998 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -2,6 +2,9 @@ use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; +use Symfony\Component\ClassLoader\DebugUniversalClassLoader; +use Symfony\Component\HttpKernel\Debug\ErrorHandler; +use Symfony\Component\HttpKernel\Debug\ExceptionHandler; class AppKernel extends Kernel { @@ -11,7 +14,7 @@ class AppKernel extends Kernel new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), // enable third-party bundles - new Symfony\Bundle\MonologBundle\MonologBundle, + new Symfony\Bundle\MonologBundle\MonologBundle(), new Symfony\Bundle\DoctrineBundle\DoctrineBundle(), new Symfony\Bundle\TwigBundle\TwigBundle(), new Symfony\Bundle\SecurityBundle\SecurityBundle(), @@ -21,13 +24,29 @@ class AppKernel extends Kernel new Sde\WebserviceBundle\SdeWebserviceBundle(), ); - if ($this->isDebug()) { + if (in_array($this->getEnvironment(), array('dev', 'test'))) { $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); } return $bundles; } + public function init() + { + if ($this->debug) { + ini_set('display_errors', 1); + error_reporting(-1); + + DebugUniversalClassLoader::enable(); + ErrorHandler::register(); + if ('cli' !== php_sapi_name()) { + ExceptionHandler::register(); + } + } else { + ini_set('display_errors', 0); + } + } + public function registerContainerConfiguration(LoaderInterface $loader) { $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml'); diff --git a/app/bootstrap.php.cache b/app/bootstrap.php.cache index 0b20a88..f0fc7b6 100644 --- a/app/bootstrap.php.cache +++ b/app/bootstrap.php.cache @@ -27,8 +27,8 @@ interface ContainerInterface } namespace Symfony\Component\DependencyInjection { -use Symfony\Component\DependencyInjection\Exception\NonExistentServiceException; -use Symfony\Component\DependencyInjection\Exception\CircularReferenceException; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; @@ -102,7 +102,7 @@ class Container implements ContainerInterface return $this->services[$id]; } if (isset($this->loading[$id])) { - throw new CircularReferenceException($id, array_keys($this->loading)); + throw new ServiceCircularReferenceException($id, array_keys($this->loading)); } if (method_exists($this, $method = 'get'.strtr($id, array('_' => '', '.' => '_')).'Service')) { $this->loading[$id] = true; @@ -116,7 +116,7 @@ class Container implements ContainerInterface return $service; } if (self::EXCEPTION_ON_INVALID_REFERENCE === $invalidBehavior) { - throw new NonExistentServiceException($id); + throw new ServiceNotFoundException($id); } } public function getServiceIds() @@ -154,13 +154,6 @@ class Container implements ContainerInterface } $this->scopedServices[$name] = array(); } - public function getCurrentScopedStack($name) - { - if (!isset($this->scopeStacks[$name]) || 0 === $this->scopeStacks[$name]->count()) { - return null; - } - return $this->scopeStacks[$name]->top(); - } public function leaveScope($name) { if (!isset($this->scopedServices[$name])) { @@ -431,7 +424,7 @@ class HttpKernel implements HttpKernelInterface private function handleRaw(Request $request, $type = self::MASTER_REQUEST) { $event = new GetResponseEvent($this, $request, $type); - $this->dispatcher->dispatch(Events::onCoreRequest, $event); + $this->dispatcher->dispatch(CoreEvents::REQUEST, $event); if ($event->hasResponse()) { return $this->filterResponse($event->getResponse(), $request, $type); } @@ -439,13 +432,13 @@ class HttpKernel implements HttpKernelInterface throw new NotFoundHttpException(sprintf('Unable to find the controller for path "%s". Maybe you forgot to add the matching route in your routing configuration?', $request->getPathInfo())); } $event = new FilterControllerEvent($this, $controller, $request, $type); - $this->dispatcher->dispatch(Events::onCoreController, $event); + $this->dispatcher->dispatch(CoreEvents::CONTROLLER, $event); $controller = $event->getController(); $arguments = $this->resolver->getArguments($request, $controller); $response = call_user_func_array($controller, $arguments); if (!$response instanceof Response) { $event = new GetResponseForControllerResultEvent($this, $request, $type, $response); - $this->dispatcher->dispatch(Events::onCoreView, $event); + $this->dispatcher->dispatch(CoreEvents::VIEW, $event); if ($event->hasResponse()) { $response = $event->getResponse(); } @@ -462,13 +455,13 @@ class HttpKernel implements HttpKernelInterface private function filterResponse(Response $response, Request $request, $type) { $event = new FilterResponseEvent($this, $request, $type, $response); - $this->dispatcher->dispatch(Events::onCoreResponse, $event); + $this->dispatcher->dispatch(CoreEvents::RESPONSE, $event); return $event->getResponse(); } private function handleException(\Exception $e, $request, $type) { $event = new GetResponseForExceptionEvent($this, $request, $type, $e); - $this->dispatcher->dispatch(Events::onCoreException, $event); + $this->dispatcher->dispatch(CoreEvents::EXCEPTION, $event); if (!$event->hasResponse()) { throw $e; } @@ -601,6 +594,9 @@ abstract class Kernel implements KernelInterface } public function shutdown() { + if (false === $this->booted) { + return; + } $this->booted = false; foreach ($this->getBundles() as $bundle) { $bundle->shutdown(); @@ -835,6 +831,15 @@ abstract class Kernel implements KernelInterface } protected function buildContainer() { + foreach (array('cache' => $this->getCacheDir(), 'logs' => $this->getLogDir()) as $name => $dir) { + if (!is_dir($dir)) { + if (false === @mkdir($dir, 0777, true)) { + throw new \RuntimeException(sprintf("Unable to create the %s directory (%s)\n", $name, dirname($dir))); + } + } elseif (!is_writable($dir)) { + throw new \RuntimeException(sprintf("Unable to write in the %s directory (%s)\n", $name, $dir)); + } + } $container = new ContainerBuilder(new ParameterBag($this->getKernelParameters())); $extensions = array(); foreach ($this->bundles as $bundle) { @@ -852,16 +857,6 @@ abstract class Kernel implements KernelInterface if (null !== $cont = $this->registerContainerConfiguration($this->getContainerLoader($container))) { $container->merge($cont); } - foreach (array('cache', 'logs') as $name) { - $dir = $container->getParameter(sprintf('kernel.%s_dir', $name)); - if (!is_dir($dir)) { - if (false === @mkdir($dir, 0777, true)) { - exit(sprintf("Unable to create the %s directory (%s)\n", $name, dirname($dir))); - } - } elseif (!is_writable($dir)) { - exit(sprintf("Unable to write in the %s directory (%s)\n", $name, $dir)); - } - } $container->addCompilerPass(new AddClassesToCachePass($this)); $container->compile(); $this->addClassesToCache($container->getParameter('kernel.compiled_classes')); @@ -940,14 +935,10 @@ class ParameterBag { $this->parameters = array_replace($this->parameters, $parameters); } - public function get($key, $default = null) - { - return array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default; - } - public function getDeep($path, $default = null) + public function get($path, $default = null, $deep = false) { - if (false === $pos = strpos($path, '[')) { - return $this->get($path, $default); + if (!$deep || false === $pos = strpos($path, '[')) { + return array_key_exists($path, $this->parameters) ? $this->parameters[$path] : $default; } $root = substr($path, 0, $pos); if (!array_key_exists($root, $this->parameters)) { @@ -995,21 +986,21 @@ class ParameterBag { unset($this->parameters[$key]); } - public function getAlpha($key, $default = '') + public function getAlpha($key, $default = '', $deep = false) { - return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default, $deep)); } - public function getAlnum($key, $default = '') + public function getAlnum($key, $default = '', $deep = false) { - return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default, $deep)); } - public function getDigits($key, $default = '') + public function getDigits($key, $default = '', $deep = false) { - return preg_replace('/[^[:digit:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:digit:]]/', '', $this->get($key, $default, $deep)); } - public function getInt($key, $default = 0) + public function getInt($key, $default = 0, $deep = false) { - return (int) $this->get($key, $default); + return (int) $this->get($key, $default, $deep); } } } @@ -1120,6 +1111,24 @@ class HeaderBag $this->set($key, $values); } } + public function __toString() + { + if (!$this->headers) { + return ''; + } + $beautifier = function ($name) { + return preg_replace('/\-(.)/e', "'-'.strtoupper('\\1')", ucfirst($name)); + }; + $max = max(array_map('strlen', array_keys($this->headers))) + 1; + $content = ''; + ksort($this->headers); + foreach ($this->headers as $name => $values) { + foreach ($values as $value) { + $content .= sprintf("%-{$max}s %s\r\n", $beautifier($name).':', $value); + } + } + return $content; + } public function all() { return $this->headers; @@ -1310,7 +1319,14 @@ class Request } static public function createFromGlobals() { - return new static($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER); + $request = new static($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER); + if (0 === strpos($request->server->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded') + && in_array(strtoupper($request->server->get('REQUEST_METHOD', 'GET')), array('PUT', 'DELETE')) + ) { + parse_str($request->getContent(), $data); + $request->request = new ParameterBag($data); + } + return $request; } static public function create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null) { @@ -1325,6 +1341,7 @@ class Request 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '', 'SCRIPT_FILENAME' => '', + 'SERVER_PROTOCOL' => 'HTTP/1.1', ); $components = parse_url($uri); if (isset($components['host'])) { @@ -1411,6 +1428,13 @@ class Request $this->server = clone $this->server; $this->headers = clone $this->headers; } + public function __toString() + { + return + sprintf('%s %s %s', $this->getMethod(), $this->getRequestUri(), $this->server->get('SERVER_PROTOCOL'))."\r\n". + $this->headers."\r\n". + $this->getContent(); + } public function overrideGlobals() { $_GET = $this->query->all(); @@ -1422,18 +1446,22 @@ class Request } $_REQUEST = array_merge($_GET, $_POST); } - public function get($key, $default = null) + public function get($key, $default = null, $deep = false) { - return $this->query->get($key, $this->attributes->get($key, $this->request->get($key, $default))); + return $this->query->get($key, $this->attributes->get($key, $this->request->get($key, $default, $deep), $deep), $deep); } public function getSession() { return $this->session; } - public function hasSession() + public function hasPreviousSession() { return $this->cookies->has(session_name()) && null !== $this->session; } + public function hasSession() + { + return null !== $this->session; + } public function setSession(Session $session) { $this->session = $session; @@ -1484,17 +1512,12 @@ class Request } public function getHttpHost() { - $host = $this->headers->get('HOST'); - if (!empty($host)) { - return $host; - } $scheme = $this->getScheme(); - $name = $this->server->get('SERVER_NAME'); $port = $this->getPort(); if (('http' == $scheme && $port == 80) || ('https' == $scheme && $port == 443)) { - return $name; + return $this->getHost(); } - return $name.':'.$port; + return $this->getHost().':'.$port; } public function getRequestUri() { @@ -1570,7 +1593,7 @@ class Request if (null === $this->method) { $this->method = strtoupper($this->server->get('REQUEST_METHOD', 'GET')); if ('POST' === $this->method) { - $this->method = strtoupper($this->request->get('_method', 'POST')); + $this->method = strtoupper($this->server->get('X-HTTP-METHOD-OVERRIDE', $this->request->get('_method', 'POST'))); } } return $this->method; @@ -1801,14 +1824,14 @@ class Request { $baseUrl = $this->getBaseUrl(); if (null === ($requestUri = $this->getRequestUri())) { - return ''; + return '/'; } - $pathInfo = ''; + $pathInfo = '/'; if ($pos = strpos($requestUri, '?')) { $requestUri = substr($requestUri, 0, $pos); } if ((null !== $baseUrl) && (false === ($pathInfo = substr($requestUri, strlen($baseUrl))))) { - return ''; + return '/'; } elseif (null === $baseUrl) { return $requestUri; } @@ -1985,8 +2008,8 @@ class UniversalClassLoader { private $namespaces = array(); private $prefixes = array(); - private $namespaceFallback = array(); - private $prefixFallback = array(); + private $namespaceFallbacks = array(); + private $prefixFallbacks = array(); public function getNamespaces() { return $this->namespaces; @@ -1995,21 +2018,21 @@ class UniversalClassLoader { return $this->prefixes; } - public function getNamespaceFallback() + public function getNamespaceFallbacks() { - return $this->namespaceFallback; + return $this->namespaceFallbacks; } - public function getPrefixFallback() + public function getPrefixFallbacks() { - return $this->prefixFallback; + return $this->prefixFallbacks; } - public function registerNamespaceFallback($dirs) + public function registerNamespaceFallbacks(array $dirs) { - $this->namespaceFallback = (array) $dirs; + $this->namespaceFallbacks = $dirs; } - public function registerPrefixFallback($dirs) + public function registerPrefixFallbacks(array $dirs) { - $this->prefixFallback = (array) $dirs; + $this->prefixFallbacks = $dirs; } public function registerNamespaces(array $namespaces) { @@ -2059,7 +2082,7 @@ class UniversalClassLoader } } } - foreach ($this->namespaceFallback as $dir) { + foreach ($this->namespaceFallbacks as $dir) { $file = $dir.DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php'; if (file_exists($file)) { return $file; @@ -2076,7 +2099,7 @@ class UniversalClassLoader } } } - foreach ($this->prefixFallback as $dir) { + foreach ($this->prefixFallbacks as $dir) { $file = $dir.DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php'; if (file_exists($file)) { return $file; diff --git a/app/bootstrap_cache.php.cache b/app/bootstrap_cache.php.cache index b761d26..19f5ae1 100644 --- a/app/bootstrap_cache.php.cache +++ b/app/bootstrap_cache.php.cache @@ -104,6 +104,9 @@ abstract class Kernel implements KernelInterface } public function shutdown() { + if (false === $this->booted) { + return; + } $this->booted = false; foreach ($this->getBundles() as $bundle) { $bundle->shutdown(); @@ -338,6 +341,15 @@ abstract class Kernel implements KernelInterface } protected function buildContainer() { + foreach (array('cache' => $this->getCacheDir(), 'logs' => $this->getLogDir()) as $name => $dir) { + if (!is_dir($dir)) { + if (false === @mkdir($dir, 0777, true)) { + throw new \RuntimeException(sprintf("Unable to create the %s directory (%s)\n", $name, dirname($dir))); + } + } elseif (!is_writable($dir)) { + throw new \RuntimeException(sprintf("Unable to write in the %s directory (%s)\n", $name, $dir)); + } + } $container = new ContainerBuilder(new ParameterBag($this->getKernelParameters())); $extensions = array(); foreach ($this->bundles as $bundle) { @@ -355,16 +367,6 @@ abstract class Kernel implements KernelInterface if (null !== $cont = $this->registerContainerConfiguration($this->getContainerLoader($container))) { $container->merge($cont); } - foreach (array('cache', 'logs') as $name) { - $dir = $container->getParameter(sprintf('kernel.%s_dir', $name)); - if (!is_dir($dir)) { - if (false === @mkdir($dir, 0777, true)) { - exit(sprintf("Unable to create the %s directory (%s)\n", $name, dirname($dir))); - } - } elseif (!is_writable($dir)) { - exit(sprintf("Unable to write in the %s directory (%s)\n", $name, $dir)); - } - } $container->addCompilerPass(new AddClassesToCachePass($this)); $container->compile(); $this->addClassesToCache($container->getParameter('kernel.compiled_classes')); @@ -506,6 +508,7 @@ class HttpCache implements HttpKernelInterface } $response->isNotModified($request); $this->restoreResponseBody($request, $response); + $response->setDate(new \DateTime(null, new \DateTimeZone('UTC'))); if (HttpKernelInterface::MASTER_REQUEST === $type && $this->options['debug']) { $response->headers->set('X-Symfony-Cache', $this->getLog()); } @@ -559,22 +562,23 @@ class HttpCache implements HttpKernelInterface } if (!$this->isFreshEnough($request, $entry)) { $this->record($request, 'stale'); - return $this->validate($request, $entry); + return $this->validate($request, $entry, $catch); } $this->record($request, 'fresh'); $entry->headers->set('Age', $entry->getAge()); return $entry; } - protected function validate(Request $request, Response $entry) + protected function validate(Request $request, Response $entry, $catch = false) { $subRequest = clone $request; $subRequest->setMethod('get'); $subRequest->headers->set('if_modified_since', $entry->headers->get('Last-Modified')); - $cachedEtags = array($entry->getEtag()); + $cachedEtags = $entry->getEtag() ? array($entry->getEtag()) : array(); $requestEtags = $request->getEtags(); - $etags = array_unique(array_merge($cachedEtags, $requestEtags)); - $subRequest->headers->set('if_none_match', $etags ? implode(', ', $etags) : ''); - $response = $this->forward($subRequest, false, $entry); + if ($etags = array_unique(array_merge($cachedEtags, $requestEtags))) { + $subRequest->headers->set('if_none_match', implode(', ', $etags)); + } + $response = $this->forward($subRequest, $catch, $entry); if (304 == $response->getStatusCode()) { $this->record($request, 'valid'); $etag = $response->getEtag(); @@ -663,7 +667,9 @@ class HttpCache implements HttpKernelInterface $entry->setContent($new->getContent()); $entry->setStatusCode($new->getStatusCode()); $entry->setProtocolVersion($new->getProtocolVersion()); - $entry->setCookies($new->getCookies()); + foreach ($new->headers->getCookies() as $cookie) { + $entry->headers->setCookie($cookie); + } } else { $entry->setStatusCode(503); $entry->setContent('503 Service Unavailable'); @@ -1115,14 +1121,10 @@ class ParameterBag { $this->parameters = array_replace($this->parameters, $parameters); } - public function get($key, $default = null) - { - return array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default; - } - public function getDeep($path, $default = null) + public function get($path, $default = null, $deep = false) { - if (false === $pos = strpos($path, '[')) { - return $this->get($path, $default); + if (!$deep || false === $pos = strpos($path, '[')) { + return array_key_exists($path, $this->parameters) ? $this->parameters[$path] : $default; } $root = substr($path, 0, $pos); if (!array_key_exists($root, $this->parameters)) { @@ -1170,21 +1172,21 @@ class ParameterBag { unset($this->parameters[$key]); } - public function getAlpha($key, $default = '') + public function getAlpha($key, $default = '', $deep = false) { - return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default, $deep)); } - public function getAlnum($key, $default = '') + public function getAlnum($key, $default = '', $deep = false) { - return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default, $deep)); } - public function getDigits($key, $default = '') + public function getDigits($key, $default = '', $deep = false) { - return preg_replace('/[^[:digit:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:digit:]]/', '', $this->get($key, $default, $deep)); } - public function getInt($key, $default = 0) + public function getInt($key, $default = 0, $deep = false) { - return (int) $this->get($key, $default); + return (int) $this->get($key, $default, $deep); } } } @@ -1295,6 +1297,24 @@ class HeaderBag $this->set($key, $values); } } + public function __toString() + { + if (!$this->headers) { + return ''; + } + $beautifier = function ($name) { + return preg_replace('/\-(.)/e', "'-'.strtoupper('\\1')", ucfirst($name)); + }; + $max = max(array_map('strlen', array_keys($this->headers))) + 1; + $content = ''; + ksort($this->headers); + foreach ($this->headers as $name => $values) { + foreach ($values as $value) { + $content .= sprintf("%-{$max}s %s\r\n", $beautifier($name).':', $value); + } + } + return $content; + } public function all() { return $this->headers; @@ -1485,7 +1505,14 @@ class Request } static public function createFromGlobals() { - return new static($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER); + $request = new static($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER); + if (0 === strpos($request->server->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded') + && in_array(strtoupper($request->server->get('REQUEST_METHOD', 'GET')), array('PUT', 'DELETE')) + ) { + parse_str($request->getContent(), $data); + $request->request = new ParameterBag($data); + } + return $request; } static public function create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null) { @@ -1500,6 +1527,7 @@ class Request 'REMOTE_ADDR' => '127.0.0.1', 'SCRIPT_NAME' => '', 'SCRIPT_FILENAME' => '', + 'SERVER_PROTOCOL' => 'HTTP/1.1', ); $components = parse_url($uri); if (isset($components['host'])) { @@ -1586,6 +1614,13 @@ class Request $this->server = clone $this->server; $this->headers = clone $this->headers; } + public function __toString() + { + return + sprintf('%s %s %s', $this->getMethod(), $this->getRequestUri(), $this->server->get('SERVER_PROTOCOL'))."\r\n". + $this->headers."\r\n". + $this->getContent(); + } public function overrideGlobals() { $_GET = $this->query->all(); @@ -1597,18 +1632,22 @@ class Request } $_REQUEST = array_merge($_GET, $_POST); } - public function get($key, $default = null) + public function get($key, $default = null, $deep = false) { - return $this->query->get($key, $this->attributes->get($key, $this->request->get($key, $default))); + return $this->query->get($key, $this->attributes->get($key, $this->request->get($key, $default, $deep), $deep), $deep); } public function getSession() { return $this->session; } - public function hasSession() + public function hasPreviousSession() { return $this->cookies->has(session_name()) && null !== $this->session; } + public function hasSession() + { + return null !== $this->session; + } public function setSession(Session $session) { $this->session = $session; @@ -1659,17 +1698,12 @@ class Request } public function getHttpHost() { - $host = $this->headers->get('HOST'); - if (!empty($host)) { - return $host; - } $scheme = $this->getScheme(); - $name = $this->server->get('SERVER_NAME'); $port = $this->getPort(); if (('http' == $scheme && $port == 80) || ('https' == $scheme && $port == 443)) { - return $name; + return $this->getHost(); } - return $name.':'.$port; + return $this->getHost().':'.$port; } public function getRequestUri() { @@ -1745,7 +1779,7 @@ class Request if (null === $this->method) { $this->method = strtoupper($this->server->get('REQUEST_METHOD', 'GET')); if ('POST' === $this->method) { - $this->method = strtoupper($this->request->get('_method', 'POST')); + $this->method = strtoupper($this->server->get('X-HTTP-METHOD-OVERRIDE', $this->request->get('_method', 'POST'))); } } return $this->method; @@ -1976,14 +2010,14 @@ class Request { $baseUrl = $this->getBaseUrl(); if (null === ($requestUri = $this->getRequestUri())) { - return ''; + return '/'; } - $pathInfo = ''; + $pathInfo = '/'; if ($pos = strpos($requestUri, '?')) { $requestUri = substr($requestUri, 0, $pos); } if ((null !== $baseUrl) && (false === ($pathInfo = substr($requestUri, strlen($baseUrl))))) { - return ''; + return '/'; } elseif (null === $baseUrl) { return $requestUri; } @@ -2038,6 +2072,14 @@ class ResponseHeaderBag extends HeaderBag $this->set('cache-control', ''); } } + public function __toString() + { + $cookies = ''; + foreach ($this->cookies as $cookie) { + $cookies .= 'Set-Cookie: '.$cookie."\r\n"; + } + return parent::__toString().$cookies; + } public function replace(array $headers = array()) { parent::replace($headers); @@ -2146,24 +2188,22 @@ class Response ); public function __construct($content = '', $status = 200, $headers = array()) { + $this->headers = new ResponseHeaderBag($headers); $this->setContent($content); $this->setStatusCode($status); $this->setProtocolVersion('1.0'); - $this->headers = new ResponseHeaderBag($headers); + if (!$this->headers->has('Date')) { + $this->setDate(new \DateTime(null, new \DateTimeZone('UTC'))); + } $this->charset = 'UTF-8'; } public function __toString() { - $content = ''; $this->fixContentType(); - $content .= sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText)."\n"; - foreach ($this->headers->all() as $name => $values) { - foreach ($values as $value) { - $content .= "$name: $value\n"; - } - } - $content .= "\n".$this->getContent(); - return $content; + return + sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText)."\r\n". + $this->headers."\r\n". + $this->getContent(); } public function __clone() { @@ -2261,11 +2301,12 @@ class Response } public function getDate() { - if (null === $date = $this->headers->getDate('Date')) { - $date = new \DateTime(null, new \DateTimeZone('UTC')); - $this->headers->set('Date', $date->format('D, d M Y H:i:s').' GMT'); - } - return $date; + return $this->headers->getDate('Date'); + } + public function setDate(\DateTime $date) + { + $date->setTimezone(new \DateTimeZone('UTC')); + $this->headers->set('Date', $date->format('D, d M Y H:i:s').' GMT'); } public function getAge() { @@ -2465,18 +2506,14 @@ class Response { return 404 === $this->statusCode; } - public function isRedirect() + public function isRedirect($location = null) { - return in_array($this->statusCode, array(201, 301, 302, 303, 307)); + return in_array($this->statusCode, array(201, 301, 302, 303, 307)) && (null === $location ?: $location == $this->headers->get('Location')); } public function isEmpty() { return in_array($this->statusCode, array(201, 204, 304)); } - public function isRedirected($location) - { - return $this->isRedirect() && $location == $this->headers->get('Location'); - } protected function fixContentType() { if (!$this->headers->has('Content-Type')) { @@ -2493,8 +2530,8 @@ class UniversalClassLoader { private $namespaces = array(); private $prefixes = array(); - private $namespaceFallback = array(); - private $prefixFallback = array(); + private $namespaceFallbacks = array(); + private $prefixFallbacks = array(); public function getNamespaces() { return $this->namespaces; @@ -2503,21 +2540,21 @@ class UniversalClassLoader { return $this->prefixes; } - public function getNamespaceFallback() + public function getNamespaceFallbacks() { - return $this->namespaceFallback; + return $this->namespaceFallbacks; } - public function getPrefixFallback() + public function getPrefixFallbacks() { - return $this->prefixFallback; + return $this->prefixFallbacks; } - public function registerNamespaceFallback($dirs) + public function registerNamespaceFallbacks(array $dirs) { - $this->namespaceFallback = (array) $dirs; + $this->namespaceFallbacks = $dirs; } - public function registerPrefixFallback($dirs) + public function registerPrefixFallbacks(array $dirs) { - $this->prefixFallback = (array) $dirs; + $this->prefixFallbacks = $dirs; } public function registerNamespaces(array $namespaces) { @@ -2567,7 +2604,7 @@ class UniversalClassLoader } } } - foreach ($this->namespaceFallback as $dir) { + foreach ($this->namespaceFallbacks as $dir) { $file = $dir.DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php'; if (file_exists($file)) { return $file; @@ -2584,7 +2621,7 @@ class UniversalClassLoader } } } - foreach ($this->prefixFallback as $dir) { + foreach ($this->prefixFallbacks as $dir) { $file = $dir.DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php'; if (file_exists($file)) { return $file; diff --git a/app/config/config.yml b/app/config/config.yml index bfbef74..1e20062 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -7,13 +7,7 @@ framework: router: { resource: "%kernel.root_dir%/config/routing.yml" } templating: engines: [twig] - # TODO: Remove the following configuration once the bugs are fixed secret: uselessSecret - validation: - enabled: true - session: - lifetime: 3600 - name: BdU ## Twig Configuration twig: ~ diff --git a/src/Sde/BduBundle b/src/Sde/BduBundle -Subproject 16ba7224ee60bf6c26e925a53e9fa0b9a8636a4 +Subproject 95071daa401b082c5fe7876d37826e9c43eb32c diff --git a/src/Sde/WebserviceBundle/Entity/Association.php b/src/Sde/WebserviceBundle/Entity/Association.php index 6210008..ac275e0 100644 --- a/src/Sde/WebserviceBundle/Entity/Association.php +++ b/src/Sde/WebserviceBundle/Entity/Association.php @@ -18,6 +18,7 @@ namespace Sde\WebserviceBundle\Entity; +use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Normalizer\NormalizableInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -26,52 +27,52 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; * * @author Christophe Coevoet * - * @orm:Table(name="bdu.bdu_assoces") - * @orm:Entity(repositoryClass="Sde\WebserviceBundle\Repository\AssociationRepository", readOnly=true) + * @ORM\Table(name="bdu.bdu_assoces") + * @ORM\Entity(repositoryClass="Sde\WebserviceBundle\Repository\AssociationRepository", readOnly=true) */ class Association implements NormalizableInterface { /** * @var integer * - * @orm:Column(name="asso_id", type="integer") - * @orm:Id - * @orm:GeneratedValue(strategy="AUTO") + * @ORM\Column(name="asso_id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * - * @orm:Column(name="asso_nom", type="string") + * @ORM\Column(name="asso_nom", type="string") */ private $name; /** * @var string * - * @orm:Column(name="asso_descr", type="text") + * @ORM\Column(name="asso_descr", type="text") */ private $description; /** * @var string * - * @orm:Column(name="asso_urlogo", type="string") + * @ORM\Column(name="asso_urlogo", type="string") */ private $logoUrl; /** * @var string * - * @orm:Column(name="asso_urlsite", type="string") + * @ORM\Column(name="asso_urlsite", type="string") */ private $siteUrl; /** * @var \Doctrine\Common\Collections\ArrayCollection * - * @orm:OneToMany(targetEntity="Sde\WebserviceBundle\Entity\Position", mappedBy="association") + * @ORM\OneToMany(targetEntity="Sde\WebserviceBundle\Entity\Position", mappedBy="association") */ private $positions; diff --git a/src/Sde/WebserviceBundle/Entity/Mandate.php b/src/Sde/WebserviceBundle/Entity/Mandate.php index 458c94b..40ced7d 100644 --- a/src/Sde/WebserviceBundle/Entity/Mandate.php +++ b/src/Sde/WebserviceBundle/Entity/Mandate.php @@ -18,6 +18,7 @@ namespace Sde\WebserviceBundle\Entity; +use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Normalizer\NormalizableInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -26,31 +27,31 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; * * @author Christophe Coevoet * - * @orm:Table(name="bdu.bdu_ele_fonc") - * @orm:Entity(repositoryClass="Sde\WebserviceBundle\Repository\MandateRepository", readOnly=true) + * @ORM\Table(name="bdu.bdu_ele_fonc") + * @ORM\Entity(repositoryClass="Sde\WebserviceBundle\Repository\MandateRepository", readOnly=true) */ class Mandate implements NormalizableInterface { /** * @var integer * - * @orm:Column(name="id", type="integer") - * @orm:Id - * @orm:GeneratedValue(strategy="AUTO") + * @ORM\Column(name="id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var \DateTime * - * @orm:Column(name="datedeb", type="date") + * @ORM\Column(name="datedeb", type="date") */ private $start; /** * @var \DateTime * - * @orm:Column(name="datefin", type="date", nullable="true") + * @ORM\Column(name="datefin", type="date", nullable="true") */ private $end; @@ -58,16 +59,16 @@ class Mandate implements NormalizableInterface /** * @var Position * - * @orm:ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\Position", inversedBy="mandates") - * @orm:JoinColumns({@orm:JoinColumn(name="fct_id", referencedColumnName="fct_id")}) + * @ORM\ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\Position", inversedBy="mandates") + * @ORM\JoinColumns({@ORM\JoinColumn(name="fct_id", referencedColumnName="fct_id")}) */ private $position; /** * @var Student * - * @orm:ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\Student", inversedBy="mandates") - * @orm:JoinColumns({@orm:JoinColumn(name="ele_id", referencedColumnName="ele_id")}) + * @ORM\ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\Student", inversedBy="mandates") + * @ORM\JoinColumns({@ORM\JoinColumn(name="ele_id", referencedColumnName="ele_id")}) */ private $student; diff --git a/src/Sde/WebserviceBundle/Entity/Position.php b/src/Sde/WebserviceBundle/Entity/Position.php index 7a7e996..e097f4d 100644 --- a/src/Sde/WebserviceBundle/Entity/Position.php +++ b/src/Sde/WebserviceBundle/Entity/Position.php @@ -18,6 +18,7 @@ namespace Sde\WebserviceBundle\Entity; +use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Normalizer\NormalizableInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -26,54 +27,54 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; * * @author Christophe Coevoet * - * @orm:Table(name="bdu.bdu_fonctions") - * @orm:Entity(readOnly=true) + * @ORM\Table(name="bdu.bdu_fonctions") + * @ORM\Entity(readOnly=true) */ class Position implements NormalizableInterface { /** * @var integer * - * @orm:Column(name="fct_id", type="integer") - * @orm:Id - * @orm:GeneratedValue(strategy="AUTO") + * @ORM\Column(name="fct_id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * - * @orm:Column(name="fct_nom", type="string") + * @ORM\Column(name="fct_nom", type="string") */ private $name; /** * @var string * - * @orm:Column(name="fct_descr", type="text") + * @ORM\Column(name="fct_descr", type="text") */ private $description; /** * @var Association * - * @orm:ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\Association", inversedBy="positions") - * @orm:JoinColumns({@orm:JoinColumn(name="asso_id", referencedColumnName="asso_id")}) + * @ORM\ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\Association", inversedBy="positions") + * @ORM\JoinColumns({@ORM\JoinColumn(name="asso_id", referencedColumnName="asso_id")}) */ private $association; /** * @var StandardPosition * - * @orm:ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\StandardPosition") - * @orm:JoinColumns({@orm:JoinColumn(name="fct_std_id", referencedColumnName="fct_std_id")}) + * @ORM\ManyToOne(targetEntity="Sde\WebserviceBundle\Entity\StandardPosition") + * @ORM\JoinColumns({@ORM\JoinColumn(name="fct_std_id", referencedColumnName="fct_std_id")}) */ private $standardPosition; /** * @var \Doctrine\Common\Collections\ArrayCollection * - * @orm:OneToMany(targetEntity="Sde\WebserviceBundle\Entity\Mandate", mappedBy="position") + * @ORM\OneToMany(targetEntity="Sde\WebserviceBundle\Entity\Mandate", mappedBy="position") */ private $mandates; diff --git a/src/Sde/WebserviceBundle/Entity/StandardPosition.php b/src/Sde/WebserviceBundle/Entity/StandardPosition.php index e5155b1..ba06a1b 100644 --- a/src/Sde/WebserviceBundle/Entity/StandardPosition.php +++ b/src/Sde/WebserviceBundle/Entity/StandardPosition.php @@ -18,6 +18,7 @@ namespace Sde\WebserviceBundle\Entity; +use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Normalizer\NormalizableInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -26,24 +27,24 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; * * @author Christophe Coevoet * - * @orm:Table(name="bdu.bdu_fonctions_standard") - * @orm:Entity(readOnly=true) + * @ORM\Table(name="bdu.bdu_fonctions_standard") + * @ORM\Entity(readOnly=true) */ class StandardPosition { /** * @var integer $id * - * @orm:Column(name="fct_std_id", type="integer") - * @orm:Id - * @orm:GeneratedValue(strategy="AUTO") + * @ORM\Column(name="fct_std_id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string $name * - * @orm:Column(name="fct_std_nom", type="string") + * @ORM\Column(name="fct_std_nom", type="string") */ private $name; diff --git a/src/Sde/WebserviceBundle/Entity/Student.php b/src/Sde/WebserviceBundle/Entity/Student.php index 64922b3..dd2a2ad 100644 --- a/src/Sde/WebserviceBundle/Entity/Student.php +++ b/src/Sde/WebserviceBundle/Entity/Student.php @@ -18,6 +18,7 @@ namespace Sde\WebserviceBundle\Entity; +use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\Collection; use Symfony\Component\Serializer\Normalizer\NormalizableInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -27,31 +28,31 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; * * @author Christophe Coevoet * - * @orm:Table(name="bdu.bdu_eleves") - * @orm:Entity(readOnly=true) + * @ORM\Table(name="bdu.bdu_eleves") + * @ORM\Entity(readOnly=true) */ class Student implements NormalizableInterface { /** * @var integer * - * @orm:Column(name="ele_id", type="integer") - * @orm:Id - * @orm:GeneratedValue(strategy="AUTO") + * @ORM\Column(name="ele_id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * - * @orm:Column(name="ele_dn", type="string") + * @ORM\Column(name="ele_dn", type="string") */ private $dn; /** * @var Collection * - * @orm:OneToMany(targetEntity="Sde\WebserviceBundle\Entity\Mandate", mappedBy="student") + * @ORM\OneToMany(targetEntity="Sde\WebserviceBundle\Entity\Mandate", mappedBy="student") */ private $mandates; diff --git a/src/Sde/WebserviceBundle/Repository/AssociationRepository.php b/src/Sde/WebserviceBundle/Repository/AssociationRepository.php index edd4818..fb51529 100644 --- a/src/Sde/WebserviceBundle/Repository/AssociationRepository.php +++ b/src/Sde/WebserviceBundle/Repository/AssociationRepository.php @@ -36,7 +36,7 @@ class AssociationRepository extends EntityRepository */ public function searchByName($name) { - $qb = new QueryBuilder($this->_em); + $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('a') ->from('Sde\WebserviceBundle\Entity\Association', 'a') ->where('a.name LIKE :name') diff --git a/src/Sde/WebserviceBundle/Repository/MandateRepository.php b/src/Sde/WebserviceBundle/Repository/MandateRepository.php index 21a244f..0a10718 100644 --- a/src/Sde/WebserviceBundle/Repository/MandateRepository.php +++ b/src/Sde/WebserviceBundle/Repository/MandateRepository.php @@ -115,7 +115,7 @@ class MandateRepository extends EntityRepository */ private function getBaseQuery() { - $qb = new QueryBuilder($this->_em); + $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('m, p, a, s, sp') ->from('Sde\WebserviceBundle\Entity\Mandate', 'm') ->join('m.position', 'p') diff --git a/src/Sde/WebserviceBundle/Util/Api.php b/src/Sde/WebserviceBundle/Util/Api.php index 07e9593..0fa8f11 100644 --- a/src/Sde/WebserviceBundle/Util/Api.php +++ b/src/Sde/WebserviceBundle/Util/Api.php @@ -24,20 +24,6 @@ namespace Sde\WebserviceBundle\Util; class Api extends \Bdu_Api { /** - * Renvoie l'instance de l'API - * - * @return Bdu_Api - */ - public static function getInstance() - { - if (null === self::$instance) { - return new self(); - } - - return self::$instance; - } - - /** * Get the dn from the uid of the student * * @param string $uid @@ -48,11 +34,17 @@ class Api extends \Bdu_Api return 'uid='.$uid.',ou=people,dc=campus,dc=ecp,dc=fr'; } + /** + * Get the base64-encoded photo of a student + * + * @param string $uid + * @return string + */ public function getStudentPhotoAsString($uid) { $photo = ''; try { - $results = $this->getUnitOfWork()->rawSearch(sprintf('uid=%s', $uid), array ("jpegphoto")); + $results = $this->unitOfWork->rawSearch(sprintf('uid=%s', $uid), array ("jpegphoto")); if ($results['count']) { $photo = $results[0]['jpegphoto'][0]; } diff --git a/vendor/bdu-api b/vendor/bdu-api -Subproject e37ddce417a5ce934ed5c3afa53f2ea8ace67fa +Subproject ab6b635365a8a49009a9c6d6e00df6c1936e809 diff --git a/vendor/doctrine b/vendor/doctrine -Subproject 0d0d61935fa75b5bf82af98676029b3bbf11175 +Subproject a4cbb23fc8612587d1886e4c3e7d62d72457a29 diff --git a/vendor/doctrine-common b/vendor/doctrine-common -Subproject 84eb985aca5490164f766765f5fa868bbe66faf +Subproject 40ab808b37dcd3e9fd92800061a9b71f64469e5 diff --git a/vendor/doctrine-dbal b/vendor/doctrine-dbal -Subproject ae833d153f77a44c3737e7760bebfc992b579cd +Subproject 7f9f5451542b37f09b674785542e99baf732edd diff --git a/vendor/monolog b/vendor/monolog -Subproject 0ebdf69daad51c0034efcaeffbab2d573f1a0ed +Subproject 53c9b2050f3da67a1eb2e1f920bc934b60c742f diff --git a/vendor/symfony b/vendor/symfony -Subproject f3b077a0dda43b2275debbda85a018b94ff89ae +Subproject a98436fd6a7dfd34dbc3d83eb5b7fac7845fcb9 diff --git a/vendor/twig b/vendor/twig -Subproject 17f814223be3823879700e902fb475b7890ad53 +Subproject 7e457209f8c69865ac2bc8b86c24518cded0dd0 diff --git a/web/app.php b/web/app.php index e2620f8..4290008 100644 --- a/web/app.php +++ b/web/app.php @@ -6,4 +6,5 @@ require_once __DIR__.'/../app/AppKernel.php'; use Symfony\Component\HttpFoundation\Request; $kernel = new AppKernel('prod', false); +$kernel->loadClassCache(); $kernel->handle(Request::createFromGlobals())->send(); diff --git a/web/app_dev.php b/web/app_dev.php index 5c97553..74a0d11 100644 --- a/web/app_dev.php +++ b/web/app_dev.php @@ -6,4 +6,5 @@ require_once __DIR__.'/../app/AppKernel.php'; use Symfony\Component\HttpFoundation\Request; $kernel = new AppKernel('dev', true); +$kernel->loadClassCache(); $kernel->handle(Request::createFromGlobals())->send(); |