Plugin semplice che consente agli utenti di caricare i file nella cartella Dropbox

Oggi scriveremo un plugin che consente agli utenti di inviare i loro file a te, al tuo account Dropbox. Potrebbe essere necessario per diversi scopi; Ad esempio, se offri un concorso per i tuoi lettori, potrebbe essere necessario inviarti alcuni file che vuoi partizionare su una cartella unica in Dropbox. In breve, questo plugin serve per ricevere i file, che non devono essere ancora resi pubblici, che devono essere esaminati dall'utente.


Prima di iniziare

È possibile scaricare il plug-in pronto tramite il pulsante Scarica sorgente. Ora descriveremo il nostro plugin passo dopo passo. Utilizzeremo la classe Dropbox Uploader di Jaka Jancar (sotto la licenza MIT) per creare il nostro plugin.

Costruiremo questo plug-in usando la nostra situazione ipotetica dal paragrafo introduttivo: supponiamo che tu stia ospitando una competizione per il "Miglior Screenshot del desktop" intorno ai tuoi utenti. Ogni utente del sito registrato può inviarti il ​​suo screenshot sul desktop. Dopo una scadenza, guarderai tutti e poi pubblicherai i vincitori. Quindi iniziamo a costruire il nostro plugin!


Passaggio 1 Creazione del primo file

Crea una cartella chiamata dbuploader nel wp-content / plugins diretory. Crea un nuovo file PHP chiamato DropboxUploader.php dentro; Aprilo nel tuo editor di testo e incolla e salva questo codice:

 email = $ email; $ this-> password = $ password;  public function setCaCertificateFile ($ file) $ this-> caCertSourceType = self :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file;  public function setCaCertificateDir ($ dir) $ this-> caCertSourceType = self :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir;  upload di funzioni pubbliche ($ filename, $ remoteDir = '/') if (! file_exists ($ nomefile) o! is_file ($ nomefile) o! is_readable ($ nomefile)) lanciare una nuova eccezione ("File '$ nomefile' fa non esiste o non è leggibile. "); if (! is_string ($ remoteDir)) lancia una nuova eccezione ("La directory remota deve essere una stringa, è" .gettype ($ remoteDir). "invece."); se (! $ this-> loggedIn) $ this-> login (); $ data = $ this-> request ('https://www.dropbox.com/home'); $ token = $ this-> extractToken ($ data, 'https://dl-web.dropbox.com/upload'); $ data = $ this-> request ('https://dl-web.dropbox.com/upload', true, array ('plain' => 'yes', 'file' =>'@'. filename nome file, 'dest' => $ remoteDir, 't' => $ token)); if (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) lancia una nuova eccezione ('Upload failed!');  login funzione protetta () $ data = $ this-> request ('https://www.dropbox.com/login'); $ token = $ this-> extractToken ($ data, '/ login'); $ data = $ this-> request ('https://www.dropbox.com/login', true, array ('login_email' => $ this-> email, 'login_password' => $ this-> password, ' t '=> $ token)); if (stripos ($ data, 'location: / home') === false) lancia una nuova Exception ('Login fallito.'); $ this-> loggedIn = true;  richiesta di funzione protetta ($ url, $ post = false, $ postData = array ()) $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, true); switch ($ this-> caCertSourceType) case self :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); rompere; case self :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); rompere;  curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); if ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);  // Invia cookie $ rawCookies = array (); foreach ($ this-> cookie come $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); if ($ data === false) lancia la nuova Exception ('Can not execute request:' .curl_error ($ ch)); // Memorizza i cookie ricevuti preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ corrisponde a $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); restituire $ dati;  funzione protetta extractToken ($ html, $ formAction) if (! preg_match ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (] * name = "t" [^>] * value = "(. *?)" [^>] *>). *?<\/form>/ è ', $ html, $ corrisponde) || ! isset ($ matches [2])) lancia una nuova eccezione ("Can not extract token! (form action = $ formAction)"); return $ matches [2];

Passaggio 2 Creazione del file del plug-in

Crea un file plugin principale chiamato dbuploader.php nella stessa directory; Aprilo all'interno del tuo editor e incolla e salva questo codice lì:

  $ size_limit) lancia una nuova eccezione ('La dimensione del file è troppo grande o il tipo di file non è supportato.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); if (! mkdir ($ tmpDir)) lancia una nuova Exception ('Can not create directory temporanea!'); if ($ _FILES ['file'] ['name'] === "") genera una nuova eccezione ('Nome file non fornito dal browser.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email .'_ '. $ _ FILES [' file '] [' name ']); if (! move_uploaded_file ($ _ FILES ['file'] ['tmp_name'], $ tmpFile)) lancia la nuova eccezione ('Impossibile rinominare il file caricato!'); // Inserisci qui le credenziali dell'account Dropbox $ uploader = new DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> upload ($ tmpFile, $ _POST ['dest']); ritorno 'File caricato correttamente. Grazie!';  catch (Exception $ e) return 'Errore: '. htmlspecialchars ($ e-> getMessage ()). '';  // Pulisci se (isset ($ tmpFile) && file_exists ($ tmpFile)) scollega ($ tmpFile); if (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  else return ' 

Demo di Uploader di Dropbox



'; //////////////// add_action ('the_content', 'dbouploader'); ?>

Passaggio 3: completamento del plug-in:

Creare config.php file nella cartella del plugin, quindi incollare il codice qui:

 

Quindi modifica questo codice: imposta la tua email, password, cartella dropbox, limite di dimensione del file, tipi di file supportati e poi salvalo.


Alcuni suggerimenti:

Suggerimento 1:

Se vuoi renderlo disponibile per tutti gli utenti, non solo per gli utenti registrati, puoi modificare il codice, rimuovere questo ...

 if (is_user_logged_in ()) add_shortcode ('dbouploader', 'shortcoder');

... condizione dal plugin. Invece di farlo, puoi integrare Recaptcha con il tuo plugin.

Suggerimento 2:

Puoi anche formattare il nome dei file caricati. Modifica questa riga:

 $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email .'_ '. $ _ FILES [' file '] [' name ']);

Questo è tutto, buona fortuna!