Complemento simple que permite a los usuarios cargar archivos en su carpeta de Dropbox

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..


Antes que empecemos

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.!


Paso 1 Creando el primer archivo

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 ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (] * nombre = "t" [^>] * valor = "(. *?)" [^>] *>). *?<\/form>/ is ', $ html, $ coincidencias) || ! isset ($ coincide [2])) lanza una nueva excepción ("No se puede extraer el token! (acción de formulario = $ formAction)"); devuelve $ coincidencias [2];

Paso 2 Construyendo el archivo de plugin

Crear el archivo principal del plugin llamado dbuploader.php en el mismo directorio; Ábralo dentro de su editor y pegue y guarde este código allí:

  $ size_limit) lanza una nueva excepción ('El tamaño del archivo es demasiado grande o el tipo de archivo no es compatible.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); if (! mkdir ($ tmpDir)) lanza una nueva excepción ('No se puede crear el directorio temporal'); if ($ _FILES ['file'] ['name'] === "") lanza una nueva excepción ('Nombre de archivo no suministrado por el navegador.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email ._ '. $ _ FILES [' file '] [' name ']); if (! move_uploaded_file ($ _ FILES ['file'] ['tmp_name'], $ tmpFile)) lanza una nueva excepción ('No se puede cambiar el nombre del archivo cargado'); // Ingrese las credenciales de su cuenta de Dropbox aquí $ uploader = new DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> upload ($ tmpFile, $ _POST ['dest']); regreso 'Archivo subido correctamente. Gracias!';  catch (Exception $ e) return 'Error: '. htmlspecialchars ($ e-> getMessage ()). '';  // Limpiar if (isset ($ tmpFile) && file_exists ($ tmpFile)) desvincular ($ tmpFile); if (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  else volver ' 

Demostración de Dropbox Uploader



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

Paso 3 Acabado El Plugin:

Crear config.php archivo en su carpeta de complementos, luego pegue este código allí:

 

Luego edite este código: configure su correo electrónico, contraseña, carpeta de Dropbox, límite de tamaño de archivo, tipos de archivo admitidos y luego guárdelo.


Algunas sugerencias:

Sugerencia 1:

Si desea que esté disponible para todos los usuarios, no solo para los usuarios registrados, puede editar el código, eliminar esto ...

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

... condición del plugin. En lugar de ello, puedes integrar Recaptcha con tu plugin..

Sugerencia 2:

También puede formatear el nombre de los archivos cargados. Solo edita esta línea:

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

Eso es todo, buena suerte.!