Changeset 2665

Show
Ignore:
Timestamp:
10/12/06 03:46:11 (7 years ago)
Author:
gregmac
Message:

Mostly finished checkdepends() (simple version, not ModuleXml version)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • freepbx/trunk/amp_conf/htdocs/admin/functions.inc.php

    r2656 r2665  
    11481148    // get info on only one module 
    11491149    $modules[$module] = _module_readxml($module); 
     1150     
     1151    // query to get just this one 
    11501152    $sql = 'SELECT * FROM modules WHERE modulename = "'.$module.'"'; 
    11511153  } else { 
     
    11621164      } 
    11631165    } 
     1166     
     1167    // query to get everything 
    11641168    $sql = 'SELECT * FROM modules'; 
    11651169  } 
     
    12221226 */ 
    12231227function module_checkdepends($modulexml) { 
     1228  function comparison_error_message($module, $reqversion, $version, $operator) { 
     1229    switch ($operator) { 
     1230      case 'lt': case '<': 
     1231        return $module.' version below '.$reqversion.' is required, you have '.$version; 
     1232      break; 
     1233      case 'le': case '<='; 
     1234        return $module.' version '.$reqversion.' or below is required, you have '.$version 
     1235      break; 
     1236      case 'gt': case '>'; 
     1237        return 'A version newer than '.$reqversion.' required, you have '.$version; 
     1238      break; 
     1239      case 'ne': case '!=': case '<>': 
     1240        return 'Your '.$module.' version ('.$reqversion.') is incompatible.'; 
     1241      break; 
     1242      case 'eq': case '==': case '=':  
     1243        return 'Only '.$module.' version '.$reqversion.' is compatible, you have '.$version; 
     1244      break; 
     1245      default: 
     1246      case 'ge': case '>=': 
     1247        return $module.' version '.$reqversion.' or higher is required, you have '.$version; 
     1248    } 
     1249  } 
     1250   
    12241251  $errors = array(); 
    12251252   
     
    12341261        switch ($type) { 
    12351262          case 'version': 
    1236             if (preg_match('/^([a-zA-Z_]+)(\s+(>=|>|=|<|<=|!=)?(\d(\.\d)*))?$/i', $value, $matches)) { 
     1263            if (preg_match('/^([a-zA-Z_]+)(\s+(lt|le|gt|ge|==|=|eq|!=|ne)?(\d(\.\d)*))?$/i', $value, $matches)) { 
    12371264              // matches[1] = operator, [2] = version 
     1265              $ver = getversion(); 
     1266              $ver = $ver[0][0]; // dumb PEARDB thing 
     1267              $operator = (!empty($matches[1]) ? $matches[1] : 'ge'); // default to >= 
     1268              if (! version_compare($matches[2], $ver, $operator) ) { 
     1269                $errors[] = comparison_error_message('FreePBX', $matches[2], $ver, $operator); 
     1270              } 
    12381271            } 
    12391272          break; 
     
    12411274            if (preg_match('/^([a-z_]+)(\s+(>=|>|=|<|<=|!=)?(\d(\.\d)*))?$/i', $value, $matches)) { 
    12421275              // matches[1] = modulename, [3]=comparison operator, [4] = version 
     1276              $modules = module_getinfo($matches[1]); 
     1277              if (isset($modules[$matches[1]])) { 
     1278                switch ($modules[$matches[1]]['status'] ) { 
     1279                  case MODULE_STATUS_ENABLED: 
     1280                    if (!empty($matches[4])) { 
     1281                      // also doing version checking 
     1282                      $operator = (!empty($matches[3]) ? $matches[3] : 'ge'); // default to >= 
     1283                      if (! version_compare($matches[4], $modules[$matches[1]]['dbversion'], $operator) ) { 
     1284                        $errors[] = comparison_error_message($matches[1].' module', $matches[4], $modules[$matches[1]]['dbversion'], $operator); 
     1285                      } 
     1286                    } 
     1287                  break; 
     1288                  case MODULE_STATUS_BROKEN: 
     1289                    $errors[] = 'Module '.$matches[1].' is required, but yours is broken. You should reinstall '. 
     1290                                'it and try again.'; 
     1291                  break; 
     1292                  case MODULE_STATUS_DISABLED: 
     1293                    $errors[] = 'Module '.$matches[1].' is required, but yours is disabled. '; 
     1294                  case MODULE_STATUS_NEEDUPGRADE: 
     1295                    $errors[] = 'Module '.$matches[1].' is required, but yours is disabled because it needs to '. 
     1296                                'be upgraded. Please upgrade '.$matches[1].' first, and then try again.'; 
     1297                  default: 
     1298                  case MODULE_STATUS_NOTINSTALLED 
     1299                    $errors[] = 'Module '.$matches[1].' is required.'; 
     1300                  break; 
     1301                } 
     1302              } 
    12431303            } 
    12441304          break; 
     
    12491309          break; 
    12501310          case 'engine': 
     1311            /**************************** 
     1312             *  NOTE: there is special handling for this check. We want to "OR" conditions, instead of 
     1313             *        "AND"ing like the rest of them.  
     1314             */ 
     1315              
    12511316            if (preg_match('/^([a-z_]+)(\s+(>=|>|=|<|<=|!=)?(\d(\.\d)*))?$/i', $value, $matches)) { 
    12521317              // matches[1] = engine, [3]=comparison operator, [4] = version 
     
    13591424  $dir = $amp_conf['AMPWEBROOT'].'/admin/modules/'.$modulename; 
    13601425  if (is_dir($dir) && file_exists($dir.'/module.xml')) { 
     1426    $xml = _module_readxml($modulename); 
     1427     
     1428    if (module_checkdepends($xml)) { 
     1429      // run install script(s) 
     1430      // enable module 
     1431    } 
    13611432  } 
    13621433   
     
    13651436 
    13661437function module_enable($modulename) { // was enableModule 
     1438  // checkdepends 
     1439  // enable module 
    13671440} 
    13681441 
     
    13791452 */ 
    13801453function module_delete($modulename) { 
     1454  // reverse-checkdepends 
     1455  // -> // read each xml for enabled modules, concatenate, then parse 
     1456      // go through each, find any matches in depends for <module>$modulename (ignore version)  
     1457  module_disable($modulename); 
     1458  // unlink() module directory 
    13811459} 
    13821460