Joomla.it Forum

Non solo Joomla... => Sviluppo => : playpaf 11 Apr 2012, 00:02:47

: Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 00:02:47
Ciao,
ho creato un plugin che al login mi crea uan cartella con l'ID. Questa è la funzione che ho creato:
     function onLoginUser() {
        $app = &JFactory::getApplication();
        $user = JFactory::getUser();
       
        if ($user->id!=null) {
            mkdir('./images/contents/'.$user, 0744);
            return true;
        } else {
            return false;
        }
    }
solo che quando faccio il login, non succede nulla. Qualcuno sa darmi qualche suggerimento?
La mia idea è di creare un plugin che al primo accesso mi crea la cartella con nome ID dell'utente (in modo da essere sicuro che sia univoco).

Grazie 1000 per l'aiuto!!!

Salvo
: Re:Creare pligin per creare cartelle
: gargamella16 11 Apr 2012, 00:43:15
non capisco il senso di quello che vuoi fare puoi spiegarmi meglio?


è chiaro che l'ID utente è univoco  :o
: Re:Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 09:14:47
in pratica devo creare una cartella per ogni utente registrato. la mia idea è: quando l'utente accede, viene creata la cartella in "path/ID" (con ID che è un numero univoco). Utilizzo l'id proprio per la sua univocità.
Ho creato il plugin e installato senza problemi, ma quando faccio il login non succede nulla, la cartella non viene create e non trovo nessun codice di errore.

Grazie per la'iuto.
Salvo
: Re:Creare pligin per creare cartelle
: mau_develop 11 Apr 2012, 09:39:59
...quindi io accedo mille volte e tu ti trovi 1000 cartelle... buona idea!
M
: Re:Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 10:09:09
ovviamente non è un'idea giusta...  ;)
però se funziona devo solo associarlo all'evento di registrazione di un'utente. Hai qualche suggerimento da darmi?  :)

Grazie
Salvo
: Re:Creare pligin per creare cartelle
: webbati 11 Apr 2012, 10:19:29


http://docs.joomla.org/How_to_use_the_filesystem_package#Create_folder (http://docs.joomla.org/How_to_use_the_filesystem_package#Create_folder)
: Re:Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 11:35:07
quindi basta eliminare la riga "mkdir('./images/contents/'.$user, 0744)" e inserire "JFolder::create(./images/contents/'.$user->id, 0744)", giusto???

grazie
Salvo
: Re:Creare pligin per creare cartelle
: webbati 11 Apr 2012, 11:40:39
assolutamente no

...quindi io accedo mille volte e tu ti trovi 1000 cartelle... buona idea!

prima devi almeno controllare che la cartella non esista già
: Re:Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 11:55:43
bene, vedo che ho capito tutto...  ;D
allora come dovrei fare? poi a quale evento dovrei associare il plugin?

grazie
salvo
: Re:Creare pligin per creare cartelle
: mau_develop 11 Apr 2012, 13:14:00
/'.$user, 0744)"
-------------------------
anche qs lo vedo male.. se l'user è:  ?*pippo?* ... come la crei una cartella così?
dovresti codificare tutto, magari md5 o creando un algoritmo.

poi è possibile fare un gioco che su alcuni sistemi crea problemi nominando la cartella .php, basta che io sia l'user pippo.php

comunque è tutto nel link sopra ciò che vuoi sapere,... per l'evento...  la registrazione o la conferma se esiste, non so se esiste il trigger, però lo puoi creare.

...poi ... mi divertirei a provare che succede se l'user fosse pippo,0777)/* ...... sai che mi stimolano i tuoi script? :):)

M.
: Re:Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 13:23:36
$user è un oggetto, basta fare "$user->id" per avere l'id univoco associato all'utente.
Infatti pensavo di fare: If(user!=null) then {"crea cartella"} con JFolder.
Stasera dò un'occhiata al link che mi hai passato e ti faccio sapere.

Ciao e grazie
Salvo
: Re:Creare pligin per creare cartelle
: playpaf 11 Apr 2012, 23:29:11
Ho provato con questa funzione:
function onUserLogin() {
        $app = &JFactory::getApplication();
        $user = JFactory::getUser();
       
        $mode = 0744;
       
        if ($user->id!=null) {
            $path = JPATH_SITE . "/images/content/" . $user->id;
            JFolder::create($path);
            return true;
        } else {
            $path = JPATH_SITE . "/salvo";
            JFolder::create($path);
            return false;
        }
    }

ma non succede nulla. Qualche idea???

