mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 04:22:21 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			689 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			689 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
  Copyright (C) 2007 Michael Van Canneyt
 | 
						|
 | 
						|
  This library is free software; you can redistribute it and/or modify it
 | 
						|
  under the terms of the GNU Library General Public License as published by
 | 
						|
  the Free Software Foundation; either version 2 of the License, or (at your
 | 
						|
  option) any later version.
 | 
						|
 | 
						|
  This program is distributed in the hope that it will be useful, but WITHOUT
 | 
						|
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
						|
  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
 | 
						|
  for more details.
 | 
						|
 | 
						|
  You should have received a copy of the GNU Library General Public License
 | 
						|
  along with this library; if not, write to the Free Software Foundation,
 | 
						|
  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
						|
}
 | 
						|
{$mode objfpc}
 | 
						|
{$H+}
 | 
						|
unit WebLazIDEIntf;
 | 
						|
 | 
						|
{$DEFINE HasFastCGISupport}
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
uses
 | 
						|
  Classes, SysUtils, fpWeb, fpHTML, fpdatasetform,
 | 
						|
  Controls, Dialogs, forms, LazIDEIntf, ProjectIntf;
 | 
						|
 | 
						|
type
 | 
						|
  { TCGIApplicationDescriptor }
 | 
						|
 | 
						|
  TCGIApplicationDescriptor = class(TProjectDescriptor)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function InitProject(AProject: TLazProject): TModalResult; override;
 | 
						|
    function CreateStartFiles(AProject: TLazProject): TModalResult; override;
 | 
						|
  end;
 | 
						|
  { TApacheApplicationDescriptor }
 | 
						|
 | 
						|
  TApacheApplicationDescriptor = class(TProjectDescriptor)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function InitProject(AProject: TLazProject): TModalResult; override;
 | 
						|
    function CreateStartFiles(AProject: TLazProject): TModalResult; override;
 | 
						|
  end;
 | 
						|
 | 
						|
  { TCustomCGIApplicationDescriptor }
 | 
						|
  TCustomCGIApplicationDescriptor = class(TProjectDescriptor)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function InitProject(AProject: TLazProject): TModalResult; override;
 | 
						|
    function CreateStartFiles(AProject: TLazProject): TModalResult; override;
 | 
						|
  end;
 | 
						|
 | 
						|
{$IFDEF HasFastCGISupport}
 | 
						|
  { TCustomFCGIApplicationDescriptor }
 | 
						|
  TCustomFCGIApplicationDescriptor = class(TProjectDescriptor)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function InitProject(AProject: TLazProject): TModalResult; override;
 | 
						|
    function CreateStartFiles(AProject: TLazProject): TModalResult; override;
 | 
						|
  end;
 | 
						|
 | 
						|
  { TFCGIApplicationDescriptor }
 | 
						|
 | 
						|
  TFCGIApplicationDescriptor = class(TProjectDescriptor)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function InitProject(AProject: TLazProject): TModalResult; override;
 | 
						|
    function CreateStartFiles(AProject: TLazProject): TModalResult; override;
 | 
						|
  end;
 | 
						|
{$ENDIF HasFastCGISupport}
 | 
						|
 | 
						|
  { TFileDescPascalUnitWithCGIDataModule }
 | 
						|
 | 
						|
  TFileDescWebDataModule = class(TFileDescPascalUnitWithResource)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetInterfaceUsesSection: string; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
 | 
						|
  end;
 | 
						|
  
 | 
						|
  TFileDescHTMLModule = class(TFileDescPascalUnitWithResource)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetInterfaceUsesSection: string; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
 | 
						|
  end;
 | 
						|
 | 
						|
var
 | 
						|
  ProjectDescriptorCustomCGIApplication: TCustomCGIApplicationDescriptor;
 | 
						|
  ProjectDescriptorCGIApplication: TCGIApplicationDescriptor;
 | 
						|
  ProjectDescriptorApacheApplication: TApacheApplicationDescriptor;
 | 
						|
{$IFDEF HasFastCGISupport}
 | 
						|
  ProjectDescriptorCustomFCGIApplication: TCustomFCGIApplicationDescriptor;
 | 
						|
  ProjectDescriptorFCGIApplication: TFCGIApplicationDescriptor;
 | 
						|
{$ENDIF HasFastCGISupport}
 | 
						|
  FileDescriptorHTMLModule: TFileDescHTMLModule;
 | 
						|
  FileDescriptorWebModule: TFileDescWebDataModule;
 | 
						|
 | 
						|
