Visualizzazione post con etichetta programmazione. Mostra tutti i post
Visualizzazione post con etichetta programmazione. Mostra tutti i post

venerdì 25 luglio 2014

Utilizzando FosUserBundle il ruolo ROLE_USER non viene salvato nel database

Può capitare di dover attribuire dei ruoli differenti per ogni utente in un progetto Symfony2.

Se si utilizza FosUserBundle, il ruolo ROLE_USER sarà attribuito di default a tutti gli utenti e non sarà possibile salvarlo nel database.

Se si scrive qualcosa del genere
$user->addRole('ROLE_USER');

Il risultato sarà quello di avere un array vuoto nel database.

{}

 A seconda delle proprie necessità converrà aggiungere un nuovo ruolo, qualcosa del genere

$user->addRole('ROLE_CLIENT');

 oppure lasciare il database vuoto, consapevoli del fatto che il ruolo ROLE_USER é stato comunque aggiunto.

mercoledì 23 luglio 2014

Soft delete con Symfony2

Può capitare di dover implementare un sistema di soft delete nella propria applicazione web.

Niente di più semplice con queste estensioni di doctrine.

Per installare il bundle basta seguire le istruzioni.

Una volta installato é necessario modificare in questo modo la configurazione di doctrine nel file # app/config/config.yml
# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
        filters:
            softdeleteable:
                class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                enabled: true

Solo le ultime 4 righe sono da aggiungere, le altre dovrebbero essere già presenti nel file di configurazione.


Sempre nel file # app/config/config.yml aggiungiamo le righe:

stof_doctrine_extensions:
    orm:
        default:
            softdeleteable: true

Ora non ci rimane che andare a modificare l'entity per la quale vogliamo utilizzare il soft delete.

Apriamo il file dell'entity, ad esempio # src/Acme/UserBundle/Entity/User.php.

Aggiungiamo prima della classe
use Gedmo\Mapping\Annotation as Gedmo;

La riga seguente invece va inserita tra i commenti, sempre prima della classe

 /*
 * @Gedmo\SoftDeleteable(fieldName="deletedAt")
 */

come ultima cosa aggiungiamo il campo che farà la differenza tra un record cancellato e uno ancora in uso.

    /**
     * @var \DateTime $deletedAt
     *
     * @ORM\Column(name="deleted_at", type="datetime", nullable=true)
     */
    private $deletedAt;


La classe dovrebbe essere più o meno così



namespace Acme\UserBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo; 
/**
 * @Gedmo\SoftDeleteable(fieldName="deletedAt")
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var \DateTime $deletedAt
     *
     * @ORM\Column(name="deleted_at", type="datetime", nullable=true)
     */
    private $deletedAt; 

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }


     
Il sistema fa tutto da solo, non c'é bisogno di modificare nient'altro, né le chiamate per cancellare le entity ->remove($user) né le query per selezionare i dati. Tra l'altro, se sono presenti delle relazioni tra tabelle (scritte correttamente) e se le query sono scritte bene, viene aggiornato tutto automaticamente.

lunedì 14 luglio 2014

Modificare o aggiungere codice CSS in una sola pagina di Wordpress

Come fare se si vuole modificare il codice CSS solo in una pagina di wordpress?
Per esempio, abbiamo un testo, e solo in quella pagina vogliamo modificarne la dimensione.

Basta aggiungere il seguente codice al file functions.php del tema Wordpress che stiamo utilizzando.
Per fare questo si puó accedere direttamente all'editor dal pannello di controllo, non c'è bisogno di andare a editare i file a mano.

Il codice da inserire è questo:

add_action('admin_menu', 'custom_css_hooks');
 add_action('save_post', 'save_custom_css');
 add_action('wp_head','insert_custom_css');
 function custom_css_hooks() {
 add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'post', 'normal', 'high');
 add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'page', 'normal', 'high');
 }
 function custom_css_input() {
 global $post;
 echo '<input type="hidden" name="custom_css_noncename" id="custom_css_noncename" value="'.wp_create_nonce('custom-css').'" />';
 echo '<textarea name="custom_css" id="custom_css" rows="5" cols="30" style="width:100%;">'.get_post_meta($post->ID,'_custom_css',true).'</textarea>';
 }
 function save_custom_css($post_id) {
 if (!wp_verify_nonce($_POST['custom_css_noncename'], 'custom-css')) return $post_id;
 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
 $custom_css = $_POST['custom_css'];
 update_post_meta($post_id, '_custom_css', $custom_css);
 }
 function insert_custom_css() {
 if (is_page() || is_single()) {
 if (have_posts()) : while (have_posts()) : the_post();
 echo '<style type="text/css">'.get_post_meta(get_the_ID(), '_custom_css', true).'</style>';
 endwhile; endif;
 rewind_posts();
 }
 }