Grazie
Salvo
: Re:Creare pligin per creare cartelle
: mau_develop 12 Apr 2012, 12:35:09
$mode = 0744;
------------------------
cosa ti serve?

M.
: Re:Creare pligin per creare cartelle
: playpaf 12 Apr 2012, 13:37:39
un plugin che quando un utente si registra al sito, crea una cartella in un determinato path e che ha come nome l'ID dell'utente. Questo perché l'utente carica dei file (immagini, etc...) in uno spazio dedicato!

Grazie per l'aiuto
Salvo
: Re:Creare pligin per creare cartelle
: mau_develop 12 Apr 2012, 17:12:10
no, cosa ti serve $mode se poi non lo usi

e app ? perchè la istanzi? se nn ci fai nulla non fa nulla da sola

M.
: Re:Creare pligin per creare cartelle
: playpaf 12 Apr 2012, 17:17:36
qpp non mi serve, è un copia e incolla di troppo, mentre mode lo uso l'ho tolto solo per capire se il problema era quella variabile, ma mi sbagliavo!
: Re:Creare pligin per creare cartelle
: webbati 12 Apr 2012, 17:40:19
nel file xml di installazione lo hai definito come plugin di tipo 'user' ?
: Re:Creare pligin per creare cartelle
: playpaf 12 Apr 2012, 18:24:33
Si. E' corretto l'evento "onUserLogin" ???
: Re:Creare pligin per creare cartelle
: playpaf 13 Apr 2012, 10:52:31
nessun suggerimento?
: Re:Creare pligin per creare cartelle
: webbati 13 Apr 2012, 12:16:09
Prova così:

sostituisci

:
onUserLogin()
con

:
onUserLogin($user, $options = array())
e recuperi l'ID dell'utente così:

:

if ($uid = intval(JUserHelper::getUserId($user['username'])))

: Re:Creare pligin per creare cartelle
: playpaf 13 Apr 2012, 17:05:50
ok, grazie! Stasera lo provo.
Volevo anche chiederti quale è l'evento di registrazione di un nuovo utente?
Nella funzione ho messo "onLoginUser" per fare una prova, ma se volessi cambiare e associarlo all'evento di iscrizione di un nuovo utente che nome devo dare? è sempre di tipo user?

Grazie
Salvo
: Re:Creare pligin per creare cartelle
: playpaf 13 Apr 2012, 19:56:05
Purtroppo non funziona...
Altri suggerimenti? Aiutoooooo!!!
: Re:Creare pligin per creare cartelle
: mau_develop 13 Apr 2012, 20:03:32
..secondo me stai andando a caso... ma hai fatto il pacchetto... installato il plugin... attivato... usato lo standard joomla per i nomi etc?

M.
: Re:Creare pligin per creare cartelle
: playpaf 13 Apr 2012, 20:14:43
Premesso che è il mio primo plugin, credo che sto facendo tutto quello che mi hai detto. Ti incollo il file xml:
<?xml version="1.0" encoding="iso-8859-1"?>
<install version="2.5" type="plugin" group="user">
    <name>Creare cartelle al 1° login utente</name>
    <author>Salvo</author>
    <creationDate>April 2012</creationDate>
    <copyright>(C) 2005 Open Source Matters. All rights reserved.</copyright>
    <license></license>
    <authorEmail>XXXXXXX</authorEmail>
    <authorUrl>XXXXXXX</authorUrl>
    <version>1.0</version>
    <description>Allows searching of Categories information</description>
    <files>
        <filename plugin="contentCreateFolder">contentCreateFolder.php</filename>
    </files>
    <params>
    </params>
</install>
viene installato senza problemi e dal pannello di amministrazione riesco ad accederci senza erroro. Però, quando faccio il login, non crea nessuna cartella!!!
: Re:Creare pligin per creare cartelle
: playpaf 13 Apr 2012, 20:18:23
Mentre il PHP completo è questo:
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
// Import library dependencies
jimport('joomla.plugin.plugin');
 
class plgUserCreateFolder extends JPlugin {
   
    //function plgContentCreateFolder( &$subject, $config ) {
    function plgUserCreateFolder( &$subject, $config ) {
        parent::__construct( $subject, $config );
    }

    //function onBeforeDisplayContent() {
    //function onLoginUser() {
    function onUserLogin($user, $options = array()) {
        //$user = JFactory::getUser();
       
        $mode = 0744;
        $user_id = (int)$user['id'];
        //if ($user->id!=null) {
        if ($uid = intval(JUserHelper::getUserId($user['username']))) {
            $path = JPATH_SITE . '/images/content/' . $user_id;
            JFolder::create($path);
            return true;
        } else {
            $path = JPATH_SITE . '/salvo';
            JFolder::create($path);
            return false;
        }
    }
}
?>

