Enkel plugin som lar brukerne laste opp filer til din Dropbox-mappe

I dag skal vi skrive et plugin som lar brukerne sende sine filer til deg, til Dropbox-kontoen din. Det kan være nødvendig for flere formål; Hvis du for eksempel gir en konkurranse til leserne dine, kan de kanskje sende deg noen filer du vil partisjonere på, på en unik mappeplass i Dropbox. Kort sagt, dette pluginet er for å motta filer, som ikke må publiseres enda, som må vurderes av deg.


Før vi begynner

Du kan laste ned klar plugin via Download Source-knappen. Nå skal vi beskrive vår plugin trinnvis. Vi bruker Jaka Jancars Dropbox Uploader-klasse (under MIT-lisens) for å lage vårt plugin.

Vi vil bygge dette pluginet ved hjelp av vår egen hypotetiske situasjon fra intro-avsnittet. Anta at du er vert for en konkurranse om "Best Desktop Screenshot" rundt brukerne. Hver registrert bruker kan sende skjermbilde til deg. Etter en frist, vil du se alt og da vil du publisere vinnerne. Så la oss begynne å bygge vårt plugin!


Trinn 1 Opprette første fil

Opprett en mappe som heter dbuploader i wp-innhold / tillegg diretory. Opprett en ny PHP-fil kalt DropboxUploader.php inni det; Åpne den i tekstredigeringsprogrammet og lim inn og lagre denne koden:

 e-post = $ email; $ dette-> passord = $ passord;  offentlig funksjon setCaCertificateFile ($ file) $ this-> caCertSourceType = selv :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file;  offentlig funksjon setCaCertificateDir ($ dir) $ this-> caCertSourceType = selv :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir;  offentlig funksjon opplasting ($ filnavn, $ remoteDir = '/') hvis (! file_exists ($ filnavn) eller! is_fil ($ filnavn) eller! is_readable ($ filnavn)) kaste nye unntak ikke eksisterer eller er ikke lesbar. "); hvis (! is_string ($ remoteDir)) kaste ny unntak ("Fjern katalogen må være en streng, er" .gettype ($ remoteDir). "i stedet."); hvis (! $ 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' =>'@'.$ filnavn, 'dest' => $ remoteDir, 't' => $ token)); hvis (strpos ($ data, 'HTTP / 1.1 302 FUNDET') === falsk) kaste ny unntak ('Upload mislyktes!');  beskyttet funksjon logg inn () $ data = $ this-> forespørsel ('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' => $ dette-> passord, ' t '=> $ token)); hvis (stripos ($ data, 'location: / home') === false) kaste ny unntak ('Logg inn mislykket.'); $ this-> loggedIn = true;  beskyttet funksjonsforespørsel ($ 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); bytt ($ this-> caCertSourceType) tilfelle selv :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); gå i stykker; tilfelle selv :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); gå i stykker;  curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); hvis ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);  // Send 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); hvis ($ data === false) kaste ny unntak ('Kan ikke utføre forespørsel:' .curl_error ($ ch)); // Store mottatte informasjonskapsler preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ matcher som $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); returner $ data;  beskyttet funksjon extractToken ($ html, $ formAction) if (! preg_match ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (] * navn = "t" [^>] * verdi = "(. *?)" [^>] *>). *?<\/form>/ er ', $ html, $ matches) || ! isset ($ matches [2])) kaste ny unntak ("Kan ikke pakke ut token! (form handling = $ formAction)"); returner $ treff [2];

Trinn 2 Bygg pluginfilen

Opprett hoved plugin-fil kalt dbuploader.php i samme katalog; Åpne den inne i editoren din og lim inn og lagre denne koden der:

  $ size_limit) kaste ny unntak ('Filstørrelsen er for stor eller filtype støttes ikke.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); hvis (! mkdir ($ tmpDir)) kaste ny unntak ('Kan ikke opprette midlertidig katalog!'); hvis ($ _FILES ['file'] ['name'] === "") kaste ny unntak ('Filnavn ikke levert av nettleseren.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email .'_ '. $ _ FILES [' fil '] [' navn ']); hvis (! move_uploaded_file ($ _ FILES ['fil'] ['tmp_name'], $ tmpFile)) kaste ny unntak ('Kan ikke endre navn på opplastet fil!'); // Skriv inn dine Dropbox-konto legitimasjon her $ uploader = ny DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> laste opp ($ tmpFile, $ _POST ['dest']); komme tilbake 'Filen ble lastet opp. Takk skal du ha!';  fangst (Unntak $ e) retur 'Feil: '. htmlspecialchars ($ e-> getMessage ()). '';  // Clean up hvis (isset ($ tmpFile) && file_exists ($ tmpFile)) unlink ($ tmpFile); hvis (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  annet return " 

Dropbox Uploader Demo



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

Trinn 3 Etterbehandling Plugin:

Skape config.php filen i plugin-mappen din, og lim deretter inn denne koden der:

 

Rediger deretter denne koden: Angi e-post, passord, dropbox-mappe, filstørrelsesgrense, støttede filtyper og lagre det.


Noen forslag:

Forslag 1:

Hvis du vil gjøre det tilgjengelig for alle brukere, ikke bare for innloggede brukere, kan du redigere koden, fjerne dette ...

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

... tilstand fra plugin. I stedet for det kan du integrere Recaptcha med pluginet ditt.

Forslag 2:

Du kan også formatere opplastede filmers navn. Bare rediger denne linjen:

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

Det er alt, lykke til!