* @copyright 2007-2017 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @version Release: $Revision$ * International Registered Trademark & Property of PrestaShop SA */ include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_category_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_post_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_list_helper_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_paggination_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_comment_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_slide_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_gallery_class.php'); include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_link_class.php'); class YbcImportExport extends Module { public function __construct() { $this->name = 'ybc_blog_free'; parent::__construct(); } public function getPostAllLanguage($id_post) { $sql = 'SELECT p.id_post,pl.title,pl.description,pl.short_description,pl.meta_keywords,pl.meta_description,l.iso_code FROM '._DB_PREFIX_.'ybc_blog_free_post p LEFT JOIN '._DB_PREFIX_.'ybc_blog_free_post_lang pl on (p.id_post = pl.id_post) LEFT JOIN '._DB_PREFIX_.'lang l on (pl.id_lang=l.id_lang) WHERE p.id_post ="'.(int)$id_post.'" '; return Db::getInstance()->executeS($sql); } public function getPosts() { $sql ='SELECT * FROM '._DB_PREFIX_.'ybc_blog_free_post'; return Db::getInstance()->executeS($sql); } public function getCategories() { $sql ='SELECT * FROM '._DB_PREFIX_.'ybc_blog_free_category'; return Db::getInstance()->executeS($sql); } public function getCategoryByIDPost($id_post) { $sql='SELECT c.* FROM '._DB_PREFIX_.'ybc_blog_free_category c,'._DB_PREFIX_.'ybc_blog_free_post_category pc WHERE c.id_category =pc.id_category AND pc.id_post= "'.(int)$id_post.'"'; return Db::getInstance()->executeS($sql); } public function getCategoryAllLanguage($id_category) { $sql ='SELECT c.id_category, cl.title,cl.description,cl.meta_keywords,cl.meta_description,l.iso_code FROM '._DB_PREFIX_.'ybc_blog_free_category c LEFT JOIN '._DB_PREFIX_.'ybc_blog_free_category_lang cl on (c.id_category = cl.id_category) LEFT JOIN '._DB_PREFIX_.'lang l ON (l.id_lang= cl.id_lang) WHERE c.id_category="'.(int)$id_category.'"'; return Db::getInstance()->executeS($sql); } public function getTags($id_post) { $sql = 'SELECT t.*,l.iso_code FROM '._DB_PREFIX_.'ybc_blog_free_tag t LEFT JOIN '._DB_PREFIX_.'lang l ON (t.id_lang=l.id_lang) WHERE t.id_post="'.(int)$id_post.'" '; return Db::getInstance()->executeS($sql); } public function getSlides() { $sql ='SELECT * FROM '._DB_PREFIX_.'ybc_blog_free_slide'; return Db::getInstance()->executeS($sql); } public function getSlideAllLanguage($id_slide) { $sql='SELECT sl.*,l.iso_code FROM '._DB_PREFIX_.'ybc_blog_free_slide_lang sl,'._DB_PREFIX_.'lang l WHERE sl.id_lang= l.id_lang AND sl.id_slide='.(int)$id_slide; return Db::getInstance()->executeS($sql); } public function getGalleries() { $sql= 'SELECT * FROM '._DB_PREFIX_.'ybc_blog_free_gallery'; return Db::getInstance()->executeS($sql); } public function getGalleryAllLanguage($id_gallery) { $sql='SELECT gl.*,l.iso_code FROM '._DB_PREFIX_.'ybc_blog_free_gallery_lang gl,'._DB_PREFIX_.'lang l WHERE gl.id_lang=l.id_lang AND gl.id_gallery='.(int)$id_gallery; return Db::getInstance()->executeS($sql); } private function archiveThisFile($obj, $file, $server_path, $archive_path) { if (is_dir($server_path.$file)) { $dir = scandir($server_path.$file); foreach ($dir as $row) { if ($row[0] != '.') { $this->archiveThisFile($obj, $row, $server_path.$file.'/', $archive_path.$file.'/'); } } } else $obj->addFile($server_path.$file, $archive_path.$file); } public function generateArchive() { $errors = array(); $zip = new ZipArchive(); $cacheDir = dirname(__FILE__).'/../cache/'; $zip_file_name = 'ybc_blog_free_'.date('dmYHis').'.zip'; if ($zip->open($cacheDir.$zip_file_name, ZipArchive::OVERWRITE | ZipArchive::CREATE) === true) { if (!$zip->addFromString('blog-data.xml', $this->exportBlog())) { $errors[] = $this->l('Cannot create Menu-Info.xml'); } $this->archiveThisFile($zip,'category', dirname(__FILE__).'/../views/img/', 'img/'); $this->archiveThisFile($zip,'gallery', dirname(__FILE__).'/../views/img/', 'img/'); $this->archiveThisFile($zip,'post', dirname(__FILE__).'/../views/img/', 'img/'); $this->archiveThisFile($zip,'slide', dirname(__FILE__).'/../views/img/', 'img/'); $this->archiveThisFile($zip,'temp', dirname(__FILE__).'/../views/img/', 'img/'); $zip->close(); if (!is_file($cacheDir.$zip_file_name)) { $errors[] = $this->l(sprintf('Could not create %1s', _PS_CACHE_DIR_.$zip_file_name)); } if (!$errors) { if (ob_get_length() > 0) { ob_end_clean(); } ob_start(); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Description: File Transfer'); header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$zip_file_name.'"'); header('Content-Transfer-Encoding: binary'); ob_end_flush(); readfile($cacheDir.$zip_file_name); @unlink($cacheDir.$zip_file_name); exit; } } return $errors; } public function getComments($id_post) { $sql='SELECT * FROM '._DB_PREFIX_.'ybc_blog_free_comment WHERE id_post='.(int)$id_post; return Db::getInstance()->executeS($sql); } public function exportBlog() { //$filename = 'blog.xml'; // header('Content-type: text/xml'); // header('Content-Disposition: attachment; filename="'.$filename.'"'); $xml_output = ''."\n"; $xml_output .= ''."\n"; $categories =$this->getCategories(); if($categories) foreach($categories as $category) { $xml_output .=''."\n"; $categoryLanguages = $this->getCategoryAllLanguage($category['id_category']); if($categoryLanguages) { foreach($categoryLanguages as $categoryLanguage) { $xml_output .=''."\n"; $xml_output .=''.$categoryLanguage['title'].''."\n"; $xml_output .=''.$categoryLanguage['url_alias'].''."\n"; $xml_output .=''."\n"; $xml_output .=''.$categoryLanguage['meta_keywords'].''."\n"; $xml_output .=''.$categoryLanguage['meta_description'].''."\n"; $xml_output .=''."\n"; } } $xml_output .=''."\n"; } $posts = $this->getPosts(); if($posts) foreach($posts as $post) { $id_post= $post['id_post']; $xml_output .= ''."\n"; $postAllLanguage = $this->getPostAllLanguage($id_post); if($postAllLanguage) { foreach($postAllLanguage as $language) { $xml_output .=''."\n"; $xml_output .=''.$language['title'].''."\n"; $xml_output .=''.$language['url_alias'].''."\n"; $xml_output .=''."\n"; $xml_output .=''."\n"; $xml_output .=''.$language['meta_keywords'].''."\n"; $xml_output .=''.$language['meta_description'].''."\n"; $xml_output .=''."\n"; } } $categories = $this->getCategoryByIDPost($id_post); if($categories) foreach($categories as $category) { $xml_output .=''."\n"; $xml_output .=''."\n"; } $tags =$this->getTags($id_post); if($tags) foreach($tags as $tag) { $xml_output .=''."\n"; } $comments = $this->getComments($id_post); if($comments) foreach($comments as $comment) { $xml_output .=''."\n"; $xml_output .=''.$comment['comment'].''."\n"; $xml_output .=''.$comment['reply'].''."\n"; $xml_output .=''."\n"; } $xml_output .= ''."\n"; } $slides = $this->getSlides(); if($slides) foreach($slides as $slide) { $xml_output .=''."\n"; $slideLanguages= $this->getSlideAllLanguage($slide['id_slide']); if($slideLanguages) foreach($slideLanguages as $slideLanguage) { $xml_output .=''."\n"; $xml_output .=''.$slideLanguage['caption'].''."\n"; $xml_output .=''.$slideLanguage['url'].''."\n"; $xml_output .=''."\n"; } $xml_output .=''."\n"; } $galleries= $this->getGalleries(); if($galleries) foreach($galleries as $gallery) { $xml_output .=''."\n"; $galleryLanguages= $this->getGalleryAllLanguage($gallery['id_gallery']); if($galleryLanguages) foreach($galleryLanguages as $galleryLanguage) { $xml_output .=''."\n"; $xml_output .=''.$galleryLanguage['title'].''."\n"; $xml_output .=''.$galleryLanguage['description'].''."\n"; $xml_output .=''."\n"; } $xml_output .=''."\n"; } $xml_output .= ''."\n"; return str_replace('&','and',$xml_output); // echo $xml_output; // exit; } public function processImport($zipfile = false) { $errors = array(); if(!$zipfile) { $savePath = dirname(__FILE__).'/../cache/'; if(@file_exists($savePath.'ybc_blog_free.data.zip')) @unlink($savePath.'ybc_blog_free.data.zip'); $uploader = new Uploader('blogdata'); $uploader->setCheckFileSize(false); $uploader->setAcceptTypes(array('zip')); $uploader->setSavePath($savePath); $file = $uploader->process('ybc_blog_free.data.zip'); if ($file[0]['error'] === 0) { if (!Tools::ZipTest($savePath.'ybc_blog_free.data.zip')) $errors[] = $this->l('Zip file seems to be broken'); } else { $errors[] = $file[0]['error']; } $extractUrl = $savePath.'ybc_blog_free.data.zip'; } else $extractUrl = $zipfile; if(!@file_exists($extractUrl)) $errors[] = $this->l('Zip file doesn\'t exist'); if(!$errors) { $zip = new ZipArchive(); if($zip->open($extractUrl) === true) { if ($zip->locateName('blog-data.xml') === false) { $errors[] = $this->l('blog-data.xml doesn\'t exist'); if($extractUrl && !$zipfile) { @unlink($extractUrl); } } } else $errors[] = $this->l('Cannot open zip file. It might be broken or damaged'); } if(!$errors) { if(!Tools::ZipExtract($extractUrl, dirname(__FILE__).'/../views/')) $errors[] = $this->l('Cannot extract zip data'); if(!@file_exists(dirname(__FILE__).'/../views/blog-data.xml')) $errors[] = $this->l('Neither blog-data.xml exist'); } if(!$errors) { if(@file_exists(dirname(__FILE__).'/../views/blog-data.xml')) { $this->importData(dirname(__FILE__).'/../views/blog-data.xml'); @unlink(dirname(__FILE__).'/../views/blog-data.xml'); } } return $errors; } public function importData($file_xml) { if (file_exists($file_xml)) { $xml = simplexml_load_file($file_xml); $categories=array(); if(isset($xml->category) && $xml->category) { foreach($xml->category as $category_xml) { if(Tools::getValue('importoverride') && $this->itemExists('category','id_category',(int)$category_xml['id_category'])) $category = new Ybc_blog_free_category_class((int)$category_xml['id_category']); else $category = new Ybc_blog_free_category_class(); $category->enabled = (int)$category_xml['enabled']; $category->image = (string)$category_xml['image'];; $category->sort_order = (int)$category_xml['sort_order'];; $category->datetime_added = (string)$category_xml['datetime_added'];; $category->datetime_modified = (string)$category_xml['datetime_modified'];; $category->added_by = (int)Context::getContext()->employee->id; $category->modified_by = (int)Context::getContext()->employee->id; if($category_xml->categorylanguage) { foreach($category_xml->categorylanguage as $categorylanguage) { if((string)$categorylanguage['iso_code']) { $id_lang= Language::getIdByIso((string)$categorylanguage['iso_code']); if($id_lang) { $category->title[$id_lang] = (string)$categorylanguage->title; $category->url_alias[$id_lang] =(string)$categorylanguage->url_alias; $category->description[$id_lang] = (string)$categorylanguage->description[0]; $category->meta_description[$id_lang] = (string)$categorylanguage->meta_description; $category->meta_keywords[$id_lang] = (string)$categorylanguage->meta_keywords; } } } } $category->save(); $categories[(int)$category_xml['id_category']] = $category->id; } } if(isset($xml->post) && $xml->post) { foreach ($xml->post as $post_xml) { if(Tools::getValue('importoverride') && $this->itemExists('post','id_post',(int)$post_xml['id_post'])) $post = new Ybc_blog_free_post_class((int)$post_xml['id_post']); else $post = new Ybc_blog_free_post_class(); $post->enabled = (int)$post_xml['enabled']; $post->sort_order = (int)$post_xml['sort_order']; $post->datetime_added = (string)$post_xml['datetime_added']; $post->datetime_modified = (string)$post_xml['datetime_modified']; $post->added_by = (int)Context::getContext()->employee->id; $post->modified_by = (int)Context::getContext()->employee->id; $post->click_number = (int)$post_xml['click_number']; $post->likes = (int)$post_xml['likes']; $post->products = (string)$post_xml['products']; $post->thumb = (string)$post_xml['thumb']; $post->image = (string)$post_xml['image']; $post->is_featured = (int)$post_xml['is_featured']; if($post_xml->language) foreach($post_xml->language as $language) { if((string)$language['iso_code']) { $id_lang = Language::getIdByIso((string)$language['iso_code']); if($id_lang) { $post->title[$id_lang] =(string)$language->title; $post->url_alias[$id_lang] = (string)$language->url_alias; $post->short_description[$id_lang] = (string)$language->short_description[0]; $post->description[$id_lang] = (string)$language->description[0]; $post->meta_description[$id_lang] =(string)$language->meta_description; $post->meta_keywords[$id_lang] = (string)$language->meta_keywords; } } } $post->save(); Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'ybc_blog_free_post_category WHERE id_post='.(int)$post->id); if(isset($post_xml->category)&&$post_xml->category) { foreach($post_xml->category as $category_xml) { $id_category = $categories[(int)$category_xml['id_category']]; Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'ybc_blog_free_post_category values("'.(int)$post->id.'","'.(int)$id_category.'")'); } } if(Tools::getValue('importoverride')) { Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'ybc_blog_free_tag WHERE id_post='.(int)$post->id); } if(isset($post_xml->tags)&& $post_xml->tags) { foreach($post_xml->tags as $tag_xml) { if((string)$tag_xml['iso_code']) { $id_lang = Language::getIdByIso((string)$tag_xml['iso_code']); $tag= (string)$tag_xml['tag']; $click_number= (int)$tag_xml['click_number']; Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'ybc_blog_free_tag (id_post,id_lang,tag,click_number) values("'.(int)$post->id.'","'.(int)$id_lang.'","'.$tag.'","'.$click_number.'")'); } } } if(Tools::getValue('importoverride')) { Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'ybc_blog_free_comment WHERE id_post='.(int)$post->id); } if(isset($post_xml->comment) && $post_xml->comment) foreach($post_xml->comment as $comment_xml) { $comment= new Ybc_blog_free_comment_class(); $comment->id_user= (int)$comment_xml['id_user']; $comment->name =(string)$comment_xml['name']; $comment->email =(string)$comment_xml['email']; $comment->id_post=(int)$post->id; $comment->subject = (string)$comment_xml['subject']; $comment->comment = (string)$comment_xml->comment_text; $comment->reply= (string)$comment_xml->reply; $comment->replied_by=(int)Context::getContext()->employee->id; $comment->rating=(int)$comment_xml['rating']; $comment->approved =(int)$comment_xml['approved']; $comment->datetime_added =(string)$comment_xml['datetime_added']; $comment->reported=(int)$comment_xml['reported']; $comment->save(); } } } if(isset($xml->slide) && $xml->slide) { foreach ($xml->slide as $slide_xml) { if(Tools::getValue('importoverride') && $this->itemExists('slide','id_slide',(int)$slide_xml['id_slide'])) $slide = new Ybc_blog_free_slide_class((int)$slide_xml['id_slide']); else $slide = new Ybc_blog_free_slide_class(); $slide->enabled = $slide_xml['enabled']; $slide->image = $slide_xml['image']; $slide->sort_order = $slide_xml['sort_order']; if($slide_xml->slidelanguage) foreach($slide_xml->slidelanguage as $slidelanguage) { if((string)$slidelanguage['iso_code']) { $id_lang = Language::getIdByIso((string)$slidelanguage['iso_code']); if($id_lang) { $slide->caption[$id_lang] = (string)$slidelanguage->caption; $slide->url[$id_lang] = (string)$slidelanguage->url; } } } $slide->save(); } } if(isset($xml->gallery)&& $xml->gallery) { foreach($xml->gallery as $gallery_xml) { if(Tools::getValue('importoverride') && $this->itemExists('gallery','id_gallery',(int)$gallery_xml['id_gallery'])) $gallery = new Ybc_blog_free_gallery_class((int)$gallery_xml['id_gallery']); else $gallery = new Ybc_blog_free_gallery_class(); $gallery->enabled = (int)$gallery_xml['$gallery']; $gallery->image = (string)$gallery_xml['image']; $gallery->sort_order = (int)$gallery_xml['sort_order']; //$gallery->url = (string)$gallery_xml['url']; $gallery->is_featured = (int)$gallery_xml['is_featured']; if($gallery_xml->gallerylanguage) foreach($gallery_xml->gallerylanguage as $gallerylanguage) { if((string)$gallerylanguage['iso_code']) { $id_lang = Language::getIdByIso((string)$gallerylanguage['iso_code']); if($id_lang) { $gallery->title[$id_lang] = (string)$gallerylanguage->title; $gallery->description[$id_lang] =(string)$gallerylanguage->description; } } } $gallery->save(); } } } } public function itemExists($tbl, $primaryKey, $id) { $req = 'SELECT `'.$primaryKey.'` FROM `'._DB_PREFIX_.'ybc_blog_free_'.$tbl.'` tbl WHERE tbl.`'.$primaryKey.'` = '.(int)$id; $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($req); return ($row); } }