Giter Site home page Giter Site logo

cupon's People

Contributors

javiereguiluz avatar jcromero avatar tolbier avatar yahuarkuntur avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cupon's Issues

Runtime Exception: php app/console assetic:dump --env=prod --no-debug

Saludos Javier,

Tras ejecutar el comando: php app/console assetic:dump --env=prod --no-debug

Se logra ver lo siguiente:
Dumping all prod assets.
Debug mode is off.
[dir+] D:\public_html\cupon\app/../web/css
[file+] D:\public_html\cupon\app/../web/css/backend.css

[RuntimeException]

El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del
volumen no son correctos.

El RuntimeException aparece también al limpiar la caché de producción.

Agradezco la información que puedas indicar.

Formularios HTML5 friendly

Saludos, propongo que hagamos uso de algunas de las novedades de HTML5 para dar una experiencia más agradable al usuario, principalmente usando los atributos pattern y placeholder de los input (http://mytutorials85.blogspot.com.es/2012/04/formularios-en-html5.html)

Los cambios los realizariamos especificamente para el email y la tarjeta de credito (dentro de UsuarioType.php)

Para el email:

->add('email' , 'email' ,  array('label' => 'Correo' , 'attr' => array('placeholder' => 'usuario@servidor')))

Para la Tarjeta de Credito:

->add('numero_tarjeta','text', array('label' => 'Tarjeta de Credito', 'attr' => array('pattern' => '^[0-9]{13,16}$', 'placeholder' => 'Entre 13 y 16 numeros')))

problema con generate:doctrine:entities

No se si me puedan ayudar me marca un error un poco extraño al generar las entities
Call to a member function getNamespacename() on a non-object in /var/www/html/proyectos/Noticias_Promovision/vendor/bundles/Doctrine/Bundle/DoctrineBundle/Mapping/MetadataFactory.php on line 82

error apc_fetch()

Hola de nuevo Javier. Varias veces he tratado de instalar la aplicación, pero cada vez que lo hago, siguiendo las instrucciones, al momento de ejecutar el comando php app/console assetic:dump --env=prod --no-debug, me arroja el siguiente error:
PHP Fatal error: Call to undefined function doctrine\Common\Cache\apc_fetch()..........
Soy nuevo en symfony y quizas me estoy perdiendo de algo o tengo mal configurado el apc para symfony....

Saludos....

Problemas con perfil.html.twig

Hola,

No sé si es porque me he equivocado en algo o me he olvidado de alguna cosa. En la página de editar el perfil, que si que me funciona cuando hago algún cambio y lo actualiza correctamente con la bbdd. Lo que yo tengo es que los dos campos de contraseña me siguen apareciendo como dos campos obligatorios, por lo tanto si yo solo quiero cambiar el nombre por ejemplo, me veo obligado a rellenar también las dos contraseñas.
Lo que yo quiero hacer es que en mi plantilla perfil.html.twig no sea "required" el campo password.
{{ form_widget(formulario.password }}

Consultándolo por mi cuenta creía que añadiendo attr me podría funcionar, pero no me funciona.
{{ form_widget(formulario.password, { 'attr': { 'required' : 'false' } }) }}

Alguien me puede ayudar?

Muchas gracias por tu fantástico libro, no he adquirido suficiente vocabulario para expresar mi agradecimiento por todo lo que estoy aprendiendo.

Probema al cargar Fixtures

Estoy siguiendo el libro y al llegar a llegar al capitulo 5.4.2 cargando el primer archivo de datos, con el comando:
php app/console doctrine:fixtures:load
me da el siguiente error
PHP Fatal error: Declaration of Cupon\CiudadBundle\DataFixtures\ORM\ciudades::load() must be compatible with that of Doctrine\Common\DataFixtures\FixtureInterface::load() in /home/pedro/proyectos/cupon/src/Cupon/CiudadBundle/DataFixtures/ORM/Ciudades.php on line 8

Estoy utilizando Symfony v2.0.9

El archivo ciudades.php contiene el siguiente codigo:

'Madrid', 'slug' => 'madrid'), array('nombre' => 'Barcelona', 'slug' => 'barcelona'), ); foreach ($ciudades as $ciudad) { $entidad = new Ciudad(); $entidad->setNombre($ciudad['nombre']); $entidad->setSlug($ciudad['slug']); $manager->persist($entidad); } $manager->flush(); } ``` } He probado también el código de ciudades.php incluido en la aplicación cupon y el error es el mismo Gracias Pedro Sastre

Problema con los fixtures

hola me estoy iniciando con Symfony2, siguiendo el libro de Javier. Pues bien, tengo el siguiente problema al ejecutar doctrine:fixtures:load, me salta el error Fatal error: Class 'Doctrine\Common\DataFixtures\Loader' not found in /var/www/Miproyecto/vendor/bundles/Symfony/Bundle/DoctrineFixturesBundle/Common/DataFixtures/Loader.php on line 11, sin embargo me voy al directorio y esta el Loader. El archivo provincias.php contiene el siguiente código:

'Granada', 'slug' => 'granada'), array('nombre' => 'Málaga', 'slug' => 'malaga'), ); foreach ($provincias as $provincia){ $entidad = new Provincia(); $entidad->setNombre($provincia['nombre']); $entidad->setSlug($provincia['slug']); $manager->persist($entidad); } $manager->flush(); } } El cambio de Ciudades a Provincias es porque estoy utilizando dos entidades dentro del CiudadBundle con la intención de mas adelante dar opción a elegir la provincia y la localidad. Espero que me puedan ayudar, porque me trae de cabeza, gracias de antemano.

Estilos de la aplicación

Hola Javier,

Estoy probando tu aplicación, y he visto en el directorio de ficheros que la carpeta css está vacía. No aparece ningún estilo y al navegar por la aplicación, evidentemente aparece totalmente plana, con texto...
Una vez levantados los servicios de Apache y MySQL... accedo a la aplicación, pero haciendo click en oferta del día, o mi perfil, no termina de cargar la siguiente página... va lento....

Gracias de antemano por tu ayuda...

Problemas creando archivos de datos

Buenas, les comento que es mi primera epxeriencia en Symfony, y la estoy haciendo siguiendo el libro de Javier Eguiluz.
En estos momentos me encuentro trabado en la sección 5.4.2, "Creando el primer archivo de datos".

Haciendo un repaso rápido, tengo instalado los fixtures para Doctrine 2, o eso espero.
Registré el namespace en el autoload.php

[...]
'JMS' => DIR.'/../vendor/bundles',
'Doctrine\Common\DataFixtures' => DIR.'/../vendor/doctrine-fixtures/lib',
'Doctrine\Common' => DIR.'/../vendor/doctrine-common/lib',
'Doctrine\DBAL' => DIR.'/../vendor/doctrine-dbal/lib',
[...]

Activé el Bundle en AppKernel.php

[...]
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\DoctrineFixturesBundle\DoctrineFixturesBundle(),
new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
[...]

Entre tantas cosas que devuelve el comando php app/console, encuentro lo siguiente:

[...]
doctrine:fixtures:load Load data fixtures to your database.
[...]

Creo el archivo de datos como sugiere el libro, lo cree por primera vez a mano, luego copie y pegué. Y al ejecutar php app/console doctrine:fixtures:load la consola devuelve:

PHP Fatal error: Class 'Doctrine\Common\DataFixtures\Loader' not found in /media/Datos/www/cupon/vendor/bundles/Symfony/Bundle/DoctrineFixturesBundle/Common/DataFixtures/Loader.php on line 11

Agradecería cualquier tipo de ayuda. Soy primerizo en Symfony, ya que arranqué desde esta versión (Symfony version 2.0.12 - app/dev/debug) sin tocar ninguna 1.x
Desde ya muchas gracias.

Nota: ¿Cómo coloreo la sintaxis? ¿Cómo "quoteo"?.

Error en el libro desarrollo agil

Javier, en la página 168, refiriéndote a la última extensión de twig, muestras un ejemplo con javascript en la cual utilizas document.getElementById y le pasas "tiempo" lo que hace que no te devuelva nada pues la etiqueta tiempo es una class y no un id. Por supuesto, busqué si existia getElementByClass :) y sorprendentemente no existe. Saludos

Problema con PHPUnit

Al ejecutar el comando:

phpunit -c app

Arroja los siguientes mensajes:

PHPUnit 3.5.14 by Sebastian Bergmann.

.F..EE.F........F.

Time: 30 seconds, Memory: 26.25Mb

There were 2 errors:

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::losUsuariosAnonimosNoPuedenComprar
    InvalidArgumentException: The current node list is empty.

C:\xampp\htdocs\cupon\vendor\symfony\src\Symfony\Component\DomCrawler\Crawler.php:567
C:\xampp\htdocs\cupon\src\Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest.php:93

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::losUsuariosAnonimosDebenLoguearseParaPoderComprar
    InvalidArgumentException: The current node list is empty.

C:\xampp\htdocs\cupon\vendor\symfony\src\Symfony\Component\DomCrawler\Crawler.php:567
C:\xampp\htdocs\cupon\src\Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest.php:109

There were 3 failures:

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::laPortadaSoloMuestraUnaOfertaActiva
    La portada muestra una única oferta activa que se puede comprar
    Failed asserting that integer:0 matches expected integer:1.

C:\xampp\htdocs\cupon\src\Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest.php:54

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::laPortadaSeGeneraMuyRapido
    La portada se genera en menos de medio segundo
    Failed asserting that double:0.8870050907135 is less than double:0.5.

C:\xampp\htdocs\cupon\src\Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest.php:140

  1. Cupon\OfertaBundle\Tests\Twig\Extension\TwigExtensionTest::testMostrarComoLista
    Failed asserting that two strings are equal.
    --- Expected
    +++ Actual
    @@ @@
    -
  • Primer elemento
  • -
  • Segundo elemento
  • -
  • Primer elemento +
  • -
  • Segundo elemento +
  • Tercer elemento

C:\xampp\htdocs\cupon\src\Cupon\OfertaBundle\Tests\Twig\Extension\CuponExtensionTest.php:66

�[37;41m�[2KFAILURES!
�[0m�[37;41m�[2KTests: 18, Assertions: 37, Failures: 3, Errors: 2.
�[0m�[2K

Nota: Seguí las instrucciones indicadas en: #14 (comment) ya que el comando php app/console assetic:dump también arrojaba problemas.

problemas con variables de js y twig

Hola Javier, estoy siguiendo el libro al pie de la letra (o eso creo), y creando la lista de ciudades con el codigo que aparece en el libro:
<select id="ciudadseleccionada">
{% for ciudad in ciudades %}
<option value="{{ ciudad.slug }}">{{ ciudad.nombre }}</option>
{% endfor %}
</select>

<script type="text/javascript">

var lista = document.getElementById("ciudadseleccionada");
var ciudad = lista.options[lista.selectedIndex].value;

lista.onchange = function() {
    var url = {{ path(&#039;portada&#039;, { &#039;ciudad&#039;:ciudad }) }};
};

</script>
Recibo constantemente el error de que ciudad no existe en la linea 13, esta claro que es algun fallo de compatibilidad con twig, que no reconoce la variable, pero no se que hacer para arreglarlo. He hecho todas las pruebas que se me han pasado por la cabeza pero no ha habido forma.
Espero una respuesta, a nadie mas que siga el libro le ha pasado esto???

Muchas gracias de antemano.
PD: tampoco he sabido poner el codigo para que no se interprete, y lo he intentado

Duda con respecto a las validaciones.

Saludos, tengo una duda con respecto a la validacion cuando se edita el perfil del usuario.(Capitulo 8.8.1)

El password del usuario en el Entity posee el siguiente Assert:
@Assert\MinLength(6)

Y el formulario UsuarioType para el password indica:
'required' => false

Como es posible entonces, que, si editamos nuestro perfil y dejamos el password en blanco, al realizar $formulario->isValid() dentro de perfilAction, la respuesta sea true ?

Este es el codigo que tengo ahora dentro de perfilAction() cuando el request es de tipo POST:

if ($peticion->getMethod() == 'POST') {  // Estan enviando un formulario listo
            $password_original = $usuario->getPassword(); // Almaceno el password original antes de hacer el bind
            $this->get('logger')->info('Antes de hacer bind el password es : '.$usuario->getPassword());
            $formulario->bindRequest($peticion); // Luego de esto, $usuario ya tiene cargados todos los campos del formulario
            $this->get('logger')->info('Despues de hacer bind el password es : '.$usuario->getPassword());
             if($formulario->isValid()){ 
                 if($usuario->getPassword() == null){
                     $usuario->setPassword($password_original); 
                 }else{
                    $encoder = $this->container->get('security.encoder_factory')->getEncoder($usuario);
                    $password = $encoder->encodePassword($usuario->getPassword(),$usuario->getSalt());
                    $usuario->setPassword($password);
                 }
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($usuario);
                $em->flush();
                $this->getRequest()->getSession()->setFlash('info', 'Sus datos fueron actualizados');
                return $this->redirect($this->generateUrl('portada', array('ciudad' => $usuario->getCiudad()->getSlug())));
            }

Remover Acme Bundle

Elimina el directorio src/Acme
• Quita las rutas _welcome, _demo y _demo_secured del archivo app/config/routing_dev.yml
• Borra el registro del bundle en el archivo app/AppKernel.php (quita la línea $bundles[] =new Acme\DemoBundle\AcmeDemoBundle();)
• Elimina su namespace del archivo app/autoload.php (línea 'Acme' => DIR.'/../
src',)

El ultimo punto no existe en el archivo autoload.php, y cuando entro a:

http://cupon.local/app_dev.php

Se genera una exception

No route found for "GET /"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

[2/2] NotFoundHttpException: No route found for "GET /"

[1/2] ResourceNotFoundException:

Logs

Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onKernelRequest".
Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException".
Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException".
Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /" (uncaught exception) at /var/www/cupon/app/cache/dev/classes.php line 4560
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
Notified event "kernel.controller" to listener "JMS\SecurityExtraBundle\Controller\ControllerListener::onCoreController".

Que puedo hacer para no tener ese error...

Gracias....

Problemas con las Fxtures

He instalado el DataFixtures correctamente ya que el comando funciona. Por otro lado he creado la carpeta DataFixtures/ORM dentro del Bundle de CiudadBundle y el archivo ciudad.php.

He puesto este código:

<?php

namespace Symfony\CiudadBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Cupon\CiudadBundle\Entity\Ciudad;

class ciudades implements FixtureInterface{
    public function load($manager){
        $ciudades = array(
            array('nombre' => 'Madrid', 'slug' => 'madrid'),
            array('nombre' => 'Barcelona', 'slug' => 'barcelona')
        );

        foreach ($ciudades as $ciudad) {
            $entidad = new Ciudad();

            $entidad->setNombre($ciudad['nombre']);
            $entidad->setSlug($ciudad['slug']);

            $manager->persist($entidad);
        }

        $manager->flush();

    }
}

Me sale el siguiente error al ejecutar el fixture:

Fatal error: Class 'Doctrine\Common\DataFixtures\Loader' not found in /Applications/MAMP/htdocs/Symfony/vendor/bundles/Symfony/Bundle/DoctrineFixturesBundle/Common/DataFixtures/Loader.php on line 11

problemas con init:acl

buenos días. He estado intentando solucionar mi problema mirando el google pero no lo consigo, así que les comento mi error, a ver si alguien puede ayudarme. Les pongo en contexto:

Cuando ejecutaba el comando 2.- php app/console doctrine:schema:create
Me daba este error:

  [PDOException]                                                                                                   
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes 

Busqué al google y cambie el tamaño del campo mail (string de 200, campo único) a (string de 100, campo único) de la entity Usuario. Esto soluciono el error y pude pasar al paso 3. Sin embargo cuando ejecuto el comando: php app/console init:acl
Me salta el mismo error que antes y no se como puedo arreglarlo.

A parte de lo comentoado no he cambiado nada del codigo y la version de symfony es la 2.0.15.

¿Alguien puede aconsejarme?

Response protocol HTTP/1.0

Saludos, he estado haciendo unas pruebas con curl para evaluar los headers HTTP y me he dado cuenta de que la respuesta que genera la aplicación usa el protocolo HTTP/1.0:

> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: cupon.local
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 302 Found
< Date: Tue, 22 May 2012 18:50:44 GMT
< Server: Apache
< X-Powered-By: PHP/5.3.10-1ubuntu3.1
< Set-Cookie: PHPSESSID=0q3stmkt0pvorm0mv90fnoqtu0; path=/
< location: /es/barcelona
< cache-control: no-cache
< x-symfony-cache: GET /: stale, invalid
< Vary: Accept-Encoding
< Content-Length: 341
< Connection: close
< Content-Type: text/html; charset=UTF-8

No se si es algún problema de configuracion, pero efectivamente el constructor de la clase Response en app/cache/dev/classes.php tiene:

public function __construct($content = '', $status = 200, $headers = array())
    {
        $this->headers = new ResponseHeaderBag($headers);
        $this->setContent($content);
        $this->setStatusCode($status);
        $this->setProtocolVersion('1.0');
        if (!$this->headers->has('Date')) {
            $this->setDate(new \DateTime(null, new \DateTimeZone('UTC')));
        }
    }

El comando que estoy usando para analizar los header es:

curl http://cupon.local/app_dev.php -v > /dev/null 

Alguien más tiene este problema? Alguna sugerencia para solucionarlo?

Muchas gracias.
Gracias!

Paso de variables en el proceso de login

Buenas tardes,

Estamos siguiendo el libro, intentando adaptar lo que vamos aprendiendo a nuestro proyecto, y nos hemos encontrado con la siguiente dificultad que no sabemos cómo resolver, y os explico:

En la parte del libro dónde se explica "Ejecutando código después del login", en las funciones del Listener que hemos creado, a parte de recoger el token asociado con el usuario que acaba de hacer el login, y a partir de él, obtener el usuario, necesitamos recoger del formulario de login otro input más, para junto con el usuario, realizar una consulta a la BBDD y los valores devueltos almacenarlos en la sesión del usuario.

Estamos un poquito perdidos puesto que estamos empezando y no sabemos cómo hacerlo. Os agradeceríamos que alguien nos pudiera echar una mano. Muchas gracias por adelantado.

Cuestion a cerca de la codificación de la base de datos

Mirando un poco por encima la base de datos de la aplicación he visto que en mi caso los campos de textos tienen una codificación latin_swedish. ¿Es esto correcto? Me parecia que debieran estar en UTF-8. ¿Cómo podria cambiarlo si no es asi?

sigo teniendo errores al cargar los estilos

Peumayen@PEUMAYEN-PC /c/cupon (master)
$ php app/console assetic:dump --env=prod --no-debug
Dumping all prod assets.
Debug mode is off.

[file+] C:\cupon\app/../web/css/backend.css

[RuntimeException]
El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del
volumen no son correctos.

assetic:dump [--watch] [--force] [--period="..."] [write_to]

Peumayen@PEUMAYEN-PC /c/cupon (master)
$

Problem loading fixtures.

Hi. i got the following error when trying to load the fixtures.
It happens when trying to load Ventas fixtures.

[ErrorException]

Runtime Notice: Only variables should be passed by reference in G:\htdocs\sf
upon\Cupon\vendor\doctrine\lib\Doctrine\ORM\Id\AssignedGenerator.php line 58

problema al ejecutar php bin/vendors install

Buenas,

baje la version actual (2.0.10) y al ejecutar:

RedEye@rockOTO:/srv/www/htdocs/CuponFull> php bin/vendors install

Installing/Updating symfony
Cloning into /srv/www/htdocs/CuponFull/vendor/symfony...
error: RPC failed; result=22, HTTP code = 417
fatal: The remote end hung up unexpectedly
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor/symfony: No existe el fichero o el directorio

eso para symfony
luego salen otros mas:

Installing/Updating doctrine-dbal
Cloning into /srv/www/htdocs/CuponFull/vendor/doctrine-dbal...
error: RPC failed; result=22, HTTP code = 417
fatal: The remote end hung up unexpectedly
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor/doctrine-dbal: No existe el fichero o el directorio

Installing/Updating doctrine
Cloning into /srv/www/htdocs/CuponFull/vendor/doctrine...
error: RPC failed; result=22, HTTP code = 417
fatal: The remote end hung up unexpectedly
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor/doctrine: No existe el fichero o el directorio

Installing/Updating AsseticBundle
Cloning into /srv/www/htdocs/CuponFull/vendor//bundles/Symfony/Bundle/AsseticBundle...
remote: Counting objects: 1811, done.
remote: Compressing objects: 100% (549/549), done.
remote: Total 1811 (delta 1099), reused 1758 (delta 1053)
Receiving objects: 100% (1811/1811), 237.36 KiB | 134 KiB/s, done.
Resolving deltas: 100% (1099/1099), done.
error: Failed connect to github.com:80; Connection refused while accessing http://github.com/symfony/AsseticBundle.git/info/refs

fatal: HTTP request failed

Installing/Updating doctrine-fixtures
Cloning into /srv/www/htdocs/CuponFull/vendor/doctrine-fixtures...
error: Failed connect to github.com:80; Connection refused while accessing http://github.com/doctrine/data-fixtures.git/info/refs

fatal: HTTP request failed
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor/doctrine-fixtures: No existe el fichero o el directorio

Installing/Updating DoctrineFixturesBundle
Cloning into /srv/www/htdocs/CuponFull/vendor//bundles/Symfony/Bundle/DoctrineFixturesBundle...
error: Failed connect to github.com:80; Connection refused while accessing http://github.com/symfony/DoctrineFixturesBundle.git/info/refs

fatal: HTTP request failed
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor//bundles/Symfony/Bundle/DoctrineFixturesBundle: No existe el fichero o el directorio

Installing/Updating AsseticBundle
Cloning into /srv/www/htdocs/CuponFull/vendor//bundles/Symfony/Bundle/AsseticBundle...
remote: Counting objects: 1811, done.
remote: Compressing objects: 100% (549/549), done.
remote: Total 1811 (delta 1099), reused 1758 (delta 1053)
Receiving objects: 100% (1811/1811), 237.36 KiB | 134 KiB/s, done.
Resolving deltas: 100% (1099/1099), done.
error: Failed connect to github.com:80; Connection refused while accessing http://github.com/symfony/AsseticBundle.git/info/refs

fatal: HTTP request failed

Installing/Updating doctrine-fixtures
Cloning into /srv/www/htdocs/CuponFull/vendor/doctrine-fixtures...
error: Failed connect to github.com:80; Connection refused while accessing http://github.com/doctrine/data-fixtures.git/info/refs

fatal: HTTP request failed
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor/doctrine-fixtures: No existe el fichero o el directorio

Installing/Updating DoctrineFixturesBundle
Cloning into /srv/www/htdocs/CuponFull/vendor//bundles/Symfony/Bundle/DoctrineFixturesBundle...
error: Failed connect to github.com:80; Connection refused while accessing http://github.com/symfony/DoctrineFixturesBundle.git/info/refs

fatal: HTTP request failed
sh: línea 0: cd: /srv/www/htdocs/CuponFull/vendor//bundles/Symfony/Bundle/DoctrineFixturesBundle: No existe el fichero o el directorio

el resto carga y copia los archivos con normalidad.

Que puede estar pasando? es un problema de version?

Gracias por la ayuda.

error login tiendas

Buenos días,
Tengo el siguiente error a la hora de hacer login en la extranet de la app.

Los pasos que sigo son:

  1. Definir la configuración de seguridad
  2. Preparar la entidad tienda como proveedor de usuarios
  3. Cargar los nuevos datos de prueba
  4. Crear el formulario de login
    4.1) programar la función loginAction () del controlador cupon/TiendaBundle/controller/extranetcontroller.php
    4.2) plantilla twig
  5. Refactorizar el código del evento asociado al login.

La pantalla de login se presenta bien, pero al poner nombre de usuario y contraseña, da igual que lo ponga bien o mal, siempre tengo la misma respuesta:

"Unrecognized field: login"

He estado leyendo aquí y aquí

Y siempre hablan de:
FOS\UserBundle\Entity\User

Pero si esto es así, no se como encajarlo en mi proyecto.

¿Que puede estar pasando?.

Gracias

Ruta de las imágenes de las ofertas

Me he encontrado con varios problemas en esta parte. Por un lado, cuando se publican los assets, las imágenes de prueba se quedan en el directorio web/bundles/oferta/images/, por lo que para que en oferta.html.twig, en lugar de cargarlas así:

Fotografía de la oferta

deberían cargarse así:

Fotografía de la oferta

Pero claro, esto sólo funcionaría para los ejemplos que se cargan en los fixtures, ya que cuando se crea una oferta nueva, la imagen sí que se especifica que se guarde en el directorio uploads, ya que viene especificada en el config.yml. Por cierto, para poder crear una oferta, es necesario haber creado el directorio uploads/images y haberle dado permisos de escritura, igual convendría aclararlo en el Readme.

Entiendo que si la ruta de las imágenes está parametrizada, se debería acceder desde twig a esa parametrización en lugar de como he descrito arriba. Y si el directorio finalmente es /uploads/images/, pues o bien explicar en el Readme que hay que copiar allí las imágenes de prueba o bien realizarlo en alguna de las tareas (carga de fixtures o publicación de los assets).

Bueno, son sólo ideas, no sé muy bien cómo abordarlas, espero que te sirvan :)

Problemas al instalar la aplicación Cupon

Soy completamente nuevo en esto de Symfony, y me he comprado el libro de Javier, que tiene muy buena pinta, pero la primera en la frente, porque no logro pasar del tema 2, pues no consigo instalar la aplicación cupon:
Aviso que trabajo con Windows 7, wamp con php 5.3.4
He seguido estos pasos hasta el paso 4 sin relativo problema

  1. Clono el repositorio: git clone git://github.com/javiereguiluz/Copon.git cupon //Ok sin problema

  2. Entro en el directorio cupon // Ok, sin problema

  3. Selecciono la rama git checkout 2.0 // Ok, sin problema

  4. Intento ejecutar php bin/vendors install, pero como no encuentra el php, que lo tengo en el disco D, me funciona si pongo:
    /D/servers/wamp/bin/php/php5.3.4/php bin/vendors install
    // Y aquí en empiezan los problemas:
    Primero me dice: PHP Warning: PHP Startup: Unable to load dynamic library D:/servers/wamp/bin/php/php5.3.4/ext/php_ming.dll' - %1 no es una aplicacion Win32 valida
    y eso que ya he deactivado el php_ming.dll, como me ha dicho Javier,
    Pero luego se cargan un montón de cosas

  5. Luego, ejecuto "chmod -R 777 app/cache app/logs". Pero como no están los directorios "cache" y "logs", los he creado a mano, y así sí me ha dejado ejecutar esa orden

  6. Creo que el web server ya está configurado, porque lo uso mucho para otras webs.

  7. Me aseguro de que php_apc.dll está instalada (me ha costado un güebo, pero ya la he instalado)

Pero ahora voy a ver la página con la ruta http://localhost/cupon/web/config.php, para configurar el sitio online con el formulario de symfony, y me sale el contenido de la página de configuracion de sympfony pero sin estilos, toda descuajeringada... y cuando hago clic en "Configure your Symfony Application online", no se carga nada.

Error cuando se cargan los fixtures

loading Cupon\OfertaBundle\DataFixtures\ORM\ofertas

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 32 bytes) in /Users/Ricky/Documents/Desarrollo/elmundo.es/editores/cupon/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php on line 449

La instancia de UnitOfWork, al cargar las fixtures, sobrepasa la cantidad de memoria que tenía definida en php.ini.

La solución
Incrementar la cantidad permitida para un script dentro de php.ini en la directiva memory_limit. (Cuidado con esto para aplicaciones en producción con muchos procesos corriendo).

Saludos,
Ricky.

Problema instalando Cupon

al momento de ejecutar el comando app/console init:acl me encuetro con este problema
estoy desarrollando con mamp pro en mac os 10.7.04

[PDOException]
could not find driver

si alguien me pudiera ayudar, gracias!

4 error 1Failure

Time: 3 seconds, Memory: 49.25Mb

There were 4 errors:

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::losUsuariosAnonimosVenLaCiudadPorDefecto
    InvalidArgumentException: The current node list is empty.

/var/www/Cupon/vendor/symfony/src/Symfony/Component/DomCrawler/Crawler.php:412
/var/www/Cupon/src/Cupon/OfertaBundle/Tests/Controller/DefaultControllerTest.php:79

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::losUsuariosAnonimosNoPuedenComprar
    InvalidArgumentException: The current node list is empty.

/var/www/Cupon/vendor/symfony/src/Symfony/Component/DomCrawler/Crawler.php:567
/var/www/Cupon/src/Cupon/OfertaBundle/Tests/Controller/DefaultControllerTest.php:93

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::losUsuariosAnonimosDebenLoguearseParaPoderComprar
    InvalidArgumentException: The current node list is empty.

/var/www/Cupon/vendor/symfony/src/Symfony/Component/DomCrawler/Crawler.php:567
/var/www/Cupon/src/Cupon/OfertaBundle/Tests/Controller/DefaultControllerTest.php:109

  1. Cupon\UsuarioBundle\Tests\Controller\DefaultControllerTest::testRegistroPerfilBaja with data set #0 (array('Anónimo', 'Apellido1 Apellido2', '[email protected]', 'anonimo1234', 'anonimo1234', 'Mi calle, Mi ciudad, 01001', '01', '01', '1970', '11111111H', '123456789012345', '1', '1'))
    InvalidArgumentException: The current node list is empty.

/var/www/Cupon/vendor/symfony/src/Symfony/Component/DomCrawler/Crawler.php:567
/var/www/Cupon/src/Cupon/UsuarioBundle/Tests/Controller/DefaultControllerTest.php:36

There was 1 failure:

  1. Cupon\OfertaBundle\Tests\Controller\DefaultControllerTest::laPortadaSoloMuestraUnaOfertaActiva
    La portada muestra una única oferta activa que se puede comprar
    Failed asserting that 0 matches expected 1.

/var/www/Cupon/src/Cupon/OfertaBundle/Tests/Controller/DefaultControllerTest.php:54

Image path

when you install the "cupon" bundle "inside" a path (ie: cupon is not installed in root path "/"), images url are wrong.

I think that it should work everywhere if you remove the slash "/" in directorio_imagenes config option.

I have installed it in http://my_server/~kikov/cupon/ and it works perfectly. It should work if you install it as root path.

kikov@onuba1:~/public_html/cupon/app/config$ git diff
diff --git a/app/config/config.yml b/app/config/config.yml
index c550309..c2343be 100755
--- a/app/config/config.yml
+++ b/app/config/config.yml
@@ -24,7 +24,7 @@ twig:
strict_variables: %kernel.debug%
globals:
ciudad_por_defecto: %cupon.ciudad_por_defecto%

  •    directorio_imagenes: '/uploads/images/'
    
  •    directorio_imagenes: 'uploads/images/'
    

    Configuración de Assetic

    assetic:

Problema con la cargas de fixtures

Hola a todos:

Estoy con el libro de javier y con la versión de Symfony 2.0.16. Pues estoy en la pag 85 intentando cargar los fixtures. Pero aún teniendo en cuenta las líneas que había que cambiar

use Doctrine\Common\Persistence\ObjectManager;
public function load(ObjectManager $manager)

me sigue dando el mismo error:

Fatal error: Class 'Doctrine\Common\DataFixtures\Loader' not found in /var/www/cupon/vendor/bundles/Symfony/Bundle/DoctrineFixturesBundle/Common/DataFixtures/Loader.php on line 11

Por favor, se que el tema está cerrado, pero estoy desesperado. Llevo dos días intentando solucionarlo...Muchas gracias de antemano.

el código usado es:

namespace cupon\CiudadBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use cupon\CiudadBundle\Entity\Ciudad;

class ciudades implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $ciudades = array(
            array('nombre'=> 'Madrid','slug'=>'madrid'),
            array('nombre'=> 'Barcelona','slug'=>'barcelona'),
            //...

        );

        foreach ($ciudades as $ciudad) {
            $entidad = new Ciudad();
            $entidad->setNombre($ciudad['nombre']);
            $entidad->setSlug($ciudad['slug']);
            $manager->persist($entidad);
        }

        $manager->flush();
    }

}

Error con la Extension de cuenta atras

Hola de nuevo, sigo trasteando con symfony a partir del libro, y me encuentro estancado en la extension que mustra la cuenta atras, obtengo el siguiente error:

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class DateTime could not be converted to string in /home/edu/NetBeansProjects/micupon/app/cache/dev/twig/df/2c/b3c1fe80fff3e80ccc04a14e625f.php line 44") in OfertaBundle:Default:includes/oferta.html.twig at line 14.

que al principio apuntaba a la linea 89 de cuponExtension, la cual no existia, y ahora como veis el error aparece en cache/dev/twig que tampoco se porqué...

he observado que en la aplicacion publicada se obtienen los valores de la fecha mediante json_encode, en vez de la forma en que se hace en el libro, no se si tendra que ver.

En qué puedo estar fallando??

Gracias x la atencion

Error 500 con Ciudad Desconocida.

Al buscar la oferta del día, el OfertaRepository ejecuta el query con:
return $consulta->getSingleResult();
Lo que genera una Excepcion:
No result was found for query although at least one row was expected.
Cuando se intenta buscar una oferta para una ciudad que no existe.

Propongo cambiar el return por:
return = $consulta->getOneOrNullResult() ;
De esta forma si no se consigue la oferta, devuelve NULL y el controlador genera un 404.

Apache: WaitForMultipeObjects WAIT_FAILED

No logro ejecutar la aplicación, tras seguir todos los pasos de instalación y uso. Al tratar de ejecutarla en cualquier ruta se paraliza el servicio del webserber y logro ver este mensaje en el log de errores de apache.

[crit](OS 5)Acceso denegado. : master_main: WaitForMultipeObjects WAIT_FAILED -- doing server shutdown

Trabajo bajo windows 7 x64 y tengo otras aplicaciones de symfony corriendo, incluso en paralelo hago el tutorial de http://tutorial.symblog.co.uk/ sin problemas.

Error con CSS

Hola buenas, llevo un par de días intentando instalar Cupon en Windows (Apache 2.2 y PHP 5.3), pero al ejecutar el comando 'php app/console assetic:dump --env=prod --no-debug' durante la instalación obtengo el siguiente error: http://img69.imageshack.us/img69/4523/imagen0i.jpg

El directorio web/css/ queda vacío.

Luego al cargar en el navegador 'http://cupon.local/app_dev.php' se carga la página pero por supuesto sin estilos: http://img210.imageshack.us/img210/851/imagentg.jpg

La secuencia de comandos que ejecuto son:

DESCARGAR E INSTALAR LA APLICACION

1º) git clone https://github.com/javiereguiluz/Cupon.git cupon
2º) php bin/vendors install (entrar primero en cupon)
3º) chmod -R 777 app/cache app/logs

CONFIGURAR BD Y DESPUES:

1º) php app/console doctrine:schema:create
2º) php app/console init:acl
3º) php app/console doctrine:fixtures:load
4º) php app/console assetic:dump --env=prod --no-debug

Un saludo

Error al cargar los fixtures

Hola Javi,

estoy probando a instarme la aplicación y al cargar los fixtures me salta este error

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint (cupon.venta, CONSTRAINT FK_4E26C151DB38439E FOREIGN KEY (usuario_id) REFERENCES cupon.Usuario (id))

Error en backend¿?

Genial aporte javier!!

En el backend hay un detalle siempre muestra los usuarios de Barcelona(ciudad del admin) en listado supongo que el admin deberia verlos todos ¿o no?

cambiando el método indexAction del conttorlador de usuario del backend podemos resolverlo.

//No hago fork porque son un par de lineas. src/Cupon/BackendBundle/Controller/UsuarioController.php

public function indexAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $paginador = $this->get('ideup.simple_paginator');

   //eliminamos : $slug = $this->getRequest()->getSession()->get('ciudad');

    $entities  = $paginador->paginate(
        //cambiamos  : $em->getRepository('CiudadBundle:Ciudad')->queryTodosLosUsuarios($slug)
       //por:
            $em->getRepository('UsuarioBundle:Usuario')->findAll()
    )->getResult();

    return $this->render('BackendBundle:Usuario:index.html.twig', array(
        'entities'  => $entities,
        'paginador' => $paginador
    ));
}

Slugs con nombres repetidos

Estaba viendo de que el sistema a la hora de generar el slug, no tiene en cuenta cuando una oferta tiene el mismo titulo que otra, es decir, si tengo una oferta titulada "Promoción 1" y otra con el mismo titulo, entonces el slug sería igual al otro, y eso no debería pasar, porque tienen que ser únicos.

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cupon.acl_object_identities' doesn't exist

Siguiendo los pasos para la instalación, en el paso de carga de fixtures, falla:

$ php app/console doctrine:schema:create
ATTENTION: This operation should not be executed in a production environment.

Creating database schema...
Database schema created successfully!

$ php app/console doctrine:fixtures:load

purging database
loading Cupon\CiudadBundle\DataFixtures\ORM\ciudades
loading Cupon\TiendaBundle\DataFixtures\ORM\tiendas
loading Cupon\OfertaBundle\DataFixtures\ORM\ofertas

[PDOException]
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cupon.acl_object_identities' doesn't exist

No se está comprobando bien el tiempo que tarda la portada en generarse

El test src/Cupon/OfertaBundle/Tests/Controller/DefaultControllerTest.php comprueba que la portada se genere en menos de medio segundo y con menos de 4 consultas a la base de datos.

Actualmente esta comprobación está mal hecha, ya que el código se encuentra al final del test, cuando el navegador de pruebas ya no está en la portada sino que ha navegado hasta otra página.

Dudas con portada.html.twig

Buenas, estoy corriendo app_dev.php y me devuelve el siguiente error:

Item "nombre" for "" does not exist in OfertaBundle:Default:portada.html.twig at line 21

Según la bilbiografía es porque no encontró una oferta que satisfaga las condiciones de la consulta en el controlador.
He pobrado cambiar:

$oferta = $em->getRepository('OfertaBundle:Oferta')->findOneBy(array( 'ciudad' => 1, 'fecha_publicacion' => new \DateTime('today')));

Por:

$oferta = $em->getRepository('OfertaBundle:Oferta')->findOneBy(array( 'ciudad' => 1, 'fecha_publicacion' => new \DateTime('2012-05-14')));

Y por:

$oferta = $em->getRepository('OfertaBundle:Oferta')->findOneBy(array( 'ciudad' => 1, 'fecha_publicacion' => new \DateTime('2012-05-14 23:59:59')));

A modo de ver como quedaría la plantilla. Pero en todos los casos el error se repite.
Alguna sugerencia ?.
Saludos.

RuntimeException: Failed to write cache file "/var/www/cupon/app/cache/dev/classes.php

saludos Javier
Recien me estoy iniciando en el mundo de symfony
Y te agradezco en colgar este aplicativo para el aprendizaje de todos
pero tengo este problema
RuntimeException: Failed to write cache file "/var/www/cupon/app/cache/dev/classes.php".

  1. in /var/www/cupon/app/bootstrap.php.cache line 1079
  2. at ClassCollectionLoader::writeCacheFile() in /var/www/cupon/app/bootstrap.php.cache line 1017
  3. at ClassCollectionLoader::load() in /var/www/cupon/app/bootstrap.php.cache line 682
  4. at Kernel->loadClassCache() in /var/www/cupon/web/app_dev.php line 21

Todo esto lo estoy haciendo desde ubuntu

agradesco por la ayuda

routing.yml

Hola Javier en el libro en la pagina 121 define portada:

pattern: /{ciudad}
defaults: { _controller: OfertaBundle:Default:portada }

Ruta simple de la portada

_portada:
pattern: /
defaults: { _controller: OfertaBundle:Default:portada }

pero no me funciono hasta q coloque
portada:
pattern: /{ciudad}
defaults: { _controller: OfertaBundle:Default:portada, ciudad: null }

Ruta simple de la portada

_portada:
pattern: /
defaults: { _controller: OfertaBundle:Default:portada, ciudad: null }

ese parametro ciudad:null hace referencia al valor por defecto??

saludos y gracias

actualización de información de la base de datos por forms

Hola buenos días Javier, una disculpa de antemano si este no es el medio para postear este tipo de dudas. ando desarrollando una aplicación basándome en tu libro y la aplicación de cupón y me encuentro en la parte de actualizar la información de una tabla de la base de datos mediante un formulario el cual lleno previamente con datos de la misma, le llega la información al controlador desde el formulario, busco el objeto el cual actualizare mediante un id que me proporciono el form y a ese $objeto le agrego los campos restantes del form para después actualizar la info. de ese objeto en la base. vi que tu lo haces con solo persist del $objeto pero ami lo que me hace es crear uno nuevo. la pregunta es si hay otro modo de actualizar la información de ese objeto en la base o estaré haciendo algo mal?

RSS y Google Chrome

Estoy probando la parte de RSS en mi aplicación como se hace en cupón. En el navegador Firefox funciona perfecto, pero no así en Google Chrome. ¿Alguien sabe como solucionar esto?. Lo tengo todo tal y como se explica en el libro.

Un saludo.

Problema para cagar los fixtures

he tenido problemas al querer hacer el proyecto de tu libro desarrollo agil el problema que tengo es que saque los fixtures de este proyecto pero me marca el siguiente error al quererlas cargar:

Catchable Fatal Error: Argument 1 passed to Symfony\Component\Security\Acl\Domain\UserSecurityIdentity::fromAccount() must be an instance of Symfony\Component\Security\Core\User\UserInterface, instance of Cupon\TiendaBundle\Entity\Tienda given, called in /var/www/proyectos/cupon/src/Cupon/OfertaBundle/DataFixtures/ORM/Ofertas.php on line 107 and defined in /var/www/proyectos/cupon/vendor/symfony/src/Symfony/Component/Security/Acl/Domain/UserSecurityIdentity.php line 53

La verdad he buscado en todos lados no se si me puedas echar una mano

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.