diff --git a/CHANGELOG.md b/CHANGELOG.md index c391667..69f2fbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +pacKman 2021.08.22 + * fix PSR2 coding style + * update license + * fix help + pacKman 2021.08.17 * move to Franck style diff --git a/_admin.php b/_admin.php index f697ebe..e990982 100644 --- a/_admin.php +++ b/_admin.php @@ -36,15 +36,15 @@ class packmanBehaviors public static function adminDashboardFavorites($core, $favs) { $favs->register('pacKman', [ - 'title' => __('Packages repository'), - 'url' => 'plugin.php?p=pacKman#packman-repository-repository', - 'small-icon' => 'index.php?pf=pacKman/icon.png', - 'large-icon' => 'index.php?pf=pacKman/icon-big.png', - 'permissions' => $core->auth->isSuperAdmin(), - 'active_cb' => array( + 'title' => __('Packages repository'), + 'url' => 'plugin.php?p=pacKman#packman-repository-repository', + 'small-icon' => 'index.php?pf=pacKman/icon.png', + 'large-icon' => 'index.php?pf=pacKman/icon-big.png', + 'permissions' => $core->auth->isSuperAdmin(), + 'active_cb' => [ 'packmanBehaviors', 'adminDashboardFavoritesActive' - ) + ] ]); } diff --git a/_config.php b/_config.php index 3adde98..99fc124 100644 --- a/_config.php +++ b/_config.php @@ -65,8 +65,7 @@ if (!empty($_POST['save'])) { $list->getRedir()) ); } - } - catch (Exception $e) { + } catch (Exception $e) { $core->error->add($e->getMessage()); } } diff --git a/_install.php b/_install.php index 62b8ec0..f53ed3d 100644 --- a/_install.php +++ b/_install.php @@ -18,52 +18,52 @@ if (!defined('DC_CONTEXT_ADMIN')) { # -- Module specs -- -$dc_min = '2.6'; +$dc_min = '2.18'; $mod_id = 'pacKman'; -$mod_conf = array( - array( +$mod_conf = [ + [ 'packman_menu_plugins', 'Add link to pacKman in plugins page', false, 'boolean' - ), - array( + ], + [ 'packman_pack_nocomment', 'Remove comments from files', false, 'boolean' - ), - array( + ], + [ 'packman_pack_overwrite', 'Overwrite existing package', false, 'boolean' - ), - array( + ], + [ 'packman_pack_filename', 'Name of package', '%type%-%id%', 'string' - ), - array( + ], + [ 'packman_secondpack_filename', 'Name of second package', '%type%-%id%-%version%', 'string' - ), - array( + ], + [ 'packman_pack_repository', 'Path to package repository', '', 'string' - ), - array( + ], + [ 'packman_pack_excludefiles', 'Extra files to exclude from package', '*.zip,*.tar,*.tar.gz,.directory,.hg', 'string' - ) -); + ] +]; # -- Nothing to change below -- @@ -73,9 +73,7 @@ try { if (version_compare( $core->getVersion($mod_id), $core->plugins->moduleInfo($mod_id, 'version'), - '>=' - )) { - + '>=')) { return null; } diff --git a/_prepend.php b/_prepend.php index 42d5761..6f8b012 100644 --- a/_prepend.php +++ b/_prepend.php @@ -16,8 +16,8 @@ if (!defined('DC_RC_PATH')) { return null; } -$d = dirname(__FILE__).'/inc/'; +$d = dirname(__FILE__) . '/inc/'; -$__autoload['dcPackman'] = $d.'class.dc.packman.php'; -$__autoload['libPackman'] = $d.'lib.packman.php'; -$__autoload['packmanFileZip'] = $d.'lib.packman.filezip.php'; \ No newline at end of file +$__autoload['dcPackman'] = $d . 'class.dc.packman.php'; +$__autoload['libPackman'] = $d . 'lib.packman.php'; +$__autoload['packmanFileZip'] = $d . 'lib.packman.filezip.php'; \ No newline at end of file diff --git a/inc/class.dc.packman.php b/inc/class.dc.packman.php index ccbdf58..ae6a68a 100644 --- a/inc/class.dc.packman.php +++ b/inc/class.dc.packman.php @@ -13,225 +13,216 @@ # -- END LICENSE BLOCK ------------------------------------ if (!defined('DC_CONTEXT_ADMIN')) { - - return null; + return null; } class dcPackman { - public static $exclude = array( - '.', - '..', - '__MACOSX', - '.svn', - '.hg*', - '.git*', - 'CVS', - '.DS_Store', - 'Thumbs.db' - ); + public static $exclude = [ + '.', + '..', + '__MACOSX', + '.svn', + '.hg*', + '.git*', + 'CVS', + '.DS_Store', + 'Thumbs.db' + ]; - public static function quote_exclude($exclude) - { - foreach($exclude AS $k => $v) { - $exclude[$k] = '#(^|/)('.str_replace( - array('.', '*'), - array('\.', '.*?'), - trim($v) - ).')(/|$)#'; - } + public static function quote_exclude($exclude) + { + foreach($exclude AS $k => $v) { + $exclude[$k] = '#(^|/)(' . str_replace( + ['.', '*'], + ['\.', '.*?'], + trim($v) + ) . ')(/|$)#'; + } - return $exclude; - } + return $exclude; + } - public static function getPackages($core, $root) - { - $res = array(); + public static function getPackages($core, $root) + { + $res = array(); - $cache = self::getCache().'/'; - if (!is_dir($root) || !is_readable($root)) { + $cache = self::getCache() . '/'; + if (!is_dir($root) || !is_readable($root)) { + return $res; + } - return $res; - } + $files = files::scanDir($root); + $zip_files = array(); + foreach($files AS $file) { + if (!preg_match('#(^|/)(.*?)\.zip(/|$)#', $file)) { + continue; + } + $zip_files[] = $file; + } - $files = files::scanDir($root); - $zip_files = array(); - foreach($files AS $file) { - if (!preg_match('#(^|/)(.*?)\.zip(/|$)#', $file)) { - continue; - } - $zip_files[] = $file; - } + if (empty($zip_files)) { + return $res; + } - if (empty($zip_files)) { + $modules = new dcModules($core); + $themes = new dcThemes($core); - return $res; - } + $i = 0; + foreach($zip_files AS $zip_file) { + $zip = new fileUnzip($root . '/' . $zip_file); - $modules = new dcModules($core); - $themes = new dcThemes($core); + $zip_root_dir = $zip->getRootDir(); - $i = 0; - foreach($zip_files AS $zip_file) { - $zip = new fileUnzip($root.'/'.$zip_file); + if ($zip_root_dir != false) { + $define = $zip_root_dir . '/_define.php'; + $has_define = $zip->hasFile($define); + } else { + $define = '_define.php'; + $has_define = $zip->hasFile($define); + } - $zip_root_dir = $zip->getRootDir(); + if (!$has_define) { + continue; + } - if ($zip_root_dir != false) { - $define = $zip_root_dir.'/_define.php'; - $has_define = $zip->hasFile($define); - } - else { - $define = '_define.php'; - $has_define = $zip->hasFile($define); - } + $zip->unzip($define, $cache . '/_define.php'); - if (!$has_define) { - continue; - } + $modules->requireDefine($cache, $zip_root_dir); + if ($modules->moduleExists($zip_root_dir)) { + $res[$i] = $modules->getModules($zip_root_dir); + } else { + $themes->requireDefine($cache, $zip_root_dir); + $res[$i] = $themes->getModules($zip_root_dir); + } + $res[$i]['id'] = $zip_root_dir; + $res[$i]['root'] = $root . '/' . $zip_file; - $zip->unzip($define,$cache.'/_define.php'); + unlink($cache . '_define.php'); + $i++; + } - $modules->requireDefine($cache, $zip_root_dir); - if ($modules->moduleExists($zip_root_dir)) { - $res[$i] = $modules->getModules($zip_root_dir); - } else { - $themes->requireDefine($cache, $zip_root_dir); - $res[$i] = $themes->getModules($zip_root_dir); - } - $res[$i]['id'] = $zip_root_dir; - $res[$i]['root'] = $root.'/'.$zip_file; + return $res; + } - unlink($cache.'_define.php'); - $i++; - } + public static function pack($info, $root, $files, $overwrite = false, $exclude = [], $nocomment = false) + { + if (!($info = self::getInfo($info)) + || !($root = self::getRoot($root))) { + return false; + } - return $res; - } + $exclude = self::getExclude($exclude); - public static function pack($info, $root, $files, $overwrite=false, $exclude=array(), $nocomment=false) - { - if (!($info = self::getInfo($info)) - || !($root = self::getRoot($root)) - ) { + foreach($files as $file) { + if (!($file = self::getFile($file, $info)) + || !($dest = self::getOverwrite($overwrite, $root, $file))) { + continue; + } - return false; - } + @set_time_limit(300); + $fp = fopen($dest, 'wb'); - $exclude = self::getExclude($exclude); + $zip = $nocomment ? + new packmanFileZip($fp) : new fileZip($fp); - foreach($files as $file) { - if (!($file = self::getFile($file, $info)) - || !($dest = self::getOverwrite($overwrite, $root, $file)) - ) { - continue; - } + foreach($exclude AS $e) { + $zip->addExclusion($e); + } + $zip->addDirectory( + path::real($info['root']), + $info['id'], + true + ); - @set_time_limit(300); - $fp = fopen($dest,'wb'); + $zip->write(); + $zip->close(); + unset($zip); + } - $zip = $nocomment ? - new packmanFileZip($fp) : new fileZip($fp); + return true; + } - foreach($exclude AS $e) { - $zip->addExclusion($e); - } - $zip->addDirectory( - path::real($info['root']), - $info['id'], - true - ); + private static function getRoot($root) + { + $root = path::real($root); + if (!is_dir($root) || !is_writable($root)) { + throw new Exception('Directory is not writable'); + } - $zip->write(); - $zip->close(); - unset($zip); - } + return $root; + } - return true; - } + private static function getInfo($info) + { + if (!isset($info['root']) + || !isset($info['id']) + || !is_dir($info['root'])) { + throw new Exception('Failed to get module info'); + } - private static function getRoot($root) - { - $root = path::real($root); - if (!is_dir($root) || !is_writable($root)) { - throw new Exception('Directory is not writable'); - } + return $info; + } - return $root; - } + private static function getExclude($exclude) + { + $exclude = array_merge(self::$exclude, $exclude); - private static function getInfo($info) - { - if (!isset($info['root']) - || !isset($info['id']) - || !is_dir($info['root'])) - { - throw new Exception('Failed to get module info'); - } + return self::quote_exclude($exclude); + } - return $info; - } + private static function getFile($file, $info) + { + if (empty($file) || empty($info)) { + return null; + } - private static function getExclude($exclude) - { - $exclude = array_merge(self::$exclude, $exclude); + $file = str_replace( + [ + '%type%', + '%id%', + '%version%', + '%author%', + '%time%' + ], + [ + $info['type'], + $info['id'], + $info['version'], + $info['author'], + time() + ], + $file + ); + $parts = explode('/', $file); + foreach($parts as $i => $part) { + $parts[$i] = files::tidyFileName($part); + } + return implode('/', $parts) . '.zip'; + } - return self::quote_exclude($exclude); - } + private static function getOverwrite($overwrite, $root, $file) + { + $path = $root . '/' . $file; + if (file_exists($path) && !$overwrite) { + // don't break loop + //throw new Exception('File already exists'); + return null; + } - private static function getFile($file, $info) - { - if (empty($file) || empty($info)) { + return $path; + } - return null; - } + private static function getCache() + { + $c = DC_TPL_CACHE . '/packman'; + if (!file_exists($c)) { + @mkdir($c); + } + if (!is_writable($c)) { + throw new Exception('Failed to get temporary directory'); + } - $file = str_replace( - array( - '%type%', - '%id%', - '%version%', - '%author%', - '%time%' - ), - array( - $info['type'], - $info['id'], - $info['version'], - $info['author'], - time() - ), - $file - ); - $parts = explode('/', $file); - foreach($parts as $i => $part) { - $parts[$i] = files::tidyFileName($part); - } - return implode('/', $parts).'.zip'; - } - - private static function getOverwrite($overwrite, $root, $file) - { - $path = $root.'/'.$file; - if (file_exists($path) && !$overwrite) { - // don't break loop - //throw new Exception('File already exists'); - return null; - } - - return $path; - } - - private static function getCache() - { - $c = DC_TPL_CACHE.'/packman'; - if (!file_exists($c)) { - @mkdir($c); - } - if (!is_writable($c)) { - throw new Exception('Failed to get temporary directory'); - } - - return $c; - } -} + return $c; + } +} \ No newline at end of file diff --git a/inc/lib.packman.filezip.php b/inc/lib.packman.filezip.php index c985064..0765489 100644 --- a/inc/lib.packman.filezip.php +++ b/inc/lib.packman.filezip.php @@ -14,111 +14,106 @@ class packmanFileZip extends fileZip { - protected function writeFile($name,$file,$size,$mtime) - { - if (!isset($this->entries[$name])) { - return; - } - - $size = filesize($file); - $this->memoryAllocate($size*3); - - $content = file_get_contents($file); - - //cleanup file contents - // at this time only php files - if (substr($file,-4) == '.php') { - $content = self::removePHPComment($content); - } - - $unc_len = strlen($content); - $crc = crc32($content); - $zdata = gzdeflate($content); - $c_len = strlen($zdata); - - unset($content); - - $mdate = $this->makeDate($mtime); - $mtime = $this->makeTime($mtime); - - # Data descriptor - $data_desc = - "\x50\x4b\x03\x04". - "\x14\x00". # ver needed to extract - "\x00\x00". # gen purpose bit flag - "\x08\x00". # compression method - pack('v',$mtime). # last mod time - pack('v',$mdate). # last mod date - pack('V',$crc). # crc32 - pack('V',$c_len). # compressed filesize - pack('V',$unc_len). # uncompressed filesize - pack('v',strlen($name)). # length of filename - pack('v',0). # extra field length - $name. # end of "local file header" segment - $zdata. # "file data" segment - pack('V',$crc). # crc32 - pack('V',$c_len). # compressed filesize - pack('V',$unc_len); # uncompressed filesize - - fwrite($this->fp,$data_desc); - unset($zdata); - - $new_offset = $this->old_offset + strlen($data_desc); - - # Add to central directory record - $cdrec = - "\x50\x4b\x01\x02". - "\x00\x00". # version made by - "\x14\x00". # version needed to extract - "\x00\x00". # gen purpose bit flag - "\x08\x00". # compression method - pack('v',$mtime). # last mod time - pack('v',$mdate). # last mod date - pack('V',$crc). # crc32 - pack('V',$c_len). # compressed filesize - pack('V',$unc_len). # uncompressed filesize - pack('v',strlen($name)). # length of filename - pack('v',0). # extra field length - pack('v',0). # file comment length - pack('v',0). # disk number start - pack('v',0). # internal file attributes - pack('V',32). # external file attributes - 'archive' bit set - pack('V',$this->old_offset). # relative offset of local header - $name; - - $this->old_offset = $new_offset; - $this->ctrl_dir[] = $cdrec; - } - - protected static function removePHPComment($content) - { - $comment = array(T_COMMENT); - if (defined('T_DOC_COMMENT')) { - $comment[] = T_DOC_COMMENT; // PHP 5 - } - if (defined('T_ML_COMMENT')) { - $comment[] = T_ML_COMMENT; // PHP 4 - } - - $newStr = ''; - $tokens = token_get_all($content); - - foreach ($tokens as $token) - { - if (is_array($token)) - { - if (in_array($token[0],$comment)) { - //$newStr .= "\n"; - } - else { - $newStr .= $token[1]; - } - } - else { - $newStr .= $token; - } - } - return $newStr; - } -} -?> \ No newline at end of file + protected function writeFile($name, $file, $size, $mtime) + { + if (!isset($this->entries[$name])) { + return; + } + + $size = filesize($file); + $this->memoryAllocate($size * 3); + + $content = file_get_contents($file); + + //cleanup file contents + // at this time only php files + if (substr($file,-4) == '.php') { + $content = self::removePHPComment($content); + } + + $unc_len = strlen($content); + $crc = crc32($content); + $zdata = gzdeflate($content); + $c_len = strlen($zdata); + + unset($content); + + $mdate = $this->makeDate($mtime); + $mtime = $this->makeTime($mtime); + + # Data descriptor + $data_desc = + "\x50\x4b\x03\x04" . + "\x14\x00" . # ver needed to extract + "\x00\x00" . # gen purpose bit flag + "\x08\x00" . # compression method + pack('v', $mtime) . # last mod time + pack('v', $mdate) . # last mod date + pack('V', $crc) . # crc32 + pack('V', $c_len) . # compressed filesize + pack('V', $unc_len) . # uncompressed filesize + pack('v', strlen($name)) . # length of filename + pack('v' ,0) . # extra field length + $name . # end of "local file header" segment + $zdata . # "file data" segment + pack('V', $crc) . # crc32 + pack('V', $c_len) . # compressed filesize + pack('V', $unc_len); # uncompressed filesize + + fwrite($this->fp, $data_desc); + unset($zdata); + + $new_offset = $this->old_offset + strlen($data_desc); + + # Add to central directory record + $cdrec = + "\x50\x4b\x01\x02" . + "\x00\x00" . # version made by + "\x14\x00" . # version needed to extract + "\x00\x00" . # gen purpose bit flag + "\x08\x00" . # compression method + pack('v', $mtime) . # last mod time + pack('v', $mdate) . # last mod date + pack('V', $crc) . # crc32 + pack('V', $c_len) . # compressed filesize + pack('V', $unc_len) . # uncompressed filesize + pack('v', strlen($name)) . # length of filename + pack('v', 0) . # extra field length + pack('v', 0) . # file comment length + pack('v', 0) . # disk number start + pack('v', 0) . # internal file attributes + pack('V', 32) . # external file attributes - 'archive' bit set + pack('V', $this->old_offset). # relative offset of local header + $name; + + $this->old_offset = $new_offset; + $this->ctrl_dir[] = $cdrec; + } + + protected static function removePHPComment($content) + { + $comment = [T_COMMENT]; + if (defined('T_DOC_COMMENT')) { + $comment[] = T_DOC_COMMENT; // PHP 5 + } + if (defined('T_ML_COMMENT')) { + $comment[] = T_ML_COMMENT; // PHP 4 + } + + $newStr = ''; + $tokens = token_get_all($content); + + foreach ($tokens as $token) { + if (is_array($token)) { + if (in_array($token[0], $comment)) { + //$newStr .= "\n"; + } else { + $newStr .= $token[1]; + } + } else { + $newStr .= $token; + } + } + return $newStr; + } +} \ No newline at end of file diff --git a/inc/lib.packman.php b/inc/lib.packman.php index 9c83686..292b095 100644 --- a/inc/lib.packman.php +++ b/inc/lib.packman.php @@ -13,223 +13,222 @@ # -- END LICENSE BLOCK ------------------------------------ if (!defined('DC_CONTEXT_ADMIN')) { - - return null; + return null; } class libPackman { - public static function is_configured($core, $repo, $file_a, $file_b) - { - if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) { - $core->error->add( - __('Cache directory is not writable.') - ); - } - if (!is_writable($repo)) { - $core->error->add( - __('Path to repository is not writable.') - ); - } + public static function is_configured($core, $repo, $file_a, $file_b) + { + if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) { + $core->error->add( + __('Cache directory is not writable.') + ); + } + if (!is_writable($repo)) { + $core->error->add( + __('Path to repository is not writable.') + ); + } - if (empty($file_a)) { - $core->error->add( - __('You must specify the name of package to export.') - ); - } + if (empty($file_a)) { + $core->error->add( + __('You must specify the name of package to export.') + ); + } - if (!is_writable(dirname($repo.'/'.$file_a))) { - $core->error->add( - __('Path to first export package is not writable.') - ); - } + if (!is_writable(dirname($repo . '/' . $file_a))) { + $core->error->add( + __('Path to first export package is not writable.') + ); + } - if (!empty($file_b) - && !is_writable(dirname($repo.'/'.$file_b))) { - $core->error->add( - __('Path to second export package is not writable.') - ); - } + if (!empty($file_b) + && !is_writable(dirname($repo . '/' . $file_b))) { + $core->error->add( + __('Path to second export package is not writable.') + ); + } - return !$core->error->flag(); - } + return !$core->error->flag(); + } - public static function is_writable($path, $file) - { - return !( - empty($path) || - empty($file) || - !is_writable(dirname($path.'/'.$file)) - ); - } + public static function is_writable($path, $file) + { + return !( + empty($path) || + empty($file) || + !is_writable(dirname($path . '/' . $file)) + ); + } - public static function modules($core, $modules, $type, $title) - { - $type = $type == 'themes' ? 'themes' : 'plugins'; + public static function modules($core, $modules, $type, $title) + { + $type = $type == 'themes' ? 'themes' : 'plugins'; - echo - '
'.__('There are no modules.').'
'. - '' . __('There are no modules.') . '
' . + ''.__('There are no packages').'
'. - '' . __('There are no packages') . '
' . + ''.__('Id').' | '. - ''.__('Version').' | '. - ''.__('Name').' | '. - ''.__('File').' | '. - '
---|
' . __('Id') . ' | ' . + '' . __('Version') . ' | ' . + '' . __('Name') . ' | ' . + '' . __('File') . ' | ' . + '
---|---|---|---|
'. - ' | '. - html::escapeHTML($module['version']). - ' | '. - ''. - __(html::escapeHTML($module['name'])). - ' | '. - ''. - ''. - html::escapeHTML(basename($module['root'])).''. - ' | '. - '
' . + ' | ' . + html::escapeHTML($module['version']) . + ' | ' . + '' . + __(html::escapeHTML($module['name'])) . + ' | ' . + '' . + '' . + html::escapeHTML(basename($module['root'])) . '' . + ' | ' . + '
'.__('Selected modules action:').' '. - form::combo(array('action'), $combo_action). - ''. - form::hidden(array('p'), 'pacKman'). - form::hidden(array('tab'), 'repository'). - form::hidden(array('type'), $type). - $core->formNonce(). - '
'. - '' . __('Selected modules action:') . ' ' . + form::combo(['action'], $combo_action) . + '' . + form::hidden(['p'], 'pacKman') . + form::hidden(['tab'], 'repository') . + form::hidden(['type'], $type) . + $core->formNonce() . + '
' . + 'Si vous souhaitez plus d'aide ou apporter votre contribution à cette extension, voici quelques liens utiles.
diff --git a/locales/fr/resources.php b/locales/fr/resources.php index 74b5f58..c2bad28 100644 --- a/locales/fr/resources.php +++ b/locales/fr/resources.php @@ -13,10 +13,9 @@ # -- END LICENSE BLOCK ------------------------------------ if (!defined('DC_RC_PATH')) { - - return null; + return null; } -if (!empty($_REQUEST['module']) && $_REQUEST['module'] == 'pacKman') { - $__resources['help']['core_plugins_conf'] = dirname(__FILE__).'/help/help.html'; -} +if (!isset($__resources['help']['pacKman'])) { + $__resources['help']['pacKman'] = dirname(__FILE__) . '/help/help.html'; +} \ No newline at end of file