public function exportAction()
 {
     set_time_limit(0);
     $config = Config::get();
     $dbname = $config->database->name;
     $dbuser = $config->database->user;
     $dbpass = $config->database->password;
     $dbhost = $config->database->host;
     $outputDir = APPLICATION_ROOT;
     $sqlSubDir = '__sql';
     if (!file_exists($outputDir . $sqlSubDir) && !mkdir($outputDir . $sqlSubDir)) {
         header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
         die('Could not create output directory');
     }
     // dump database
     $dbFilename = $sqlSubDir . '/' . $dbname . '.sql';
     $command = "mysqldump -h {$dbhost} -u {$dbuser} -p{$dbpass} --add-drop-table --databases {$dbname} > {$outputDir}{$dbFilename}";
     system($command);
     // create zip file
     $zipFilename = 'export_' . date('YmdHis') . '.zip';
     $zip = new ZipArchive();
     if ($zip->open($zipFilename, file_exists($zipFilename) ? \ZIPARCHIVE::OVERWRITE : \ZIPARCHIVE::CREATE) !== true) {
         header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
         die('Could not create zip file');
     }
     $this->zip($zip, array($dbFilename => $outputDir . $dbFilename, $outputDir . 'user-data/'));
     $zip->close();
     // encrypt zip
     $encryptedFilename = $zipFilename . '.enc';
     $command = "openssl enc -aes-256-cbc -pass pass:"******" < {$outputDir}{$zipFilename} > {$outputDir}{$encryptedFilename}";
     system($command);
     // send file contents
     header('Content-Length: ' . filesize($outputDir . $encryptedFilename));
     $this->sendFileContents($outputDir . $encryptedFilename);
     // clean up
     FileUtils::deleteFolder($outputDir . $sqlSubDir);
     FileUtils::deleteFile($outputDir . $zipFilename);
     FileUtils::deleteFile($outputDir . $encryptedFilename);
     die;
 }
 protected function endSavingImages($row_id, $error = false)
 {
     // Zur Sicherheit nur irgendwelche Bilder löschen, wenn das Speichern ohne Fehler verlaufen ist
     if (!$error) {
         $image_dir = $this->getImageDir($row_id);
         // Erstmal alle Dateien löschen, die auf der Liste der zu löschenden Dateien stehen
         if (count($this->image_files_to_delete) > 0) {
             foreach ($this->image_files_to_delete as $filename) {
                 if (is_file($image_dir . $filename)) {
                     FileUtils::deleteFile($image_dir . $filename);
                 }
             }
         }
         // Dann alle Dateien durchgehen, die noch zu finden sind
         // Wenn eine Datei nicht auf der Liste der zu erhaltenden Dateien steht,
         // ist anzunehmen, dass sie verwaist ist und gelöscht werden soll.
         $handle = @opendir($image_dir);
         if ($handle !== false) {
             while (false !== ($item = @readdir($handle))) {
                 if ($item != "." && $item != "..") {
                     if (@is_file($image_dir . $item)) {
                         if (!in_array($item, $this->image_files_to_keep)) {
                             if (is_file($image_dir . $item)) {
                                 FileUtils::deleteFile($image_dir . $item);
                             }
                         }
                     }
                 }
             }
             @closedir($handle);
         }
     }
 }
 private function removeOldTempFiles()
 {
     $handle = @opendir(APPLICATION_ROOT . 'user-data/tmp/images/');
     if ($handle !== false) {
         while (false !== ($item = @readdir($handle))) {
             if ($item != "." && $item != "..") {
                 if (@is_file(APPLICATION_ROOT . 'user-data/tmp/images/' . $item)) {
                     // Der Zeitstempel ist Teil des Dateinamens, da filectime usw nicht
                     // unbedingt zuverl�ssig sind (z.B. nach Kopie auf einen anderen Server)
                     $temp = explode('-', $item);
                     $timestamp = $temp[0];
                     if (is_numeric($timestamp)) {
                         if (time() - $timestamp > self::TEMP_FILES_MAX_AGE) {
                             FileUtils::deleteFile(APPLICATION_ROOT . 'user-data/tmp/images/' . $item);
                         }
                     }
                 }
             }
         }
         @closedir($handle);
     }
 }
 private function switchTemplate($page_id, $new_template_id, $properties = null)
 {
     if ($properties === null) {
         $properties = $this->pages->getProperties($page_id);
     }
     if ($properties !== null && $properties !== false) {
         $old_template_id = $properties['template-id'];
         if ($new_template_id != $old_template_id) {
             // Ver�ffentlichte Seite samt Dateien l�schen
             $published_folder = $this->pages->getPagePublishedFolder($page_id, $properties);
             $published_data_file = $published_folder . Pages::DATA_FILE_NAME;
             $published_files_folder = $published_folder . Pages::PAGE_FILES_FOLDER_NAME;
             if (file_exists($published_data_file)) {
                 FileUtils::deleteFile($published_data_file);
             }
             if (file_exists($published_files_folder)) {
                 FileUtils::deleteFolder($published_files_folder);
             }
             // Bearbeitete Seite samt Dateien l�schen
             $edit_folder = $this->pages->getPageeditFolder($page_id, $properties);
             $edit_data_file = $edit_folder . Pages::DATA_FILE_NAME;
             $edit_files_folder = $edit_folder . Pages::PAGE_FILES_FOLDER_NAME;
             if (file_exists($edit_data_file)) {
                 FileUtils::deleteFile($edit_data_file);
             }
             if (file_exists($edit_files_folder)) {
                 FileUtils::deleteFolder($edit_files_folder);
             }
             // ge�nderte Eigenschaften setzen
             $edit_properties = array('template-id' => $new_template_id, 'last-change-date' => time(), 'last-change-user-id' => Auth::getUserId(), 'last-change-user-name' => Auth::getScreenName(), 'status' => Pages::STATUS_NEW);
             $this->pages->setProperties($page_id, $edit_properties);
             return true;
         }
     }
     return false;
 }
 public function onAfterSavePageDataFields($parameters, &$data)
 {
     // Erstmal alle Dateien löschen, die auf der Liste der zu l�schenden Dateien stehen
     if (count($this->files_to_delete) > 0) {
         foreach ($this->files_to_delete as $filename) {
             if (is_file($parameters['pageFiles'] . $filename)) {
                 FileUtils::deleteFile($parameters['pageFiles'] . $filename);
             }
         }
     }
     // Dann alle Dateien durchgehen, die noch zu finden sind
     // Wenn eine Datei nicht auf der Liste der zu erhaltenden Dateien steht,
     // ist anzunehmen, dass sie verwaist ist und gelöscht werden soll.
     $handle = @opendir($parameters['pageFiles']);
     if ($handle !== false) {
         while (false !== ($item = @readdir($handle))) {
             if ($item != "." && $item != "..") {
                 if (@is_file($parameters['pageFiles'] . $item)) {
                     if (!in_array($item, $this->files_to_keep)) {
                         if (is_file($parameters['pageFiles'] . $item)) {
                             FileUtils::deleteFile($parameters['pageFiles'] . $item);
                         }
                     }
                 }
             }
         }
         @closedir($handle);
     }
 }