Una volta salvato il file con la modifica, comparirà nel pannello di editor della pagina una finestrella per inserire il codice css.

venerdì 27 giugno 2014

Javascript controllare se una funzione esiste

Potrebbe capitare di dover controllare se una funzione javascript esiste.
Questo metodo è collaudatissimo.

Enjoy

if (typeof nomefunzione == 'function' ) { nomefunzione(); }

mercoledì 18 giugno 2014

Inviare file tramite ajax jquery

Come inviare un form con un file o un'immagine tramite jquery?
Utilizzando l'oggetto FormData

Questo é un esempio di codice per un form che invia due variabili, la prima é il file e la seconda é un campo di testo.


$( "#sendImage" ).click(function() {
var formData = new FormData($("form#myForm")[0]);
formData.append( 'text', $("form#myForm")[1] );
 $.ajax({
   url: Routing.generate('_admin_insert_picture_broker_action'),
   type: 'POST',
   data: formData,
   async: false,
   cache: false,
   contentType: false,
   processData: false,
   success: function (returndata) {
     alert(returndata);
   }
 });
});
});

Per quanto riguarda l'URL, sto utilizzando un bundle per symfony per propagare le rotte nel codice javascript.
Se non si utilizza bisogna ovviamente cambiare quella riga.

MIME Types – Lista completa

Spesso serve utilizzare MIME Types per specificare la tipologia di un determinato file, però non si ricorda il nome corretto.

Ecco una lista con tutti i tipi di file.

giovedì 20 febbraio 2014

Visualizzare documenti PDF con PHP e Symfony2

Come fare per visualizzare un documento pdf nel proprio sito senza dover per forza fare il download? Ci aiuta una libreria scritta in HTML5 e Javascript, sviluppata da Mozilla.

PDF.js

Demo

Per utilizzarla con Symfony2 abbiamo anche un bundle che ci semplifica la vita.

SalvaPdfJsBundle

Nella pagina è presente tutta la documentazione necessaria per utilizzarlo.



Ho trovato anche questo, dovrebbe essere un'alternativa, però non l'ho testato.

Viewer.JS

Discussione su stackoverflow.com

sabato 8 febbraio 2014

Testare siti su IE 6 7 8 9 utilizzando linux o Mac OSX

Per una volta Microsoft è stata buona.
Per testare il proprio sito su IE 6 7 - 8 - 9 basta utilizzare virtualbox.

In questo momento sto utilizzando Ubuntu 13.04, quindi tutti i comandi scritti saranno relativi a questo sistema operativo.

Per prima cosa, installare VirtualBox.

# sudo apt-get install virtualbox

Poi ci sarà bisogno di installare curl e unar.
UNAR sarà necessario installarlo solo su linux, se si utilizza Mac OSX non sarà necessario.
# sudo apt-get install curl unar

Per scaricare tutte e tre le versioni di IE:
# curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | bash

 Per scaricare solo quella che vi interessa:

IE 6
# curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="6" bash
IE 7
# curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="7" bash
IE 8
# curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="8" bash 
IE 9
# curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="9" bash 


Una volta finita l'installazione troverete i sistemi gia montati su virtualbox.

La password per ogni virtual machine è "Password1".

domenica 1 dicembre 2013

Ottenere informazioni utente fosUserBundle Symfony2

Per recuperare I dati dell'utente nel controller è necessario utilizzare l'oggetto
$this->getUser()
Quindi per recuperare, ad esempio, l'id dell'utente bisogna utilizzare il metodo ->getId quindi:
$this->getUser()->getId()
Per fare la stessa cosa sul template, quindi utilizzando twig, bisogna fare la stessa cosa, quindi per far spampare l'username dell'utente:
{{ app.user.username }}
E' possibile anche controllare se l'utente è loggato:
{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}
Ovviamente è necessario scrivere al posto di ROLE il reale ruolo dell'utente, quello che si è scritto nel file di configurazione, ad esempio ROLE_USER o ROLE_ADMIN.

mercoledì 10 agosto 2011

Convertire font on line

Può capitare di aver bisogno del file con i fon in formati differenti, questo sito accetta il file del font in upload a restituisce il font in tutti i formati.
Funziona anche senza registrazione.

http://www.fontconverter.org/


Per convertire da .ttf a .eot

http://www.kirsle.net/wizards/ttf2eot.cgi

venerdì 9 ottobre 2009

Alternativa MAC a easyphp

Installare con un solo click php, apache, mysql, phpmyadmin e un sacco di altri strumenti e librerie per la programmazione web. Tutto gratuito e per mac.

MAMP
scaricabile qui:
http://www.mamp.info/en/index.html