public static function get_local_page($page_id, $project_id, $post_id = 0)
 {
     $projects = self::get_local_projects();
     if ($post_id == 0) {
         $page = $projects[$project_id]->pages[$page_id];
         if (isset($page->post_id)) {
             $post_id = $page->post_id;
         }
     }
     if ($post_id > 0) {
         $data = get_post_meta($post_id, '_tilda', true);
         if (!empty($data['current_page'])) {
             $page = $data['current_page'];
         }
     }
     $upload_path = Tilda::get_upload_path() . $project_id . '/';
     $ar = array();
     foreach ($projects[$project_id]->css as $css) {
         $ar[] = $upload_path . 'css/' . $css->to;
     }
     $page->css = $ar;
     $ar = array();
     foreach ($projects[$project_id]->js as $js) {
         $ar[] = $upload_path . 'js/' . $js->to;
     }
     $page->js = $ar;
     return $page;
 }
 /**
  * экспортирует HTML и список используемых файлов (картинок, стилей и скриптов) из Тильды
  * @param integer $page_id код страницы в Тильде
  * @param integer $project_id код проекта в Тильде
  * @param integer $post_id код страницы или поста на Вордпрессе
  *
  * @return array $arDownload - список файлов для закачки (откуда и куда сохранить, в случае ошибки возвращает WP_Error)
  */
 public static function export_tilda_page($page_id, $project_id, $post_id)
 {
     $project = Tilda::get_local_project($project_id);
     /* если проекта нет, или у него устаревший формат, то запросим его с Тильды */
     if (!$project || !isset($project->css) || !isset($project->css[0]) || !isset($project->css[0]->to)) {
         $project = self::update_project($project_id);
     }
     if (is_wp_error($project)) {
         return $project;
         //$arResult['error'] = __("Error. Can't find project with this 'projectid' parameter");
         //echo json_encode($arResult);
         //wp_die();
     }
     $tildapage = Tilda::get_pageexport($page_id);
     if (is_wp_error($tildapage)) {
         return $tildapage;
         //$arResult['error'] = __("Error. Can't find page with this 'pageid' parameter");
         //echo json_encode($arResult);
         //wp_die();
     }
     $tildapage->html = htmlspecialchars_decode($tildapage->html);
     self::update_maps($page_id, $post_id);
     $tildapage = Tilda_Admin::replace_outer_image_to_local($tildapage, $project->export_imgpath);
     $meta = get_post_meta($post_id, '_tilda', true);
     $meta['export_imgpath'] = $project->export_imgpath;
     $meta['export_csspath'] = $project->export_csspath;
     $meta['export_jspath'] = $project->export_jspath;
     $meta['page_id'] = $tildapage->id;
     $meta['project_id'] = $tildapage->projectid;
     $meta['post_id'] = $post_id;
     $arDownload = array();
     $tildapage->css = array();
     $upload_path = Tilda::get_upload_path() . $project->id . '/';
     $upload_dir = Tilda::get_upload_dir() . $project->id . '/';
     if (!is_dir($upload_dir)) {
         mkdir($upload_dir, 0755);
     }
     if (!is_dir($upload_dir . 'pages/')) {
         mkdir($upload_dir . 'pages/', 0755);
     }
     if (!is_dir($upload_dir . 'css/')) {
         mkdir($upload_dir . 'css/', 0755);
     }
     if (!is_dir($upload_dir . 'js/')) {
         mkdir($upload_dir . 'js/', 0755);
     }
     foreach ($project->css as $file) {
         $tildapage->css[] = $upload_path . 'css/' . $file->to;
         $arDownload[] = array('from_url' => $file->from, 'to_dir' => $upload_dir . 'css/' . $file->to);
     }
     $tildapage->js = array();
     foreach ($project->js as $file) {
         $tildapage->js[] = $upload_path . 'js/' . $file->to;
         $arDownload[] = array('from_url' => $file->from, 'to_dir' => $upload_dir . 'js/' . $file->to);
     }
     $post = get_post($post_id);
     $post->post_content = 'Страница синхронизирована с Tilda.cc и вносить правки нужно там';
     //$tildapage->html;
     wp_update_post($post);
     $tildapage->sync_time = current_time('mysql');
     $meta['current_page'] = $tildapage;
     //unset($meta['current_page']->html);
     update_post_meta($post_id, '_tilda', $meta);
     $upload_dir = Tilda::get_upload_dir() . $project->id . '/pages/' . $tildapage->id . '/';
     if (!is_dir($upload_dir)) {
         mkdir($upload_dir, 0755);
     }
     foreach ($tildapage->images as $file) {
         $arDownload[] = array('from_url' => $file->from, 'to_dir' => $upload_dir . $file->to);
     }
     return $arDownload;
 }
 /**
  * экспортирует HTML и список используемых файлов (картинок, стилей и скриптов) из Тильды
  * @param integer $page_id код страницы в Тильде
  * @param integer $project_id код проекта в Тильде
  * @param integer $post_id код страницы или поста на Вордпрессе
  *
  * @return array $arDownload - список файлов для закачки (откуда и куда сохранить, в случае ошибки возвращает WP_Error)
  */
 public static function export_tilda_page($page_id, $project_id, $post_id)
 {
     // так как при изменении страницы мог изменится css или js, поэтому всегда запрашиваем данные проекта с Тильды
     $project = self::update_project($project_id);
     if (is_wp_error($project)) {
         return $project;
         //$arResult['error'] = __("Error. Can't find project with this 'projectid' parameter");
         //echo json_encode($arResult);
         //wp_die();
     }
     $tildapage = Tilda::get_pageexport($page_id);
     if (is_wp_error($tildapage)) {
         return $tildapage;
         //$arResult['error'] = __("Error. Can't find page with this 'pageid' parameter");
         //echo json_encode($arResult);
         //wp_die();
     }
     $tildapage->html = htmlspecialchars_decode($tildapage->html);
     self::update_maps($page_id, $post_id);
     $tildapage = Tilda_Admin::replace_outer_image_to_local($tildapage, $project->export_imgpath);
     $meta = get_post_meta($post_id, '_tilda', true);
     $meta['export_imgpath'] = $project->export_imgpath;
     $meta['export_csspath'] = $project->export_csspath;
     $meta['export_jspath'] = $project->export_jspath;
     $meta['page_id'] = $tildapage->id;
     $meta['project_id'] = $tildapage->projectid;
     $meta['post_id'] = $post_id;
     $arDownload = array();
     $upload_path = Tilda::get_upload_path() . $project->id . '/';
     $upload_dir = Tilda::get_upload_dir() . $project->id . '/';
     if (!is_dir($upload_dir) && !wp_mkdir_p($upload_dir, 0755)) {
         Tilda::$errors->add('no_directory', 'Cannot create directory: ' . $upload_dir);
         return Tilda::$errors;
     }
     if (!is_dir($upload_dir . 'pages/') && !wp_mkdir_p($upload_dir . 'pages/', 0755)) {
         Tilda::$errors->add('no_directory', 'Cannot create directory: ' . $upload_dir . 'pages/');
         return Tilda::$errors;
     }
     if (!is_dir($upload_dir . 'css/') && !wp_mkdir_p($upload_dir . 'css/', 0755)) {
         Tilda::$errors->add('no_directory', 'Cannot create directory: ' . $upload_dir . 'css/');
         return Tilda::$errors;
     }
     if (!is_dir($upload_dir . 'js/') && !wp_mkdir_p($upload_dir . 'js/', 0755)) {
         Tilda::$errors->add('no_directory', 'Cannot create directory: ' . $upload_dir . 'js/');
         return Tilda::$errors;
     }
     if (isset($tildapage->css) && is_array($tildapage->css)) {
         $arCSS = $tildapage->css;
     } else {
         $arCSS = $project->css;
     }
     $tildapage->css = array();
     foreach ($arCSS as $file) {
         $tildapage->css[] = $upload_path . 'css/' . $file->to;
         $arDownload[] = array('from_url' => $file->from, 'to_dir' => $upload_dir . 'css/' . $file->to);
     }
     if (isset($tildapage->js) && is_array($tildapage->js)) {
         $arJS = $tildapage->js;
     } else {
         $arJS = $project->js;
     }
     $tildapage->js = array();
     foreach ($arJS as $file) {
         $tildapage->js[] = $upload_path . 'js/' . $file->to;
         $arDownload[] = array('from_url' => $file->from, 'to_dir' => $upload_dir . 'js/' . $file->to);
     }
     $tildapage->html = str_replace('$(', 'jQuery(', $tildapage->html);
     $tildapage->html = str_replace('$.', 'jQuery.', $tildapage->html);
     $post = get_post($post_id);
     $tildaoptions = get_option('tilda_options');
     if (!empty($tildaoptions['type_stored']) && $tildaoptions['type_stored'] == 'post') {
         $post->post_content = strip_tags($tildapage->html, '<style><script><p><br><span><img><b><i><strike><strong><em><u><h1><h2><h3><a><ul><li>');
         while (($pos = mb_strpos($post->post_content, "<style", 0, 'UTF-8')) !== false) {
             $substring = mb_substr($post->post_content, $pos, mb_strpos($post->post_content, "</style>", 0, 'UTF-8') - $pos + 8, 'UTF-8');
             if ($substring > '') {
                 $post->post_content = str_replace($substring, "", $post->post_content);
             } else {
                 break;
             }
         }
         while (($pos = mb_strpos($post->post_content, "<script", 0, 'UTF-8')) !== false) {
             $substring = mb_substr($post->post_content, $pos, mb_strpos($post->post_content, "</script>", 0, 'UTF-8') - $pos + 9, 'UTF-8');
             if ($substring > '') {
                 $post->post_content = str_replace($substring, "", $post->post_content);
             } else {
                 break;
             }
         }
         $post->post_content = str_replace("\r\n", "\n", $post->post_content);
         $tmp = str_replace("\n\n\n\n", "\n", $post->post_content);
         if ($tmp > '') {
             $tmp = str_replace("\n\n\n", "\n", $tmp);
             if ($tmp > '') {
                 $tmp = str_replace("\n\n", "\n", $tmp);
                 if ($tmp > '') {
                     $tmp = str_replace("\n\n", "\n", $tmp);
                 }
             }
         }
         if ($tmp > '') {
             $post->post_content = nl2br($tmp);
         } else {
             $post->post_content = nl2br($post->post_content);
         }
     } else {
         $post->post_content = 'Page synchronized. Edit page only on site Tilda.cc';
         //$tildapage->html;
     }
     wp_update_post($post);
     $tildapage->sync_time = current_time('mysql');
     $meta['current_page'] = $tildapage;
     //unset($meta['current_page']->html);
     update_post_meta($post_id, '_tilda', $meta);
     $upload_dir = Tilda::get_upload_dir() . $project->id . '/pages/' . $tildapage->id . '/';
     if (!is_dir($upload_dir) && !mkdir($upload_dir, 0755)) {
         Tilda::$errors->add('no_directory', 'Cannot create directory: ' . $upload_dir);
         return Tilda::$errors;
     }
     foreach ($tildapage->images as $file) {
         $arDownload[] = array('from_url' => $file->from, 'to_dir' => $upload_dir . $file->to);
     }
     /* скачиваем спец картинки */
     if (isset($tildapage->img) && substr($tildapage->img, 0, 4) == 'http') {
         $path = parse_url($tildapage->img, PHP_URL_PATH);
         $path = explode('/', $path);
         $fname = array_pop($path);
         if ($fname && ($pos = strrpos($fname, '.')) > 0) {
             $ext = substr($fname, $pos);
             $arDownload[] = array('from_url' => $tildapage->img, 'to_dir' => $upload_dir . 'cover' . $ext);
         }
     }
     if (isset($tildapage->featureimg) && substr($tildapage->featureimg, 0, 4) == 'http') {
         $path = parse_url($tildapage->featureimg, PHP_URL_PATH);
         $path = explode('/', $path);
         $fname = array_pop($path);
         if ($fname && ($pos = strrpos($fname, '.')) > 0) {
             $ext = substr($fname, $pos);
             $arDownload[] = array('from_url' => $tildapage->featureimg, 'to_dir' => $upload_dir . 'feature' . $ext);
         }
     }
     if (isset($tildapage->fb_img) && substr($tildapage->fb_img, 0, 4) == 'http') {
         $path = parse_url($tildapage->fb_img, PHP_URL_PATH);
         $path = explode('/', $path);
         $fname = array_pop($path);
         if ($fname && ($pos = strrpos($fname, '.')) > 0) {
             $ext = substr($fname, $pos);
             $arDownload[] = array('from_url' => $tildapage->fb_img, 'to_dir' => $upload_dir . 'socnet' . $ext);
         }
     }
     return $arDownload;
 }