Changeset 840:f7157873644c for plugins/importExport/inc
- Timestamp:
- 07/09/12 14:44:20 (13 years ago)
- Branch:
- default
- Location:
- plugins/importExport/inc
- Files:
-
- 6 edited
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
plugins/importExport/inc/class.dc.export.flat.php
r557 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 16 16 public function setInfo() 17 17 { 18 $this->type = 'e ';18 $this->type = 'export'; 19 19 $this->name = __('Flat file export'); 20 20 $this->description = __('Exports a blog or a full Dotclear installation to flat file.'); … … 31 31 try 32 32 { 33 $exp = new dbExport($this->core->con,$fullname,$this->core->prefix);33 $exp = new flatExport($this->core->con,$fullname,$this->core->prefix); 34 34 fwrite($exp->fp,'///DOTCLEAR|'.DC_VERSION."|single\n"); 35 35 … … 84 84 $_SESSION['export_file'] = $fullname; 85 85 $_SESSION['export_filename'] = $_POST['file_name']; 86 $_SESSION['export_filezip'] = !empty($_POST['file_zip']); 86 87 http::redirect($this->getURL().'&do=ok'); 87 88 } … … 99 100 try 100 101 { 101 $exp = new dbExport($this->core->con,$fullname,$this->core->prefix);102 $exp = new flatExport($this->core->con,$fullname,$this->core->prefix); 102 103 fwrite($exp->fp,'///DOTCLEAR|'.DC_VERSION."|full\n"); 103 104 $exp->exportTable('blog'); … … 123 124 $_SESSION['export_file'] = $fullname; 124 125 $_SESSION['export_filename'] = $_POST['file_name']; 126 $_SESSION['export_filezip'] = !empty($_POST['file_zip']); 125 127 http::redirect($this->getURL().'&do=ok'); 126 128 } … … 140 142 141 143 ob_end_clean(); 142 header('Content-Disposition: attachment;filename='.$_SESSION['export_filename']); 143 header('Content-Type: text/plain; charset=UTF-8'); 144 readfile($_SESSION['export_file']); 145 unlink($_SESSION['export_file']); 146 unset($_SESSION['export_file']); 147 unset($_SESSION['export_filename']); 148 exit; 144 145 if (substr($_SESSION['export_filename'],-4) == '.zip') { 146 $_SESSION['export_filename'] = substr($_SESSION['export_filename'],0,-4);//.'.txt'; 147 } 148 149 # Flat export 150 if (empty($_SESSION['export_filezip'])) { 151 152 header('Content-Disposition: attachment;filename='.$_SESSION['export_filename']); 153 header('Content-Type: text/plain; charset=UTF-8'); 154 readfile($_SESSION['export_file']); 155 156 unlink($_SESSION['export_file']); 157 unset($_SESSION['export_file'],$_SESSION['export_filename'],$_SESSION['export_filezip']); 158 exit; 159 } 160 # Zip export 161 else { 162 try 163 { 164 $file_zipname = $_SESSION['export_filename'].'.zip'; 165 166 $fp = fopen('php://output','wb'); 167 $zip = new fileZip($fp); 168 $zip->addFile($_SESSION['export_file'],$_SESSION['export_filename']); 169 170 header('Content-Disposition: attachment;filename='.$file_zipname); 171 header('Content-Type: application/x-zip'); 172 173 $zip->write(); 174 175 unlink($_SESSION['export_file']); 176 unset($zip,$_SESSION['export_file'],$_SESSION['export_filename'],$file_zipname); 177 exit; 178 } 179 catch (Exception $e) 180 { 181 unset($zip,$_SESSION['export_file'],$_SESSION['export_filename'],$file_zipname); 182 @unlink($_SESSION['export_file']); 183 184 throw new Exception(__('Failed to compress export file.')); 185 } 186 } 149 187 } 150 188 } … … 154 192 echo 155 193 '<form action="'.$this->getURL(true).'" method="post">'. 156 '<fieldset><legend>'.__('Export a blog').'</legend>'. 157 '<p>'.sprintf(__('This will create an export of your current blog: %s'), 158 '<strong>'.html::escapeHTML($this->core->blog->name).'</strong>').'</p>'. 159 '<p><label for="file_name" class="classic">'.__('File name:').'</label>'. 160 form::field(array('file_name','file_name'),25,255,date('Y-m-d-').html::escapeHTML($this->core->blog->id.'-backup.txt')). 161 '<input type="submit" value="'.__('Export').'" />'. 194 '<fieldset><legend>'.__('Single blog').'</legend>'. 195 '<p>'.sprintf(__('This will create an export of your current blog: %s'),html::escapeHTML($this->core->blog->name)).'</p>'. 196 197 '<p><label for="file_name">'.__('File name:').'</label>'. 198 form::field(array('file_name','file_name'),50,255,date('Y-m-d-').html::escapeHTML($this->core->blog->id.'-backup.txt')). 199 '</p>'. 200 201 '<p><label for="file_zip" class="classic">'. 202 form::checkbox(array('file_zip','file_zip'),1).' '. 203 __('Compress file').'</label>'. 204 '</p>'. 205 206 '<p class="zip-dl"><a href="media.php?d=&zipdl=1">'. 207 __('You may also want to download your media directory as a zip file').'</a></p>'. 208 209 '<p><input type="submit" value="'.__('Export').'" />'. 162 210 form::hidden(array('do'),'export_blog'). 163 211 $this->core->formNonce().'</p>'. 164 '<p class="zip-dl"><a href="media.php?d=&zipdl=1">'.165 __('You may also want to download your media directory as a zip file').'</a></p>'.166 '</f ieldset></form>';212 213 '</fieldset>'. 214 '</form>'; 167 215 168 216 if ($this->core->auth->isSuperAdmin()) … … 170 218 echo 171 219 '<form action="'.$this->getURL(true).'" method="post">'. 172 '<fieldset><legend>'.__('Export all content').'</legend>'. 173 '<p><label for="file_name2" class="classic">'.__('File name:').'</label>'. 174 form::field(array('file_name','file_name2'),25,255,date('Y-m-d-').'dotclear-backup.txt'). 175 '<input type="submit" value="'.__('Export all content').'" />'. 220 '<fieldset><legend>'.__('Multiple blogs').'</legend>'. 221 '<p>'.__('This will create an export of all the content of your database.').'</p>'. 222 223 '<p><label for="file_name2">'.__('File name:').'</label>'. 224 form::field(array('file_name','file_name2'),50,255,date('Y-m-d-').'dotclear-backup.txt'). 225 '</p>'. 226 227 '<p><label for="file_zip2" class="classic">'. 228 form::checkbox(array('file_zip','file_zip2'),1).' '. 229 __('Compress file').'</label>'. 230 '</p>'. 231 232 '<p><input type="submit" value="'.__('Export').'" />'. 176 233 form::hidden(array('do'),'export_all'). 177 234 $this->core->formNonce().'</p>'. 178 '</fieldset></form>'; 235 236 '</fieldset>'. 237 '</form>'; 179 238 } 180 239 } -
plugins/importExport/inc/class.dc.ieModule.php
r270 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 12 12 if (!defined('DC_RC_PATH')) { return; } 13 13 14 class dcIeModule14 abstract class dcIeModule 15 15 { 16 16 public $type; … … 28 28 $this->setInfo(); 29 29 30 $this->id = get_class($this); 31 if (!$this->type) { 32 throw new Exception('No type for module'.$this->id); 30 if (!in_array($this->type,array('import','export'))) { 31 throw new Exception(sprintf('Unknow type for module %s',get_class($this))); 33 32 } 34 35 $this->url = 'plugin.php?p=importExport&t='.$this->type.'&f='.$this->id;36 33 37 34 if (!$this->name) { 38 35 $this->name = get_class($this); 39 36 } 37 38 $this->id = get_class($this); 39 $this->url = sprintf('plugin.php?p=importExport&type=%s&module=%s',$this->type,$this->id); 40 40 } 41 41 … … 44 44 } 45 45 46 protected function setInfo() 47 { 48 } 46 abstract protected function setInfo(); 49 47 50 48 final public function getURL($escape=false) 51 49 { 52 if ($escape) { 53 return html::escapeHTML($this->url); 54 } 55 return $this->url; 50 return $escape ? html::escapeHTML($this->url) : $this->url; 56 51 } 57 52 58 public function process($do) 59 { 60 } 53 abstract public function process($do); 61 54 62 public function gui() 63 { 64 } 55 abstract public function gui(); 65 56 66 57 protected function progressBar($percent) -
plugins/importExport/inc/class.dc.import.dc1.php
r270 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 40 40 protected function setInfo() 41 41 { 42 $this->type = 'i ';42 $this->type = 'import'; 43 43 $this->name = __('Dotclear 1.2 import'); 44 44 $this->description = __('Import a Dotclear 1.2 installation into your current blog.'); -
plugins/importExport/inc/class.dc.import.feed.php
r557 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 19 19 public function setInfo() 20 20 { 21 $this->type = 'i ';21 $this->type = 'import'; 22 22 $this->name = __('Feed import'); 23 23 $this->description = __('Imports a feed as new entries.'); … … 81 81 82 82 echo 83 '<h3>'.__('Import from a feed').'</h3>'.84 '<p>'.sprintf(__('This will import a feed (RSS or Atom) a as new content in the current blog: %s.'),85 '<strong>'.html::escapeHTML($this->core->blog->name).'</strong>').'</p>'.86 83 '<form action="'.$this->getURL(true).'" method="post">'. 84 '<fieldset><legend>'.__('Single blog').'</legend>'. 85 '<p>'.sprintf(__('This will import a feed (RSS or Atom) a as new content in the current blog: %s.'),html::escapeHTML($this->core->blog->name)).'</p>'. 87 86 88 '<div class="fieldset">'. 87 '<p><label for="feed_url">'.__('Feed URL:').'</label>'. 88 form::field('feed_url',50,300,html::escapeHTML($this->feed_url)).'</p>'. 89 90 '<p>'. 89 91 $this->core->formNonce(). 90 92 form::hidden(array('do'),1). 91 '<p><label for="feed_url">'.__('Feed URL:').'</label>'. 92 form::field('feed_url',40,300,html::escapeHTML($this->feed_url)).'</p>'. 93 '<p><input type="submit" value="'.__('Import').'" /></p>'. 94 '</div>'. 93 '<input type="submit" value="'.__('Import').'" /></p>'. 94 95 '</fieldset>'. 95 96 '</form>'; 96 97 } -
plugins/importExport/inc/class.dc.import.flat.php
r557 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 18 18 public function setInfo() 19 19 { 20 $this->type = 'i ';20 $this->type = 'import'; 21 21 $this->name = __('Flat file import'); 22 22 $this->description = __('Imports a blog or a full Dotclear installation from flat file.'); … … 55 55 56 56 try { 57 $bk = new dcImport($this->core,$file); 57 # Try to unzip file 58 $unzip_file = $this->unzip($file); 59 if (false !== $unzip_file) { 60 $bk = new flatImport($this->core,$unzip_file); 61 } 62 # Else this is a normal file 63 else { 64 $bk = new flatImport($this->core,$file); 65 } 66 58 67 $bk->importSingle(); 59 68 } catch (Exception $e) { 69 @unlink($unzip_file); 60 70 if ($to_unlink) { 61 71 @unlink($file); … … 63 73 throw $e; 64 74 } 75 @unlink($unzip_file); 65 76 if ($to_unlink) { 66 77 @unlink($file); … … 95 106 96 107 try { 97 $bk = new dcImport($this->core,$file); 108 # Try to unzip file 109 $unzip_file = $this->unzip($file); 110 if (false !== $unzip_file) { 111 $bk = new flatImport($this->core,$unzip_file); 112 } 113 # Else this is a normal file 114 else { 115 $bk = new flatImport($this->core,$file); 116 } 117 98 118 $bk->importFull(); 99 119 } catch (Exception $e) { 120 @unlink($unzip_file); 100 121 if ($to_unlink) { 101 122 @unlink($file); … … 103 124 throw $e; 104 125 } 126 @unlink($unzip_file); 105 127 if ($to_unlink) { 106 128 @unlink($file); … … 128 150 return; 129 151 } 152 153 $public_files = array_merge(array('-' => ''),$this->getPublicFiles()); 154 $has_files = (boolean) (count($public_files) - 1); 130 155 131 156 echo … … 155 180 156 181 echo 157 '<h3>'.__('Import a single blog').'</h3>'.158 '<p>'.sprintf(__('This will import a single blog backup as new content in the current blog: %s.'),159 '<strong>'.html::escapeHTML($this->core->blog->name).'</strong>').'</p>'.160 182 '<form action="'.$this->getURL(true).'" method="post" enctype="multipart/form-data">'. 161 162 '<div class="fieldset">'. 183 '<fieldset><legend>'.__('Single blog').'</legend>'. 184 '<p>'.sprintf(__('This will import a single blog backup as new content in the current blog: %s.'),html::escapeHTML($this->core->blog->name)).'</p>'. 185 186 '<p><label for="up_single_file">'.__('Upload a backup file').'</label>'. 187 '<input type="file" id="up_single_file" name="up_single_file" size="20" />'. 188 '</p>'; 189 190 if ($has_files) { 191 echo 192 '<p><label for="public_single_file">'.__('or pick up a local file in your public directory').' '. 193 form::combo('public_single_file',$public_files). 194 '</label></p>'; 195 } 196 197 echo 198 '<p>'. 163 199 $this->core->formNonce(). 164 200 form::hidden(array('do'),1). 165 201 form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). 166 '<p><label for="up_single_file">'.__('Upload a backup file').'</label>'. 167 '<input type="file" id="up_single_file" name="up_single_file" size="20" />'. 168 '</p>'; 169 170 $public_files = $this->getPublicFiles(); 171 172 $empty = empty($public_files); 173 $public_files = array_merge(array('-' => ''),$public_files); 174 echo 175 '<p><label for="public_single_file">'.__('or pick up a local file in your public directory').' '. 176 form::combo('public_single_file',$public_files, '', '', '', $empty). 177 '</label></p>'; 178 179 echo 180 '<p><input type="submit" value="'.__('Import').'" /></p>'. 181 '</div>'. 202 '<input type="submit" value="'.__('Import').'" /></p>'. 203 204 '</fieldset>'. 182 205 '</form>'; 183 206 … … 185 208 { 186 209 echo 187 '<h3>'.__('Import a full backup file').'</h3>'.188 210 '<form action="'.$this->getURL(true).'" method="post" enctype="multipart/form-data" id="formfull">'. 189 '<div>'.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).'</div>'. 190 191 '<div class="fieldset">'. 211 '<fieldset><legend>'.__('Multiple blogs').'</legend>'. 212 '<p>'.__('This will reset all the content of your database, except users.').'</p>'. 213 214 '<p><label for="up_full_file">'.__('Upload a backup file').'</label>'. 215 '<input type="file" id="up_full_file" name="up_full_file" size="20" />'. 216 '</p>'; 217 218 if ($has_files) { 219 echo 220 '<p><label for="public_full_file">'.__('or pick up a local file in your public directory').'</label>'. 221 form::combo('public_full_file',$public_files). 222 '</p>'; 223 } 224 225 echo 226 '<p><label for="your_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label>'. 227 form::password('your_pwd',20,255).'</p>'. 228 229 '<p>'. 192 230 $this->core->formNonce(). 193 231 form::hidden(array('do'),1). 194 232 form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). 195 '<p><label for="up_full_file">'.__('Upload a backup file').'</label>'. 196 '<input type="file" id="up_full_file" name="up_full_file" size="20" />'. 197 '</p>'; 198 199 echo 200 '<p><label for="public_full_file">'.__('or pick up a local file in your public directory').'</label>'. 201 form::combo('public_full_file',$public_files, '', '', '', $empty). 202 '</p>'; 203 204 echo 205 '<p class="form-note warning"><strong>'.__('Warning: This will reset all the content of your database, except users.').'</strong></p>'. 206 207 '<p><label for="your_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label>'. 208 form::password('your_pwd',20,255).'</p>'. 209 210 '<p><input type="submit" value="'.__('Import').'" /></p>'. 211 '</div>'. 233 '<input type="submit" value="'.__('Import').'" /></p>'. 234 235 '</fieldset>'. 212 236 '</form>'; 213 237 } … … 225 249 if (is_file($entry_path) && is_readable($entry_path)) 226 250 { 227 $fp = fopen($entry_path,'rb'); 228 if (strpos(fgets($fp),'///DOTCLEAR|') === 0) { 251 # Do not test each zip file content here, its too long 252 if (substr($entry_path,-4) == '.zip') { 253 $public_files[$entry] = $entry_path; 254 } 255 elseif (self::checkFileContent($entry_path)) { 229 256 $public_files[$entry] = $entry_path; 230 257 } 231 fclose($fp);232 258 } 233 259 } 234 260 } 235 261 return $public_files; 262 } 263 264 protected static function checkFileContent($entry_path) 265 { 266 $ret = false; 267 268 $fp = fopen($entry_path,'rb'); 269 $ret = strpos(fgets($fp),'///DOTCLEAR|') === 0; 270 fclose($fp); 271 272 return $ret; 273 } 274 275 private function unzip($file) 276 { 277 $zip = new fileUnzip($file); 278 279 if ($zip->isEmpty()) { 280 $zip->close(); 281 return false;//throw new Exception(__('File is empty or not a compressed file.')); 282 } 283 284 foreach($zip->getFilesList() as $zip_file) 285 { 286 # Check zipped file name 287 if (substr($zip_file,-4) != '.txt') { 288 continue; 289 } 290 291 # Check zipped file contents 292 $content = $zip->unzip($zip_file); 293 if (strpos($content,'///DOTCLEAR|') !== 0) { 294 unset($content); 295 continue; 296 } 297 298 $target = path::fullFromRoot($zip_file,dirname($file)); 299 300 # Check existing files with same name 301 if (file_exists($target)) { 302 $zip->close(); 303 unset($content); 304 throw new Exception(__('Another file with same name exists.')); 305 } 306 307 # Extract backup content 308 if (file_put_contents($target,$content) === false) { 309 $zip->close(); 310 unset($content); 311 throw new Exception(__('Failed to extract backup file.')); 312 } 313 314 $zip->close(); 315 unset($content); 316 317 # Return extracted file name 318 return $target; 319 } 320 321 $zip->close(); 322 throw new Exception(__('No backup in compressed file.')); 236 323 } 237 324 } -
plugins/importExport/inc/class.dc.import.wp.php
r807 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 61 61 protected function setInfo() 62 62 { 63 $this->type = 'i ';63 $this->type = 'import'; 64 64 $this->name = __('WordPress import'); 65 65 $this->description = __('Import a WordPress installation into your current blog.'); -
plugins/importExport/inc/flat/class.flat.backup.php
r270 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 12 12 if (!defined('DC_RC_PATH')) { return; } 13 13 14 class backupFile14 class flatBackup 15 15 { 16 16 protected $fp; … … 74 74 } 75 75 76 return new backupFileItem($this->line_name,$res);76 return new flatBackupItem($this->line_name,$res); 77 77 } 78 78 else … … 83 83 } 84 84 85 class backupFileItem85 class flatBackupItem 86 86 { 87 87 public $__name; -
plugins/importExport/inc/flat/class.flat.export.php
r270 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 12 12 if (!defined('DC_RC_PATH')) { return; } 13 13 14 class dbExport14 class flatExport 15 15 { 16 16 private $con; -
plugins/importExport/inc/flat/class.flat.import.php
r298 r840 2 2 # -- BEGIN LICENSE BLOCK --------------------------------------- 3 3 # 4 # This file is part of Dotclear2.4 # This file is part of importExport, a plugin for DotClear2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2012 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 12 12 if (!defined('DC_RC_PATH')) { return; } 13 13 14 class dcImport extends backupFile14 class flatImport extends flatBackup 15 15 { 16 16 private $core;
Note: See TracChangeset
for help on using the changeset viewer.