Changeset 105


Ignore:
Timestamp:
Oct 9, 2012, 1:58:45 PM (12 years ago)
Author:
chronos
Message:
  • Přidáno: Hlavní modul Base, který slouží jako základní rozhraní k aplikaci pro ostatní moduly. Modul System zajistí udržování seznamu instalovaných modulů v perzistentním úložišti v databázi.
  • Upraveno: Správce modulů ModuleManager je nyní použit pro každé komunikační spojení zvlášť.
Location:
trunk
Files:
7 added
41 edited

Legend:

Unmodified
Added
Removed
  • trunk/Application/UWebSession.pas

    r103 r105  
    77uses
    88  Classes, SysUtils, UHTTPServer, USqlDatabase, UHTTPSessionMySQL, UUser,
    9   UHtmlClasses, UWebPage, UUtils, UXmlClasses, DateUtils;
     9  UHtmlClasses, UWebPage, UUtils, UXmlClasses, DateUtils, UModularSystem,
     10  UPageList, UWebApp, SpecializedList;
    1011
    1112type
     
    1415  TWebSession = class(THTTPHandlerData)
    1516  private
     17    procedure GeneratePageDefault(ASession: TWebSession; Page: TWebPage);
     18    procedure RegisterModules;
     19    procedure CheckModules;
    1620  public
    1721    MainModule: TObject;
    1822    Database: TSqlDatabase;
    1923    SessionStorage: THTTPSessionStorageMySQL;
    20     User: TWebUser;
    21     UserOnline: TWebOnlineUser;
    2224    HtmlDocument: THtmlDocument;
    2325    GlobalTitle: string;
    2426    TimeStart: TDateTime;
    25     procedure LoadUserInfo;
     27    BaseURL: string;
     28    ModuleManager: TModuleManager;
    2629    procedure InitDatabase;
    2730    constructor Create; override;
    2831    destructor Destroy; override;
    2932    procedure GeneratePage(Page: TWebPage);
     33    procedure Run;
    3034  end;
    31 
    32   TGeneratePageEvent = procedure (Session: TWebSession; Page: TWebPage) of object;
    3335
    3436implementation
    3537
    3638uses
    37   UCore;
     39  UCore, UModuleSystem, UModuleZdechovNET, UModuleUser, UPageAdmin, UModuleTV,
     40  UModuleFinance, UModuleNetwork, UModulePortal, UModuleIS, UModuleBase,
     41  UModuleNews;
     42
     43resourcestring
     44  SError = '<div>Error: %s</div>';
     45
    3846
    3947{ TWebSession }
     
    4250begin
    4351  inherited;
     52  ModuleManager := TModuleManager.Create(nil);
    4453  Database := TSqlDatabase.Create(nil);
    4554  SessionStorage := THTTPSessionStorageMySQL.Create(nil);
    4655  SessionStorage.Database := Database;
    4756  HtmlDocument := THtmlDocument.Create;
    48   User := TWebUser.Create;
    49   User.Database := Database;
    50   UserOnline := TWebOnlineUser.Create;
    51   UserOnline.Database := Database;
    5257end;
    5358
    5459destructor TWebSession.Destroy;
    5560begin
     61  ModuleManager.StopAll;
     62  FreeAndNil(ModuleManager);
    5663  FreeAndNil(HtmlDocument);
    57   FreeAndNil(User);
    58   FreeAndNil(UserOnline);
    5964  FreeAndNil(SessionStorage);
    6065  FreeAndNil(Database);
     
    6469procedure TWebSession.GeneratePage(Page: TWebPage);
    6570begin
    66   with TCore(MainModule) do
     71  with TModuleBase(ModuleManager.FindModuleByName('Base')) do
    6772  if Assigned(GeneratePage) then GeneratePage(Self, Page)
    6873    else GeneratePageDefault(Self, Page);
    6974end;
     75
     76procedure TWebSession.Run;
     77var
     78  FileName: string;
     79  PageName: string;
     80  Page: TRegistredPage;
     81  BaseUrlParts: TListString;
     82  ModuleBase: TModuleBase;
     83begin
     84  RegisterModules;
     85  CheckModules;
     86  ModuleManager.StartInstalled;
     87
     88      try
     89        BaseUrlParts := TListString.Create;
     90        BaseUrlParts.Explode(BaseURL, '/', StrToStr);
     91        while (BaseUrlParts.Count > 0) and (Request.Path.Count > 0) and
     92           (BaseUrlParts[0] = Request.Path[0]) do begin
     93             BaseUrlParts.Delete(0);
     94             Request.Path.Delete(0);
     95           end;
     96      finally
     97        BaseUrlParts.Free;
     98      end;
     99      if Request.Path.Count > 0 then PageName := Request.Path[0]
     100        else PageName := '';
     101      ModuleBase := TModuleBase(ModuleManager.FindModuleByName('Base'));
     102      Page := ModuleBase.Pages.FindByName(PageName);
     103      if Assigned(Page) then begin
     104        try
     105          Page.Page.OnProduce(Self);
     106        except
     107          on E: Exception do begin
     108            THTMLString(Self.HtmlDocument.Body.SubItems.AddNew(THtmlString.Create)).
     109              Text := Format(SError, [E.Message]);
     110            if Assigned(GeneratePage) then ModuleBase.GeneratePage(Self, Page.Page)
     111              else GeneratePageDefault(Self, Page.Page);
     112          end;
     113        end;
     114      end else begin
     115        Core.WebApp1.HTTPServer.FileResponse(Self)
     116      end;
     117end;
     118
     119procedure TWebSession.GeneratePageDefault(ASession: TWebSession; Page: TWebPage);
     120var
     121  I: Integer;
     122begin
     123  with ASession do begin
     124    HtmlDocument.ContentLanguage := 'cs';
     125    GlobalTitle := 'WebSystem';
     126
     127      //Page.Page.OnProduce(HandlerData);
     128      HtmlDocument.Title := Page.Caption;
     129      with HtmlDocument.AsXmlDocument do
     130      try
     131        Formated := TCore(MainModule).FormatHTML;
     132        Response.Content.WriteString(AsString);
     133      finally
     134        Free;
     135      end;
     136    end;
     137end;
     138
    70139
    71140procedure TWebSession.InitDatabase;
     
    79148end;
    80149
    81 procedure TWebSession.LoadUserInfo;
     150procedure TWebSession.RegisterModules;
    82151begin
    83   if TCore(MainModule).ModuleManager.ModuleRunning('User') then begin
    84     User.HandlerData := Self;
    85     UserOnline.HandlerData := Self;
    86     UserOnline.Update;
    87     User.Id := UserOnline.User;
    88     User.Load;
     152  with ModuleManager do begin
     153    RegisterModule(TModuleSystem.Create(nil), True);
     154    RegisterModule(TModuleBase.Create(nil), True);
     155    RegisterModule(TModuleUser.Create(nil), True);
     156    RegisterModule(TModuleZdechovNET.Create(nil), True);
     157    RegisterModule(TModuleTV.Create(nil), True);
     158    RegisterModule(TModuleFinance.Create(nil), True);
     159    RegisterModule(TModuleNetwork.Create(nil), True);
     160    RegisterModule(TModulePortal.Create(nil), True);
     161    RegisterModule(TModuleIS.Create(nil), True);
     162    RegisterModule(TModuleNews.Create(nil), True);
    89163  end;
    90164end;
    91165
     166procedure TWebSession.CheckModules;
     167var
     168  DbRows: TDbRows;
     169  Module: TModule;
     170  I: Integer;
     171begin
     172  try
     173    DbRows := TDbRows.Create;
     174    Database.Query(DbRows, 'SELECT * FROM INFORMATION_SCHEMA.TABLES ' +
     175      'WHERE TABLE_SCHEMA = "' + Database.Database + '" AND TABLE_NAME = "SystemModule"');
     176    Module := ModuleManager.FindModuleByName('System');
     177    if DbRows.Count > 0 then Module.SetInstalledState(True)
     178      else Module.SetInstalledState(False);
     179  finally
     180    DbRows.Free;
     181  end;
     182end;
     183
     184
    92185end.
    93186
  • trunk/Modules/Finance/UModuleFinance.pas

    r101 r105  
    66
    77uses
    8   Classes, SysUtils, UModularSystem, SpecializedDictionary;
     8  Classes, SysUtils, UModularSystem, SpecializedDictionary, UModuleBase,
     9  UWebPage;
    910
    1011type
     
    1314
    1415  TModuleFinance = class(TModule)
     16  private
     17    WebPageFinance: TWebPage;
    1518  public
     19    ModuleBase: TModuleBase;
    1620    constructor Create(Owner: TComponent); override;
    1721    destructor Destroy; override;
     
    3943  License := 'GNU/LGPL v3';
    4044  Author := 'Chronosoft';
     45  Dependencies.Add('Base');
    4146end;
    4247
     
    4853procedure TModuleFinance.Start;
    4954begin
    50   Core.Pages.RegisterPage(TWebPageFinance, WebPageFinance, 'finance');
     55  BeforeStart;
     56  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     57  WebPageFinance := TWebPageFinance.Create(nil);
     58  ModuleBase.Pages.RegisterPage(WebPageFinance, 'finance');
    5159  //RegisterPage(TUserControlPage, UserControlPage, '');
    52   inherited;
     60  AfterStart;
    5361end;
    5462
    5563procedure TModuleFinance.Stop;
    5664begin
    57   inherited;
    58   Core.Pages.UnregisterPage('finance');
     65  BeforeStop;
     66  ModuleBase.Pages.UnregisterPage(WebPageFinance);
     67  FreeAndNil(WebPageFinance);
     68  ModuleBase := nil;
     69  AfterStop;
    5970end;
    6071
  • trunk/Modules/IS/UModuleIS.pas

    r102 r105  
    66
    77uses
    8   Classes, SysUtils, UModularSystem, SpecializedDictionary, USqlDatabase;
     8  Classes, SysUtils, UModularSystem, SpecializedDictionary, USqlDatabase,
     9  UModuleBase;
    910
    1011type
     
    1516  private
    1617  public
     18    ModuleBase: TModuleBase;
    1719    constructor Create(Owner: TComponent); override;
    1820    destructor Destroy; override;
     
    4042  License := 'GNU/LGPL v3';
    4143  Author := 'Chronosoft';
     44  Dependencies.Add('Base');
    4245end;
    4346
     
    4952procedure TModuleIS.Start;
    5053begin
    51   Core.Pages.RegisterPage(TWebPagePortal, WebPagePortal, 'portal');
    52   inherited;
     54  BeforeStart;
     55  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     56  //ModuleBase.Pages.RegisterPage(TWebPagePortal, WebPagePortal, 'portal');
     57  AfterStart;
    5358end;
    5459
    5560procedure TModuleIS.Stop;
    5661begin
    57   inherited;
    58   Core.Pages.UnregisterPage('portal');
     62  BeforeStop;
     63  //ModuleBase.Pages.UnregisterPage('portal');
     64  ModuleBase := nil;
     65  AfterStop;
    5966end;
    6067
  • trunk/Modules/Network/UModuleNetwork.pas

    r102 r105  
    66
    77uses
    8   Classes, SysUtils, UModularSystem, SpecializedDictionary;
     8  Classes, SysUtils, UModularSystem, SpecializedDictionary, UModuleBase,
     9  UWebPage;
    910
    1011type
     
    1314
    1415  TModuleNetwork = class(TModule)
     16  private
     17    WebPageNetwork: TWebPage;
    1518  public
     19    ModuleBase: TModuleBase;
    1620    constructor Create(Owner: TComponent); override;
    1721    destructor Destroy; override;
     
    3943  License := 'GNU/LGPL v3';
    4044  Author := 'Chronosoft';
     45  Dependencies.Add('Base');
    4146end;
    4247
     
    4853procedure TModuleNetwork.Start;
    4954begin
    50   Core.Pages.RegisterPage(TWebPageNetwork, WebPageNetwork, 'sit');
     55  BeforeStart;
     56  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     57  WebPageNetwork := TWebPageNetwork.Create(nil);
     58  ModuleBase.Pages.RegisterPage(WebPageNetwork, 'sit');
    5159  //RegisterPage(TUserControlPage, UserControlPage, '');
    52   inherited;
     60  AfterStart;
    5361end;
    5462
    5563procedure TModuleNetwork.Stop;
    5664begin
    57   inherited;
    58   Core.Pages.UnregisterPage('sit');
     65  BeforeStop;
     66  ModuleBase.Pages.UnregisterPage(WebPageNetwork);
     67  FreeAndNil(WebPageNetwork);
     68  ModuleBase := nil;
     69  AfterStop;
    5970end;
    6071
  • trunk/Modules/Portal/UModulePortal.pas

    r104 r105  
    77uses
    88  Classes, SysUtils, UModularSystem, SpecializedDictionary, USqlDatabase,
    9   UUtils, UWebSession, SpecializedList, UUser, UWebPage, UHtmlClasses;
     9  UUtils, UWebSession, SpecializedList, UUser, UWebPage, UHtmlClasses,
     10  UModuleBase, UModuleUser;
    1011
    1112type
     
    1617  private
    1718    Time: TDateTime;
     19    WebPagePortal: TWebPage;
    1820    function ShowFooter(Session: TWebSession): string;
    1921    function ShowHeader(Session: TWebSession): string;
    2022    procedure GeneratePage(ASession: TWebSession; Page: TWebPage);
    2123  public
     24    ModuleBase: TModuleBase;
     25    ModuleUser: TModuleUser;
    2226    constructor Create(Owner: TComponent); override;
    2327    destructor Destroy; override;
     
    4650  Author := 'Chronosoft';
    4751  Dependencies.Add('User');
     52  Dependencies.Add('Finance');
     53  Dependencies.Add('News');
    4854end;
    4955
     
    5561procedure TModulePortal.Start;
    5662begin
    57   Core.GeneratePage := GeneratePage;
    58   Core.Pages.RegisterPage(TWebPagePortal, WebPagePortal, 'portal');
    59   inherited;
     63  BeforeStart;
     64  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     65  ModuleBase.GeneratePage := GeneratePage;
     66  WebPagePortal := TWebPagePortal.Create(nil);
     67  ModuleBase.Pages.RegisterPage(WebPagePortal, '');
     68  TWebPagePortal(WebPagePortal).ModuleUser := TModuleUser(Manager.FindModuleByName('User'));
     69  AfterStart;
    6070end;
    6171
    6272procedure TModulePortal.Stop;
    6373begin
    64   inherited;
    65   Core.Pages.UnregisterPage('portal');
     74  BeforeStop;
     75  ModuleBase.Pages.UnregisterPage(WebPagePortal);
     76  FreeAndNil(WebPagePortal);
     77  ModuleBase := nil;
     78  AfterStop;
    6679end;
    6780
     
    208221    '<div class="Navigation"><span class="MenuItem"><strong>Navigace :: </strong> ';
    209222    Output := Output + Navigation + '</span><div class="MenuItem2">';
    210     if Session.User.Id = UnknownUser then
     223    if ModuleUser.User.Id = UnknownUser then
    211224      Output := Output + '<a href="' + MakeLink('Přihlášení',
    212225        NavigationLink('/?Action=LoginForm')) + ' ' +
    213226        MakeLink('Registrace', NavigationLink('/?Action=UserRegister'))
    214       else Output := Output + Session.User.Name + ' ' + MakeLink('Odhlásit',
     227      else Output := Output + ModuleUser.User.Name + ' ' + MakeLink('Odhlásit',
    215228        NavigationLink('/?Action=Logout'));
    216229// <a href="'.$this->System->Config['Web']['RootFolder'].'/?Action=UserOptions">Nastavení</a>';
  • trunk/Modules/Portal/UPagePortal.pas

    r104 r105  
    88  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, USqlDatabase, UUtils,
    99  SpecializedDictionary, UWebSession, SpecializedList, UHtmlClasses,
    10   UModularSystem;
     10  UModularSystem, UModuleUser, UModuleNews;
    1111
    1212type
     
    2626    function WebcamPanel: string;
    2727  public
    28     { public declarations }
     28    ModuleUser: TModuleUser;
     29    ModuleNews: TModuleNews;
    2930  end;
    3031
     
    3738
    3839uses
    39   UCore, UModuleUser, UWebObjects, UUser;
     40  UCore, UWebObjects, UUser;
    4041
    4142function TWebPagePortal.SystemMessage(Title, Text: string): string;
     
    7677        if ((HyperLink.Values['PermissionModule'] = '') or
    7778        ((HyperLink.Values['PermissionModule'] <> '') and
    78         Session.User.CheckPermission(HyperLink.Values['PermissionModule'], HyperLink.Values['PermissionOperation']))) then
     79        ModuleUser.User.CheckPermission(HyperLink.Values['PermissionModule'], HyperLink.Values['PermissionOperation']))) then
    7980        Result := Result + '<img alt="' + HyperLink.Values['Name'] + '" src="images/favicons/' + HyperLink.Values['IconFile'] + '" width="16" height="16" /> <a href="' + HyperLink.Values['URL'] + '">' + HyperLink.Values['Name'] + '</a><br />';
    8081    end;
     
    118119      Form := TQueryForm.Create; // UserLogin
    119120      Form.Load(Session.Request.Post);
    120       Session.UserOnline.Login(
    121         Session.User.GetIdByNamePassword(
     121      ModuleUser.UserOnline.Login(
     122        ModuleUser.User.GetIdByNamePassword(
    122123      TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Username').Value.Value,
    123124        TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Password').Value.Value));
    124125      Output := Output + SystemMessage('Přihlášení', 'Přihlášení provedeno');
    125       if Session.User.Id <> UnknownUser then begin
     126      if ModuleUser.User.Id <> UnknownUser then begin
    126127        //Form.LoadValuesFromForm;
    127128        TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Password').Value.Value := '';
     
    132133    end else
    133134    if Query.Values['Action'] = 'Logout' then begin
    134       Session.UserOnline.Logout;
     135      ModuleUser.UserOnline.Logout;
    135136      Output := Output + SystemMessage('Odhlášení', 'Uživatel odhlášen');
    136137    end else
     
    249250        else if Panel.Values['Module'] = 'UserOptions' then
    250251        begin
    251           if Session.User.Id <> UnknownUser then
     252          if ModuleUser.User.Id <> UnknownUser then
    252253            Output := Output + ShowPanel('Přihlášený uživatel', UserPanel);
    253254        end else
     
    255256          Output := Output + ShowPanel('Kamery', WebcamPanel)
    256257        else if Panel.Values['Module'] = 'NewsGroupList' then
    257 //          Output := Output + Panel('Aktuality', $this->System->Modules['News']->Show(), array('<a href="?Action=CustomizeNews">Upravit</a>'));
     258          //Output := Output + ShowPanel('Aktuality',
     259          //ModuleNews.Show,
     260          //['<a href="?Action=CustomizeNews">Upravit</a>']);
    258261      end;
    259262      Output := Output + '</td>';
  • trunk/Modules/System/UModuleSystem.pas

    r97 r105  
    7777    for I := 0 to DbRows.Count - 1 do
    7878    with DbRows[I] do begin
    79       Module := Core.ModuleManager.FindModuleByName(Values['Name']);
     79      Module := Manager.FindModuleByName(Values['Name']);
    8080      if Assigned(Module) then
    8181        if Values['Installed'] = '1' then Module.SetInstalledState(True)
     
    8585    DbRows.Free;
    8686  end;
    87   Core.ModuleManager.OnModuleChange := ModuleChange;
     87  Manager.OnModuleChange := ModuleChange;
    8888  inherited;
    8989end;
     
    9191procedure TModuleSystem.Stop;
    9292begin
    93   inherited Stop;
    94   Core.ModuleManager.OnModuleChange := nil;
     93  BeforeStop;
     94  Manager.OnModuleChange := nil;
     95  AfterStop;
    9596end;
    9697
     
    152153    Core.CommonDatabase.Select(DbRows, 'SystemModule', 'Name');
    153154
    154     for I := 0 to Core.ModuleManager.Modules.Count - 1 do
    155     with TModule(Core.ModuleManager.Modules[I]) do begin
     155    for I := 0 to Manager.Modules.Count - 1 do
     156    with TModule(Manager.Modules[I]) do begin
    156157      Data.Clear;
    157158      Data.Add('Name', Identification);
  • trunk/Modules/TV/UModuleTV.pas

    r99 r105  
    66
    77uses
    8   Classes, SysUtils, UModularSystem, SpecializedDictionary;
     8  Classes, SysUtils, UModularSystem, SpecializedDictionary, UModuleBase,
     9  UWebPage;
    910
    1011type
     
    1314
    1415  TModuleTV = class(TModule)
     16  private
     17    WebPageTV: TWebPage;
    1518  public
     19    ModuleBase: TModuleBase;
    1620    constructor Create(Owner: TComponent); override;
    1721    destructor Destroy; override;
     
    3943  License := 'GNU/LGPL v3';
    4044  Author := 'Chronosoft';
     45  Dependencies.Add('Base');
    4146end;
    4247
     
    4853procedure TModuleTV.Start;
    4954begin
    50   Core.Pages.RegisterPage(TWebPageTV, WebPageTV, 'tv');
    51   inherited;
     55  BeforeStart;
     56  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     57  WebPageTV := TWebPageTV.Create(nil);
     58  ModuleBase.Pages.RegisterPage(WebPageTV, 'tv');
     59  AfterStart;
    5260end;
    5361
    5462procedure TModuleTV.Stop;
    5563begin
    56   inherited;
    57   Core.Pages.UnregisterPage('tv');
     64  BeforeStop;
     65  ModuleBase.Pages.UnregisterPage(WebPageTV);
     66  FreeAndNil(WebPageTV);
     67  ModuleBase := nil;
     68  AfterStop;
    5869end;
    5970
  • trunk/Modules/TV/UPageTV.pas

    r103 r105  
    77uses
    88  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, USqlDatabase, UHtmlClasses,
    9   UUtils;
     9  UUtils, UModuleUser;
    1010
    1111type
     
    1919    procedure HandlePlaylist(HandlerData: THTTPHandlerData);
    2020  public
    21     { public declarations }
     21    ModuleUser: TModuleUser;
    2222  end;
    2323
     
    5656begin
    5757  with TWebSession(HandlerData) do begin
    58     LoadUserInfo;
     58    ModuleUser.LoadUserInfo;
    5959    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    6060      Text := 'Stažení přehrávače: <a href="http://www.videolan.org/vlc/">VLC Media Player</a><br/>' +
  • trunk/Modules/User/UModuleUser.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, UModularSystem, SpecializedDictionary;
     8  Classes, SysUtils, UModularSystem, SpecializedDictionary, UUser,
     9  UModuleBase, UWebPage;
    910
    1011type
    11 
    1212  { TModuleUser }
    1313
    1414  TModuleUser = class(TModule)
     15  private
     16    UserControlPage: TWebPage; //TUserControlPage;
    1517  public
     18    User: TWebUser;
     19    UserOnline: TWebOnlineUser;
     20    ModuleBase: TModuleBase;
    1621    constructor Create(Owner: TComponent); override;
    1722    destructor Destroy; override;
     
    2126    procedure Uninstall; override;
    2227    procedure Upgrade; override;
     28    procedure LoadUserInfo;
    2329  end;
    2430
     
    2733
    2834uses
    29   UCore, UUserControlPage, USqlDatabase;
     35  UCore, USqlDatabase, UUserControlPage;
    3036
    3137{ TModuleUser }
     
    3945  License := 'GNU/LGPL v3';
    4046  Author := 'Chronosoft';
     47  Dependencies.Add('Base');
    4148end;
    4249
     
    4855procedure TModuleUser.Start;
    4956begin
    50   Core.Pages.RegisterPage(TUserControlPage, UserControlPage, 'uzivatel');
     57  BeforeStart;
     58  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     59  UserControlPage := TUserControlPage.Create(nil);
     60  ModuleBase.Pages.RegisterPage(UserControlPage, 'uzivatel');
    5161  //RegisterPage(TUserControlPage, UserControlPage, '');
    52   inherited;
     62  User := TWebUser.Create;
     63  //User.Database := Database;
     64  UserOnline := TWebOnlineUser.Create;
     65  //UserOnline.Database := Database;
     66  AfterStart;
    5367end;
    5468
    5569procedure TModuleUser.Stop;
    5670begin
    57   inherited;
    58   Core.Pages.UnregisterPage('uzivatel');
     71  BeforeStop;
     72  FreeAndNil(User);
     73  FreeAndNil(UserOnline);
     74  ModuleBase.Pages.UnregisterPage(UserControlPage);
     75  FreeAndNil(UserControlPage);
     76  ModuleBase := nil;
     77  AfterStop;
    5978end;
    6079
     
    183202end;
    184203
     204procedure TModuleUser.LoadUserInfo;
     205begin
     206  User.HandlerData := ModuleBase.HandlerData;
     207  UserOnline.HandlerData := ModuleBase.HandlerData;
     208  UserOnline.Update;
     209  User.Id := UserOnline.User;
     210  User.Load;
     211end;
     212
     213
     214
    185215end.
    186216
  • trunk/Modules/User/UUserControlPage.pas

    r103 r105  
    77uses
    88  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, UXmlClasses,
    9   UWebObjects;
     9  UWebObjects, UModuleUser, UModuleBase;
    1010
    1111type
     
    2121    procedure HandleProfile(HandlerData: THTTPHandlerData);
    2222  public
    23     { public declarations }
    24   end;
     23    ModuleUser: TModuleUser;
     24    ModuleBase: TModuleBase;
     25  end;
    2526
    2627var
     
    4748      else PageName := '';
    4849    with HtmlDocument.Body do begin
    49       LoadUserInfo;
     50      ModuleUser.LoadUserInfo;
    5051      if PageName = '' then PageName := 'prihlaseni';
    5152      if PageName = 'prihlaseni' then HandleLogin(HandlerData)
     
    9192      with THtmlString(SubItems.AddNew(THtmlString.Create)) do
    9293        Text := 'Přihlášení uživatele: ' + TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value;
    93       UserId := User.GetIdByNamePassword(TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value,
     94      UserId := ModuleUser.User.GetIdByNamePassword(TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value,
    9495        TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Password').Value.Value);
    9596      if UserId = -1 then begin
    9697        with THtmlString(SubItems.AddNew(THtmlString.Create)) do
    9798          Text := '<br/>Chybné jméno nebo heslo';
    98       end else UserOnline.Login(UserId);
     99      end else ModuleUser.UserOnline.Login(UserId);
    99100      Form.Free;
    100101    end else
     
    149150      with THtmlString(SubItems.AddNew(THtmlString.Create)) do
    150151        Text := 'Registrace uživatele: ' + TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value;
    151       User.Add(TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value,
     152      ModuleUser.User.Add(TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value,
    152153        TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Password').Value.Value,
    153154        TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Email').Value.Value);
    154       UserId := User.GetIdByNamePassword(TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value,
     155      UserId := ModuleUser.User.GetIdByNamePassword(TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value,
    155156        TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Password').Value.Value);
    156       if UserId <> -1 then UserOnline.Login(UserId);
     157      if UserId <> -1 then ModuleUser.UserOnline.Login(UserId);
    157158      Form.Free;
    158159    end else SubItems.AddNew(Form);
     
    163164begin
    164165  with TWebSession(HandlerData), Core, HtmlDocument.Body do begin
    165     UserOnline.Logout;
     166    ModuleUser.UserOnline.Logout;
    166167    with THtmlString(SubItems.AddNew(THtmlString.Create)) do
    167168      Text := 'Uživatel odhlášen';
     
    185186          Hint := 'Zadejte vaše přihlašovací jméno';
    186187          Required := True;
    187           Value.Value := User.Name;
     188          Value.Value := ModuleUser.User.Name;
    188189        end;
    189190        with AddNewItem do begin
     
    200201          Required := True;
    201202          ItemType := fitText;
    202           Value.Value := User.Email;
     203          Value.Value := ModuleUser.User.Email;
    203204        end;
    204205        with AddNewItem do begin
     
    208209          Required := False;
    209210          ItemType := fitText;
    210           Value.Value := User.FullName;
     211          Value.Value := ModuleUser.User.FullName;
    211212        end;
    212213      end;
     
    218219      with THtmlString(SubItems.AddNew(THtmlString.Create)) do
    219220        Text := 'Profil uživatele: ' + TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value + ' uložen';
    220       User.Name := TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value;
    221       User.FullName := TQueryFormGroup(Form.Groups[0]).Rows.FindByName('FullName').Value.Value;
    222       User.Email := TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Email').Value.Value;
    223       User.Save;
     221      ModuleUser.User.Name := TQueryFormGroup(Form.Groups[0]).Rows.FindByName('UserName').Value.Value;
     222      ModuleUser.User.FullName := TQueryFormGroup(Form.Groups[0]).Rows.FindByName('FullName').Value.Value;
     223      ModuleUser.User.Email := TQueryFormGroup(Form.Groups[0]).Rows.FindByName('Email').Value.Value;
     224      ModuleUser.User.Save;
    224225      Form.Free;
    225226    end else SubItems.AddNew(Form);
  • trunk/Modules/ZdechovNET/UAboutPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3737begin
    3838  with TWebSession(HandlerData) do begin
    39     LoadUserInfo;
     39    ModuleUser.LoadUserInfo;
    4040    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    4141    Text := '<img align="left" src="' + NavigationLink('/images/umisteni.gif') + '" alt="Umístění obce"/>' +
  • trunk/Modules/ZdechovNET/UContactPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3333begin
    3434  with TWebSession(HandlerData), HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    35     LoadUserInfo;
     35    ModuleUser.LoadUserInfo;
    3636    Text := '<strong>Kontaktní informace</strong><br/>' +
    3737    'Provozovatel: <strong>Ing. Jiří Hajda</strong><br/>' +
  • trunk/Modules/ZdechovNET/UDocumentsPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3535begin
    3636  with TWebSession(HandlerData) do begin
    37     LoadUserInfo;
     37    ModuleUser.LoadUserInfo;
    3838    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    3939      Text := '<strong>O obci:</strong><br/>' +
  • trunk/Modules/ZdechovNET/UHistoryPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, USqlDatabase;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, USqlDatabase,
     9  UModuleUser;
    910
    1011type
     
    1718    { private declarations }
    1819  public
    19     { public declarations }
     20    ModuleUser: TModuleUser;
    2021  end;
    2122
     
    3839begin
    3940  with TWebSession(HandlerData) do begin
    40     LoadUserInfo;
     41    ModuleUser.LoadUserInfo;
    4142    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    4243      Text := '<table>';
  • trunk/Modules/ZdechovNET/UHostingPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, USqlDatabase, UHtmlClasses;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, USqlDatabase, UHtmlClasses,
     9  UModuleUser;
    910
    1011type
     
    1718    { private declarations }
    1819  public
    19     { public declarations }
     20    ModuleUser: TModuleUser;
    2021  end;
    2122
     
    3940begin
    4041  with TWebSession(HandlerData) do begin
    41     LoadUserInfo;
     42    ModuleUser.LoadUserInfo;
    4243    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    4344      Text := 'V nabídce je provoz virtualizovaných Linuxových serverů dle dohodnutých parameterů.<br/><br/>' +
  • trunk/Modules/ZdechovNET/UInternetPage.pas

    r102 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3535begin
    3636  with TWebSession(HandlerData) do begin
    37     LoadUserInfo;
     37    ModuleUser.LoadUserInfo;
    3838    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    3939      Text := Text + 'Hlavní náplní činnosti sítě je poskytovat výhodné připojení k internetu pro občany.<br/><br/>' +
  • trunk/Modules/ZdechovNET/ULinksPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3535begin
    3636  with TWebSession(HandlerData), HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    37     LoadUserInfo;
     37    ModuleUser.LoadUserInfo;
    3838    Text := '<strong>Odkazy související s obcí:</strong><br/>' +
    3939
  • trunk/Modules/ZdechovNET/UModuleZdechovNET.pas

    r104 r105  
    77uses
    88  Classes, SysUtils, UModularSystem, SpecializedDictionary, UWebPage,
    9   UWebSession, DateUtils;
     9  UWebSession, DateUtils, UModuleBase, UModuleUser,
     10  UInternetPage, UHostingPage, UHistoryPage, UDocumentsPage, UVoIPPage,
     11  ULinksPage, UPlansPage, UServerInfoPage, UWebCamPage, UUser,
     12  UNetworkPage, UAboutPage, UContactPage, UProjectsPage;
    1013
    1114type
     
    1518  TModuleZdechovNET = class(TModule)
    1619  private
     20    InternetPage: TInternetPage;
     21    HostingPage: THostingPage;
     22    HistoryPage: THistoryPage;
     23    DocumentsPage: TDocumentsPage;
     24    VoIPPage: TVoIPPage;
     25    LinksPage: TLinksPage;
     26    ContactPage: TContactPage;
     27    ServerInfoPage: TServerInfoPage;
     28    WebCamPage: TWebCamPage;
     29    PlansPage: TPlansPage;
     30    NetworkPage: TNetworkPage;
     31    ProjectsPage: TProjectsPage;
     32    AboutPage: TAboutPage;
    1733    procedure Footer(Session: TWebSession);
    1834    procedure GeneratePage(ASession: TWebSession; Page: TWebPage);
    1935    procedure TopMenu(Session: TWebSession);
    2036  public
     37    ModuleBase: TModuleBase;
     38    ModuleUser: TModuleUser;
    2139    constructor Create(Owner: TComponent); override;
    2240    destructor Destroy; override;
     
    3250
    3351uses
    34   UCore, USqlDatabase, UXmlClasses, UHtmlClasses, UUtils,
    35   UInternetPage, UHostingPage, UHistoryPage, UDocumentsPage, UVoIPPage,
    36   ULinksPage, UPlansPage, UServerInfoPage, UWebCamPage, UUser,
    37   UNetworkPage, UAboutPage, UContactPage, UProjectsPage;
     52  UCore, USqlDatabase, UXmlClasses, UHtmlClasses, UUtils;
    3853
    3954{ TModuleZdechovNET }
     
    4863  Author := 'Chronosoft';
    4964  Dependencies.Add('User');
     65  Dependencies.Add('Base');
    5066end;
    5167
     
    5773procedure TModuleZdechovNET.Start;
    5874begin
    59   with Core.Pages do begin
    60     Core.GeneratePage := GeneratePage;
    61     RegisterPage(TInternetPage, InternetPage, 'internet');
    62     RegisterPage(THostingPage, HostingPage, 'hosting');
    63     RegisterPage(THistoryPage, HistoryPage, 'historie');
    64     RegisterPage(TDocumentsPage, DocumentsPage, 'dokumenty');
    65     RegisterPage(TVoIPPage, VoIPPage, 'voip');
    66     RegisterPage(TLinksPage, LinksPage, 'odkazy');
    67     RegisterPage(TContactPage, ContactPage, 'kontakt');
    68     RegisterPage(TServerInfoPage, ServerInfoPage, 'serverinfo');
    69     RegisterPage(TWebCamPage, WebCamPage, 'kamery');
    70     RegisterPage(TPlansPage, PlansPage, 'plany');
    71     RegisterPage(TNetworkPage, NetworkPage, 'sit');
    72     RegisterPage(TProjectsPage, ProjectsPage, 'projekty');
    73     RegisterPage(TAboutPage, AboutPage, '');
     75  ModuleBase := TModuleBase(Manager.FindModuleByName('Base'));
     76  ModuleUser := TModuleUser(Manager.FindModuleByName('User'));
     77  with ModuleBase, Pages do begin
     78    //GeneratePage := GeneratePage;
     79    InternetPage := TInternetPage.Create(nil);
     80    RegisterPage(InternetPage, 'internet');
     81    HostingPage := THostingPage.Create(nil);
     82    RegisterPage(HostingPage, 'hosting');
     83    HistoryPage := THistoryPage.Create(nil);
     84    RegisterPage(HistoryPage, 'historie');
     85    DocumentsPage := TDocumentsPage.Create(nil);
     86    RegisterPage(DocumentsPage, 'dokumenty');
     87    VoIPPage := TVoIPPage.Create(nil);
     88    RegisterPage(VoIPPage, 'voip');
     89    LinksPage := TLinksPage.Create(nil);
     90    RegisterPage(LinksPage, 'odkazy');
     91    ContactPage := TContactPage.Create(nil);
     92    RegisterPage(ContactPage, 'kontakt');
     93    ServerInfoPage := TServerInfoPage.Create(nil);
     94    RegisterPage(ServerInfoPage, 'serverinfo');
     95    WebCamPage := TWebCamPage.Create(nil);
     96    RegisterPage(WebCamPage, 'kamery');
     97    PlansPage := TPlansPage.Create(nil);
     98    RegisterPage(PlansPage, 'plany');
     99    NetworkPage := TNetworkPage.Create(nil);
     100    RegisterPage(NetworkPage, 'sit');
     101    ProjectsPage := TProjectsPage.Create(nil);
     102    RegisterPage(ProjectsPage, 'projekty');
     103    AboutPage := TAboutPage.Create(nil);
     104    RegisterPage(AboutPage, '');
    74105  end;
    75106  inherited;
     
    79110begin
    80111  inherited Stop;
    81   with Core.Pages do begin
    82     UnregisterPage('internet');
    83     UnregisterPage('hosting');
    84     UnregisterPage('historie');
    85     UnregisterPage('dokumenty');
    86     UnregisterPage('voip');
    87     UnregisterPage('odkazy');
    88     UnregisterPage('kontakt');
    89     UnregisterPage('serverinfo');
    90     UnregisterPage('kamery');
    91     UnregisterPage('plany');
    92     UnregisterPage('sit');
    93     UnregisterPage('projekty');
    94     UnregisterPage('');
    95   end;
     112  with ModuleBase, Pages do begin
     113    UnregisterPage(AboutPage);
     114    FreeAndNil(AboutPage);
     115    UnregisterPage(InternetPage);
     116    FreeAndNil(InternetPage);
     117    UnregisterPage(HostingPage);
     118    FreeAndNil(HostingPage);
     119    UnregisterPage(HistoryPage);
     120    FreeAndNil(HistoryPage);
     121    UnregisterPage(DocumentsPage);
     122    FreeAndNil(DocumentsPage);
     123    UnregisterPage(VoIPPage);
     124    FreeAndNil(VoIPPage);
     125    UnregisterPage(LinksPage);
     126    FreeAndNil(LinksPage);
     127    UnregisterPage(ContactPage);
     128    FreeAndNil(ContactPage);
     129    UnregisterPage(ServerInfoPage);
     130    FreeAndNil(ServerInfoPage);
     131    UnregisterPage(WebCamPage);
     132    FreeAndNil(WebCamPage);
     133    UnregisterPage(PlansPage);
     134    FreeAndNil(PlansPage);
     135    UnregisterPage(NetworkPage);
     136    FreeAndNil(NetworkPage);
     137    UnregisterPage(ProjectsPage);
     138    FreeAndNil(ProjectsPage);
     139  end;
     140  ModuleBase := nil;
     141  ModuleUser := nil;
    96142end;
    97143
     
    179225begin
    180226  inherited Uninstall;
    181   Core.GeneratePage := nil;
     227  ModuleBase.GeneratePage := nil;
    182228  try
    183229    DbRows := TDbRows.Create;
     
    257303      '<li><a href="http://wiki.zdechov.net/">Wiki</a></li>' +
    258304      '</ul><ul class="MenuItem2">'; //<li>&nbsp;</li>';
    259     if Assigned(TCore(MainModule).Pages.FindByName('uzivatel')) then begin
    260       if UserOnline.User = UnknownUser then begin
     305    if Assigned(ModuleBase.Pages.FindByName('uzivatel')) then begin
     306      if ModuleUser.UserOnline.User = UnknownUser then begin
    261307        Text := Text + '</ul>' +
    262308          '<ul class="MenuItem2">' +
     
    268314        Text := Text + '</ul>' +
    269315          '<ul class="MenuItem2">' +
    270           '<li>' + User.FullName + '</li>' +
     316          '<li>' + ModuleUser.User.FullName + '</li>' +
    271317          '<li>' + MakeLink('Odhlášení', NavigationLink('/uzivatel/odhlaseni/')) + '</li>' +
    272318          '<li>' + MakeLink('Profil', NavigationLink('/uzivatel/profil/')) + '</li>';
  • trunk/Modules/ZdechovNET/UNetworkPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3737begin
    3838  with TWebSession(HandlerData) do begin
    39     LoadUserInfo;
     39    ModuleUser.LoadUserInfo;
    4040    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    4141      Text := MakeLink('Historie', NavigationLink('/historie/')) + '<br/>' +
  • trunk/Modules/ZdechovNET/UPlansPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHtmlClasses, UHTTPServer, USqlDatabase;
     8  Classes, SysUtils, FileUtil, UWebPage, UHtmlClasses, UHTTPServer, USqlDatabase,
     9  UModuleUser;
    910
    1011type
     
    1718    { private declarations }
    1819  public
    19     { public declarations }
     20    ModuleUser: TModuleUser;
    2021  end;
    2122
     
    3839begin
    3940  with TWebSession(HandlerData) do begin
    40     LoadUserInfo;
     41    ModuleUser.LoadUserInfo;
    4142    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    4243      Text := '<table>';
  • trunk/Modules/ZdechovNET/UProjectsPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHtmlClasses, UHTTPServer, USqlDatabase;
     8  Classes, SysUtils, FileUtil, UWebPage, UHtmlClasses, UHTTPServer, USqlDatabase,
     9  UModuleUser;
    910
    1011type
     
    1718    { private declarations }
    1819  public
    19     { public declarations }
     20    ModuleUser: TModuleUser;
    2021  end;
    2122
     
    3839begin
    3940  with TWebSession(HandlerData) do begin
    40     LoadUserInfo;
     41    ModuleUser.LoadUserInfo;
    4142    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    4243      try
  • trunk/Modules/ZdechovNET/UVoIPPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHtmlClasses, UHTTPServer;
     8  Classes, SysUtils, FileUtil, UWebPage, UHtmlClasses, UHTTPServer, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3535begin
    3636  with TWebSession(HandlerData) do begin
    37     LoadUserInfo;
     37    ModuleUser.LoadUserInfo;
    3838    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    3939      Text := 'Volejte levněji do pevných a mobilních sítí s sekundovou tarifikací a bez měsíčního paušálu.' +
  • trunk/Modules/ZdechovNET/UWebCamPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, USqlDatabase;
     8  Classes, SysUtils, FileUtil, UWebPage, UHTTPServer, UHtmlClasses, USqlDatabase,
     9  UModuleUser;
    910
    1011type
     
    1718    { private declarations }
    1819  public
    19     { public declarations }
     20    ModuleUser: TModuleUser;
    2021  end;
    2122
     
    4647begin
    4748  with TWebSession(HandlerData) do begin
    48     LoadUserInfo;
     49    ModuleUser.LoadUserInfo;
    4950    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    5051      Text := '';
  • trunk/Packages/CoolWeb/WebServer/UWebApp.pas

    r96 r105  
    2424  TPageList = class(TListObject)
    2525    RootDir: string;
     26    function FindByPage(Page: TWebPage): TRegistredPage;
    2627    function FindByName(Name: string): TRegistredPage;
    27     procedure RegisterPage(PageClass: TWebPageClass; out Reference; Path: string);
    28     procedure UnregisterPage(Path: string);
     28    procedure RegisterPage(Page: TWebPage; Path: string);
     29    procedure UnregisterPage(Page: TWebPage);
    2930    function ProducePage(HandlerData: THTTPHandlerData): Boolean;
    3031  end;
     
    7879{ TPageList }
    7980
     81function TPageList.FindByPage(Page: TWebPage): TRegistredPage;
     82var
     83  I: Integer;
     84begin
     85  I := 0;
     86  while (I < Count) and (TRegistredPage(Items[I]).Page <> Page) do Inc(I);
     87  if I < Count then Result := TRegistredPage(Items[I])
     88    else Result := nil;
     89end;
     90
    8091function TPageList.FindByName(Name: string): TRegistredPage;
    8192var
     
    117128end;
    118129
    119 procedure TPageList.RegisterPage(PageClass: TWebPageClass; out Reference;
    120   Path: string);
     130procedure TPageList.RegisterPage(Page: TWebPage; Path: string);
    121131var
    122132  NewPage: TRegistredPage;
     
    125135  NewPage := TRegistredPage(AddNew(TRegistredPage.Create));
    126136//  NewPage.Page := PageClass.Create(Self);
    127   NewPage.Page := PageClass.Create(nil);
     137  NewPage.Page := Page;
    128138  NewPage.Name := Path;
    129   TWebPage(Reference) := NewPage.Page;
    130 end;
    131 
    132 procedure TPageList.UnregisterPage(Path: string);
    133 var
    134   Page: TRegistredPage;
    135 begin
    136   Page := FindByName(Path);
    137   Remove(Page);
     139end;
     140
     141procedure TPageList.UnregisterPage(Page: TWebPage);
     142var
     143  RegPage: TRegistredPage;
     144begin
     145  RegPage := FindByPage(Page);
     146  Remove(RegPage);
    138147end;
    139148
  • trunk/Packages/ModularSystem/Demo

    • Property svn:ignore set to
      lib
      Demo.exe
  • trunk/Packages/ModularSystem/Demo/Demo.lpi

    r89 r105  
    3535      <Item1>
    3636        <PackageName Value="ModularSystem"/>
     37        <DefaultFilename Value="..\ModularSystem.lpk" Prefer="True"/>
    3738      </Item1>
    3839      <Item2>
  • trunk/Packages/ModularSystem/Demo/Demo.lps

    r89 r105  
    22<CONFIG>
    33  <ProjectSession>
     4    <PathDelim Value="\"/>
    45    <Version Value="9"/>
    56    <BuildModes Active="Default"/>
    6     <Units Count="5">
     7    <Units Count="6">
    78      <Unit0>
    89        <Filename Value="Demo.lpr"/>
    910        <IsPartOfProject Value="True"/>
    1011        <UnitName Value="Demo"/>
    11         <UsageCount Value="20"/>
     12        <UsageCount Value="22"/>
    1213      </Unit0>
    1314      <Unit1>
     
    1819        <ResourceBaseClass Value="Form"/>
    1920        <UnitName Value="UMainForm"/>
    20         <IsVisibleTab Value="True"/>
    21         <EditorIndex Value="1"/>
    22         <WindowIndex Value="0"/>
    23         <TopLine Value="87"/>
    24         <CursorPos X="46" Y="105"/>
    25         <UsageCount Value="20"/>
    26         <Loaded Value="True"/>
     21        <EditorIndex Value="4"/>
     22        <WindowIndex Value="0"/>
     23        <TopLine Value="61"/>
     24        <CursorPos X="37" Y="76"/>
     25        <UsageCount Value="22"/>
     26        <Loaded Value="True"/>
     27        <LoadedDesigner Value="True"/>
    2728      </Unit1>
    2829      <Unit2>
     
    3031        <IsPartOfProject Value="True"/>
    3132        <UnitName Value="UModuleUser"/>
    32         <UsageCount Value="20"/>
     33        <EditorIndex Value="2"/>
     34        <WindowIndex Value="0"/>
     35        <TopLine Value="13"/>
     36        <CursorPos X="17" Y="26"/>
     37        <UsageCount Value="22"/>
     38        <Loaded Value="True"/>
    3339      </Unit2>
    3440      <Unit3>
     
    3642        <IsPartOfProject Value="True"/>
    3743        <UnitName Value="UModuleBase"/>
    38         <UsageCount Value="20"/>
     44        <IsVisibleTab Value="True"/>
     45        <EditorIndex Value="1"/>
     46        <WindowIndex Value="0"/>
     47        <TopLine Value="10"/>
     48        <CursorPos X="40" Y="17"/>
     49        <UsageCount Value="22"/>
     50        <Loaded Value="True"/>
    3951      </Unit3>
    4052      <Unit4>
     
    4557        <WindowIndex Value="0"/>
    4658        <TopLine Value="1"/>
    47         <CursorPos X="36" Y="4"/>
    48         <UsageCount Value="20"/>
     59        <CursorPos X="17" Y="14"/>
     60        <UsageCount Value="22"/>
    4961        <Loaded Value="True"/>
    5062      </Unit4>
     63      <Unit5>
     64        <Filename Value="..\UModularSystem.pas"/>
     65        <UnitName Value="UModularSystem"/>
     66        <EditorIndex Value="3"/>
     67        <WindowIndex Value="0"/>
     68        <TopLine Value="117"/>
     69        <CursorPos X="1" Y="133"/>
     70        <UsageCount Value="11"/>
     71        <Loaded Value="True"/>
     72      </Unit5>
    5173    </Units>
    5274    <General>
    5375      <ActiveWindowIndexAtStart Value="0"/>
    5476    </General>
    55     <JumpHistory Count="1" HistoryIndex="0">
     77    <JumpHistory Count="29" HistoryIndex="28">
    5678      <Position1>
    57         <Filename Value="UMainForm.pas"/>
    58         <Caret Line="1" Column="1" TopLine="1"/>
     79        <Filename Value="UModuleUser.pas"/>
     80        <Caret Line="13" Column="51" TopLine="10"/>
    5981      </Position1>
     82      <Position2>
     83        <Filename Value="UModuleUser.pas"/>
     84        <Caret Line="15" Column="23" TopLine="2"/>
     85      </Position2>
     86      <Position3>
     87        <Filename Value="UModuleBase.pas"/>
     88        <Caret Line="13" Column="31" TopLine="10"/>
     89      </Position3>
     90      <Position4>
     91        <Filename Value="UModuleBase.pas"/>
     92        <Caret Line="12" Column="43" TopLine="1"/>
     93      </Position4>
     94      <Position5>
     95        <Filename Value="UModuleACL.pas"/>
     96        <Caret Line="13" Column="29" TopLine="1"/>
     97      </Position5>
     98      <Position6>
     99        <Filename Value="UModuleACL.pas"/>
     100        <Caret Line="14" Column="43" TopLine="1"/>
     101      </Position6>
     102      <Position7>
     103        <Filename Value="UMainForm.pas"/>
     104        <Caret Line="14" Column="39" TopLine="1"/>
     105      </Position7>
     106      <Position8>
     107        <Filename Value="UMainForm.pas"/>
     108        <Caret Line="92" Column="54" TopLine="77"/>
     109      </Position8>
     110      <Position9>
     111        <Filename Value="UMainForm.pas"/>
     112        <Caret Line="71" Column="23" TopLine="54"/>
     113      </Position9>
     114      <Position10>
     115        <Filename Value="UMainForm.pas"/>
     116        <Caret Line="46" Column="7" TopLine="33"/>
     117      </Position10>
     118      <Position11>
     119        <Filename Value="UMainForm.pas"/>
     120        <Caret Line="71" Column="35" TopLine="57"/>
     121      </Position11>
     122      <Position12>
     123        <Filename Value="UMainForm.pas"/>
     124        <Caret Line="72" Column="35" TopLine="58"/>
     125      </Position12>
     126      <Position13>
     127        <Filename Value="UMainForm.pas"/>
     128        <Caret Line="74" Column="35" TopLine="60"/>
     129      </Position13>
     130      <Position14>
     131        <Filename Value="UMainForm.pas"/>
     132        <Caret Line="137" Column="3" TopLine="135"/>
     133      </Position14>
     134      <Position15>
     135        <Filename Value="UMainForm.pas"/>
     136        <Caret Line="138" Column="3" TopLine="136"/>
     137      </Position15>
     138      <Position16>
     139        <Filename Value="UMainForm.pas"/>
     140        <Caret Line="139" Column="3" TopLine="137"/>
     141      </Position16>
     142      <Position17>
     143        <Filename Value="UMainForm.pas"/>
     144        <Caret Line="140" Column="3" TopLine="138"/>
     145      </Position17>
     146      <Position18>
     147        <Filename Value="UMainForm.pas"/>
     148        <Caret Line="35" Column="15" TopLine="22"/>
     149      </Position18>
     150      <Position19>
     151        <Filename Value="UMainForm.pas"/>
     152        <Caret Line="40" Column="15" TopLine="25"/>
     153      </Position19>
     154      <Position20>
     155        <Filename Value="UMainForm.pas"/>
     156        <Caret Line="95" Column="77" TopLine="86"/>
     157      </Position20>
     158      <Position21>
     159        <Filename Value="UMainForm.pas"/>
     160        <Caret Line="98" Column="65" TopLine="76"/>
     161      </Position21>
     162      <Position22>
     163        <Filename Value="..\UModularSystem.pas"/>
     164        <Caret Line="183" Column="1" TopLine="164"/>
     165      </Position22>
     166      <Position23>
     167        <Filename Value="..\UModularSystem.pas"/>
     168        <Caret Line="237" Column="33" TopLine="220"/>
     169      </Position23>
     170      <Position24>
     171        <Filename Value="..\UModularSystem.pas"/>
     172        <Caret Line="183" Column="1" TopLine="170"/>
     173      </Position24>
     174      <Position25>
     175        <Filename Value="..\UModularSystem.pas"/>
     176        <Caret Line="233" Column="1" TopLine="220"/>
     177      </Position25>
     178      <Position26>
     179        <Filename Value="..\UModularSystem.pas"/>
     180        <Caret Line="130" Column="1" TopLine="117"/>
     181      </Position26>
     182      <Position27>
     183        <Filename Value="..\UModularSystem.pas"/>
     184        <Caret Line="131" Column="1" TopLine="117"/>
     185      </Position27>
     186      <Position28>
     187        <Filename Value="..\UModularSystem.pas"/>
     188        <Caret Line="132" Column="1" TopLine="117"/>
     189      </Position28>
     190      <Position29>
     191        <Filename Value="..\UModularSystem.pas"/>
     192        <Caret Line="133" Column="1" TopLine="117"/>
     193      </Position29>
    60194    </JumpHistory>
    61195  </ProjectSession>
    62   <EditorMacros Count="0"/>
     196  <Debugging>
     197    <BreakPoints Count="1">
     198      <Item1>
     199        <Kind Value="bpkSource"/>
     200        <WatchScope Value="wpsLocal"/>
     201        <WatchKind Value="wpkWrite"/>
     202        <Source Value="..\UModularSystem.pas"/>
     203        <Line Value="233"/>
     204      </Item1>
     205    </BreakPoints>
     206  </Debugging>
    63207</CONFIG>
  • trunk/Packages/ModularSystem/Demo/UMainForm.lfm

    r89 r105  
    1010  OnDestroy = FormDestroy
    1111  OnShow = FormShow
    12   LCLVersion = '1.1'
     12  LCLVersion = '1.0.1.3'
    1313  object ListViewModules: TListView
    1414    Left = 8
     
    3030      end   
    3131      item
    32         Caption = 'State'
     32        Caption = 'Installed'
     33        Width = 80
     34      end   
     35      item
     36        Caption = 'Running'
    3337        Width = 80
    3438      end   
     
    8084    TabOrder = 3
    8185  end
     86  object ButtonUpdate1: TButton
     87    Left = 248
     88    Height = 25
     89    Top = 281
     90    Width = 75
     91    Action = AModuleStart
     92    Anchors = [akLeft, akBottom]
     93    TabOrder = 4
     94  end
     95  object ButtonUpdate2: TButton
     96    Left = 328
     97    Height = 25
     98    Top = 281
     99    Width = 75
     100    Action = AModuleStop
     101    Anchors = [akLeft, akBottom]
     102    TabOrder = 5
     103  end
    82104  object PopupMenu1: TPopupMenu
    83105    left = 183
     
    92114      Action = AModuleUpdate
    93115    end
     116    object MenuItem4: TMenuItem
     117      Action = AModuleStart
     118    end
     119    object MenuItem5: TMenuItem
     120      Action = AModuleStop
     121    end
    94122  end
    95123  object ActionList1: TActionList
    96     left = 137
    97     top = 165
     124    left = 184
     125    top = 136
    98126    object AModuleInstall: TAction
    99127      Caption = 'Install'
     
    108136      OnExecute = ButtonUpdateClick
    109137    end
     138    object AModuleStart: TAction
     139      Caption = 'Start'
     140      OnExecute = AModuleStartExecute
     141    end
     142    object AModuleStop: TAction
     143      Caption = 'Stop'
     144      OnExecute = AModuleStopExecute
     145    end
    110146  end
    111147end
  • trunk/Packages/ModularSystem/Demo/UMainForm.pas

    r89 r105  
    1515  TMainForm = class(TForm)
    1616  published
     17    AModuleStart: TAction;
     18    AModuleStop: TAction;
    1719    AModuleInstall: TAction;
    1820    AModuleUninstall: TAction;
     
    2224    ButtonUninstall: TButton;
    2325    ButtonInstall: TButton;
     26    ButtonUpdate1: TButton;
     27    ButtonUpdate2: TButton;
    2428    ListViewModules: TListView;
    2529    MenuItem1: TMenuItem;
    2630    MenuItem2: TMenuItem;
    2731    MenuItem3: TMenuItem;
     32    MenuItem4: TMenuItem;
     33    MenuItem5: TMenuItem;
    2834    PopupMenu1: TPopupMenu;
     35    procedure AModuleStartExecute(Sender: TObject);
     36    procedure AModuleStopExecute(Sender: TObject);
    2937    procedure ButtonInstallClick(Sender: TObject);
    3038    procedure ButtonUninstallClick(Sender: TObject);
     
    4452
    4553const
    46   InstalledText: array[Boolean] of string = ('Not installed', 'Installed');
     54  BoolText: array[Boolean] of string = ('No', 'Yes');
    4755
    4856var
     
    6674    Item.Caption := Title;
    6775    Item.Data := ModuleManager.Modules[Item.Index];
    68     Item.SubItems.Add(Name);
     76    Item.SubItems.Add(Identification);
    6977    Item.SubItems.Add(Version);
    70     Item.SubItems.Add(InstalledText[Installed]);
     78    Item.SubItems.Add(BoolText[Installed]);
     79    Item.SubItems.Add(BoolText[Running]);
    7180    Item.SubItems.Add(License);
    7281    Item.SubItems.Add(StringReplace(Dependencies.Text, LineEnding, ', ', [rfReplaceAll]));
     
    7988var
    8089  Installed: Boolean;
     90  Running: Boolean;
    8191begin
    8292  if Assigned(ListViewModules.Selected) then Installed := TModule(ListViewModules.Selected.Data).Installed;
     93  if Assigned(ListViewModules.Selected) then Running := TModule(ListViewModules.Selected.Data).Running;
    8394  AModuleInstall.Enabled := Assigned(ListViewModules.Selected) and not Installed;
    8495  AModuleUninstall.Enabled := Assigned(ListViewModules.Selected) and Installed;
    8596  AModuleUpdate.Enabled := Assigned(ListViewModules.Selected) and Installed;
     97  AModuleStart.Enabled := Assigned(ListViewModules.Selected) and not Running;
     98  AModuleStop.Enabled := Assigned(ListViewModules.Selected) and Running;
    8699end;
    87100
    88101procedure TMainForm.RegisterModules;
    89102begin
    90   ModuleManager.RegisterModule(TModuleUser.Create);
    91   ModuleManager.RegisterModule(TModuleBase.Create);
    92   ModuleManager.RegisterModule(TModuleACL.Create);
     103  ModuleManager.RegisterModule(TModuleUser.Create(nil));
     104  ModuleManager.RegisterModule(TModuleBase.Create(nil));
     105  ModuleManager.RegisterModule(TModuleACL.Create(nil));
    93106end;
    94107
     
    129142end;
    130143
     144procedure TMainForm.AModuleStartExecute(Sender: TObject);
     145var
     146  ModuleList: TStringList;
     147begin
     148  if Assigned(ListViewModules.Selected) then begin
     149    try
     150      ModuleList := TStringList.Create;
     151      TModule(ListViewModules.Selected.Data).EnumModulesStart(ModuleList);
     152      if ModuleList.Count > 0 then begin
     153        if MessageDlg('These modules will be started in addition to ' +
     154          TModule(ListViewModules.Selected.Data).Name + ': ' +
     155          StringReplace(ModuleList.Text, LineEnding, ', ', [rfReplaceAll]),
     156          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     157           TModule(ListViewModules.Selected.Data).Start;
     158      end else TModule(ListViewModules.Selected.Data).Start;
     159    finally
     160      ModuleList.Free;
     161    end;
     162    RefreshList;
     163  end;
     164end;
     165
     166procedure TMainForm.AModuleStopExecute(Sender: TObject);
     167var
     168  ModuleList: TStringList;
     169begin
     170  if Assigned(ListViewModules.Selected) then begin
     171    try
     172      ModuleList := TStringList.Create;
     173      TModule(ListViewModules.Selected.Data).EnumModulesStop(ModuleList);
     174      if ModuleList.Count > 0 then begin
     175        if MessageDlg('These modules will be stopped in addition to ' +
     176          TModule(ListViewModules.Selected.Data).Name + ': ' +
     177          StringReplace(ModuleList.Text, LineEnding, ', ', [rfReplaceAll]),
     178          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     179            TModule(ListViewModules.Selected.Data).Stop;
     180      end else TModule(ListViewModules.Selected.Data).Stop;
     181    finally
     182      ModuleList.Free;
     183    end;
     184
     185    RefreshList;
     186  end;
     187end;
     188
    131189procedure TMainForm.ButtonUninstallClick(Sender: TObject);
    132190var
     
    155213begin
    156214  if Assigned(ListViewModules.Selected) then begin
    157     TModule(ListViewModules.Selected.Data).Update;
     215    TModule(ListViewModules.Selected.Data).Upgrade;
    158216    RefreshList;
    159217  end;
     
    162220procedure TMainForm.FormDestroy(Sender: TObject);
    163221begin
    164   ModuleManager.Free;
     222  FreeAndNil(ModuleManager);
    165223end;
    166224
  • trunk/Packages/ModularSystem/Demo/UModuleACL.pas

    r89 r105  
    1212
    1313  TModuleACL = class(TModule)
    14     constructor Create; override;
     14    constructor Create(AOwner: TComponent); override;
    1515    destructor Destroy; override;
    1616  end;
     
    2121{ TModuleACL }
    2222
    23 constructor TModuleACL.Create;
     23constructor TModuleACL.Create(AOwner: TComponent);
    2424begin
    2525  inherited;
    26   Name := 'UserACL';
     26  Identification := 'UserACL';
    2727  Title := 'User ACL';
    2828  Version := '1.0';
  • trunk/Packages/ModularSystem/Demo/UModuleBase.pas

    r89 r105  
    1010type
    1111  TModuleBase = class(TModule)
    12     constructor Create; override;
     12    constructor Create(AOwner: TComponent); override;
    1313    destructor Destroy; override;
    1414  end;
     
    1919{ TModuleUser }
    2020
    21 constructor TModuleBase.Create;
     21constructor TModuleBase.Create(AOwner: TComponent);
    2222begin
    2323inherited;
    24   Name := 'Base';
     24  Identification := 'Base';
    2525  Title := 'Base';
    2626  Version := '1.0';
  • trunk/Packages/ModularSystem/Demo/UModuleUser.pas

    r89 r105  
    1313
    1414  TModuleUser = class(TModule)
    15     constructor Create; override;
     15    constructor Create(AOwner: TComponent); override;
    1616    destructor Destroy; override;
    1717  end;
     
    2121{ TModuleUser }
    2222
    23 constructor TModuleUser.Create;
     23constructor TModuleUser.Create(AOwner: TComponent);
    2424begin
    2525  inherited;
    26   Name := 'User';
     26  Identification := 'User';
    2727  Title := 'User';
    2828  Version := '1.0';
  • trunk/Packages/ModularSystem/ModularSystem.lpk

    r92 r105  
    2020    <Description Value="Modular system"/>
    2121    <License Value="GNU/LGPLv3"/>
    22     <Version Minor="2"/>
     22    <Version Minor="1"/>
    2323    <Files Count="1">
    2424      <Item1>
     
    2828      </Item1>
    2929    </Files>
     30    <i18n>
     31      <EnableI18N Value="True"/>
     32      <OutDir Value="Language"/>
     33      <EnableI18NForLFM Value="True"/>
     34    </i18n>
    3035    <Type Value="RunAndDesignTime"/>
    31     <RequiredPkgs Count="1">
     36    <RequiredPkgs Count="2">
    3237      <Item1>
     38        <PackageName Value="Common"/>
     39      </Item1>
     40      <Item2>
    3341        <PackageName Value="FCL"/>
    34       </Item1>
     42      </Item2>
    3543    </RequiredPkgs>
    3644    <UsageOptions>
  • trunk/Packages/ModularSystem/UModularSystem.pas

    r94 r105  
    66
    77uses
    8   Classes, SysUtils, Contnrs;
     8  Classes, SysUtils, Contnrs, URegistry;
    99
    1010type
     
    1919  TModule = class(TComponent)
    2020  private
     21    FEnabled: Boolean;
    2122    FRunning: Boolean;
    2223    FInstalled: Boolean;
    23     Manager: TModuleManager;
     24    FManager: TModuleManager;
    2425    FVersion: string;
    2526    FIdentification: string;
     
    2930    FDependencies: TStringList;
    3031    FDescription: TStringList;
     32    procedure SetEnabled(AValue: Boolean);
    3133    procedure SetInstalled(AValue: Boolean);
    3234    procedure SetRunning(AValue: Boolean);
     35  protected
     36    procedure BeforeStart; virtual;
     37    procedure AfterStart; virtual;
     38    procedure BeforeStop; virtual;
     39    procedure AfterStop; virtual;
    3340  public
    3441    API: TAPI;
    35     MarkForInstall: Boolean;
    3642    procedure Start; virtual;
    3743    procedure Stop; virtual;
     
    4854    property Running: Boolean read FRunning write SetRunning;
    4955    property Installed: Boolean read FInstalled write SetInstalled;
     56    property Enabled: Boolean read FEnabled write SetEnabled;
    5057  published
     58    property Manager: TModuleManager read FManager;
    5159    property Version: string read FVersion write FVersion;
    5260    property Identification: string read FIdentification write FIdentification;
     
    7987    procedure EnumModulesInstall(Dependencies, ModuleList: TStringList);
    8088    procedure EnumModulesUninstall(ModuleName: string; ModuleList: TStringList);
    81     procedure RegisterModule(Module: TModule; MarkForInstall: Boolean = False);
     89    procedure RegisterModule(Module: TModule; Enabled: Boolean = True);
    8290    procedure UnregisterModule(Module: TModule);
    8391    procedure StartInstalled;
    84     procedure InstallMarked;
     92    procedure InstallEnabled;
    8593    procedure StopAll;
    8694    procedure UninstallAll;
     95    procedure LoadFromRegistry(Context: TRegistryContext);
     96    procedure SaveToRegistry(Context: TRegistryContext);
    8797    constructor Create(AOwner: TComponent); override;
    8898    destructor Destroy; override;
     
    143153  for I := 0 to Dependencies.Count - 1 do begin
    144154    Module := FindModuleByName(Dependencies[I]);
    145     if Assigned(Module) then begin
     155    if Assigned(Module) and Module.Enabled then begin
    146156      if not Module.Running then Module.Start;
    147157    end else raise Exception.CreateFmt(SModuleNotFound, [ModuleName, Dependencies[I]]);
     
    199209  for I := 0 to Dependencies.Count - 1 do begin
    200210    Module := FindModuleByName(Dependencies[I]);
    201     if Assigned(Module) then begin
     211    if Assigned(Module) and Module.Enabled then begin
    202212      if not Module.Installed then Module.Install;
    203213    end else raise Exception.CreateFmt(SModuleNotFound, [ModuleName, Dependencies[I]]);
     
    248258
    249259procedure TModuleManager.RegisterModule(Module: TModule;
    250   MarkForInstall: Boolean = False);
     260  Enabled: Boolean = True);
    251261begin
    252262  Modules.Add(Module);
    253   Module.Manager := Self;
     263  Module.FManager := Self;
    254264  Module.API := API;
    255   Module.MarkForInstall := MarkForInstall;
     265  Module.Enabled := Enabled;
    256266end;
    257267
     
    270280end;
    271281
    272 procedure TModuleManager.InstallMarked;
     282procedure TModuleManager.InstallEnabled;
    273283var
    274284  I: Integer;
     
    276286  for I := 0 to Modules.Count - 1 do
    277287  with TModule(Modules[I]) do
    278     if not Installed and MarkForInstall then Install;
     288    if not Installed and Enabled then Install;
    279289end;
    280290
     
    301311  inherited;
    302312  Modules := TObjectList.Create;
     313  //Modules.OwnsObjects := False;
    303314end;
    304315
     
    307318  StopAll;
    308319  FreeAndNil(Modules);
    309   inherited Destroy;
     320  inherited;
     321end;
     322
     323procedure TModuleManager.LoadFromRegistry(Context: TRegistryContext);
     324var
     325  I: Integer;
     326begin
     327  with TRegistryEx.Create do
     328  try
     329    RootKey := Context.RootKey;
     330    for I := 0 to Modules.Count - 1 do
     331    with TModule(Modules[I]) do begin
     332      OpenKey(Context.Key + '\' + Identification, True);
     333      Running := ReadBoolWithDefault('Run',  Enabled);
     334    end;
     335  finally
     336    Free;
     337  end;
     338end;
     339
     340procedure TModuleManager.SaveToRegistry(Context: TRegistryContext);
     341var
     342  I: Integer;
     343begin
     344  with TRegistryEx.Create do
     345  try
     346    RootKey := Context.RootKey;
     347    for I := 0 to Modules.Count - 1 do
     348    with TModule(Modules[I]) do begin
     349      OpenKey(Context.Key + '\' + Identification, True);
     350      WriteBool('Run', Running);
     351    end;
     352  finally
     353    Free;
     354  end;
    310355end;
    311356
     
    318363end;
    319364
     365procedure TModule.BeforeStart;
     366begin
     367  if Running then Exit;
     368  if not Installed then Install;
     369  Manager.StartDependencies(Identification, Dependencies);
     370end;
     371
     372procedure TModule.AfterStart;
     373begin
     374  FRunning := True;
     375end;
     376
     377procedure TModule.BeforeStop;
     378begin
     379  if not Running then Exit;
     380  FRunning := False;
     381  Manager.StopDependencies(Identification);
     382end;
     383
     384procedure TModule.AfterStop;
     385begin
     386end;
     387
    320388procedure TModule.SetInstalled(AValue: Boolean);
    321389begin
     
    324392end;
    325393
     394procedure TModule.SetEnabled(AValue: Boolean);
     395begin
     396  if FEnabled = AValue then Exit;
     397  FEnabled := AValue;
     398  if not FEnabled and FInstalled then Uninstall;
     399end;
     400
    326401procedure TModule.Start;
    327402begin
    328   if Running then Exit;
    329   Manager.StartDependencies(Identification, Dependencies);
    330   FRunning := True;
     403  BeforeStart;
     404  // Do something
     405  AfterStart;
    331406end;
    332407
    333408procedure TModule.Stop;
    334409begin
    335   if not Running then Exit;
    336   Manager.StopDependencies(Identification);
    337   FRunning := False;
     410  BeforeStop;
     411  // Do something
     412  AfterStop;
    338413end;
    339414
     
    403478begin
    404479  Running := False;
    405   Description.Free;
    406   Dependencies.Free;
    407   inherited Destroy;
     480  FreeAndNil(FDescription);
     481  FreeAndNil(FDependencies);
     482  inherited;
    408483end;
    409484
  • trunk/Pages/UPageAdmin.pas

    r103 r105  
    6464  with TWebSession(HandlerData) do begin
    6565    with HtmlDocument.Body, THtmlString(SubItems.AddNew(THtmlString.Create)) do begin
    66       TModuleSystem(Core.ModuleManager.FindModuleByName('System')).UpdateModuleList;
     66      TModuleSystem(ModuleManager.FindModuleByName('System')).UpdateModuleList;
    6767      Text := 'Seznam modulů synchronizován';
    6868      Text := Text + '<br/><br/>';
     
    8282        '<table class="WideTable"><tr><th>Name</th><th>Installed</th><th>Title</th><th>Version</th>' +
    8383        '<th>License</th><th>Author</th><th>Decsription</th><th>Dependencies</th><th>Actions</th></tr>';
    84       for I := 0 to Core.ModuleManager.Modules.Count - 1 do
    85       with TModule(Core.ModuleManager.Modules[I]) do begin
     84      for I := 0 to ModuleManager.Modules.Count - 1 do
     85      with TModule(ModuleManager.Modules[I]) do begin
    8686        Text := Text + '<tr><td>' + Identification + '</td><td>' + BooleanText[Installed] + '</td><td>' + Title +
    8787        '</td><td>' + Version + '</td><td>' + License + '</td><td>' + Author +
     
    106106      if Request.Query.SearchKey('name') <> -1 then begin
    107107        ModuleName := Request.Query.Values['name'];
    108         Module := Core.ModuleManager.FindModuleByName(ModuleName);
     108        Module := ModuleManager.FindModuleByName(ModuleName);
    109109        if Assigned(Module) then begin
    110110          Text := 'Installing module ' + ModuleName;
     
    128128      if Request.Query.SearchKey('name') <> -1 then begin
    129129        ModuleName := Request.Query.Values['name'];
    130         Module := Core.ModuleManager.FindModuleByName(ModuleName);
     130        Module := ModuleManager.FindModuleByName(ModuleName);
    131131        if Assigned(Module) then begin
    132132          Text := 'Uninstalling module ' + ModuleName;
  • trunk/Pages/UServerInfoPage.pas

    r103 r105  
    66
    77uses
    8   Classes, SysUtils, FileUtil, UWebPage, UWebApp, UHTTPServer;
     8  Classes, SysUtils, FileUtil, UWebPage, UWebApp, UHTTPServer, UModuleUser;
    99
    1010type
     
    1717    { private declarations }
    1818  public
    19     { public declarations }
     19    ModuleUser: TModuleUser;
    2020  end;
    2121
     
    3535begin
    3636  with TWebSession(HandlerData) do begin
    37     LoadUserInfo;
     37    ModuleUser.LoadUserInfo;
    3838    Session.Values['Test'] := 'Tst';
    3939    TCore(MainModule).WebApp1.HTTPServer.ServerInfo(HandlerData);
  • trunk/UCore.pas

    r103 r105  
    1717
    1818type
    19   TCore = class;
    20 
    21 
    2219  { TCore }
    2320
     
    2724    procedure WebApp1PageProduce(HandlerData: THTTPHandlerData);
    2825  private
    29     FGeneratePage: TGeneratePageEvent;
    3026    procedure Show(Content: string);
    31     procedure RegisterModules;
    32     procedure CheckModules;
    3327  public
    3428    CommonDatabase: TSqlDatabase;
    35     ModuleManager: TModuleManager;
    3629    Load: string;
    3730    Unload: string;
     
    4740    NetworkPort: Integer;
    4841    MaxConnections: Integer;
    49     Pages: TPageList;
    5042    DatabaseHostname: string;
    5143    DatabaseUserName: string;
    5244    DatabasePassword: string;
    5345    DatabaseSchema: string;
    54     procedure GeneratePageDefault(ASession: TWebSession; Page: TWebPage);
    5546    procedure LoadFromRegistry;
    5647    procedure SaveToRegistry;
     
    5849    constructor Create(AOwner: TComponent); override;
    5950    destructor Destroy; override;
    60     property GeneratePage: TGeneratePageEvent read FGeneratePage write FGeneratePage;
    6151  end;
    6252
     
    6757implementation
    6858
    69 uses
    70   UModuleSystem, UModuleZdechovNET, UModuleUser, UPageAdmin, UModuleTV,
    71   UModuleFinance, UModuleNetwork, UModulePortal, UModuleIS;
    72 
    73 resourcestring
    74   SError = '<div>Error: %s</div>';
    75 
    7659
    7760{ TCore }
    78 
    79 procedure TCore.GeneratePageDefault(ASession: TWebSession; Page: TWebPage);
    80 var
    81   I: Integer;
    82 begin
    83   with ASession do begin
    84     HtmlDocument.ContentLanguage := 'cs';
    85     GlobalTitle := 'WebSystem';
    86 
    87       //Page.Page.OnProduce(HandlerData);
    88       HtmlDocument.Title := Page.Caption;
    89       with HtmlDocument.AsXmlDocument do
    90       try
    91         Formated := TCore(MainModule).FormatHTML;
    92         Response.Content.WriteString(AsString);
    93       finally
    94         Free;
    95       end;
    96     end;
    97 end;
    9861
    9962constructor TCore.Create(AOwner: TComponent);
    10063begin
    10164  inherited;
    102   ModuleManager := TModuleManager.Create(nil);
    103   Pages := TPageList.Create;
    10465  CommonDatabase := TSqlDatabase.Create(nil);
    10566
    10667  LoadFromRegistry;
    107   with Pages do begin
    108     RegisterPage(TPageAdmin, PageAdmin, 'administration');
    109   end;
    11068  with WebApp1 do begin
    11169    if ServerType = stTCP then begin
     
    12179  //SaveToRegistry;
    12280  FreeAndNil(CommonDatabase);
    123   ModuleManager.StopAll;
    124   FreeAndNil(ModuleManager);
    125   FreeAndNil(Pages);
    12681  inherited;
    12782end;
     
    154109end;
    155110
    156 procedure TCore.RegisterModules;
    157 begin
    158   with ModuleManager do begin
    159     RegisterModule(TModuleSystem.Create(nil), True);
    160     RegisterModule(TModuleUser.Create(nil), True);
    161     RegisterModule(TModuleZdechovNET.Create(nil), True);
    162     RegisterModule(TModuleTV.Create(nil), True);
    163     RegisterModule(TModuleFinance.Create(nil), True);
    164     RegisterModule(TModuleNetwork.Create(nil), True);
    165     RegisterModule(TModulePortal.Create(nil), True);
    166     RegisterModule(TModuleIS.Create(nil), True);
    167   end;
    168 end;
    169 
    170 procedure TCore.CheckModules;
    171 var
    172   DbRows: TDbRows;
    173   Module: TModule;
    174   I: Integer;
    175 begin
    176   try
    177     DbRows := TDbRows.Create;
    178     CommonDatabase.Query(DbRows, 'SELECT * FROM INFORMATION_SCHEMA.TABLES ' +
    179       'WHERE TABLE_SCHEMA = "' + CommonDatabase.Database + '" AND TABLE_NAME = "SystemModule"');
    180     Module := ModuleManager.FindModuleByName('System');
    181     if DbRows.Count > 0 then Module.SetInstalledState(True)
    182       else Module.SetInstalledState(False);
    183   finally
    184     DbRows.Free;
    185   end;
    186 end;
    187 
    188111procedure TCore.WebApp1PageProduce(HandlerData: THTTPHandlerData);
    189112var
    190   FileName: string;
    191   PageName: string;
    192   Page: TRegistredPage;
    193113  NewSession: TWebSession;
    194   BaseUrlParts: TListString;
    195114begin
    196   with HandlerData do begin
    197     try
    198       BaseUrlParts := TListString.Create;
    199       BaseUrlParts.Explode(BaseURL, '/', StrToStr);
    200       while (BaseUrlParts.Count > 0) and (Request.Path.Count > 0) and
    201          (BaseUrlParts[0] = Request.Path[0]) do begin
    202            BaseUrlParts.Delete(0);
    203            Request.Path.Delete(0);
    204          end;
    205     finally
    206       BaseUrlParts.Free;
    207     end;
    208     if Request.Path.Count > 0 then PageName := Request.Path[0]
    209       else PageName := '';
    210     Page := Pages.FindByName(PageName);
    211     if Assigned(Page) then begin
    212       NewSession := TWebSession.Create;
    213       NewSession.MainModule := Self;
    214       NewSession.Assign(HandlerData);
    215       NewSession.TimeStart := Now;
    216       NewSession.Database.HostName := DatabaseHostName;
    217       NewSession.Database.Password := DatabasePassword;
    218       NewSession.Database.Database := DatabaseSchema;
    219       NewSession.Database.UserName := DatabaseUserName;
    220       NewSession.InitDatabase;
    221       try
    222         Page.Page.OnProduce(NewSession);
    223       except
    224         on E: Exception do begin
    225           THTMLString(TWebSession(NewSession).HtmlDocument.Body.SubItems.AddNew(THtmlString.Create)).
    226             Text := Format(SError, [E.Message]);
    227           if Assigned(GeneratePage) then GeneratePage(NewSession, Page.Page)
    228             else GeneratePageDefault(NewSession, Page.Page);
    229         end;
    230       end;
    231       HandlerData.Assign(NewSession);
    232     end else begin
    233       WebApp1.HTTPServer.FileResponse(HandlerData)
    234     end;
    235   end;
     115  NewSession := TWebSession.Create;
     116  NewSession.MainModule := Self;
     117  NewSession.Assign(HandlerData);
     118  NewSession.TimeStart := Now;
     119  NewSession.Database.HostName := DatabaseHostName;
     120  NewSession.Database.Password := DatabasePassword;
     121  NewSession.Database.Database := DatabaseSchema;
     122  NewSession.Database.UserName := DatabaseUserName;
     123  NewSession.InitDatabase;
     124  NewSession.BaseURL := BaseURL;
     125  NewSession.Run;
     126  HandlerData.Assign(NewSession);
    236127end;
    237128
     
    296187  CommonDatabase.Connect;
    297188
    298   RegisterModules;
    299   CheckModules;
    300   ModuleManager.StartInstalled;
    301 
    302189  WebApp1.HTTPServer.DocumentRoot := ExtractFileDir(ParamStrUTF8(0));
    303190  WebApp1.Run;
  • trunk/ZdechovNET.lpi

    r103 r105  
    3636          </Target>
    3737          <SearchPaths>
    38             <OtherUnitFiles Value="/usr/lib/mysql;/usr/lib64/mysql;Application;WebServer;Network;Pages;Modules/User;Common;Modules/System;Modules/ZdechovNET;Modules/TV;Modules/Finance;Modules/Network;Modules/Portal;Modules/IS"/>
     38            <OtherUnitFiles Value="/usr/lib/mysql;/usr/lib64/mysql;Application;WebServer;Network;Pages;Modules/User;Common;Modules/System;Modules/ZdechovNET;Modules/TV;Modules/Finance;Modules/Network;Modules/Portal;Modules/IS;Modules/News;Modules/Base"/>
    3939            <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
    4040          </SearchPaths>
     
    117117      </Item7>
    118118    </RequiredPackages>
    119     <Units Count="35">
     119    <Units Count="37">
    120120      <Unit0>
    121121        <Filename Value="ZdechovNET.lpr"/>
     
    216216        <Filename Value="Modules/ZdechovNET/UInternetPage.pas"/>
    217217        <IsPartOfProject Value="True"/>
    218         <HasResources Value="True"/>
     218        <ComponentName Value="InternetPage"/>
     219        <HasResources Value="True"/>
     220        <ResourceBaseClass Value="DataModule"/>
    219221        <UnitName Value="UInternetPage"/>
    220222      </Unit16>
     
    326328        <UnitName Value="UUser"/>
    327329      </Unit34>
     330      <Unit35>
     331        <Filename Value="Modules/News/UModuleNews.pas"/>
     332        <IsPartOfProject Value="True"/>
     333        <UnitName Value="UModuleNews"/>
     334      </Unit35>
     335      <Unit36>
     336        <Filename Value="Modules/Base/UModuleBase.pas"/>
     337        <IsPartOfProject Value="True"/>
     338        <UnitName Value="UModuleBase"/>
     339      </Unit36>
    328340    </Units>
    329341  </ProjectOptions>
  • trunk/languages/index.cs.po

    r103 r105  
    5959
    6060#: ucore.serror
     61msgctxt "ucore.serror"
    6162msgid "<div>Error: %s</div>"
    6263msgstr ""
     
    117118msgstr ""
    118119
     120#: uwebsession.serror
     121msgctxt "uwebsession.serror"
     122msgid "<div>Error: %s</div>"
     123msgstr ""
     124
  • trunk/languages/index.po

    r103 r105  
    5151
    5252#: ucore.serror
     53msgctxt "ucore.serror"
    5354msgid "<div>Error: %s</div>"
    5455msgstr ""
     
    107108msgstr ""
    108109
     110#: uwebsession.serror
     111msgctxt "uwebsession.serror"
     112msgid "<div>Error: %s</div>"
     113msgstr ""
     114
Note: See TracChangeset for help on using the changeset viewer.