procedure Register;
 | 
						|
 | 
						|
resourcestring
 | 
						|
  rsCGIApplicati = 'CGI Application';
 | 
						|
  rsCGIApplicati2 = 'CGI Application%sA CGI (Common Gateway Interface) '
 | 
						|
    +'program in Free Pascal using webmodules. The program source is '
 | 
						|
    +'automatically maintained by Lazarus.';
 | 
						|
  rsCustomCGIApp = 'Custom CGI Application';
 | 
						|
  rsCustomCGIApp2 = 'Custom CGI Application%sA CGI (Common Gateway Interface) '
 | 
						|
    +'program in Free Pascal. The program source is automatically maintained '
 | 
						|
    +'by Lazarus.';
 | 
						|
  rsWebModule = 'Web Module';
 | 
						|
  rsWEBModuleADa = 'WEB Module%sA datamodule for WEB (HTTP) applications.';
 | 
						|
  rsHTMLWebModul = 'HTML Web Module';
 | 
						|
  rsHTMLWEBModul2 = 'HTML WEB Module%sA Web datamodule for producing strict '
 | 
						|
    +'HTML.';
 | 
						|
  rsApacheModule = 'Apache Module';
 | 
						|
  rsApacheModule2 = 'Apache module%sAn Apache loadable module in Free Pascal '
 | 
						|
    +'using webmodules. The main library file is automatically maintained by '
 | 
						|
    +'Lazarus.';
 | 
						|
  rsCustomFastCG = 'Custom FastCGI Application';
 | 
						|
  rsCustomFastCG2 = 'Custom FastCGI Application%sA FastCGI (Common Gateway '
 | 
						|
    +'Interface) program in Free Pascal. The program source is automatically '
 | 
						|
    +'maintained by Lazarus.';
 | 
						|
  rsFastCGIAppli = 'FastCGI Application';
 | 
						|
  rsFastCGIAppli2 = 'FastCGI Application%sA FastCGI (Common Gateway '
 | 
						|
    +'Interface) program in Free Pascal using webmodules. The program source '
 | 
						|
    +'is automatically maintained by Lazarus.';
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
uses LazarusPackageIntf,FormEditingIntf, PropEdits, DBPropEdits;
 | 
						|
 | 
						|
Const
 | 
						|
  fpWebTab = 'fpWeb';
 | 
						|
 | 
						|
Procedure RegisterHTMLComponents;
 | 
						|
begin
 | 
						|
  RegisterComponents(fpWebTab,[THTMLDatasetContentProducer,
 | 
						|
                               THTMLSelectProducer,
 | 
						|
                               THTMLDatasetSelectProducer,
 | 
						|
                               THTMLEntityProducer,
 | 
						|
                               THTMLPageProducer
 | 
						|
                               ])
 | 
						|
 | 
						|
end;
 | 
						|
 | 
						|
Procedure RegisterDatasetComponents;
 | 
						|
 | 
						|
begin
 | 
						|
  RegisterComponents(fpWebTab,[THTMLDataSetFormShowProducer,
 | 
						|
                               THTMLDataSetFormEditProducer,
 | 
						|
                               THTMLDataSetFormGridProducer]);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
Procedure RegisterComponents;
 | 
						|
 | 
						|
begin
 | 
						|
  RegisterUnit('fphtml',@RegisterHTMLComponents);
 | 
						|
  RegisterUnit('fpdatasetform',@RegisterdatasetComponents);
 | 
						|
end;
 | 
						|
 | 
						|
procedure Register;
 | 
						|
