jeudi 7 avril 2016

Ajax Post Custom Plugin Wodpress Slow Down all web site

I am write plugin for Wordpress. He sends a link to the images on the PHP file (Ajax). The array consists of 10 photos.

obj.photos.push({ img_url: img_url, source: source, photo_text: photo_text, tag: tag });

    var data_insert = {
        action: 'instapin_insert',
        data: obj

    };

    $.ajax({
              type: 'POST',
              url: '/wp-content/plugins/instapin/ajax.php',
              data: data_insert,
        });

Next, the file takes a picture and the script loads to the cloud with Google (Google Drive).

<?php 

session_start();
session_write_close();


require_once('../../../wp-config.php'); 

global $service;


if(class_exists('INSTAPIN'))
{       
    $instapin = new INSTAPIN();

}

$google_drive = get_option('instapin_drive');

$photos_array = $_POST['data']['photos'];

    // Создаём объект записи
      $instapin_post = array(
         'post_title' => 'Название записи',
         'post_content' => '',
         'post_status' => 'draft',
         'post_author' => 1,
         'post_category' => array(0)
      );

    // Вставляем запись в базу данных
    $post_id = wp_insert_post( $instapin_post );


    if($google_drive == 'on'){


        $folder = get_option('google_upload_folder');       
        $found = false;         

        $files = $service->files->listFiles();
        foreach ($files['items'] as $item) {
            if ($item['title'] == $post_id) {
                $folder_insert_photo = $item['id'];
                $found = true;
            break;
            }
        }

        if($found == false){
            $file = new Google_Service_Drive_DriveFile();
            //Setup the Folder to Create
            $file->setTitle($post_id);
            $file->setDescription('Photo folder: post_id - ' . $post_id);
            $file->setMimeType('application/vnd.google-apps.folder');

            //Set the ProjectsFolder Parent
            $parent = new Google_Service_Drive_ParentReference();
            $parent->setId( $folder );
            $file->setParents(array($parent));

            //create the ProjectFolder in the Parent
            $createdFile = $service->files->insert($file, array(
                'mimeType' => 'application/vnd.google-apps.folder',
            ));

            $folder_insert_photo = $createdFile->id;

            $instapin->insertPermission($service, $folder_insert_photo, 'id', 'anyone', 'reader');

        }


        $count = 1;

        $photo = new Google_Service_Drive_DriveFile();
        $parent_folder = new Google_Service_Drive_ParentReference();

        foreach($photos_array as $item){

            if($count == 40){
                break;
            }

            $img_url = strtok($item['img_url'], '?');
            $image_url = str_replace("s150x150/", "", $img_url);

            $image_data = file_get_contents($image_url); // Get image data
            $filename = basename($image_url); // Create image file name
            $wp_filetype = wp_check_filetype( $filename, null );
            $MimeType = $wp_filetype['type'];

            $seo_name = $item['tag'] . '_' . $count . '.jpg';

            //Setup the Folder to Create
            $photo->setTitle($seo_name);
            $photo->setDescription('Photo: ' .  $image_url);
            $photo->setMimeType($MimeType);


            $parent_folder->setId( $folder_insert_photo );
            $photo->setParents(array($parent_folder));

            // Try to upload the file, you can add the parameters e.g. if you want to convert a .doc to editable google format, add 'convert' = 'true'
            $createdPhoto = $service->files->insert($photo, array(
                'data' => $image_data,
                'mimeType' => $MimeType,
                'uploadType'=> 'multipart'
            ));

            $instapin->insertPermission($service, $createdPhoto->id, 'id', 'anyone', 'reader');

            $filePath = "GoogleDrive/{$folder_insert_photo}/{$seo_name}";
            $fullFile = "http://ift.tt/1NapwsA}";

            print_r($fullFile);

            $count++;
        }


    }



?> 

But when I send ajax post to upload 10 photos, all admin panel and front. Nothing can be done and go until the download is complete (the script work).But when I post to download 10 photos, all admin panel and front crashes (hangs). Nothing can be done and go until upload to finish (the script work). How to make a multi-tasking? To admin panel and front continued to work, and the script was working in the background.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire