Ignore:
Timestamp:
Dec 29, 2020, 11:11:12 PM (3 years ago)
Author:
chronos
Message:
  • Fixed: Modules dependencies evaluation.
  • Modified: Better installation/uninstallation of models in more modules.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Common/AppModule.php

    r889 r890  
    9090    $this->Stop();
    9191    $this->Installed = false;
    92     $List = array();
     92    $List = array();   
    9393    $this->Manager->EnumSuperiorDependenciesCascade($this, $List, array(ModuleCondition::Installed));
    9494    $this->Manager->Perform($List, array(ModuleAction::Uninstall), array(ModuleCondition::Installed));
     
    187187  function InstallModel(ModelDesc $ModelDesc)
    188188  {
    189     $Query = 'CREATE TABLE IF NOT EXISTS `'.$ModelDesc->Name.'` ('."\n";
    190     $Query = '  `'.$ModelDesc->PrimaryKey.'` int(11) NOT NULL AUTO_INCREMENT,'."\n";
     189    $Query = "CREATE TABLE IF NOT EXISTS `".$ModelDesc->Name."` (\n";
     190    $Query .= '  `'.$ModelDesc->PrimaryKey.'` int(11) NOT NULL AUTO_INCREMENT,'."\n";
    191191    foreach ($ModelDesc->Columns as $Column)
    192192    {
     
    198198      else if ($Column->Type == ModelColumnType::DateTime) $Query .= 'datetime';
    199199      else if ($Column->Type == ModelColumnType::Reference) $Query .= 'int(11)';
     200      else if ($Column->Type == ModelColumnType::Boolean) $Query .= 'tinyint(1)';
     201      else if ($Column->Type == ModelColumnType::Date) $Query .= 'date';
     202      else if ($Column->Type == ModelColumnType::Enum)
     203      {
     204        $Query .= 'enum("'.implode('", "', $Column->States).'")';
     205      }
    200206
    201207      if ($Column->Nullable) $Query .= '';
     
    212218      $Query .= ",\n";
    213219    }
    214     $Query .= '  PRIMARY KEY (`'.$ModelDesc->PrimaryKey.'`),';
     220    $Query .= '  PRIMARY KEY (`'.$ModelDesc->PrimaryKey.'`)';
    215221    foreach ($ModelDesc->Columns as $Column)
    216222    {
    217223      if ($Column->Type == ModelColumnType::Reference)
    218         $Query .= '  KEY `'.$Column->Name.'` (`'.$Column->Name.'`)'."\n";
     224        $Query .= ','."\n".'  KEY `'.$Column->Name.'` (`'.$Column->Name.'`)';
    219225      else if ($Column->Unique)
    220         $Query .= '  UNIQUE KEY `'.$Column->Name.'` (`'.$Column->Name.'`)'."\n";
    221     }
    222 
    223     $Query .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
     226        $Query .= ','."\n".'  UNIQUE KEY `'.$Column->Name.'` (`'.$Column->Name.'`)';
     227    }
     228    $Query .= "\n";
     229
     230    if ($ModelDesc->Memory) $Engine = 'MEMORY';
     231      else $Engine = 'InnoDB';
     232    $Query .= ') ENGINE='.$Engine.' DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;';
    224233    $I = 1;
    225234    foreach ($ModelDesc->Columns as $Column)
     
    229238        "ADD CONSTRAINT `".$ModelDesc->Name."_ibfk_".$I."` FOREIGN KEY (`".$Column->Name."`) REFERENCES `".$Column->RefTable."` (`Id`);";
    230239    }
     240    echo($Query);
    231241    $this->Database->query($Query);
    232242  }
     
    234244  function UninstallModel(ModelDesc $ModelDesc)
    235245  {
    236     $this->Database->query('DROP TABLE `'.$ModelDesc->Name.'`');
     246    $this->Database->query('DROP TABLE IF EXISTS `'.$ModelDesc->Name.'`');
    237247  }
    238248}
     
    289299      $DepModule = $this->Modules[$Dependency];
    290300      if (in_array(ModuleCondition::All, $Conditions) or
    291         ($Module->Running and in_array(ModuleCondition::Running, $Conditions)) or
    292         (!$Module->Running and in_array(ModuleCondition::NotRunning, $Conditions)) or
    293         ($Module->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or
    294         (!$Module->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
    295         ($Module->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
    296         (!$Module->Installed and in_array(ModuleCondition::NotInstalled, $Conditions)))
     301        ($DepModule->Running and in_array(ModuleCondition::Running, $Conditions)) or
     302        (!$DepModule->Running and in_array(ModuleCondition::NotRunning, $Conditions)) or
     303        ($DepModule->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or
     304        (!$DepModule->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
     305        ($DepModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
     306        (!$DepModule->Installed and in_array(ModuleCondition::NotInstalled, $Conditions)))
    297307      {
    298308        array_push($List, $DepModule);
     
    308318      if (in_array($Module->Name, $RefModule->Dependencies) and
    309319          (in_array(ModuleCondition::All, $Conditions) or
    310           ($Module->Running and in_array(ModuleCondition::Running, $Conditions)) or
    311           (!$Module->Running and in_array(ModuleCondition::NotRunning, $Conditions)) or
    312           ($Module->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or
    313           (!$Module->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
    314           ($Module->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
    315           (!$Module->Installed and in_array(ModuleCondition::NotInstalled, $Conditions))))
     320          ($RefModule->Running and in_array(ModuleCondition::Running, $Conditions)) or
     321          (!$RefModule->Running and in_array(ModuleCondition::NotRunning, $Conditions)) or
     322          ($RefModule->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or
     323          (!$RefModule->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
     324          ($RefModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
     325          (!$RefModule->Installed and in_array(ModuleCondition::NotInstalled, $Conditions))))
    316326      {
    317327        array_push($List, $RefModule);
Note: See TracChangeset for help on using the changeset viewer.