예제 #1
0
 $namecol = $key;
 $versioncol = " ";
 $statuscol = array();
 $statusspans = false;
 $actioncol = array();
 $activecol = " ";
 $helpcol = " ";
 $aboutcol = " ";
 $xmlcol = " ";
 $xmlcol = '<a href="' . $thisurl . '&amp;action=exportxml&amp;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}&amp;action=showmodulehelp&amp;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 = "&nbsp;";
     $statusspans = true;
 } else {
     if ($maxverok == 0) {
         // maximum cms version exceeded
         $xmlcol = "&nbsp;";
         $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
예제 #3
0
 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('&nbsp;', 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');
 }
예제 #4
0
/**
 * 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;
}