Dotclear


Ignore:
Timestamp:
02/14/18 10:14:33 (7 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
default
Message:

Add autocomplete attribute to form::password where it's relevant, code formatting (PSR-2)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins/importExport/inc/class.dc.import.flat.php

    r3639 r3699  
    1010# 
    1111# -- END LICENSE BLOCK ----------------------------------------- 
    12 if (!defined('DC_RC_PATH')) { return; } 
     12if (!defined('DC_RC_PATH')) {return;} 
    1313 
    1414class dcImportFlat extends dcIeModule 
    1515{ 
    16      protected $status = false; 
    17  
    18      public function setInfo() 
    19      { 
    20           $this->type = 'import'; 
    21           $this->name = __('Flat file import'); 
    22           $this->description = __('Imports a blog or a full Dotclear installation from flat file.'); 
    23      } 
    24  
    25      public function process($do) 
    26      { 
    27           if ($do == 'single' || $do == 'full') { 
    28                $this->status = $do; 
    29                return; 
    30           } 
    31  
    32           $to_unlink = false; 
    33  
    34           # Single blog import 
    35           $files = $this->getPublicFiles(); 
    36           $single_upl = null; 
    37           if (!empty($_POST['public_single_file']) && in_array($_POST['public_single_file'],$files)) { 
    38                $single_upl = false; 
    39           } elseif (!empty($_FILES['up_single_file'])) { 
    40                $single_upl = true; 
    41           } 
    42  
    43           if ($single_upl !== null) 
    44           { 
    45                if ($single_upl) { 
    46                     files::uploadStatus($_FILES['up_single_file']); 
    47                     $file = DC_TPL_CACHE.'/'.md5(uniqid()); 
    48                     if (!move_uploaded_file($_FILES['up_single_file']['tmp_name'],$file)) { 
    49                          throw new Exception(__('Unable to move uploaded file.')); 
    50                     } 
    51                     $to_unlink = true; 
    52                } else { 
    53                     $file = $_POST['public_single_file']; 
    54                } 
    55  
    56                try { 
    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  
    67                     $bk->importSingle(); 
    68                } catch (Exception $e) { 
    69                     @unlink($unzip_file); 
    70                     if ($to_unlink) { 
    71                          @unlink($file); 
    72                     } 
    73                     throw $e; 
    74                } 
    75                @unlink($unzip_file); 
    76                if ($to_unlink) { 
    77                     @unlink($file); 
    78                } 
    79                http::redirect($this->getURL().'&do=single'); 
    80           } 
    81  
    82           # Full import 
    83           $full_upl = null; 
    84           if (!empty($_POST['public_full_file']) && in_array($_POST['public_full_file'],$files)) { 
    85                $full_upl = false; 
    86           } elseif (!empty($_FILES['up_full_file'])) { 
    87                $full_upl = true; 
    88           } 
    89  
    90           if ($full_upl !== null && $this->core->auth->isSuperAdmin()) 
    91           { 
    92                if (empty($_POST['your_pwd']) || !$this->core->auth->checkPassword($_POST['your_pwd'])) { 
    93                     throw new Exception(__('Password verification failed')); 
    94                } 
    95  
    96                if ($full_upl) { 
    97                     files::uploadStatus($_FILES['up_full_file']); 
    98                     $file = DC_TPL_CACHE.'/'.md5(uniqid()); 
    99                     if (!move_uploaded_file($_FILES['up_full_file']['tmp_name'],$file)) { 
    100                          throw new Exception(__('Unable to move uploaded file.')); 
    101                     } 
    102                     $to_unlink = true; 
    103                } else { 
    104                     $file = $_POST['public_full_file']; 
    105                } 
    106  
    107                try { 
    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  
    118                     $bk->importFull(); 
    119                } catch (Exception $e) { 
    120                     @unlink($unzip_file); 
    121                     if ($to_unlink) { 
    122                          @unlink($file); 
    123                     } 
    124                     throw $e; 
    125                } 
    126                @unlink($unzip_file); 
    127                if ($to_unlink) { 
    128                     @unlink($file); 
    129                } 
    130                http::redirect($this->getURL().'&do=full'); 
    131           } 
    132  
    133           header('content-type:text/plain'); 
    134           var_dump($_POST); 
    135           exit; 
    136  
    137           $this->status = true; 
    138      } 
    139  
    140      public function gui() 
    141      { 
    142           if ($this->status == 'single') 
    143           { 
    144                dcPage::success(__('Single blog successfully imported.')); 
    145                return; 
    146           } 
    147           if ($this->status == 'full') 
    148           { 
    149                dcPage::success(__('Content successfully imported.')); 
    150                return; 
    151           } 
    152  
    153           $public_files = array_merge(array('-' => ''),$this->getPublicFiles()); 
    154           $has_files = (boolean) (count($public_files) - 1); 
    155  
    156           echo 
    157           '<script type="text/javascript">'."\n". 
    158           dcPage::jsVar('dotclear.msg.confirm_full_import', 
    159                __('Are you sure you want to import a full backup file?')). 
    160           "$(function() {". 
    161                "$('#up_single_file').change(function() { ". 
    162                     "if (this.value != '') { $('#public_single_file').val(''); } ". 
    163                "}); ". 
    164                "$('#public_single_file').change(function() { ". 
    165                     "if (this.value != '') { $('#up_single_file').val(''); } ". 
    166                "}); ". 
    167                "$('#up_full_file').change(function() { ". 
    168                     "if (this.value != '') { $('#public_full_file').val(''); } ". 
    169                "}); ". 
    170                "$('#public_full_file').change(function() { ". 
    171                     "if (this.value != '') { $('#up_full_file').val(''); } ". 
    172                "}); ". 
    173                "$('#formfull').submit(function() { ". 
    174                     "return window.confirm(dotclear.msg.confirm_full_import); ". 
    175                "}); ". 
    176           "});\n". 
    177           "</script>\n"; 
    178  
    179           echo 
    180           '<form action="'.$this->getURL(true).'" method="post" enctype="multipart/form-data" class="fieldset">'. 
    181           '<h3>'.__('Single blog').'</h3>'. 
    182           '<p>'.sprintf(__('This will import a single blog backup as new content in the current blog: <strong>%s</strong>.'),html::escapeHTML($this->core->blog->name)).'</p>'. 
    183  
    184           '<p><label for="up_single_file">'.__('Upload a backup file'). 
    185           ' ('.sprintf(__('maximum size %s'),files::size(DC_MAX_UPLOAD_SIZE)).')'.' </label>'. 
    186           ' <input type="file" id="up_single_file" name="up_single_file" size="20" />'. 
    187           '</p>'; 
    188  
    189           if ($has_files) { 
    190                echo 
    191                '<p><label for="public_single_file" class="">'.__('or pick up a local file in your public directory').' </label> '. 
    192                form::combo('public_single_file',$public_files). 
    193                '</p>'; 
    194           } 
    195  
    196           echo 
    197           '<p>'. 
    198           $this->core->formNonce(). 
    199           form::hidden(array('do'),1). 
    200           form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). 
    201           '<input type="submit" value="'.__('Import').'" /></p>'. 
    202  
    203           '</form>'; 
    204  
    205           if ($this->core->auth->isSuperAdmin()) 
    206           { 
    207                echo 
    208                '<form action="'.$this->getURL(true).'" method="post" enctype="multipart/form-data" id="formfull" class="fieldset">'. 
    209                '<h3>'.__('Multiple blogs').'</h3>'. 
    210                '<p class="warning">'.__('This will reset all the content of your database, except users.').'</p>'. 
    211  
    212                '<p><label for="up_full_file">'.__('Upload a backup file').' '. 
    213                ' ('.sprintf(__('maximum size %s'),files::size(DC_MAX_UPLOAD_SIZE)).')'.' </label>'. 
    214                '<input type="file" id="up_full_file" name="up_full_file" size="20" />'. 
    215                '</p>'; 
    216  
    217                if ($has_files) { 
    218                     echo 
    219                     '<p><label for="public_full_file">'.__('or pick up a local file in your public directory').' </label>'. 
    220                     form::combo('public_full_file',$public_files). 
    221                     '</p>'; 
    222                } 
    223  
    224                echo 
    225                '<p><label for="your_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label>'. 
    226                form::password('your_pwd',20,255,'','','',false,'required placeholder="'.__('Password').'"').'</p>'. 
    227  
    228                '<p>'. 
    229                $this->core->formNonce(). 
    230                form::hidden(array('do'),1). 
    231                form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). 
    232                '<input type="submit" value="'.__('Import').'" /></p>'. 
    233  
    234                '</form>'; 
    235           } 
    236      } 
    237  
    238      protected function getPublicFiles() 
    239      { 
    240           $public_files = array(); 
    241           $dir = @dir($this->core->blog->public_path); 
    242           if ($dir) 
    243           { 
    244                while (($entry = $dir->read()) !== false) { 
    245                     $entry_path = $dir->path.'/'.$entry; 
    246  
    247                     if (is_file($entry_path) && is_readable($entry_path)) 
    248                     { 
    249                          # Do not test each zip file content here, its too long 
    250                          if (substr($entry_path,-4) == '.zip') { 
    251                                    $public_files[$entry] = $entry_path; 
    252                          } 
    253                          elseif (self::checkFileContent($entry_path)) { 
    254                               $public_files[$entry] = $entry_path; 
    255                          } 
    256                     } 
    257                } 
    258           } 
    259           return $public_files; 
    260      } 
    261  
    262      protected static function checkFileContent($entry_path) 
    263      { 
    264           $ret = false; 
    265  
    266           $fp = fopen($entry_path,'rb'); 
    267           $ret = strpos(fgets($fp),'///DOTCLEAR|') === 0; 
    268           fclose($fp); 
    269  
    270           return $ret; 
    271      } 
    272  
    273      private function unzip($file) 
    274      { 
    275           $zip = new fileUnzip($file); 
    276  
    277           if ($zip->isEmpty()) { 
    278                $zip->close(); 
    279                return false;//throw new Exception(__('File is empty or not a compressed file.')); 
    280           } 
    281  
    282           foreach($zip->getFilesList() as $zip_file) 
    283           { 
    284                # Check zipped file name 
    285                if (substr($zip_file,-4) != '.txt') { 
    286                     continue; 
    287                } 
    288  
    289                # Check zipped file contents 
    290                $content = $zip->unzip($zip_file); 
    291                if (strpos($content,'///DOTCLEAR|') !== 0) { 
    292                     unset($content); 
    293                     continue; 
    294                } 
    295  
    296                $target = path::fullFromRoot($zip_file,dirname($file)); 
    297  
    298                # Check existing files with same name 
    299                if (file_exists($target)) { 
    300                     $zip->close(); 
    301                     unset($content); 
    302                     throw new Exception(__('Another file with same name exists.')); 
    303                } 
    304  
    305                # Extract backup content 
    306                if (file_put_contents($target,$content) === false) { 
    307                     $zip->close(); 
    308                     unset($content); 
    309                     throw new Exception(__('Failed to extract backup file.')); 
    310                } 
    311  
    312                $zip->close(); 
    313                unset($content); 
    314  
    315                # Return extracted file name 
    316                return $target; 
    317           } 
    318  
    319           $zip->close(); 
    320           throw new Exception(__('No backup in compressed file.')); 
    321      } 
     16    protected $status = false; 
     17 
     18    public function setInfo() 
     19    { 
     20        $this->type        = 'import'; 
     21        $this->name        = __('Flat file import'); 
     22        $this->description = __('Imports a blog or a full Dotclear installation from flat file.'); 
     23    } 
     24 
     25    public function process($do) 
     26    { 
     27        if ($do == 'single' || $do == 'full') { 
     28            $this->status = $do; 
     29            return; 
     30        } 
     31 
     32        $to_unlink = false; 
     33 
     34        # Single blog import 
     35        $files      = $this->getPublicFiles(); 
     36        $single_upl = null; 
     37        if (!empty($_POST['public_single_file']) && in_array($_POST['public_single_file'], $files)) { 
     38            $single_upl = false; 
     39        } elseif (!empty($_FILES['up_single_file'])) { 
     40            $single_upl = true; 
     41        } 
     42 
     43        if ($single_upl !== null) { 
     44            if ($single_upl) { 
     45                files::uploadStatus($_FILES['up_single_file']); 
     46                $file = DC_TPL_CACHE . '/' . md5(uniqid()); 
     47                if (!move_uploaded_file($_FILES['up_single_file']['tmp_name'], $file)) { 
     48                    throw new Exception(__('Unable to move uploaded file.')); 
     49                } 
     50                $to_unlink = true; 
     51            } else { 
     52                $file = $_POST['public_single_file']; 
     53            } 
     54 
     55            try { 
     56                # Try to unzip file 
     57                $unzip_file = $this->unzip($file); 
     58                if (false !== $unzip_file) { 
     59                    $bk = new flatImport($this->core, $unzip_file); 
     60                } 
     61                # Else this is a normal file 
     62                else { 
     63                    $bk = new flatImport($this->core, $file); 
     64                } 
     65 
     66                $bk->importSingle(); 
     67            } catch (Exception $e) { 
     68                @unlink($unzip_file); 
     69                if ($to_unlink) { 
     70                    @unlink($file); 
     71                } 
     72                throw $e; 
     73            } 
     74            @unlink($unzip_file); 
     75            if ($to_unlink) { 
     76                @unlink($file); 
     77            } 
     78            http::redirect($this->getURL() . '&do=single'); 
     79        } 
     80 
     81        # Full import 
     82        $full_upl = null; 
     83        if (!empty($_POST['public_full_file']) && in_array($_POST['public_full_file'], $files)) { 
     84            $full_upl = false; 
     85        } elseif (!empty($_FILES['up_full_file'])) { 
     86            $full_upl = true; 
     87        } 
     88 
     89        if ($full_upl !== null && $this->core->auth->isSuperAdmin()) { 
     90            if (empty($_POST['your_pwd']) || !$this->core->auth->checkPassword($_POST['your_pwd'])) { 
     91                throw new Exception(__('Password verification failed')); 
     92            } 
     93 
     94            if ($full_upl) { 
     95                files::uploadStatus($_FILES['up_full_file']); 
     96                $file = DC_TPL_CACHE . '/' . md5(uniqid()); 
     97                if (!move_uploaded_file($_FILES['up_full_file']['tmp_name'], $file)) { 
     98                    throw new Exception(__('Unable to move uploaded file.')); 
     99                } 
     100                $to_unlink = true; 
     101            } else { 
     102                $file = $_POST['public_full_file']; 
     103            } 
     104 
     105            try { 
     106                # Try to unzip file 
     107                $unzip_file = $this->unzip($file); 
     108                if (false !== $unzip_file) { 
     109                    $bk = new flatImport($this->core, $unzip_file); 
     110                } 
     111                # Else this is a normal file 
     112                else { 
     113                    $bk = new flatImport($this->core, $file); 
     114                } 
     115 
     116                $bk->importFull(); 
     117            } catch (Exception $e) { 
     118                @unlink($unzip_file); 
     119                if ($to_unlink) { 
     120                    @unlink($file); 
     121                } 
     122                throw $e; 
     123            } 
     124            @unlink($unzip_file); 
     125            if ($to_unlink) { 
     126                @unlink($file); 
     127            } 
     128            http::redirect($this->getURL() . '&do=full'); 
     129        } 
     130 
     131        header('content-type:text/plain'); 
     132        var_dump($_POST); 
     133        exit; 
     134 
     135        $this->status = true; 
     136    } 
     137 
     138    public function gui() 
     139    { 
     140        if ($this->status == 'single') { 
     141            dcPage::success(__('Single blog successfully imported.')); 
     142            return; 
     143        } 
     144        if ($this->status == 'full') { 
     145            dcPage::success(__('Content successfully imported.')); 
     146            return; 
     147        } 
     148 
     149        $public_files = array_merge(array('-' => ''), $this->getPublicFiles()); 
     150        $has_files    = (boolean) (count($public_files) - 1); 
     151 
     152        echo 
     153        '<script type="text/javascript">' . "\n" . 
     154        dcPage::jsVar('dotclear.msg.confirm_full_import', 
     155            __('Are you sure you want to import a full backup file?')) . 
     156            "$(function() {" . 
     157            "$('#up_single_file').change(function() { " . 
     158            "if (this.value != '') { $('#public_single_file').val(''); } " . 
     159            "}); " . 
     160            "$('#public_single_file').change(function() { " . 
     161            "if (this.value != '') { $('#up_single_file').val(''); } " . 
     162            "}); " . 
     163            "$('#up_full_file').change(function() { " . 
     164            "if (this.value != '') { $('#public_full_file').val(''); } " . 
     165            "}); " . 
     166            "$('#public_full_file').change(function() { " . 
     167            "if (this.value != '') { $('#up_full_file').val(''); } " . 
     168            "}); " . 
     169            "$('#formfull').submit(function() { " . 
     170            "return window.confirm(dotclear.msg.confirm_full_import); " . 
     171            "}); " . 
     172            "});\n" . 
     173            "</script>\n"; 
     174 
     175        echo 
     176        '<form action="' . $this->getURL(true) . '" method="post" enctype="multipart/form-data" class="fieldset">' . 
     177        '<h3>' . __('Single blog') . '</h3>' . 
     178        '<p>' . sprintf(__('This will import a single blog backup as new content in the current blog: <strong>%s</strong>.'), html::escapeHTML($this->core->blog->name)) . '</p>' . 
     179 
     180        '<p><label for="up_single_file">' . __('Upload a backup file') . 
     181        ' (' . sprintf(__('maximum size %s'), files::size(DC_MAX_UPLOAD_SIZE)) . ')' . ' </label>' . 
     182            ' <input type="file" id="up_single_file" name="up_single_file" size="20" />' . 
     183            '</p>'; 
     184 
     185        if ($has_files) { 
     186            echo 
     187            '<p><label for="public_single_file" class="">' . __('or pick up a local file in your public directory') . ' </label> ' . 
     188            form::combo('public_single_file', $public_files) . 
     189                '</p>'; 
     190        } 
     191 
     192        echo 
     193        '<p>' . 
     194        $this->core->formNonce() . 
     195        form::hidden(array('do'), 1) . 
     196        form::hidden(array('MAX_FILE_SIZE'), DC_MAX_UPLOAD_SIZE) . 
     197        '<input type="submit" value="' . __('Import') . '" /></p>' . 
     198 
     199            '</form>'; 
     200 
     201        if ($this->core->auth->isSuperAdmin()) { 
     202            echo 
     203            '<form action="' . $this->getURL(true) . '" method="post" enctype="multipart/form-data" id="formfull" class="fieldset">' . 
     204            '<h3>' . __('Multiple blogs') . '</h3>' . 
     205            '<p class="warning">' . __('This will reset all the content of your database, except users.') . '</p>' . 
     206 
     207            '<p><label for="up_full_file">' . __('Upload a backup file') . ' ' . 
     208            ' (' . sprintf(__('maximum size %s'), files::size(DC_MAX_UPLOAD_SIZE)) . ')' . ' </label>' . 
     209                '<input type="file" id="up_full_file" name="up_full_file" size="20" />' . 
     210                '</p>'; 
     211 
     212            if ($has_files) { 
     213                echo 
     214                '<p><label for="public_full_file">' . __('or pick up a local file in your public directory') . ' </label>' . 
     215                form::combo('public_full_file', $public_files) . 
     216                    '</p>'; 
     217            } 
     218 
     219            echo 
     220            '<p><label for="your_pwd" class="required"><abbr title="' . __('Required field') . '">*</abbr> ' . __('Your password:') . '</label>' . 
     221            form::password('your_pwd', 20, 255, 
     222                array( 
     223                    'extra_html'   => 'required placeholder="' . __('Password') . '"', 
     224                    'autocomplete' => 'current-password' 
     225                ) 
     226            ) . '</p>' . 
     227 
     228            '<p>' . 
     229            $this->core->formNonce() . 
     230            form::hidden(array('do'), 1) . 
     231            form::hidden(array('MAX_FILE_SIZE'), DC_MAX_UPLOAD_SIZE) . 
     232            '<input type="submit" value="' . __('Import') . '" /></p>' . 
     233 
     234                '</form>'; 
     235        } 
     236    } 
     237 
     238    protected function getPublicFiles() 
     239    { 
     240        $public_files = array(); 
     241        $dir          = @dir($this->core->blog->public_path); 
     242        if ($dir) { 
     243            while (($entry = $dir->read()) !== false) { 
     244                $entry_path = $dir->path . '/' . $entry; 
     245 
     246                if (is_file($entry_path) && is_readable($entry_path)) { 
     247                    # Do not test each zip file content here, its too long 
     248                    if (substr($entry_path, -4) == '.zip') { 
     249                        $public_files[$entry] = $entry_path; 
     250                    } elseif (self::checkFileContent($entry_path)) { 
     251                        $public_files[$entry] = $entry_path; 
     252                    } 
     253                } 
     254            } 
     255        } 
     256        return $public_files; 
     257    } 
     258 
     259    protected static function checkFileContent($entry_path) 
     260    { 
     261        $ret = false; 
     262 
     263        $fp  = fopen($entry_path, 'rb'); 
     264        $ret = strpos(fgets($fp), '///DOTCLEAR|') === 0; 
     265        fclose($fp); 
     266 
     267        return $ret; 
     268    } 
     269 
     270    private function unzip($file) 
     271    { 
     272        $zip = new fileUnzip($file); 
     273 
     274        if ($zip->isEmpty()) { 
     275            $zip->close(); 
     276            return false; //throw new Exception(__('File is empty or not a compressed file.')); 
     277        } 
     278 
     279        foreach ($zip->getFilesList() as $zip_file) { 
     280            # Check zipped file name 
     281            if (substr($zip_file, -4) != '.txt') { 
     282                continue; 
     283            } 
     284 
     285            # Check zipped file contents 
     286            $content = $zip->unzip($zip_file); 
     287            if (strpos($content, '///DOTCLEAR|') !== 0) { 
     288                unset($content); 
     289                continue; 
     290            } 
     291 
     292            $target = path::fullFromRoot($zip_file, dirname($file)); 
     293 
     294            # Check existing files with same name 
     295            if (file_exists($target)) { 
     296                $zip->close(); 
     297                unset($content); 
     298                throw new Exception(__('Another file with same name exists.')); 
     299            } 
     300 
     301            # Extract backup content 
     302            if (file_put_contents($target, $content) === false) { 
     303                $zip->close(); 
     304                unset($content); 
     305                throw new Exception(__('Failed to extract backup file.')); 
     306            } 
     307 
     308            $zip->close(); 
     309            unset($content); 
     310 
     311            # Return extracted file name 
     312            return $target; 
     313        } 
     314 
     315        $zip->close(); 
     316        throw new Exception(__('No backup in compressed file.')); 
     317    } 
    322318} 
Note: See TracChangeset for help on using the changeset viewer.

Sites map