begin
 | 
						|
  RegisterComponents;
 | 
						|
  FileDescriptorWebModule:=TFileDescWebDataModule.Create;
 | 
						|
  RegisterProjectFileDescriptor(FileDescriptorWebModule);
 | 
						|
  ProjectDescriptorCGIApplication:=TCGIApplicationDescriptor.Create;
 | 
						|
  RegisterProjectDescriptor(ProjectDescriptorCGIApplication);
 | 
						|
  FileDescriptorHTMLModule:=TFileDescHTMLModule.Create;
 | 
						|
  RegisterProjectFileDescriptor(FileDescriptorHTMLModule);
 | 
						|
  ProjectDescriptorCustomCGIApplication:=TCustomCGIApplicationDescriptor.Create;
 | 
						|
  RegisterProjectDescriptor(ProjectDescriptorCustomCGIApplication);
 | 
						|
  ProjectDescriptorApacheApplication:=TApacheApplicationDescriptor.Create;
 | 
						|
  RegisterProjectDescriptor(ProjectDescriptorApacheApplication);
 | 
						|
{$IFDEF HasFastCGISupport}
 | 
						|
  ProjectDescriptorFCGIApplication:=TFCGIApplicationDescriptor.Create;
 | 
						|
  RegisterProjectDescriptor(ProjectDescriptorFCGIApplication);
 | 
						|
  ProjectDescriptorCustomFCGIApplication:=TCustomFCGIApplicationDescriptor.Create;
 | 
						|
  RegisterProjectDescriptor(ProjectDescriptorCustomFCGIApplication);
 | 
						|
{$ENDIF HasFastCGISupport}
 | 
						|
  FormEditingHook.RegisterDesignerBaseClass(TFPWebModule);
 | 
						|
  FormEditingHook.RegisterDesignerBaseClass(TFPHTMLModule);
 | 
						|
 | 
						|
  RegisterPropertyEditor(TypeInfo(string), THTMLDatasetSelectProducer, 'ItemField', TFieldProperty);
 | 
						|
  RegisterPropertyEditor(TypeInfo(string), THTMLDatasetSelectProducer, 'ValueField', TFieldProperty);
 | 
						|
end;
 | 
						|
 | 
						|
{ TCGIApplicationDescriptor }
 | 
						|
 | 
						|
constructor TCGIApplicationDescriptor.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='CGI Application';
 | 
						|
end;
 | 
						|
 | 
						|
function TCGIApplicationDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsCGIApplicati;
 | 
						|
end;
 | 
						|
 | 
						|
function TCGIApplicationDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsCGIApplicati2, [#13#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TCGIApplicationDescriptor.InitProject(AProject: TLazProject): TModalResult;
 | 
						|
var
 | 
						|
  le: string;
 | 
						|
  NewSource: String;
 | 
						|
  MainFile: TLazProjectFile;
 | 
						|
begin
 | 
						|
  inherited InitProject(AProject);
 | 
						|
 | 
						|
  MainFile:=AProject.CreateProjectFile('cgiproject1.lpr');
 | 
						|
  MainFile.IsPartOfProject:=true;
 | 
						|
  AProject.AddFile(MainFile,false);
 | 
						|
  AProject.MainFileID:=0;
 | 
						|
 | 
						|
  // create program source
 | 
						|
  le:=LineEnding;
 | 
						|
  NewSource:='program cgiproject1;'+le
 | 
						|
    +le
 | 
						|
    +'{$mode objfpc}{$H+}'+le
 | 
						|
    +le
 | 
						|
    +'uses'+le
 | 
						|
    +'  fpCGI;'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  Application.Title:=''cgiproject1'';'+le
 | 
						|
    +'  Application.Initialize;'+le
 | 
						|
    +'  Application.Run;'+le
 | 
						|
    +'end.'+le
 | 
						|
    +le;
 | 
						|
  AProject.MainFile.SetSourceText(NewSource);
 | 
						|
 | 
						|
  // add
 | 
						|
  AProject.AddPackageDependency('WebLaz');
 | 
						|
 | 
						|
  // compiler options
 | 
						|
  AProject.LazCompilerOptions.Win32GraphicApp:=false;
 | 
						|
  AProject.Flags := AProject.Flags - [pfMainUnitHasCreateFormStatements];
 | 
						|
  AProject.Flags := AProject.Flags - [pfRunnable];
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
function TCGIApplicationDescriptor.CreateStartFiles(AProject: TLazProject): TModalResult;
 | 
						|
begin
 | 
						|
  LazarusIDE.DoNewEditorFile(FileDescriptorWebModule,'','',
 | 
						|
                         [nfIsPartOfProject,nfOpenInEditor,nfCreateDefaultSrc]);
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
{ TCustomCGIApplicationDescriptor }
 | 
						|
 | 
						|
constructor TCustomCGIApplicationDescriptor.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='Custom CGI Application';
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomCGIApplicationDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsCustomCGIApp;
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomCGIApplicationDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsCustomCGIApp2, [#13#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomCGIApplicationDescriptor.InitProject(AProject: TLazProject): TModalResult;
 | 
						|
var
 | 
						|
  le: string;
 | 
						|
  NewSource: String;
 | 
						|
  MainFile: TLazProjectFile;
 | 
						|
begin
 | 
						|
  inherited InitProject(AProject);
 | 
						|
 | 
						|
  MainFile:=AProject.CreateProjectFile('cgiproject1.lpr');
 | 
						|
  MainFile.IsPartOfProject:=true;
 | 
						|
  AProject.AddFile(MainFile,false);
 | 
						|
  AProject.MainFileID:=0;
 | 
						|
 | 
						|
  // create program source
 | 
						|
  le:=LineEnding;
 | 
						|
  NewSource:='program cgiproject1;'+le
 | 
						|
    +le
 | 
						|
    +'{$mode objfpc}{$H+}'+le
 | 
						|
    +le
 | 
						|
    +'uses'+le
 | 
						|
    +'  Classes, SysUtils, httpDefs, fpweb,'
 | 
						|
{$ifndef VER2_4}
 | 
						|
    +' custweb, custcgi;'+le
 | 
						|
{$else}
 | 
						|
    +' custcgi;'+le
 | 
						|
{$endif}
 | 
						|
    +le
 | 
						|
    +'Type'+le
 | 
						|
{$ifndef VER2_4}
 | 
						|
    +'  TMyCGIHandler = Class(TCgiHandler)'+le
 | 
						|
    +'  Public'+le
 | 
						|
    +'    Procedure HandleRequest(ARequest : Trequest; AResponse : TResponse); override;'+le
 | 
						|
    +'  end;'+le
 | 
						|
    +le+le
 | 
						|
    +'  TMyCGIApp = Class(TCustomCGIApplication)'+le
 | 
						|
    +'  Protected'+le
 | 
						|
    +'   function InitializeWebHandler: TWebHandler; override;'+le
 | 
						|
    +'  end;'+le
 | 
						|
    +le+le
 | 
						|
    +'Procedure TMyCGIHandler.HandleRequest(ARequest : Trequest; AResponse : TResponse);'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  // Your code here'+le
 | 
						|
    +'end;'+le
 | 
						|
    +le+le
 | 
						|
    +'Function TMyCGIApp.InitializeWebHandler: TWebHandler; '+le
 | 
						|
    +'begin'+le
 | 
						|
    +'  Result:=TMyCgiHandler.Create(self);'+le
 | 
						|
    +'end;'+le
 | 
						|
{$else VER2_4}
 | 
						|
    +'  TMyCGIApp = Class(TCustomCGIApplication)'+le
 | 
						|
    +'  Protected'+le
 | 
						|
    +'    Procedure HandleRequest(ARequest : Trequest; AResponse : TResponse); override;'+le
 | 
						|
    +'  end;'+le
 | 
						|
    +le+le
 | 
						|
    +'Procedure TMyCGIApp.HandleRequest(ARequest : Trequest; AResponse : TResponse);'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  // Your code here'+le
 | 
						|
    +'end;'+le
 | 
						|
{$endif VER2_4}
 | 
						|
    +le+le
 | 
						|
    +'begin'+le
 | 
						|
    +'  With TMyCGIApp.Create(Nil) do'+le
 | 
						|
    +'    try'+le
 | 
						|
    +'      Initialize;'+le
 | 
						|
    +'      Run;'+le
 | 
						|
    +'    finally'+le
 | 
						|
    +'      Free;'+le
 | 
						|
    +'    end;'+le
 | 
						|
    +'end.'+le;
 | 
						|
  AProject.MainFile.SetSourceText(NewSource);
 | 
						|
 | 
						|
  // add
 | 
						|
  AProject.AddPackageDependency('FCL');
 | 
						|
  AProject.AddPackageDependency('WebLaz');
 | 
						|
  // compiler options
 | 
						|
  AProject.LazCompilerOptions.Win32GraphicApp:=false;
 | 
						|
  AProject.Flags := AProject.Flags - [pfMainUnitHasCreateFormStatements];
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomCGIApplicationDescriptor.CreateStartFiles(AProject: TLazProject): TModalResult;
 | 
						|
begin
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
{ TFileDescWebDataModule }
 | 
						|
 | 
						|
constructor TFileDescWebDataModule.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='Web Module';
 | 
						|
  ResourceClass:=TFPWebModule;
 | 
						|
  UseCreateFormStatements:=true;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebDataModule.GetInterfaceUsesSection: string;
 | 
						|
begin
 | 
						|
  Result:='SysUtils, Classes';
 | 
						|
  if GetResourceType = rtLRS then
 | 
						|
    Result :=  Result+ ', LResources, ';
 | 
						|
  Result:=Result+',httpdefs, fpHTTP,fpWeb';
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebDataModule.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsWebModule;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebDataModule.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsWEBModuleADa, [#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebDataModule.GetImplementationSource(const Filename, SourceName, ResourceName: string): string;
 | 
						|
 | 
						|
begin
 | 
						|
  Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
 | 
						|
  if GetResourceType = rtRes then
 | 
						|
    Result:=Result+'initialization'+LineEnding;
 | 
						|
  Result:=Result+'  RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding;
 | 
						|
end;
 | 
						|
 | 
						|
{ TFileDescHTMLModule }
 | 
						|
 | 
						|
constructor TFileDescHTMLModule.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='HTML Module';
 | 
						|
  ResourceClass:=TFPHTMLModule;
 | 
						|
  UseCreateFormStatements:=true;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescHTMLModule.GetInterfaceUsesSection: string;
 | 
						|
begin
 | 
						|
  Result:='SysUtils, Classes ';
 | 
						|
  if (GetResourceType = rtLRS) then
 | 
						|
    Result :=  Result+ ', LResources, ';
 | 
						|
  Result:=Result+',HTTPDefs,websession,fpHTTP,htmlwriter,htmlelements,fphtml';
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescHTMLModule.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsHTMLWebModul;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescHTMLModule.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsHTMLWEBModul2, [#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescHTMLModule.GetImplementationSource(const Filename, SourceName, ResourceName: string): string;
 | 
						|
 | 
						|
begin
 | 
						|
  Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
 | 
						|
  if GetResourceType = rtRes then
 | 
						|
    Result:=Result+'initialization'+LineEnding;
 | 
						|
  Result:=Result+'  RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding;
 | 
						|
end;
 | 
						|
 | 
						|
{ TApacheApplicationDescriptor }
 | 
						|
 | 
						|
constructor TApacheApplicationDescriptor.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='Apache Module';
 | 
						|
end;
 | 
						|
 | 
						|
function TApacheApplicationDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsApacheModule;
 | 
						|
end;
 | 
						|
 | 
						|
function TApacheApplicationDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsApacheModule2, [#13#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TApacheApplicationDescriptor.InitProject(AProject: TLazProject): TModalResult;
 | 
						|
var
 | 
						|
  le: string;
 | 
						|
  NewSource: String;
 | 
						|
  MainFile: TLazProjectFile;
 | 
						|
begin
 | 
						|
  inherited InitProject(AProject);
 | 
						|
 | 
						|
  MainFile:=AProject.CreateProjectFile('mod_apache1.lpr');
 | 
						|
  MainFile.IsPartOfProject:=true;
 | 
						|
  AProject.AddFile(MainFile,false);
 | 
						|
  AProject.MainFileID:=0;
 | 
						|
 | 
						|
  // create program source
 | 
						|
  le:=LineEnding;
 | 
						|
  NewSource:='Library mod_apache1;'+le
 | 
						|
    +le
 | 
						|
    +'{$mode objfpc}{$H+}'+le
 | 
						|
    +le
 | 
						|
    +'Uses'+le
 | 
						|
    +'{$ifdef unix}'+le
 | 
						|
    +'  cthreads,'+le
 | 
						|
    +'{$endif}'+le
 | 
						|
    +'  httpd,fpApache;'+le
 | 
						|
    +le
 | 
						|
    +'Const'+le
 | 
						|
    +le
 | 
						|
    +'{ The following constant is used to export the module record. It must '+le
 | 
						|
    +'  always match the name in the LoadModule statement in the apache'+le
 | 
						|
    +'  configuration file(s). It is case sensitive !}'+le
 | 
						|
    +'  ModuleName=''mod_apache1'';'+le
 | 
						|
    +le
 | 
						|
    +'{ The following constant is used to determine whether the module will'+le
 | 
						|
    +'  handle a request. It should match the name in the SetHandler statement'+le
 | 
						|
    +'  in the apache configuration file(s). It is not case sensitive. }'+le
 | 
						|
    +le
 | 
						|
    +'  HandlerName=ModuleName;'+le
 | 
						|
    +le
 | 
						|
    +'Var'+le
 | 
						|
    +'  DefaultModule : module; {$ifdef unix} public name ModuleName;{$endif unix}'+le
 | 
						|
    +le
 | 
						|
    +'Exports defaultmodule name ModuleName;'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  Application.Title:=''mod_apache1'';'+le
 | 
						|
    +'  Application.ModuleName:=ModuleName;'+le
 | 
						|
    +'  Application.HandlerName:=HandlerName;'+le
 | 
						|
    +'  Application.SetModuleRecord(DefaultModule);'+le
 | 
						|
    +'  Application.Initialize;'+le
 | 
						|
    +'end.'+le
 | 
						|
    +le;
 | 
						|
  AProject.MainFile.SetSourceText(NewSource);
 | 
						|
 | 
						|
  // add
 | 
						|
  AProject.AddPackageDependency('WebLaz');
 | 
						|
 | 
						|
  // compiler options
 | 
						|
  AProject.LazCompilerOptions.Win32GraphicApp:=false;
 | 
						|
  AProject.ExecutableType:=petLibrary;
 | 
						|
  AProject.Flags := AProject.Flags - [pfMainUnitHasCreateFormStatements];
 | 
						|
  AProject.Flags := AProject.Flags - [pfRunnable];
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
function TApacheApplicationDescriptor.CreateStartFiles(AProject: TLazProject): TModalResult;
 | 
						|
begin
 | 
						|
  LazarusIDE.DoNewEditorFile(FileDescriptorWebModule,'','',
 | 
						|
                         [nfIsPartOfProject,nfOpenInEditor,nfCreateDefaultSrc]);
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
{$IFDEF HasFastCGISupport}
 | 
						|
 | 
						|
{ TCustomFCGIApplicationDescriptor }
 | 
						|
 | 
						|
constructor TCustomFCGIApplicationDescriptor.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='Custom FastCGI Application';
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomFCGIApplicationDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsCustomFastCG;
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomFCGIApplicationDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsCustomFastCG2, [#13#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomFCGIApplicationDescriptor.InitProject(AProject: TLazProject
 | 
						|
  ): TModalResult;
 | 
						|
var
 | 
						|
  le: string;
 | 
						|
  NewSource: String;
 | 
						|
  MainFile: TLazProjectFile;
 | 
						|
begin
 | 
						|
  inherited InitProject(AProject);
 | 
						|
 | 
						|
  MainFile:=AProject.CreateProjectFile('fcgiproject1.lpr');
 | 
						|
  MainFile.IsPartOfProject:=true;
 | 
						|
  AProject.AddFile(MainFile,false);
 | 
						|
  AProject.MainFileID:=0;
 | 
						|
 | 
						|
  // create program source
 | 
						|
  le:=LineEnding;
 | 
						|
  NewSource:='program fcgiproject1;'+le
 | 
						|
    +le
 | 
						|
    +'{$mode objfpc}{$H+}'+le
 | 
						|
    +le
 | 
						|
    +'uses'+le
 | 
						|
    +'  Classes,SysUtils,httpDefs,custfcgi;'+le
 | 
						|
    +le
 | 
						|
    +'Type'+le
 | 
						|
    +'  TFCGIApp = Class(TCustomFCGIApplication)'+le
 | 
						|
    +'  Public'+le
 | 
						|
    +'    Procedure HandleRequest(ARequest : Trequest; AResponse : TResponse); override;'+le
 | 
						|
    +'  end;'+le
 | 
						|
    +le
 | 
						|
    +'Procedure TFCGIApp.HandleRequest(ARequest : Trequest; AResponse : TResponse);'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  // Your code here'+le
 | 
						|
    +'end;'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  With TFCGIApp.Create(Nil) do'+le
 | 
						|
    +'    try'+le
 | 
						|
    +'      Initialize;'+le
 | 
						|
    +'      Run;'+le
 | 
						|
    +'    finally'+le
 | 
						|
    +'      Free;'+le
 | 
						|
    +'    end;'+le
 | 
						|
    +'end.'+le;
 | 
						|
  AProject.MainFile.SetSourceText(NewSource);
 | 
						|
 | 
						|
  // add
 | 
						|
  AProject.AddPackageDependency('FCL');
 | 
						|
  AProject.AddPackageDependency('WebLaz');
 | 
						|
  // compiler options
 | 
						|
  AProject.LazCompilerOptions.Win32GraphicApp:=false;
 | 
						|
  AProject.Flags := AProject.Flags - [pfMainUnitHasCreateFormStatements];
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
function TCustomFCGIApplicationDescriptor.CreateStartFiles(AProject: TLazProject
 | 
						|
  ): TModalResult;
 | 
						|
begin
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
{ TFCGIApplicationDescriptor }
 | 
						|
 | 
						|
constructor TFCGIApplicationDescriptor.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='FastCGI Application';
 | 
						|
end;
 | 
						|
 | 
						|
function TFCGIApplicationDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsFastCGIAppli;
 | 
						|
end;
 | 
						|
 | 
						|
function TFCGIApplicationDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsFastCGIAppli2, [#13#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TFCGIApplicationDescriptor.InitProject(AProject: TLazProject
 | 
						|
  ): TModalResult;
 | 
						|
var
 | 
						|
  le: string;
 | 
						|
  NewSource: String;
 | 
						|
  MainFile: TLazProjectFile;
 | 
						|
begin
 | 
						|
  inherited InitProject(AProject);
 | 
						|
 | 
						|
  MainFile:=AProject.CreateProjectFile('fcgiproject1.lpr');
 | 
						|
  MainFile.IsPartOfProject:=true;
 | 
						|
  AProject.AddFile(MainFile,false);
 | 
						|
  AProject.MainFileID:=0;
 | 
						|
 | 
						|
  // create program source
 | 
						|
  le:=LineEnding;
 | 
						|
  NewSource:='program fcgiproject1;'+le
 | 
						|
    +le
 | 
						|
    +'{$mode objfpc}{$H+}'+le
 | 
						|
    +le
 | 
						|
    +'uses'+le
 | 
						|
    +'  fpFCGI;'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le
 | 
						|
    +'  Application.Title:=''fcgiproject1'';'+le
 | 
						|
    +'  Application.Initialize;'+le
 | 
						|
    +'  Application.Run;'+le
 | 
						|
    +'end.'+le
 | 
						|
    +le;
 | 
						|
  AProject.MainFile.SetSourceText(NewSource);
 | 
						|
 | 
						|
  // add
 | 
						|
  AProject.AddPackageDependency('FCL');
 | 
						|
  AProject.AddPackageDependency('WebLaz');
 | 
						|
 | 
						|
  // compiler options
 | 
						|
  AProject.LazCompilerOptions.Win32GraphicApp:=false;
 | 
						|
  AProject.Flags := AProject.Flags - [pfMainUnitHasCreateFormStatements];
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
function TFCGIApplicationDescriptor.CreateStartFiles(AProject: TLazProject
 | 
						|
  ): TModalResult;
 | 
						|
begin
 | 
						|
  LazarusIDE.DoNewEditorFile(FileDescriptorWebModule,'','',
 | 
						|
                         [nfIsPartOfProject,nfOpenInEditor,nfCreateDefaultSrc]);
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
{$ENDIF HasFastCGISupport}
 | 
						|
 | 
						|
end.
 | 
						|
 |