function setup_package($dirname) { $pkgs = new PackageList(); $pkgs->load(); $pkg = $pkgs->getVar($dirname); if (empty($pkg)) { $pkg = $pkgs->selectPackage($dirname); } $pname = $pkg ? $pkg['pname'] : _AM_PKG_NOCURRENT; // current package-name if ($dirname) { $modversion = get_modversion($dirname); if (empty($modversion)) { return; } // illigal dirname? $title = $modversion['name'] . " ({$dirname})"; } else { $title = XOOPS_VERSION; } echo "<h1>" . htmlspecialchars($title) . "</h1>\n"; echo "<table class='outer' border='0' cellspacing='1'>\n"; $n = 0; $form = new XoopsThemeForm(_AM_REG_DETAIL, "CustomForm", 'pkgadmin.php'); $form->addElement(new XoopsFormHidden('dirname', $dirname)); $form->addElement(new XoopsFormLabel(_AM_PKG_NAME, $pkg['name'])); $form->addElement(new XoopsFormLabel(_AM_PKG_DIRNAME, $dirname)); $form->addElement(new XoopsFormLabel(_AM_PKG_CURRENT_PNAME, $pname)); $select = new XoopsFormSelect(_AM_PKG_PNAME, 'pname'); foreach ($pkgs->getAllPackages() as $pn => $apkg) { $select->addOption($pn); } $select->setValue($pname); $form->addElement($select); $form->addElement(new XoopsFormButton("", "custom", _AM_REG_SUBMIT, "submit")); echo $form->render(); }
function get_packages($pname = 'all', $local = true) { $pkgs = new PackageList(); $pkgs->load(); $lists = array(); foreach ($pkgs->pkgs as $dir => $pkg) { if (empty($dir)) { $pname = $pkgs->getBaseName(); foreach ($pkg as $info) { if ($info['pname'] == $pname) { $lists[$dir] = $info; break; } } } else { if (count($pkg)) { $lists[$dir] = $pkg[0]; } } } if (!$local) { return $lists; } // add inactive modules $base = XOOPS_ROOT_PATH . "/modules"; $dh = opendir($base); $mlist = array(); while ($dir = readdir($dh)) { if ($dir == '.' || $dir == '..' || !is_dir("{$base}/{$dir}")) { continue; } if (isset($lists[$dir])) { continue; } $modversion = get_modversion($dir); if ($modversion == false) { continue; } $mlist[$dir] = array('name' => $modversion['name'] . " " . $modversion['version'], 'pname' => $dir, 'pversion' => '', 'dtime' => 0, 'vcheck' => $dir); } ksort($mlist); global $xoopsDB; $llist = array(); $que = ""; foreach ($mlist as $dir => $v) { $hash = md5_file(XOOPS_ROOT_PATH . "/modules/{$dir}/xoops_version.php"); $res = $xoopsDB->query("SELECT pkgref FROM " . UPDATE_FILE . " WHERE hash=" . $xoopsDB->quoteString($hash) . " AND path LIKE '%/xoops_version.php'"); if ($xoopsDB->getRowsNum($res)) { // find package list($pkgid) = $xoopsDB->fetchRow($res); $res = $xoopsDB->query("SELECT * FROM " . UPDATE_PKG . " WHERE pkgid={$pkgid}"); $data = $xoopsDB->fetchArray($res); if ($data['vcheck'] == '') { continue; } // include base module $v['pname'] = $data['pname']; $v['pversion'] = $data['pversion']; $v['dtime'] = $data['dtime']; $lists[$dir] = $v; } else { $que .= "{$hash} {$dir}\n"; $llist[$hash] = $v; } } if ($que) { $server = get_update_server(); if (!empty($server)) { $url = $server . "list2.php"; $list = file_get_url($url, 'list', array('que' => $que), 0); if (empty($list)) { foreach (preg_split('/\\n/', $list) as $ln) { $pkg = pkg_info_csv($ln); $hash = $pkg['delegate']; if (isset($llist[$hash])) { $pkg['dirname'] = $dir = $llist[$hash]['vcheck']; unset($llist[$hash]); $lists[$dir] = $pkg; } } } } } ksort($lists); foreach ($llist as $v) { $lists[$v['vcheck']] = $v; } closedir($dh); return $lists; }