$namecol = $key; $versioncol = " "; $statuscol = array(); $statusspans = false; $actioncol = array(); $activecol = " "; $helpcol = " "; $aboutcol = " "; $xmlcol = " "; $xmlcol = '<a href="' . $thisurl . '&action=exportxml&module=' . $key . '"><img border="0" src="../images/cms/xml_rss.gif" alt="' . lang('xml') . '" /></a>'; //Is there help? if ($modinstance->GetHelp() != '') { $namecol = "<a href=\"{$thisurl}&action=showmodulehelp&module=" . $key . "\">" . $key . "</a>"; } // check these modules permissions to see if we can uninstall this thing $permsok = is_directory_writable($config['root_path'] . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $key); $maxverok = version_compare($modinstance->MaximumCMSVersion(), $CMS_VERSION); $maxverok = $maxverok >= 0 ? 1 : 0; #Make sure it's a valid module for this version of CMSMS if (version_compare($modinstance->MinimumCMSVersion(), $CMS_VERSION) == 1) { // Fix undefined index error if module is not already installed. $statuscol[] = '<span class="important">' . lang('minimumversionrequired') . ': ' . $modinstance->MinimumCMSVersion() . '</span>'; $xmlcol = " "; $statusspans = true; } else { if ($maxverok == 0) { // maximum cms version exceeded $xmlcol = " "; $statuscol[] = '<span class="important">' . lang('maximumversionsupported') . ' = ' . $modinstance->MaximumCMSVersion() . "</span>"; } }
$onerow->status = $this->Lang('uptodate'); break; case 'newerversion': $onerow->status = $this->Lang('newerversion'); break; case 'notinstalled': $mod = $moduledir . DIRECTORY_SEPARATOR . $row['name']; if (($writable && is_dir($mod) && is_directory_writable($mod) || $writable && !file_exists($mod)) && $caninstall) { $onerow->status = $this->CreateLink($id, 'installmodule', $returnid, $this->Lang('download'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'], 'size' => $row['size'])); } else { $onerow->status = $this->Lang('cantdownload'); } break; case 'upgrade': $mod = $moduledir . DIRECTORY_SEPARATOR . $row['name']; if (($writable && is_dir($mod) && is_directory_writable($mod) || $writable && !file_exists($mod)) && $caninstall) { $onerow->status = $this->CreateLink($id, 'upgrademodule', $returnid, $this->Lang('upgrade'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'], 'size' => $row['size'])); } else { $onerow->status = $this->Lang('cantdownload'); } break; } $onerow->size = (int) ((double) $row['size'] / 1024.0 + 0.5); $onerow->rowclass = $rowclass; if (isset($row['description'])) { $onerow->description = $row['description']; } $rowarray[] = $onerow; $rowclass == "row1" ? $rowclass = "row2" : ($rowclass = "row1"); } // for
function _DisplayAdminModulesTab($id, &$params, $returnid) { $caninstall = true; if (FALSE == can_admin_upload()) { echo '<div class="pageerrorcontainer"><div class="pageoverflow"><p class="pageerror">' . $this->Lang('error_permissions') . '</p></div></div>'; $caninstall = false; } $curletter = 'A'; if (isset($params['curletter'])) { $curletter = $params['curletter']; $_SESSION['mm_curletter'] = $curletter; } else { if (isset($_SESSION['mm_curletter'])) { $curletter = $_SESSION['mm_curletter']; } } // get the modules available in the repository $repmodules = ''; $newest = $this->GetPreference('onlynewest', 1); $result = $this->_GetRepositoryModules($curletter, $newest); if (!$result[0]) { $this->_DisplayErrorPage($id, $params, $returnid, $result[1]); return; } $repmodules = $result[1]; // get the modules that are already installed $instmodules = ''; $result = $this->_GetInstalledModules(); if (!$result[0]) { $this->_DisplayErrorPage($id, $params, $returnid, $result[1]); return; } $instmodules = $result[1]; // build a letters list $letters = array(); $tmp = explode(',', 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z'); foreach ($tmp as $i) { if ($i == $curletter) { $letters[] = "<strong>{$i}</strong>"; } else { $letters[] = $this->CreateLink($id, 'defaultadmin', $returnid, $i, array('curletter' => $i, 'active_tab' => 'modules')); } } // cross reference them $data = array(); if (count($repmodules)) { $data = $this->_BuildModuleData($repmodules, $instmodules); } if (count($data)) { $size = count($data); // check for permissions $moduledir = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "modules"; $writable = is_writable($moduledir); // build the table $rowarray = array(); $rowclass = 'row1'; $newestdisplayed = ""; foreach ($data as $row) { $onerow = new stdClass(); $onerow->name = $row['name']; $onerow->version = $row['version']; $onerow->helplink = $this->CreateLink($id, 'modulehelp', $returnid, $this->Lang('helptxt'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'])); $onerow->dependslink = $this->CreateLink($id, 'moduledepends', $returnid, $this->Lang('dependstxt'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'])); $onerow->aboutlink = $this->CreateLink($id, 'moduleabout', $returnid, $this->Lang('abouttxt'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'])); switch ($row['status']) { case 'incompatible': $onerow->status = $this->Lang('incompatible'); break; case 'uptodate': $onerow->status = $this->Lang('uptodate'); break; case 'newerversion': $onerow->status = $this->Lang('newerversion'); break; case 'notinstalled': $mod = $moduledir . DIRECTORY_SEPARATOR . $row['name']; if (($writable && is_dir($mod) && is_directory_writable($mod) || $writable && !file_exists($mod)) && $caninstall) { $onerow->status = $this->CreateLink($id, 'installmodule', $returnid, $this->Lang('download'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'], 'size' => $row['size'])); } else { $onerow->status = $this->Lang('cantdownload'); } break; case 'upgrade': $mod = $moduledir . DIRECTORY_SEPARATOR . $row['name']; if (($writable && is_dir($mod) && is_directory_writable($mod) || $writable && !file_exists($mod)) && $caninstall) { $onerow->status = $this->CreateLink($id, 'upgrademodule', $returnid, $this->Lang('upgrade'), array('name' => $row['name'], 'version' => $row['version'], 'filename' => $row['filename'], 'size' => $row['size'])); } else { $onerow->status = $this->Lang('cantdownload'); } break; } $onerow->size = (int) ((double) $row['size'] / 1024.0 + 0.5); $onerow->rowclass = $rowclass; if (isset($row['description'])) { $onerow->description = $row['description']; } $rowarray[] = $onerow; $rowclass == "row1" ? $rowclass = "row2" : ($rowclass = "row1"); } // for $this->smarty->assign('items', $rowarray); $this->smarty->assign('itemcount', count($rowarray)); } else { $this->smarty->assign('message', $this->Lang('error_connectnomodules')); } // Setup search form $searchstart = $this->CreateFormStart($id, 'searchmod', $returnid); $searchend = $this->CreateFormEnd(); $searchfield = $this->CreateInputText($id, 'search_input', "Doesn't Work", 30, 100); //todo $searchsubmit = $this->CreateInputSubmit($id, 'submit', 'Search'); // todo -- $this->Lang('search')); $this->smarty->assign('search', $searchstart . $searchfield . $searchsubmit . $searchend); // and display our page $this->smarty->assign('letters', implode(' ', array_values($letters))); $this->smarty->assign('nametext', $this->Lang('nametext')); $this->smarty->assign('vertext', $this->Lang('vertext')); $this->smarty->assign('sizetext', $this->Lang('sizetext')); $this->smarty->assign('statustext', $this->Lang('statustext')); echo $this->processTemplate('adminpanel.tpl'); }
/** * Check the permissions of a directory recursively to make sure that * we have write permission to all files * * @param string Start directory. * @return boolean */ function is_directory_writable($path) { if (substr($path, strlen($path) - 1) != '/') { $path .= '/'; } $result = true; if ($handle = @opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file == '.' || $file == '..') { continue; } $p = $path . $file; if (!@is_writable($p)) { return false; } if (@is_dir($p)) { $result = is_directory_writable($p); if (!$result) { return false; } } } @closedir($handle); } else { return false; } return true; }