Enkel plugin som låter användare ladda upp filer till din Dropbox-mapp

Idag skriver vi ett plugin som låter dina användare skicka sina filer till dig, till ditt Dropbox-konto. Det kan behövas för flera ändamål; Om du till exempel gör en tävling för dina läsare, kan det hända att de kanske behöver skicka några filer som du vill dela upp på en unik mappplacering i Dropbox. Kort sagt, det här pluginet är för att ta emot filer, vilket inte får offentliggöras ännu, vilket måste ses över av dig.


Innan vi börjar

Du kan ladda ner färdigt plugin via Download Source-knappen. Nu ska vi beskriva vårt plugin steg för steg. Vi använder Jaka Jancars Dropbox Uploader-klass (under MIT-licens) för att skapa vårt plugin.

Vi kommer att bygga detta plugin med vår egen hypotetiska situation från intro-stycket: Anta att du är värd en tävling för "Bästa skrivbordsskärmbilden" runt dina användare. Varje registrerad webbplatsanvändare kan skicka sin skärmdump till dig. Efter en deadline ser du allt och då publicerar du vinnarna. Så låt oss börja bygga vårt plugin!


Steg 1 Skapa första fil

Skapa en mapp som heter dbuploader i wp-content / plugins diretory. Skapa en ny PHP-fil som heter DropboxUploader.php innuti; Öppna den i din textredigerare och klistra in och spara den här koden:

 email = $ email; $ this-> password = $ password;  allmän funktion setCaCertificateFile ($ file) $ this-> caCertSourceType = själv :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file;  allmän funktion setCaCertificateDir ($ dir) $ this-> caCertSourceType = själv :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir;  public function upload ($ filnamn, $ remoteDir = '/') om (! file_exists ($ filnamn) eller! is_fil ($ filnamn) eller! is_readable ($ filnamn)) slänga nya undantag existerar inte eller kan inte läsas. "); om (! is_string ($ remoteDir)) kasta ny Undantag ("Fjärrkatalog måste vara en sträng, är" .gettype ($ remoteDir). "istället."); om (! $ 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 ('vanlig' => 'ja', 'fil' =>'@'.$ filnamn, 'dest' => $ remoteDir, 't' => $ token)); om (strpos ($ data, 'HTTP / 1.1 302 FONDS') === false) kasta ny Undantag ('Upload failed!');  skyddad funktion inloggning () $ data = $ this-> request ('https://www.dropbox.com/login'); $ token = $ this-> extractToken ($ data, '/ login'); $ data = $ this-> request ('https://www.dropbox.com/login', sant, array ('login_email' => $ this-> email, 'login_password' => $ this-> lösenord, ' t '=> token $)); om (stripos ($ data, 'location: / home') === false) kasta ny Undantag ('Logga in misslyckad.'); $ this-> loggedIn = true;  skyddad funktionsförfrågan ($ 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) fall själv :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); ha sönder; fallet själv :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); ha sönder;  curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); om ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);  // Skicka cookies $ rawCookies = array (); foreach ($ this-> cookies som $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); om ($ data === false) kasta ny undantag ('Kan inte utföra begäran:' .curl_error ($ ch)); // Store mottagna cookies preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matchningar, PREG_SET_ORDER); foreach ($ matchningar som $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); returnera $ data;  skyddad funktion extraktToken ($ html, $ formAction) om (! preg_match ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (] * namn = "t" [^>] * värde = "(. *?)" [^>] *>). *?<\/form>/ är ', $ html, $ matchningar) || ! isset ($ matchar [2])) kasta ny Undantag ("Kan inte extrahera token! (form action = $ formAction)"); returnera $ matchningar [2];

Steg 2 Bygg pluginfilen

Skapa huvud pluginfil som heter dbuploader.php i samma katalog; Öppna den inuti din editor och klistra in och spara den här koden där:

  $ size_limit) kasta ny Undantag ('Filstorlek är för stor eller filtyp stöds inte.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); om (! mkdir ($ tmpDir)) kasta ny Undantag ('Kan inte skapa tillfällig katalog!'); om ($ _FILES ['file'] ['name'] === "") kasta ny Undantag ('Filnamn levereras inte av webbläsaren.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", "_", $ current_user-> user_email .'_ '. $ _ FILES [' fil '] [' namn ']); om (! move_uploaded_file ($ _ FILES ['file'] ['tmp_name'], $ tmpFile)) kasta ny Undantag ('Kan inte byta namn på uppladdad fil!'); // Ange ditt lösenord för Dropbox-konto här $ uploader = ny DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> ladda upp ($ tmpFile, $ _POST ['dest']); lämna tillbaka 'Filen har laddats upp. Tack!';  fångst (Undantag $ e) returneraFel: '. htmlspecialchars ($ e-> getMessage ()). '';  // Rensa om (isset ($ tmpFile) && file_exists ($ tmpFile)) koppla bort ($ tmpFile); om (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  annars returnera " 

Dropbox Uploader Demo



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

Steg 3 Slutför plugin:

Skapa config.php filen i din plugin-mapp och klistra in den här koden där:

 

Redigera sedan den här koden: Ange ditt email, lösenord, dropbox-mapp, filstorleksgräns, stödda filtyper och spara sedan.


Några förslag:

Förslag 1:

Om du vill göra den tillgänglig för alla användare, inte bara för inloggade användare, kan du redigera koden, ta bort den här ...

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

... villkor från plugin. I stället för det kan du integrera Recaptcha med ditt plugin.

Förslag 2:

Du kan också formatera uppladdade filer namn. Redigera bara den här raden:

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

Det är allt lycka till!