Grazie per l'aiuto!!!
: Re:Creare pligin per creare cartelle
: playpaf 13 Apr 2012, 20:26:54
Ho fatto una prova inserendo questa parte di codice:
        $user = JFactory::getUser();
        $user_id = $user->id;
        if ($user_id!=null) {
            $path = JPATH_SITE . '/images/content/' . $user_id;
            JFolder::create($path);
            return true;
        } else {
            $path = JPATH_SITE . '/salvo';
            JFolder::create($path);
            return false;
        }
durante l'inserimento di un annuncio e funziona regolarmente, quindi il problema è che non viene richiamato il plugin nel modo corretto. Sai indicarmi se ho fatto qualche errore nella configurazione?

Grazie 1000!
: Re:Creare pligin per creare cartelle
: mau_develop 14 Apr 2012, 10:09:24
che cos'è e cosa fa?

function plgUserCreateFolder( &$subject, $config ) {
        parent::__construct( $subject, $config );
    }
: Re:Creare pligin per creare cartelle
: playpaf 14 Apr 2012, 16:06:44
Onestamente non lo so, ho copiato da un altro plugin trovato in rete, cosa ho sbaglioto?

grazie
Salvo
: Re:Creare pligin per creare cartelle
: playpaf 15 Apr 2012, 17:42:38
Idee?

Grazie
Salvo
: Re:Creare pligin per creare cartelle
: mau_develop 15 Apr 2012, 17:57:03
Idee?
--------
beh si, ... studia. Aiutarti a farlo o darti dritte è un conto, farlo un'altro.

M.
: Re:Creare pligin per creare cartelle
: playpaf 16 Apr 2012, 09:26:19
Non mi sembra di aver mai scritto, puoi farmi il plugin? Ho sempre chiesto dei suggerimenti che ho riprodotto, ma purtroppo non hanno funzionato.
Continuerò a cercare come risolvere il problema...

Ciao e grazie
Salvo
: Re:Creare pligin per creare cartelle
: webbati 16 Apr 2012, 10:46:14
Controlla che i nomi della classe, dei file e della definizione del nome del plugin nel file xml siano tutti uguali.

qui

:

 if ($uid = intval(JUserHelper::getUserId($user['username']))) {
$path = JPATH_SITE . '/images/content/' . $user_id;


ovviamente dovrebbe essere così se non era un refuso del tuo copia e incolla

:

 if ($uid = intval(JUserHelper::getUserId($user['username']))) {
 $path = JPATH_SITE . '/images/content/' . $uid;
 
 


questo cos'è? questo ti produce un errore,

:

$user_id = (int)$user['id'];


e cava anche sta roba come ti ho già detto

:

$user = JFactory::getUser();
$user_id = $user->id;



se  avessimo già l'id in $user non servirebbe questo no?
:

JUserHelper::getUserId($user['username'])



controlla di aver scritto tutto bene, di aver fatto tutte le modifiche che ti abbiamo detto e vedrai che ti funziona
: Re:Creare pligin per creare cartelle
: webbati 16 Apr 2012, 12:26:05

Volevo anche chiederti quale è l'evento di registrazione di un nuovo utente?
Nella funzione ho messo "onLoginUser" per fare una prova, ma se volessi cambiare e associarlo all'evento di iscrizione di un nuovo utente che nome devo dare? è sempre di tipo user?


puoi fare riferimento a questa pagina:

http://docs.joomla.org/Plugin/Events (http://docs.joomla.org/Plugin/Events)

tenendo conto che alcuni eventi sono stati rinominati, qui puoi vedere quali:

http://docs.joomla.org/Adapting_a_Joomla_1.5_extension_to_Joomla_1.6#Renamed_Events (http://docs.joomla.org/Adapting_a_Joomla_1.5_extension_to_Joomla_1.6#Renamed_Events)


ciao

: Re:Creare pligin per creare cartelle
: playpaf 16 Apr 2012, 13:39:27
Sono riuscito a creare il plugin e a far creare la cartella sul mio PC in locale. Se metto il plugin sul sito online e provo ad accedere, la pagina del browser rimane bianca (al momento non ho verificato se crea la cartella, ora non posso controllare), dovrò fare delle verifiche.
Credo di aver dimenticato di dire che la versione di Joomla utilizzata è la 2.5!

Ciao e grazie.
Salvo