Hoy escribiremos un complemento que le permitirá a sus usuarios enviarle sus archivos a usted, a su cuenta de Dropbox. Puede ser necesario para varios propósitos; Por ejemplo, si ofrece un concurso para sus lectores, es posible que necesiten enviarle algunos archivos que desea particionar en una ubicación de carpeta única en Dropbox. En resumen, este complemento es para recibir archivos, que aún no se deben hacer públicos, que usted debe revisar..
Puede descargar el plugin listo a través del botón Descargar fuente. Ahora vamos a describir nuestro plugin paso a paso. Usaremos la clase Dropbox Uploader de Jaka Jancar (bajo la licencia MIT) para crear nuestro complemento.
Construiremos este complemento utilizando nuestra propia situación hipotética a partir del párrafo introductorio: Supongamos que está organizando una competencia por la "Mejor captura de pantalla de escritorio" para sus usuarios. Cada usuario registrado en el sitio puede enviarle su captura de pantalla de escritorio. Después de una fecha límite, buscará todo y luego publicará los ganadores. Así que comencemos a construir nuestro plugin.!
Crea una carpeta llamada dbuploader en wp-content / plugins diretory Crea un nuevo archivo PHP llamado DropboxUploader.php dentro de eso; Ábrelo en tu editor de texto y pega y guarda este código:
email = $ email; $ this-> password = $ password; función pública setCaCertificateFile ($ archivo) $ this-> caCertSourceType = self :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file; función pública setCaCertificateDir ($ dir) $ this-> caCertSourceType = self :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir; carga de la función pública ($ nombre de archivo, $ remoteDir = '/') si (! file_exists ($ nombre de archivo) o! is_file ($ nombre de archivo) o! is_readable ($ nombre de archivo)) lanza una nueva excepción ("Archivo '$ nombre de archivo' hace no existe o no es legible. "); if (! is_string ($ remoteDir)) lanza una nueva excepción ("el directorio remoto debe ser una cadena, es" .gettype ($ remoteDir). "en su lugar."); si (! $ this-> logIn) $ 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, 'dest' => $ remoteDir, 't' => $ token)); if (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) lanza una nueva excepción ('Falló la carga!'); inicio de sesión de función protegida () $ 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) lanza una nueva excepción ('Login no exitoso'); $ this-> logIn = true; solicitud de función protegida ($ 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); descanso; caso propio :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); descanso; 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); // Enviar cookies $ rawCookies = array (); foreach ($ this-> cookies as $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); if ($ data === false) lanza una nueva excepción ('No se puede ejecutar la solicitud:' .curl_error ($ ch)); // Almacenar las cookies recibidas preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ coincide con $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); devuelve $ datos; función protegida extractToken ($ html, $ formAction) si (! preg_match ('/