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..
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!
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 ('/