error->add( __('Cache directory is not writable.') ); } if (!is_writable($repo)) { dcCore::app()->error->add( __('Path to repository is not writable.') ); } if (empty($file_a)) { dcCore::app()->error->add( __('You must specify the name of package to export.') ); } if (!is_writable(dirname($repo . '/' . $file_a))) { dcCore::app()->error->add( __('Path to first export package is not writable.') ); } if (!empty($file_b) && !is_writable(dirname($repo . '/' . $file_b))) { dcCore::app()->error->add( __('Path to second export package is not writable.') ); } return !dcCore::app()->error->flag(); } public static function is_writable(string $path, string $file): bool { return !(empty($path) || empty($file) || !is_writable(dirname($path . '/' . $file))); } public static function getRepositoryDir($dir) { if (empty($dir)) { try { $dir = DC_VAR . DIRECTORY_SEPARATOR . 'packman'; @files::makeDir($dir, true); } catch (Exception $e) { $dir = ''; } } return $dir; } public static function getModules(string $type, ?string $id = null): ?array { $type = $type == 'themes' ? 'themes' : 'plugins'; $modules = array_merge(dcCore::app()->{$type}->getDisabledModules(), dcCore::app()->{$type}->getModules()); if (empty($id)) { return $modules; } elseif (array_key_exists($id, $modules)) { return $modules[$id]; } return null; } public static function moduleExists(string $type, ?string $id): bool { $type = $type == 'themes' ? 'themes' : 'plugins'; return array_key_exists($id, array_merge(dcCore::app()->{$type}->getDisabledModules(), dcCore::app()->{$type}->getModules())); } public static function modules(array $modules, string $type, string $title): ?bool { if (empty($modules) || !is_array($modules)) { return null; } $type = $type == 'themes' ? 'themes' : 'plugins'; echo '