value) to an account profile * * @param array $profiles server profiles */ function upgradeConfigToServerProfileFolders($profiles) { if (!is_writable('../config')) { StatusMessage('ERROR', 'Upgrade failed.', 'The directory \'/config\' has missing write permissions.'); return; } // copy default configs if (!file_exists('../config/templates')) { @mkdir('../config/templates', 0700); recursiveCopy('../config/pdf/', '../config/templates/pdf/', $profiles, 'default.'); recursiveCopy('../config/profiles/', '../config/templates/profiles/', $profiles, 'default.'); } foreach ($profiles as $profile) { // upgrade PDF configs $dir = '../config/pdf/' . $profile; if (!file_exists($dir)) { recursiveCopy('../config/pdf/', $dir, $profiles); } // upgrade profiles configs $dir = '../config/profiles/' . $profile; if (!file_exists($dir)) { recursiveCopy('../config/profiles/', $dir, $profiles); } } // delete old files recursiveDelete('../config/pdf', $profiles); recursiveDelete('../config/profiles', $profiles); } /** * Saves an hash array (attribute => value) to an account profile * * @param array $profiles server profiles */ function copyConfigTemplates($profiles) { foreach ($profiles as $profile) { // copy templates but do not override existing files recursiveCopy('../config/templates/pdf/', '../config/pdf/' . $profile, $profiles, null, false); recursiveCopy('../config/templates/profiles/', '../config/profiles/' . $profile, $profiles, null, false); } } /** * Copy a file or recursively copy a directory * * @param string $src - source path to file or directory * @param string $dst - destination path to file or directory * @param array $profiles - server profiles (used to avoid copying of newly created folders) * @param string $fileFilter copy only files that start with the given filter * @param boolean $overwrite overwrite existing files */ function recursiveCopy($src, $dst, $profiles, $fileFilter = null, $overwrite = true) { $dir = @opendir($src); if (!file_exists($dst)) { $tmpState = @mkdir($dst, 0700, true); if ($tmpState === false) { StatusMessage('ERROR', 'Upgrade failed.', 'The directory \'' . $dst . '\' could not be created.'); } } while (false !== ($file = @readdir($dir))) { if ($file != '.' && $file != '..' && !in_array($file, $profiles)) { if (is_dir($src . '/' . $file) && ($file == 'logos')) { recursiveCopy($src . '/' . $file, $dst . '/' . $file, $profiles, $fileFilter, $overwrite); } elseif ((isset($fileFilter) && (strpos($file, $fileFilter) === 0 || $file == '.htaccess')) || (!isset($fileFilter))) { if (!is_file($src . '/' . $file) || ($file == '.gitignore')) { continue; } if ($overwrite || !file_exists($dst . '/' . $file)) { $tmpState = @copy($src . '/' . $file, $dst . '/' . $file); if ($tmpState === false) { StatusMessage('ERROR', 'Upgrade failed.', 'The file ' . $file . ' could not be copied.'); } } } } } closedir($dir); } /** * Delete a file or recursively delete a directory * * @param string $src - path to file or directory * @param array $profiles - server profiles (used to avoid copying of newly created folders) */ function recursiveDelete($src, $profiles) { if (is_file($src)) { $tmpState = @unlink($src); if ($tmpState === false) { StatusMessage('ERROR', 'Upgrade failed.', 'The file ' . $src . ' could not be deleted.'); } return; } else if (is_dir($src) && is_writable($src)) { $dir = @opendir($src); while (false !== ($path = readdir($dir))) { if ($path != '.' && $path != '..' && !in_array($path, $profiles)) { recursiveDelete($src . '/' . $path, $profiles); } } @closedir($dir); if ($src != '../config/pdf' && $src != '../config/profiles') { $tmpState = @rmdir($src); if ($tmpState === false) { StatusMessage('ERROR', 'Upgrade failed.', 'The directory ' . $src . ' could not be deleted.'); } } return; } else { StatusMessage('ERROR', 'Upgrade failed.', 'The directory ' . $src . ' has missing write permissions.'); return; } } ?>