Simple Plugin qui permet aux utilisateurs de télécharger des fichiers dans votre dossier Dropbox

Aujourd'hui, nous allons écrire un plug-in qui permet à vos utilisateurs de vous envoyer leurs fichiers, sur votre compte Dropbox. Cela pourrait être nécessaire à plusieurs fins; Par exemple, si vous organisez un concours pour vos lecteurs, ils devront peut-être vous envoyer certains fichiers que vous souhaitez partitionner sur un emplacement de dossier unique dans Dropbox. En bref, ce plugin est destiné à recevoir des fichiers, qui ne doivent pas encore être rendus publics, qui doivent être revus par vous..


Avant de commencer

Vous pouvez télécharger le plugin prêt via le bouton Download Source. Nous allons maintenant décrire notre plugin pas à pas. Nous allons utiliser la classe Dropbox Uploader de Jaka Jancar (sous licence MIT) pour créer notre plugin..

Nous allons construire ce plugin en utilisant notre propre situation hypothétique du paragraphe d'intro: Supposons que vous organisez un concours pour la "meilleure capture d'écran" autour de vos utilisateurs. Chaque utilisateur du site inscrit peut vous envoyer sa capture d'écran de bureau. Après une date limite, vous regarderez tous et vous publierez les gagnants. Commençons donc à construire notre plugin!


Étape 1: Création du premier fichier

Créez un dossier appelé dbuploader dans wp-content / plugins répertoire. Créez un nouveau fichier PHP appelé DropboxUploader.php à l'intérieur; Ouvrez-le dans votre éditeur de texte et collez et enregistrez ce code:

 email = $ email; $ this-> mot de passe = $ mot de passe;  public function setCaCertificateFile ($ fichier) $ this-> caCertSourceType = self :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ fichier;  fonction publique setCaCertificateDir ($ dir) $ this-> caCertSourceType = self :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir;  fonction publique upload ($ filename, $ remoteDir = '/') if (! file_exists ($ filename) ou! is_file ($ filename) ou! is_readable ($ filename)) lève une nouvelle exception ("File '$ filename' ne n'existe pas ou n'est pas lisible. "); if (! is_string ($ remoteDir)) lève une nouvelle exception ("Le répertoire distant doit être une chaîne, est" .gettype ($ remoteDir). "à la place."); if (! $ this-> connecté) $ 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' =>'@'.nomme le nom du fichier, 'dest' => $ remoteDir, 't' => $ token)); if (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) émet une nouvelle exception ('Le téléchargement a échoué!');  fonction protégée login () $ 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-> mot de passe, ' t '=> $ token)); if (stripos ($ data, 'location: / home') === false) émet une nouvelle exception ('Connexion infructueuse.'); $ this-> logsIn = true;  demande de fonction protégée ($ 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); Pause; case self :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); Pause;  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);  // Envoyer des cookies $ rawCookies = array (); foreach ($ this-> cookies comme $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = imploser (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); if ($ data === false) émet une nouvelle exception ('Impossible d'exécuter la requête:' .curl_error ($ ch)); // Stocke les cookies reçus preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ correspond à $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); retourne $ data;  fonction protégée extractToken ($ html, $ formAction) if (! preg_match ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (?] * name = "t" [^>] * valeur = "(. *?)" [^>] *>). *?<\/form>/ is ', $ html, $ matches) || ! isset ($ matches [2])) lève une nouvelle exception ("Impossible d'extraire le jeton! (action action = $ formAction)"); retourne $ correspondances [2];

Étape 2 Construire le fichier de plugin

Créer le fichier de plugin principal appelé dbuploader.php dans le même répertoire; Ouvrez-le dans votre éditeur et collez et sauvegardez ce code là:

  $ size_limit) renvoie une nouvelle exception ('La taille du fichier est trop grande ou le type de fichier n'est pas supporté.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); if (! mkdir ($ tmpDir)) lance une nouvelle exception ('Impossible de créer un répertoire temporaire!'); if ($ _FILES ['fichier'] ['nom'] === "") génère une nouvelle exception ('Nom de fichier non fourni par le navigateur.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email .'_ '. $ _ FILES [' fichier '] [' nom ']); if (! move_uploaded_file ($ _ FILES ['fichier'] ['nom_tmp']], $ tmpFile)) émet une nouvelle exception ('Impossible de renommer le fichier téléchargé!'); // Entrez vos identifiants de compte Dropbox ici $ uploader = new DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> upload ($ tmpFile, $ _POST ['dest']); revenir 'Fichier téléchargé avec succès. Je vous remercie!';  catch (Exception $ e) return 'Erreur: ' . htmlspecialchars ($ e-> getMessage ()). '';  // Nettoyer si (isset ($ tmpFile) && file_exists ($ tmpFile)) unlink ($ tmpFile); if (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  else return ' 

Démo du téléchargeur Dropbox



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

Étape 3: Terminer le plugin:

Créer config.php fichier dans votre dossier plugin, puis collez ce code ici:

 

Puis modifiez ce code: définissez votre adresse électronique, votre mot de passe, votre dossier de dépôt, votre taille maximale et les types de fichiers pris en charge, puis enregistrez-le..


Quelques suggestions:

Suggestion 1:

Si vous voulez le rendre disponible pour tous les utilisateurs, pas seulement pour les utilisateurs connectés, vous pouvez alors éditer le code, le supprimer…

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

… Condition du plugin. Au lieu de cela, vous pouvez intégrer Recaptcha avec votre plugin.

Suggestion 2:

Vous pouvez également formater le nom des fichiers téléchargés. Il suffit de modifier cette ligne:

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

C'est tout, bonne chance!