Ms PHP Generator

Download as pdf or txt
Download as pdf or txt
You are on page 1of 257

MS SQL PHP Generator

User's guide

Copyright © 2002-2017 SQL Maestro Group


I MS SQL PHP Generator Help

Table of Contents
Foreword 0

I Welcome to MS SQL PHP Generator 1


1 System...................................................................................................................................
Requirements 2
2 Installation
................................................................................................................................... 3
3 How can
...................................................................................................................................
I purchase MS SQL PHP Generator? 4
4 License...................................................................................................................................
Agreement 5
5 About SQL
...................................................................................................................................
Maestro Group 7
6 What's...................................................................................................................................
new 10

II Getting started 11
1 How to...................................................................................................................................
connect to Microsoft SQL 12
2 Projects
................................................................................................................................... 14
3 Command
...................................................................................................................................
line options 15
4 Report...................................................................................................................................
sending 16
5 Shortcut
...................................................................................................................................
keys 17
6 Deployment
................................................................................................................................... 18

III Configuring datasources 19


1 Tables...................................................................................................................................
and views 21
2 Custom
...................................................................................................................................
SQL queries 22

IV Customizing webpages 24
1 Page Editor
................................................................................................................................... 27
Columns .......................................................................................................................................................... 27
Setting a lookup
......................................................................................................................................................... 29
View controls......................................................................................................................................................... 34
Text ......................................................................................................................................... 36
DateTime ......................................................................................................................................... 38
Image ......................................................................................................................................... 38
File download ......................................................................................................................................... 39
Checkbox ......................................................................................................................................... 40
External file, audio .........................................................................................................................................
file and image 41
Embedded video ......................................................................................................................................... 42
Edit controls......................................................................................................................................................... 43
Text ......................................................................................................................................... 46
Combo box ......................................................................................................................................... 48
Radio group ......................................................................................................................................... 50
Autocomplete editor ......................................................................................................................................... 52
Multi-level autocomplete .........................................................................................................................................
editor 53
Check box ......................................................................................................................................... 59
Check box group......................................................................................................................................... 60
Multiple select ......................................................................................................................................... 61

© 2017 SQL Maestro Group


Contents II

DateTime ......................................................................................................................................... 61
Time ......................................................................................................................................... 62
Spin edit ......................................................................................................................................... 63
Range edit ......................................................................................................................................... 64
Color edit ......................................................................................................................................... 65
Mask edit ......................................................................................................................................... 66
Text area ......................................................................................................................................... 67
Html Wysiwyg ......................................................................................................................................... 68
Password ......................................................................................................................................... 70
File upload ......................................................................................................................................... 70
Image upload ......................................................................................................................................... 71
Upload file to folder ......................................................................................................................................... 73
Upload image to folder ......................................................................................................................................... 74
String templates.......................................................................................................................................................... 76
Master-Detail ..........................................................................................................................................................
Presentations 76
Events .......................................................................................................................................................... 81
Application-level
.........................................................................................................................................................
(global) Events 82
OnBeforePageExecute ......................................................................................................................................... 83
OnAfterLogin ......................................................................................................................................... 83
OnPreparePage ......................................................................................................................................... 84
OnCustomHTMLHeader ......................................................................................................................................... 85
OnGetCustomTemplate ......................................................................................................................................... 85
OnBeforeInsertRecord ......................................................................................................................................... 92
OnBeforeUpdateRecord ......................................................................................................................................... 92
OnBeforeDeleteRecord ......................................................................................................................................... 93
OnAfterInsertRecord ......................................................................................................................................... 93
OnAfterUpdateRecord ......................................................................................................................................... 94
OnAfterDeleteRecord ......................................................................................................................................... 95
OnGetFieldValue ......................................................................................................................................... 96
OnGetCustomExportOptions......................................................................................................................................... 96
OnCustomizePageList ......................................................................................................................................... 97
OnGetCustomPagePermissions
......................................................................................................................................... 97
Client Side.........................................................................................................................................................
Page Events 98
OnBeforePageLoad ......................................................................................................................................... 99
OnAfterPageLoad......................................................................................................................................... 99
OnInsertFormValidate ......................................................................................................................................... 99
OnEditFormValidate ......................................................................................................................................... 100
OnInsertFormEditorValueChanged
......................................................................................................................................... 101
OnEditFormEditorValueChanged
......................................................................................................................................... 103
OnInsertFormLoaded ......................................................................................................................................... 105
OnEditFormLoaded ......................................................................................................................................... 106
Server Side
.........................................................................................................................................................
Page Events 107
OnBeforePageExecute ......................................................................................................................................... 108
OnPreparePage......................................................................................................................................... 108
OnPageLoaded ......................................................................................................................................... 109
OnCustomRenderColumn ......................................................................................................................................... 110
OnCustomRenderPrintColumn
......................................................................................................................................... 113
OnCustomRenderExportColumn
......................................................................................................................................... 113
OnCustomHTMLHeader ......................................................................................................................................... 114
OnExtendedCustomDrawRow
......................................................................................................................................... 114
OnCustomRenderTotals ......................................................................................................................................... 117
OnGetCustomTemplate ......................................................................................................................................... 118
OnCustomDrawRow ......................................................................................................................................... 125
OnAfterInsertRecord ......................................................................................................................................... 126

© 2017 SQL Maestro Group

II
III MS SQL PHP Generator Help

OnAfterUpdateRecord ......................................................................................................................................... 127


OnAfterDeleteRecord ......................................................................................................................................... 127
OnBeforeInsertRecord ......................................................................................................................................... 128
OnBeforeUpdateRecord ......................................................................................................................................... 129
OnBeforeDeleteRecord ......................................................................................................................................... 129
OnGetFieldValue......................................................................................................................................... 130
OnGetCustomExportOptions
......................................................................................................................................... 130
OnPrepareFilterBuilder ......................................................................................................................................... 131
OnPrepareColumnFilter ......................................................................................................................................... 132
OnGetCustomFormLayout ......................................................................................................................................... 133
OnGetCustomColumnGroup ......................................................................................................................................... 134
OnCustomCompareValues ......................................................................................................................................... 135
OnGetCustomUploadFileName
......................................................................................................................................... 136
OnGetCustomPagePermissions
......................................................................................................................................... 136
OnGetCustomRecordPermissions
......................................................................................................................................... 137
Filter .......................................................................................................................................................... 139
Charts .......................................................................................................................................................... 139
Data Query ......................................................................................................................................................... 140
Common options
......................................................................................................................................................... 141
Advanced.........................................................................................................................................................
options 142
Page Properties.......................................................................................................................................................... 143
Common .........................................................................................................................................................
properties 144
RSS options......................................................................................................................................................... 148
Abilities ......................................................................................................................................................... 151
Data Partitioning
.......................................................................................................................................................... 151
Data Validation.......................................................................................................................................................... 155
2 Project
...................................................................................................................................
Options 157
Shared options
.......................................................................................................................................................... 158

V Webpages appearance 161


1 Color...................................................................................................................................
schemes 164
2 Header
...................................................................................................................................
and Footer 165
3 User-defined
...................................................................................................................................
styles 166
4 User ...................................................................................................................................
JavaScript 168
5 Using...................................................................................................................................
templates 169

VI Security settings 171


1 Hard-coded
...................................................................................................................................
authorization 173
2 Table-based
...................................................................................................................................
authorization 175
3 Database
...................................................................................................................................
server authorization 177
4 User-defined
...................................................................................................................................
authorization 178
5 Permission
...................................................................................................................................
manager 179
6 Record-level
...................................................................................................................................
security 183

VII Interface language 184

VIII Common generation options 186

© 2017 SQL Maestro Group


Contents IV

IX Developer Reference 188


1 Client...................................................................................................................................
Side API 189
All editors .......................................................................................................................................................... 189
getValue ......................................................................................................................................................... 189
setValue ......................................................................................................................................................... 191
getEnabled ......................................................................................................................................................... 193
setEnabled ......................................................................................................................................................... 193
getReadonly......................................................................................................................................................... 195
setReadonly......................................................................................................................................................... 195
getVisible......................................................................................................................................................... 195
setVisible......................................................................................................................................................... 196
getRequired......................................................................................................................................................... 196
setRequired......................................................................................................................................................... 196
getState ......................................................................................................................................................... 196
setState ......................................................................................................................................................... 197
setHint ......................................................................................................................................................... 197
getFieldName
......................................................................................................................................................... 197
Text editor .......................................................................................................................................................... 199
getPlaceholder
......................................................................................................................................................... 199
setPlaceholder
......................................................................................................................................................... 199
Text area .......................................................................................................................................................... 200
getPlaceholder
......................................................................................................................................................... 200
setPlaceholder
......................................................................................................................................................... 200
Combobox .......................................................................................................................................................... 201
addItem ......................................................................................................................................................... 201
removeItem ......................................................................................................................................................... 203
getItemCount
......................................................................................................................................................... 205
getCaption ......................................................................................................................................................... 205
clear ......................................................................................................................................................... 205
Radio group .......................................................................................................................................................... 206
addItem ......................................................................................................................................................... 206
removeItem ......................................................................................................................................................... 207
getItemCount
......................................................................................................................................................... 209
getCaption ......................................................................................................................................................... 209
clear ......................................................................................................................................................... 209
Checkbox group ..........................................................................................................................................................
and Multiple select 210
addItem ......................................................................................................................................................... 210
removeItem ......................................................................................................................................................... 211
getItemCount
......................................................................................................................................................... 212
clear ......................................................................................................................................................... 213
2 Server
...................................................................................................................................
Side API 215
class Page .......................................................................................................................................................... 215
GetEnvVar......................................................................................................................................................... 215
GetConnection
......................................................................................................................................................... 215
class Application
.......................................................................................................................................................... 216
IsGETValueSet
......................................................................................................................................................... 216
GetGETValue
......................................................................................................................................................... 216
IsPOSTValueSet
......................................................................................................................................................... 217
GetPOSTValue
......................................................................................................................................................... 217
IsLoggedInAsAdmin
......................................................................................................................................................... 217
class EngConnection
.......................................................................................................................................................... 217
ExecScalarSQL
......................................................................................................................................................... 218

© 2017 SQL Maestro Group

IV
V MS SQL PHP Generator Help

ExecSQL......................................................................................................................................................... 218
ExecQueryToArray
......................................................................................................................................................... 218
class PermissionSet
.......................................................................................................................................................... 218
Global functions
.......................................................................................................................................................... 219
GetApplication
......................................................................................................................................................... 219
3 Style...................................................................................................................................
sheets internals 220

X Options 221
1 Application
................................................................................................................................... 222
Page .......................................................................................................................................................... 222
Export ......................................................................................................................................................... 225
Abilities ......................................................................................................................................................... 227
Generation rules
.......................................................................................................................................................... 228
Display formats
.......................................................................................................................................................... 229
Output .......................................................................................................................................................... 230
Confirmations .......................................................................................................................................................... 231
2 Editors
...................................................................................................................................
& Viewers 232
General .......................................................................................................................................................... 232
Display .......................................................................................................................................................... 233
SQL highlight.......................................................................................................................................................... 234
XML highlight
.......................................................................................................................................................... 235
PHP highlight.......................................................................................................................................................... 236
Code Insight.......................................................................................................................................................... 237
Code Folding.......................................................................................................................................................... 238
3 Appearance
................................................................................................................................... 240
Bars and menus
.......................................................................................................................................................... 240
Trees and lists
.......................................................................................................................................................... 241
Edit controls.......................................................................................................................................................... 242
Check boxes.......................................................................................................................................................... 243
Buttons .......................................................................................................................................................... 244
Page controls.......................................................................................................................................................... 245
Group boxes.......................................................................................................................................................... 246
Splitters .......................................................................................................................................................... 247

Index 249

© 2017 SQL Maestro Group


Welcome to MS SQL PHP Generator 1

1 Welcome to MS SQL PHP Generator


MS SQL PHP Generator is a tool for creating database-driven web applications visually.
It allows you to generate professional quality PHP-based frontends for your Microsoft
SQL databases in a few minutes. You needn't have any programming background to use
it.

Key features:

· 100% responsive design based on professional-quality page templates


· Support for updatable SQL queries 22

· Master-detail presentations 76

· Out-of-the-box Charts 139

· 25 color themes
· Event-driven content management 81

· Client-side data validation


· Custom pagination (display partitioning) 151

· Data export to PDF, XML, CVS, Excel and Word


· Support for hard-coded, table-based, database server and custom user
authentication 171

· Record-level security 183

· Flexible appearance customization 161

· Multi-language support 184

· and much more.

Almost all features provided by MS SQL PHP Generator can be seen in action in our
Feature Demo, Security Demo, and other demo applications. We would highly recommend
you to take a look at them as this can save you hours of work when developing your
own websites.

© 2017 SQL Maestro Group


2 MS SQL PHP Generator Help

1.1 System Requirements


Client environment
· Pentium PC or higher;
· Windows NT4/2000/XP/Vista/Windows 7/Windows 8/Windows 10;
· 512 MB RAM (1 GB recommended);
· 25 MB of free hard disk space;
· SVGA-compatible video adapter;
· Internet Explorer 9 or higher (to display the Preview page correctly);
· Microsoft .NET Framework 4.0 or higher (to compile styles).

Server environment

· Microsoft SQL server versions up to SQL Server 2014;


· Linux/Unix or Windows Web Server;
· PHP 5.1 or higher. PHP 7.0 is supported too.

© 2017 SQL Maestro Group


Welcome to MS SQL PHP Generator 3

1.2 Installation
To install MS SQL PHP Generator on your PC:

· download the MS SQL PHP Generator distribution package from the download page at
our site;
· run setup.exe from the local folder and follow the instructions of the installation
wizard;
· find the MS SQL PHP Generator shortcut in the corresponding program group of the
Windows Start menu after the installation is completed.

© 2017 SQL Maestro Group


4 MS SQL PHP Generator Help

1.3 How can I purchase MS SQL PHP Generator?


Thank you for your interest in purchasing MS SQL PHP Generator Professional!

You can select licensing options and register MS SQL PHP Generator at its on-line order
page. It is possible to purchase on-line, by fax, mail, toll-free phone call, or place a
purchase order. We send the software activation key by email within 24 hours after
completion of the order process. If you have not received the activation key within this
period, please contact our sales department.

All our products and bundles are shipped with 12 months of free upgrades (minor and
major ones) or with 36 months of free upgrades for a quite small additional fee. After this
period you may renew your license for the next 12(36) months with a 50% discount.

MS SQL PHP Generator has a free 30-day trial. Upon purchasing the product you confirm
that you have tested it and you are completely satisfied with its current version.

To obtain technical support, please visit the appropriate section on our website or
contact us by email to [email protected].

© 2017 SQL Maestro Group


Welcome to MS SQL PHP Generator 5

1.4 License Agreement


Notice to users: carefully read the following legal agreement. The use of the software
provided with this agreement (the "SOFTWARE") constitutes your acceptance of these
terms. If you do not agree to the terms of this agreement, do not install and/or use this
software. The use of this software is conditioned upon the user's compliance with the
terms of this agreement.

· License grant. SQL Maestro Group grants you a license to use one copy of the
version of this SOFTWARE on any single hardware product for as many licenses as you
purchase. "You" means a company, an entity or an individual. "Use" means storing,
loading, installing, executing or displaying the SOFTWARE. You may not modify the
SOFTWARE or disable any licensing or control features of the SOFTWARE except as an
intended part of the SOFTWARE's programming features. This license is not
transferable to any other company, entity or individual. You may not publish any
registration information (serial numbers, registration keys, etc.) or pass it to any other
company, entity or individual.

· Ownership. The SOFTWARE is owned and copyrighted by SQL Maestro Group. Your
license confers no title or ownership of the SOFTWARE and should not be construed as
a sale of any rights for the SOFTWARE.

· Copyright. The SOFTWARE is protected by the United States copyright law and
international treaty provisions. You acknowledge that no title to the intellectual
property in the SOFTWARE is transferred to you. You further acknowledge that title
and full ownership rights to the SOFTWARE will remain the exclusive property of SQL
Maestro Group and you will not acquire any rights to the SOFTWARE except as
expressly set forth in this license. You agree that any copies of the SOFTWARE will
contain the same proprietary notices which appear on and in the SOFTWARE.

· License and distribution. An unregistered copy of the SOFTWARE ("UNREGISTERED


SOFTWARE") may be used for evaluation purposes. The UNREGISTERED SOFTWARE
may be freely copied and distributed to other users for their evaluation. If you offer
this UNREGISTERED SOFTWARE installation package for download, then you agree to:

· replace existing version of the UNREGISTERED SOFTWARE installation package with the
new package immediately after a new version of the SOFTWARE is released by SQL
Maestro Group, or
· delete an obsolete version of the UNREGISTERED SOFTWARE installation package
immediately upon written email notice by SQL Maestro Group.

A registered copy of the SOFTWARE ("REGISTERED SOFTWARE") allows you to use the
SOFTWARE only on a single computer and only by a single user at a time. If you wish to
use the SOFTWARE for more than one user, you will need a separate license for each
individual user. You are allowed to make one copy of the REGISTERED SOFTWARE for
back-up purposes.

· Reverse engineering. You affirm that you will not attempt to reverse compile,
modify, translate, or disassemble the SOFTWARE in whole or in part.

· Unauthorized use. You may not use, copy, rent, lease, sell, modify, decompile,
disassemble, otherwise reverse engineer, or transfer the SOFTWARE except as
provided in this agreement. Any such unauthorized use shall result in immediate and

© 2017 SQL Maestro Group


6 MS SQL PHP Generator Help

automatic termination of this license.

· No other warranties. SQL Maestro Group does not warrant that the SOFTWARE is
error-free. SQL Maestro Group disclaims all other warranties with respect to the
SOFTWARE, either express or implied, including but not limited to implied warranties of
merchantability, fitness for a particular purpose and noninfringement of third party
rights. Some jurisdictions do not allow the exclusion of implied warranties or limitations
on how long an implied warranty may last, or the exclusion or limitation of incidental or
consequential damages, so the above given limitations or exclusions may not apply to
you. This warranty gives you specific legal rights and you may also have other rights
which vary from jurisdiction to jurisdiction.

· Limited warranty. This SOFTWARE is provided on an "AS IS" basis. SQL Maestro
Group disclaims all warranties relating to this SOFTWARE, whether expressed or
implied, including but not limited to any implied warranties of merchantability or fitness
for a particular purpose. Neither SQL Maestro Group nor anyone else who has been
involved in the creation, production, or delivery of this SOFTWARE shall be liable for
any indirect, consequential, or incidental damages arising out of the use or inability to
use such SOFTWARE, even if SQL Maestro Group has been advised of the possibility of
such damages or claims. The person using the SOFTWARE bears all risk as to the
quality and performance of the SOFTWARE.

Some jurisdictions do not allow limitation or exclusion of incidental or consequential


damages, so the above given limitations or exclusion may not apply to you to the extent
that liability is by law incapable of exclusion or restriction.

· Severability. In the event of invalidity of any provision of this license, the parties
agree that such invalidity shall not affect the validity of the remaining portions of this
license.

· No liability for consequential damages. In no event shall SQL Maestro Group or its
suppliers be liable to you for any consequential, special, incidental or indirect damages
of any kind arising out of the delivery, performance or use of the SOFTWARE, even if
SQL Maestro Group has been advised of the possibility of such damages. In no event
will SQL Maestro Group's liability for any claim, whether in contract, tort or any other
theory of liability, exceed the license fee paid by you, if any.

· Entire agreement. This is the entire agreement between you and SQL Maestro Group
which supersedes any prior agreement or understanding, whether written or oral,
relating to the subject matter of this license.

· Reserved rights. All rights not expressly granted here are reserved to SQL Maestro
Group.

© 2017 SQL Maestro Group


Welcome to MS SQL PHP Generator 7

1.5 About SQL Maestro Group


SQL Maestro Group is a privately-held company producing high-quality software for
database administrators and developers. The united team of eminently qualified
developers is pleased to create new software products for commercial, academic and
government customers worldwide. We do our best to design and develop products that
remove complexity, improve productivity, compress time frames, and increase database
performance and availability. We are glad to realize that our products take usual chores
upon themselves, so that our customers could have more time left for their creative work.

The company was founded in 2002 as an essential partner for every business that is
trying to harness the explosive growth in corporate data. SQL Maestro Group employs an
international team concentrating their efforts on cutting-edge DBA tools development.

The slogan of our company is The Shortest Path to SQL. It is aimed to denote that we
set to create easy-to-use products meant for those who appreciate comfort, friendly
program interface and support when working with SQL servers.

· We are pleased to facilitate your job.

· We aim at being of considerable assistance to our clients.

· We feel contented doing our beloved work.

At present, our company offers a series of Windows GUI admin tools for SQL
management, control and development of the following servers: MySQL, Microsoft SQL
Server, PostgreSQL, Oracle, SQL Anywhere, DB2, SQLite, Firebird, and MaxDB. We
also produce universal tools to be used for administering any database engine accessible
via ODBC driver or OLE DB provider. Such products may be the clear-cut decision for
those who constantly work with several database servers.

SQL Maestro is the premier Windows GUI admin


tool for database development, management, and
control.

It provides you with the ability to perform all the


necessary database operations such as creating,
editing, copying, extracting and dropping database
objects; moreover, you can build queries visually,
execute queries and SQL scripts, view and edit
data including BLOBs, represent data as diagrams,
export and import data to/from most popular file
formats, manage users and their privileges (if
possible), and use a lot of other tools designed for
making your work with your server comfortable and
efficient.

© 2017 SQL Maestro Group


8 MS SQL PHP Generator Help

SQL PHP Generator is a powerful tool for creating


database-driven web applications visually. It allows
you to generate high-quality PHP scripts for
working with tables, views and queries through the
web. You needn't have any programming
background to use it.

SQL Data Wizard is a high-capacity Windows GUI


utility for managing your data.

It provides you with a number of easy-to-use


wizards for performing the required data
manipulation easily and quickly. The tool allows you
to export data from Microsoft SQL tables and
queries to most popular formats, import data into
the tables, generate SQL dump of selected tables,
and export/import BLOB fields from/to files.
SQL Code Factory is a premier GUI tool aimed at
the SQL queries and scripts development.

It allows you to manage SQL queries and scripts


using such useful features as code folding, code
completion and syntax highlighting, build query
visually, execute several queries at a time, execute
scripts from files, view and edit result data with
filtering, sorting and grouping abilities, export data
to as many as 14 file formats including Excel, RTF
and HTML, import data from Excel, CSV, XML and
text files, view and edit BLOBs in various way, build
diagrams based on Oracle data, and much more.
Database Converter is a user friendly tool to
migrate any local or remote ADO-compatible
database to Microsoft SQL.

Such tools transfer database schema and data and


are equipped with native support for the most
popular database servers.

Data Sync is a powerful and easy-to-use tool for


database contents comparison and
synchronization.

Such tools can be useful for database


administrators, developers and testers that need a
quick, easy and reliable way to compare and
synchronize their data.

© 2017 SQL Maestro Group


Welcome to MS SQL PHP Generator 9

The software products are constantly optimized for the latest server versions support.

You can use the following contact information if necessary:

Our web-site www.sqlmaestro.com

Postal address: SQL Maestro Group


140 Broadway, Suite 706
New York City, New York 10005
United States

Thank you for your interest to our company!

© 2017 SQL Maestro Group


10 MS SQL PHP Generator Help

1.6 What's new


Please find out the latest MS SQL PHP Generator news at http://www.sqlmaestro.com/
products/mssql/phpgenerator/news/

© 2017 SQL Maestro Group


Getting started 11

2 Getting started
In general, all you need to create your own feature rich data-driven web application is
to complete the following simple steps (in fact, only first two steps are mandatory):

· Connect to the database 12 you want to work with through the web;
· Specify datasources 19 for web pages;
· Customize web pages 24 to be created;
· Set additional generation options 186 such as webpages appearance 161 and
interface language 184 ;
· Specify security settings 171 to protect your data from an unauthorized access.

MS SQL PHP Generator allows you to save and restore all the options set during a
session. All the session parameters may be saved and loaded to/from a project file.
Loaded settings may be edited if necessary. To run a wizard with a project, follow
More... > Load Project on the first wizard step and enter the name of the project file,
recently used projects are also available from this popup menu. Find out more about
working with Projects 14 .

© 2017 SQL Maestro Group


12 MS SQL PHP Generator Help

2.1 How to connect to Microsoft SQL


Connection properties
Specify the connection parameters for a database you want MS SQL PHP Generator to
work with.

Script connection properties


These parameters will be used by the generated web application. By default they are
the same as parameters used by MS SQL PHP Generator but you can change them if
necessary. For example, if you are working with a remote database located at your web
hosting and your database server and web server are installed on the same computer,
you have to specify the value of the Host parameter as localhost.

MS SQL PHP Generator allows you to connect to Microsoft SQL servers using Windows
and SQL Server authentication modes.

Server
The full name of SQL Server you want to connect to. Can be specified as
computer_name (for default SQL Server instances) or as computer_name\server_name
(for named instances). To connect to an SQL Server running on a non-default port,
specify the value of this field as computer_name,port_number (or computer_name
\server_name, port_number). Press the arrow button to scan for SQL Servers
accessible in your network.

Provider
The application allows you to connect to SQL Server using any of SQL Server clients
installed on your computer. To choose a client you want to use, select the appropriate
item in the Provider combobox. The table below shows the correspondence between the
value selected in this combobox and SQL Server client to be used.

Value SQL Server client


Introduced with
SQLOLE Microsoft OLE DB Provider for SQL Comes with
DB Server (default value) Windows
SQLNCL SQL Server Native Client SQL Server 2005
I
SQLNCL SQL Server 2008 [R2] Native Client SQL Server 2008
I10 [R2]
SQLNCL SQL Server 2012 Native Client SQL Server 2012
I11 (recommended)

We would recommend you to install and use SQL Server 2012 Native Client as it (and
only it) supports SQL Server Express LocalDB. Also it provides the best support for data
types implemented in the recent versions of SQL Server.

Windows Authentication (more preferable)


Microsoft Windows Authentication mode allows a user to connect through a Windows
user account.

SQL Server Authentication

© 2017 SQL Maestro Group


Getting started 13

When a user connects with a specified Login name and Password from a non-trusted
connection, SQL Server performs the authentication itself by checking to see if a SQL
Server login account has been set up and if the specified password matches the one
previously recorded.

© 2017 SQL Maestro Group


14 MS SQL PHP Generator Help

2.2 Projects
MS SQL PHP Generator allows you to save and restore all the options set during a
session. You need not to specify all options each time you work with the application
anew; instead you can load all settings from a project and change them if necessary.

Projects are very useful when working with PHP Generator. If you will close the
application without saving a project, all carefully adjusted settings will be lost. To set
the same options next time, you'll need to repeat the process step by step again while
with a project all the session parameters can be restored in a few mouse clicks.

To create a project, configure datasources and click More > Save Project at any next
step (Ctrl+S) or More > Save Project as... (Ctrl+Shift+S). All the settings you have
made will be saved to a file.

To restore previously saved settings from a project, click More > Load Project at the
first wizard step. Recently used projects are available from the More > Recent Projects
popup menu.

© 2017 SQL Maestro Group


Getting started 15

2.3 Command line options


MS SQL PHP Generator supports a number of command line options that make it possible
to fully automate PHP scripts creation. To generate the command line automatically,
load the project to be used or specify the generation options manually and click More >
Generate command line. The Command Line Builder allows you to save the prepared line
to clipboard or to a batch file.

The MS SQL PHP Generator command line syntax is as follows:


MyPHPGenerator[.exe] [<project_file_name>] [-o|output <output_directory>] [-
g|generate] [-h|help]

MyPHPGenerator[.exe] The MS SQL PHP Generator program file.


<project_file_name> The project 14 with all the task's settings.
<output_directory> A directory where file are generated to.
-g|generate Generate without running the GUI application.
-h|help Show help information.

Examples
The examples below assume that you are entering the command lines in the MS SQL PHP
Generator program directory. Don't forget to enclose all paths and filenames containing
spaces in quotes.

To open the NBA_db.pgtm project in PHP Generator GUI:


myphpgenerator C:\PHPGen\MySQL\NBA_db.pgtm

To generate files without opening PHP Generator GUI:


fbphpgenerator C:\PHPGen\Firebird\online_store.pgtf -g -o C:\xampp\htdocs\myapp

© 2017 SQL Maestro Group


16 MS SQL PHP Generator Help

2.4 Report sending


To send a report to SQL Maestro support team, use the corresponding MS SQL PHP
Generator feature. To invoke the window, click More > Send report... .

Check the corresponding options to include project file, schema, and specified number of
the table records, add the problem description and click Send record to get the prepared
report in your default email client. In case you have no browser installed save the
prepared report to a file with the corresponding option and send it manually to
[email protected] as email attachment.

© 2017 SQL Maestro Group


Getting started 17

2.5 Shortcut keys


The following table describes the default shortcut keys in applications created with MS
SQL PHP Generator.

Add new record Alt+Ctrl+I, Alt+Insert


Save (in input forms) Ctrl+Return
Save and add another record Ctrl+Shift+Return
Previous page Ctrl+Left
Next page Ctrl+Right
Open all details Ctrl+Shift+/
Open Filter Builder Ctrl+Shift+F
Add a new condition in Filter Alt+Ctrl+I, Alt+Insert
Builder

All or any shortcuts may be customized in components/js/pgui.shortcuts.js

© 2017 SQL Maestro Group


18 MS SQL PHP Generator Help

2.6 Deployment
Applications created by PHP Generator use the Smarty library. Smarty is a template
engine for PHP, facilitating the separation of presentation (HTML/CSS) from application
logic. Smarty compiles copies of the templates as PHP scripts. Compilation happens once
when each template is first invoked, and then the compiled versions are used from that
point forward. The compiled templates are stored under the templates_c directory which
must be accessible for writing by Smarty.
To upload a ready web application to your web hosting, you need to have the following
conditions.

1. Allow write access to templates_c


The web server user must have write access to the templates_c directory. The most
secure method is to make this directory owned by this user. The change of ownership is
the easiest way to accomplish this. Only an administrator can execute this operation so
if you can't do that then ask your hosting provider to do it for you. If you can do this,
then it is possible (and recommended) to disallow "other" users read/write access for
optimum security.

2. Deploy generated files


You can upload generated files to your web server manually or using a file
synchronization software. In case of manual deployment there are two possible
scenarios:

· If the new and the live web applications were created by the same version of MS
SQL PHP Generator, just copy to the remote server all .php files from the root
directory of the generated application and the custom_templates folder (if you
customized one or more templates 118 in this project).
· If the new and the live web applications were created by different versions of MS
SQL PHP Generator, copy all files from the output directory to the corresponding
folder of the remote server and then empty the templates_c directory.

We recommend you to use a file synchronization software. Any such tool compares and
synchronizes the output directory and the corresponding folder on your web hosting
quickly and can significantly simplify the deployment process. One thing you have to do
is to exclude the template_c directory from the synchronization process.

© 2017 SQL Maestro Group


Configuring datasources 19

3 Configuring datasources
MS SQL PHP Generator creates webpages aimed at interaction with Microsoft SQL
tables, views, and queries throw the web. Each webpage contains a grid with data of
according datasource supplied with abilities to view, edit, filter, sort, delete, and others.

Adding tables and views


To add a table or a view, open the Select object 21 window with the corresponding
button.

Adding queries
To add a query, type the query text in the Query editor 22 or load it from .sql file with
More > Load query from file... Moreover you can use queries stored a single .qrp file
(query repository). This feature may be extremely useful if you need to share a set of
the same queries between several different projects. To save/load queries to/from a
single file, use More > Save all queries as repository / Load query repository items from
the More button menu accordingly.

Invalid queries
The wizard automatically validates objects and displays names of invalid queries in red.
The basic rules of queries usage in PHP Generator projects are covered in the
corresponding topic 22 .

Primary keys
The wizard automatically inspects all data objects for unique identifiers that are
necessary for add, edit, and delete operations. It marks objects without primary key
constraints with No key columns label and asks a confirmation 231 on moving to the next
step. It's recommended to specify a single column or a set of columns that uniquely
identifies each record in the view/query to expedite the work of the generated
application. It's optional but preferable.

© 2017 SQL Maestro Group


20 MS SQL PHP Generator Help

By default, each script has settings defined by the application options 222 . Of course,
you can change them later, but it's useful to setup the generation rules in accordance
with settings of the most webpages to reduce further adjustments.

© 2017 SQL Maestro Group


Configuring datasources 21

3.1 Tables and views


To specify source database objects for working through the web, pick the objects in the
Select objects tab. To choose several objects at a time, select them using Ctrl and
Shift keys, then click Mark selected.

© 2017 SQL Maestro Group


22 MS SQL PHP Generator Help

3.2 Custom SQL queries


To add a query within the editor, use the Create Query button or select the
corresponding popup menu item, specify the query name and text, and click OK.

Rules for creating queries used by PHP Generator


All queries must satisfy the simple requirement: the following query must be correct.

select * from
(
QUERY_TEXT_YOU_ENTERED
) an_alias

This happens because the software uses similar queries for internal needs. In case such
SQL expression is not valid, the wizard marks the query as invalid and displays its name
in red.

To meet this requirement, make sure that all the columns in the result dataset have
unique aliases. For example, the following query works fine itself, but returns a dataset
with two columns named id:

SELECT
table1.*,
table2.*
FROM table1, table2
WHERE table1.id = table2.id;

This is the reason the wizard marks this query as invalid. To solve the problem, provide
these columns with unique aliases:

SELECT
table1.id as table1_id,
table2.id as table2_id
FROM table1, table2
WHERE table1.id = table2.id;

Another possible reason is that SQL Server doesn't allow the ORDER BY clause in
subqueries unless TOP or FOR XML is also specified. To use this clause, you can specify
the top row count, but the best solution is to setup the order of rows using the Default
Ordering option in the Page Properties 143 window.

Creating updatable datasets (For Professional Edition Only)


To get an updatable dataset based on an SQL query, you have to provide up to three
SQL queries: UPDATE, INSERT, and DELETE to be able to modify, add and remove
records accordingly. The first query provides an UPDATE statement for modifying existing
records; the second query provides an INSERT statement to add a new record to the
tables; and the third one provides a DELETE statement to remove the records. Each of
these queries can contain several parameterized statements that use parameters like :
field_name.

Example
Assume that we have the following SELECT statement:

SELECT
id,

© 2017 SQL Maestro Group


Configuring datasources 23

first_name,
last_name
FROM customer
WHERE last_name LIKE 'A%'

To create an updatable dataset based on this query, INSERT, UPDATE and DELETE
statements can be specified as follows:

INSERT INTO
customer
VALUES (:id, :first_name, :last_name);

UPDATE customer
SET id = :id,
first_name = :first_name,
last_name = :last_name
WHERE id = :OLD_id;

DELETE FROM customer


WHERE id = :id;

© 2017 SQL Maestro Group


24 MS SQL PHP Generator Help

4 Customizing webpages
Pages
This tab contains the list of webpages to be created. Each page is based on a
datasource defined on the previous step and is created with default settings defined in
the application options 222 .

· Define the title for the generated page, the text to be used as the corresponding
menu label at the navigation menu and the name of generated .php file.
· Click the Edit button to open Page editor 27 .
· Use the Properties button to edit the page settings 143 .
· Organize the navigation menu of the generated application:
o define which pages will be available from the menu with the Include into menu
options;
o set the menu structure with Groups (by default all pages are included to the

Page List group);


o specify the order of web pages within the Reorder dialog;
o decorate it with separators.

· Use the Reset and Reset all buttons to restore default settings 228 .

© 2017 SQL Maestro Group


Customizing webpages 25

Details
This tab allows you to specify master-detail presentations 76 for generated webpages.
To add a master-detail relation means to provide each record of the result (master)
webpage with an ability to browse all records stored in another (detail) table and
associated with this record on a separate Details page.

The detail presentations are created automatically according to the master-detail


relationships (if the Setup details by foreign key 228 option is enabled). To define a new
master-detail relation, use the corresponding tab of the Page Editor of the master table,
or set it directly on this wizard step.

To manipulate details directly, select the master table in the Pages tab and use the
buttons near the Details tab.
· Click the Add... button to configure a new relation using drop-downs in the Link
editor window.

© 2017 SQL Maestro Group


26 MS SQL PHP Generator Help

· Use the Edit... button to edit settings of a concrete detail page with the Page
editor 27 .
· To modify an existing relation, use Link editor.
· The Properties button to define properties of the corresponding page 143 .

Use the Reset and Reset all buttons to setup detail pages properties according to the
project options 157 .

Project Options
To specify default setting 157 to be applied to each generated page, follow the Setup
project options to configure default page settings link. This properties may be edited for
the concrete page within the Page Properties 143 window.

© 2017 SQL Maestro Group


Customizing webpages 27

4.1 Page Editor


Columns 27
Use this tab to specify which columns will be displayed on the result web page and
corresponding forms, their captions, which controls will be used for certain columns on
Insert and Edit forms, lookup options and more.

Details 76
Use this tab to adjust the page detail presentations and setup detail pages properties.

Events 81
Set here the fragments of PHP code to be executed before or after a record was added,
edited, deleted, etc.

Filter 139
Use this tab to reduce the number of records available at the generated page.

Charts 139
Use this tab to equip the web page with interactive charts.

Use the Page Properties 143 window to setup common page properties such as view/edit/
delete/filter/export abilities, pagination options, page header, and more.

The Data Partitioning 151 wizard allows you to create a custom pagination i.e. split the
records on the generated page by a specified criteria.

4.1.1 Columns
Use the Columns tab of Page Editor to set the appearance of data on the following
presentations:

· List, specifies which columns will be represented on the data grid.


· View, defines columns to be displayed on a record viewing.
· Edit, defines the Edit form.
· Insert, defines the Insert form.
· Filter Builder, determines which columns will be available in the Filter Builder dialog.
· Print, specifies how columns will be represented on printing.
· Export, defines how columns will be displayed on export.

The General tab allows you to configure column properties for all presentations. To set
options for a specific presentation, use the corresponding tab and uncheck the Use
general option box. To restore default column options, use the Reset column link from
the tab's popup menu.

Common
This tab allows you to modify the Caption to be used for the column and specify
whether the lookup values 29 will be displayed instead of the values storing in this
column and set the lookup options. By default, MS SQL PHP Generator enables a lookup
for columns linked by a foreign key with a single column from another table (if Setup
lookups by foreign key option 228 is enabled).

© 2017 SQL Maestro Group


28 MS SQL PHP Generator Help

View 34
Use the tab to define controls to be used to represent the corresponding column values
on List, View, Print and Export pages.

Edit/Insert 43
Specify which control will be used for the selected column on the Edit and Insert forms.

To reorder columns, use the Reorder columns... button and set the new order in the
Reordering window. Check the corresponding boxes to apply this order to necessary
presentations. The order of columns at the General tab remains unchanged as it is
possible to have different column order for different presentation.

© 2017 SQL Maestro Group


Customizing webpages 29

4.1.1.1 Setting a lookup

Lookups are used in grids and on Insert and Edit forms as well. On List and View
presentations lookups are used to display records of another dataset corresponding to
and instead of values stored in the webpage base data source. On Insert and Edit
presentations lookup editors are used to simplify input by selecting a value storing in
another dataset and corresponding to a pre-defined value from the base one.

On Edit and Insert forms MS SQL PHP Generator provides you with two types of lookup
editors: Radio group or Combo box. Select Radio group as the column's Edit properties if
the number of the column values is quite little.

Setting a lookup editor bound to a data source (table, view, query)


If you create a PHP script for taking orders, the 'Orders' table will generally have a field
hosting a number indicating the customer who made the order. Working directly with the
customer number is not the most natural way; most users will prefer to work with
customer names. However, in the database the customers' names are stored in a
different table to avoid duplicating the customer data for each order by the same
customer. To get around such a situation, you can enable a lookup editor:

· check the Use lookup box;


· select the foreign table/view/query as Data Source;
· specify the field with the same data as Link field;
· set the field with data to appear in the lookup editor as Display field;

© 2017 SQL Maestro Group


30 MS SQL PHP Generator Help

By default, MS SQL PHP Generator enables a combo box lookup editor for a column linked
by a foreign key with a single column from another table (if Setup lookups by foreign key
option 228 is enabled).

Using Filter condition


Filter condition allows you to reduce the list of values represented in the lookup editor
with a specified criterion. This condition corresponds to the WHERE clause applied to the
data source (you must not add the WHERE keyword to beginning of the condition). The
following operators can be used in this clause: =,<> (!=), >, <, >=, <=, BETWEEN, LIKE,
IN. It is also possible to use predefined variables like %CURRENT_USER_NAME%.
Example 1
To enable a lookup editor with a list of USA cities (the corresponding value of
"country_id" is 103) named like Da*, specify the following condition: country_id = 103
AND city LIKE 'Da%'
Example 2
Suppose we have a table that contains a column 'owner' with owner information. To set
a lookup editor with the list of values owned by the current user, specify the filter
condition as follows: owner = %CURRENT_USER_NAME%

Setting a lookup editor represented data of several columns


To create such lookup editor, create a query with all the necessary data concatenated
into a single column and specify the query as Data Source. A complete example can be
found below.
Example
Suppose we have three tables: 'employee' with a list of office employees, 'job' with
employees' job titles and salaries, and 'department' with a list of office departments.

See definitions here

CREATE TABLE employee (


EMP_NO integer NOT NULL PRIMARY KEY,
FIRST_NAME varchar(15) NOT NULL,
LAST_NAME varchar(20) NOT NULL,
JOB_CODE integer NOT NULL,
DEPT_NO integer NOT NULL
);

CREATE TABLE job (


JOB_CODE integer NOT NULL PRIMARY KEY,
JOB_TITLE varchar(25) NOT NULL,
SALARY real NOT NULL
);

CREATE TABLE department (


DEPT_NO integer NOT NULL PRIMARY KEY,
DEPARTMENT varchar(20) NOT NULL,
HEAD_DEPT integer,
MNGR_NO integer,
BUDGET real,
LOCATION integer,
PHONE_NO char(20)
);

© 2017 SQL Maestro Group


Customizing webpages 31

To enable a lookup editor for the 'HEAD_DEPT' field of the 'department' table
representing first name, last name, and job title of the employee, follow the steps above
with the following query text:

SELECT
e.EMP_NO as ID,
CONCAT(e.FIRST_NAME, ' ', e.LAST_NAME, ', ', j.JOB_TITLE) as FULL_NAME
FROM employee e,
job j
WHERE e.JOB_CODE = j.JOB_CODE

Setting a lookup editor bound to a custom value list

© 2017 SQL Maestro Group


32 MS SQL PHP Generator Help

To create a lookup editor bound to a custom value list i.e. to a list of values that are
not stored in a database table and cannot be retrieved by a query, process as follows:

· Click the ellipsis button next to the "Edit properties";


· Enter the list of the allowed values in pairs
an_allowed_value=value_to_be_represented separated by a comma (Example:
1=One,2=Two).

© 2017 SQL Maestro Group


Customizing webpages 33

© 2017 SQL Maestro Group


34 MS SQL PHP Generator Help

4.1.1.2 View controls

The View options define the way the column data is displayed on List, View, Print and
Export pages.

Display properties
Select the control to be used to represent column data from the drop-down list.
Available controls are:
· Text 36
· DateTime 38

· Image 38

· File download 39

· Checkbox 40

· External file and image 41

· Embedded video 42

To set the format to be applied to the column data such as text alignment, image size,
and so on, use the dialog opened by the ellipsis button. By default, the format is the
same as it is set at the Project options 229 .

© 2017 SQL Maestro Group


Customizing webpages 35

Along with available formatting options you can specify any property you want using the
Custom attributes option. This option allows you to specify the content of standard
HTML style tag applied to the column data.

The Null Label property allows you to customize the representation of NULL values at
the column level.

To implement a conditional data formatting, use the OnCustomDrawRow 125 or


OnExtendedCustomDrawRow 114 events.

Display as hyperlink
To represent the column's data as hyperlink, check the Display as hyperlink option and
specify the HREF Template 76 . Target controls where the new document is displayed
when a user follows the link.

_blank opens the new document in a new window.


_parent is used in the situation where a frameset file is nested inside another
frameset file. A link in one of the inner frameset documents which
uses "_parent" will load the new document where the inner frameset
file had been.
_self puts the new document in the same window and frame as the
current document. "_self" works the same as if you had not used
TARGET at all.
_top loads the linked document in the topmost frame... that is, the new
page fills the entire window.

Header hint
Use this field to specify the the column caption's hint. By default, it is a comment to the
table/view column.

Column filter
Turn ON the checkbox to enable the column filtering for the appropriate column. Use
Sorting and Enable search input controls to specify the sort order and allow the search
line for the column filter dropdown accordingly.

Minimal visibility
MS SQL PHP Generator provides you with an ability to generate responsive pages that
look beautiful on any device from a mobile phone up to an extra-large desktop. This
option allows you to select the minimum resolution of devices the column will be visible
at.

Value Meaning
Phone The column is displayed on all devices.
Tablet The column is displayed on all devices with width greater than
768px.
Desktop The column is displayed on all devices with width greater than
992px.
Large desktop The column is displayed only on devices with width greater than
1200px.

Fixed column width


To set a fixed width of the grid, check the Fixed width, specify the Width, and select
the Units.

© 2017 SQL Maestro Group


36 MS SQL PHP Generator Help

Units Meaning
em The 'font-size' of the relevant font.
px (pixels) Relative to the viewing device.
in (inches) 1 inch is equal to 2.54 centimeters.
cm Centimeters
mm Millimeters
pt (points) The points used by CSS 2.1 are equal to 1/72nd of an inch.
pc (picas) 1 pica is equal to 12 points.

The Totals option allows you to enable a grid footer to display summaries (Sum,
Average, Count, etc) for all or selected grid columns.
4.1.1.2.1 Text

The most popular type of data representation when data is represented "as is" with
minimum modifications. All fields represented on the picture below are displayed as text.

Max length
Use this option to specify the maximum number of symbols to be displayed on the
generated webpage. In case the length of stored text is longer, this text will be cropped
and the more link will be added after the allowed number of symbols. The full text will be
displayed in a popup window on putting mouse over the more link or in a separate
window on clicking this link. Use application options 228 to specify the default max length
of text fields.

© 2017 SQL Maestro Group


Customizing webpages 37

Replace CR+LF by <BR>


This option is useful for correct representation of line feeds in the text in which line
breaks are marked with the Carriage Return (CR) and Line Feed (LF).

Use the Allow HTML and Word wrapping checkboxes to set whether HTML tags will be
applied to the stored data and whether word wrapping will be allowed.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

Set the Format options to be applied to the column data depending of data type
(Number, Percent, String, Currency).

© 2017 SQL Maestro Group


38 MS SQL PHP Generator Help

4.1.1.2.2 DateTime

Use this type of representation to display date and time in convenient format.

Date time format


Use the drop-down list to select a format to be applied to the column data or specify
your own format manually. Find out more information about supported date and time
formats at PHP manual.
Format Example
Y-m-d 2014-11-18
d.m.Y 18.11.2014
dM Y 18 Nov 2014
Y-m-d H:i: 2014-11-18 12:30:00
s
d.m.Y H:i:s 18.11.2014 12:30:00
d M Y H:i:s 18 Nov 2014 12:30:00

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.2.3 Image

MS SQL PHP Generator allows you to represent BLOB data stored in the database as
images or as download links 39 . To represent column values as images, select Image as
Display properties. This option is defined automatically in case of enabled the Setup
binary fields as image 228 option.

© 2017 SQL Maestro Group


Customizing webpages 39

The Additional attributes allows you to manipulate the size of represented images: to
resize them to a specified height or width. To change image sizes, the appropriate PHP
extension is required. You can also specify a template 76 to be used for image hints to
be shown when the mouse passes on an image.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: Image upload 71 , File upload 70

4.1.1.2.4 File download

MS SQL PHP Generator allows you to represent Blob data stored in your database as
images 38 or as download links. To make the column values available for download from
the generated webpage, select the File download type of data representation.

© 2017 SQL Maestro Group


40 MS SQL PHP Generator Help

Use the Additional options to specify templates 76 of file names and content type
(optional) to be used for binary files on download and enable the Force downloading
option to force browser to download files, instead of open them in the browser.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: File upload 70 , Image upload 71

4.1.1.2.5 Checkbox

Use this control to display column values as checkboxes. This type of representation is
used for columns storing BOOLEAN, or INTEGER data. MS SQL PHP Generator provides you
with the following types of the control appearance.

· Standard check box control

· Images

© 2017 SQL Maestro Group


Customizing webpages 41

· Text values

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.2.6 External file, audio file and image

MS SQL PHP Generator allows you to create webpages using data stored outside the
database. Such files are called "external files" and may be of any types. All external files
may be presented on a web page as download links, image files may be also displayed as
pictures, and audio files could be also represented with the html5 audio player which
allows the user to listen these files from the browser.

All external files to be used on a web page based on a table must meet the following
requirements:
· they must be stored in the same folder;
· their names must contain values of the table column;
· their paths must be in the following format: a common part called Source prefix +
column value + a common part called Source suffix.
Suppose, we have a table with information about actors. This table has a 'photo' column
with data as follows: mary_smith, jack_doe, jane_brook, etc. We also have photos of
these actors: mary_smith.jpg, jack_doe.jpg, jane_brook.jpg, etc. The photos are stored
in the 'Photos' folder located in the root directory of the application. The file paths are
as follows:

Photos/mary_smith.jpg

© 2017 SQL Maestro Group


42 MS SQL PHP Generator Help

Photos/jack_doe.jpg
Photos/jane_brook.jpg
...

To add these images to the web page, we need to select External image as Display
properties of the 'photo' column and to specify the following additional properties:

Source prefix=Photos/
Source suffix=.jpg

The appearance of download links to external files is the same as download links to files
stored in the database.

External images are represented as images 38 stored in the database.

External audio files are represented with the standard html5 audio player:

To represent external data on a webpage, specify Source prefix and Source suffix, and a
template 76 to be used for columns hints to be shown when the mouse passes on an
image/download link.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: Upload file to folder 73 , Upload image to folder 74

4.1.1.2.7 Embedded video

This type of view column allows you to embed a video clip into the page. A thumbnail of
the clip will be displayed in the column automatically (on low screen resolutions a Play
button will be displayed instead). Clicking the thumbnail or the button will open a modal
window and start playing the clip.

© 2017 SQL Maestro Group


Customizing webpages 43

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3 Edit controls

The Edit options define the way the column data is represented on Edit and Insert
pages.

© 2017 SQL Maestro Group


44 MS SQL PHP Generator Help

Edit properties
Use this drop-down list to select a control to be used for this column on Edit and Insert
pages. Available controls are:

· Text 46

· Combo box 48

· Radio group 50

· Autocomplete editor 52

· Multi-level autocomplete editor 53

· Check box 59

· Check box group 60

· DateTime 61

· Time 62

· Spin edit 63

· Range edit 64

· Color edit 65

· Mask edit 66

· Text area 67

· Html Wysiwyg 68

© 2017 SQL Maestro Group


Customizing webpages 45

· Password 70

· File Upload 70 , Image Upload 71 , Upload File to Folder 73 , Upload Image to Folder
74

To set additional control properties such as captions, formatting options, element


attributes, and so on, use the dialog opened by the ellipsis button.

Read only
Use this option to make the control readonly. A readonly input field cannot be modified
(however, a user can tab to it, highlight it, and copy the text from it). Readonly form
elements will get passed to the form processor.

Visible
This option defines whether the control will be visible on the generated page. An invisible
element stays in its original position and size.

Enabled
Use this option to specify whether the control will be enabled on the generated page.
Turn it OFF to disable the control. Disabled input elements in a form will not be
submitted.

Required
Check the Required box if the field is mandatory. Required columns are marked by red
asterisk. When a user tries to submit a form with an empty required field, data will not
be submitted and an error message will be shown.

MS SQL PHP Generator allows you to check for correctness of input data on the client
side on two scopes:

· The input value is validated when a user leaves the control. For this purpose,
specify the suitable Client validator.
Range The generated script validates if number is between the
largest and smallest values.
Length The script validates if the length of text is between the min
length and the max length.
range

© 2017 SQL Maestro Group


46 MS SQL PHP Generator Help

Email The script makes the element require a valid email.


Credit card The script makes the element require a credit card number.
Number The script makes the element require a decimal number.
URL The script makes the element require a valid URL.
Digits The script makes the element require digits only.
Regular You can also specify your regular expression for data
expression validation. Such expression is a pattern and every character
entered in a form field is matched against that pattern – the
form can only be submitted if the pattern and the user-input
matches.

· The input values are validated when a user clicks the Save button. This may be
useful to check the compatibility of input data. For this purpose, use the
OnInsertFormValidate 99 and OnEditFormValidate 100 client side events. These
events occur before submitting of an insert and edit forms and allow you to detect
errors on the client side before the form is submitted to the server to avoid the
round trip of information necessary for server-side validation.

Default value
This option allows you to set the expected value of an input field with string templates
76 . You can use such environment variables as %CURRENT_DATETIME%, %

CURRENT_DATE%, %CURRENT_TIME%, %CURRENT_USER_ID%, and %


CURRENT_USER_NAME%.
4.1.1.3.1 Text

Select this control to create a single-line input field for entering text.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Max length
Use this field to restrict the number of symbols of the value that can be entered.

Placeholder

© 2017 SQL Maestro Group


Customizing webpages 47

Use this field to set a short hint that describes the expected value of an input field (e.g.
a sample value or a short description of the expected format). The placeholder is
displayed in the input field before the user enters a value.

Use Prefix and Suffix to create prepended and appended inputs allowing for simple
punctuation or units to be paired with an input. For example, if you need to indicate a
field is asking for money, use the prepend with a $ sign. Other examples include @ with
a username (a la Twitter.com's settings pages) and "+1" for phone number inputs.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

HTML filter
Use it to strip unwanted HTML tags and attributes from user input. By default all tags
and attributes are stripped out, so you have to define allowed items explicitly.

Settings on the screenshot above are to allow the <a> tag (optionally with the href
attribute as well as the <strong> and <h1> tags. All other tags and attributes will be
removed from the user input.

© 2017 SQL Maestro Group


48 MS SQL PHP Generator Help

4.1.1.3.2 Combo box

Select this control to create a combobox, a combination of a drop-down list and a


single-line editable textbox, allowing the user to either type a value directly or select a
value from the list. By default, MS SQL PHP Generator enables a combo box lookup editor
for a column linked by a foreign key with a single column from another table (if Setup
lookups by foreign key option 228 is enabled).

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Value
Use this field to fill the combobox with more convenient values instead of stored ones.
For this purpose use the Value list window or enter them manually as pairs
allowed_value=value_to_be_represented separated by commas (Example: 1=One,
2=Two).

Most frequently used values


Use the ellipsis button next to this field to specify combobox values to be always
displayed at the top of the drop-down list.

© 2017 SQL Maestro Group


Customizing webpages 49

Item caption template


This option allows you to populate the combobox with values of several columns. For
this purpose, specify a template 76 to be used for each item in the list.

© 2017 SQL Maestro Group


50 MS SQL PHP Generator Help

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.3 Radio group

Select this control to let the visitor select one option from a set of alternatives. If more
options are to be allowed at the same time you should use check boxes 60 instead.

© 2017 SQL Maestro Group


Customizing webpages 51

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Values
You can specify values to be represented as radio group values instead of stored ones.
For this purpose use the dialog opened by the ellipsis button, or add them manually as
pairs allowed_value=value_to_be_represented separated by commas (Example: 1=One,
2=Two).

Display mode
Use the drop-down list to select whether the radio group will be represented on the
same column (Stacked) or on the same line (Inline).

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

© 2017 SQL Maestro Group


52 MS SQL PHP Generator Help

4.1.1.3.4 Autocomplete editor

Select this control to create a combination of a single-line editable textbox and a drop-
down list filtered according to values entered in the textbox. It is recommended to use
this editor type as lookup editor to work with a big number of records.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Allow clear
Turn it ON to allow end users to clear the selected value using special button.

Minimum input length


Use this option to specify minimal amount of symbols to start the search (useful for large
lookup datasets where short search terms are not very useful).

Item caption template


This option allows you to populate the combobox with values of several columns. For
this purpose, specify a template 76 to be used for each item in the list.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

Formatting functions
Use these functions to format search results and the selection. For example, it is
possible to use fonts, colors, images, and so on. All you need is to specify two functions

© 2017 SQL Maestro Group


Customizing webpages 53

in JavaScript each of which accepts the current item as a parameter and returns the
HTML code to represent search results and the selected item accordingly. In the
example below search results are displayed in italic and the selected item is displayed in
bold.
formatResult function:
return '<i>' + item.text + '</i>';

formatSelection function:
return '<b>' + item.text + '</b>';

The editor now looks as follows:

4.1.1.3.5 Multi-level autocomplete editor

Select this control to create cascading combo boxes to get greater control over data
input, and to make things easier for the user. Multi-level autocomplete editor is a series
of 2 or more combo boxes in which each combo box is filtered according to the previous
combo box. The number of levels is not limited.

Note: regardless of the number of levels the result of the multi-level editor is only a
single value.

The picture below demonstrates two-level and three-level autocomplete editors. On the
first figure, the City combo box is populated on the fly with city names that correspond
to the currently selected country from the Country combo box. On the second figure, to
specify an address a user needs to select a country, then select a city from a combo
box populated with names of cities located in the selected country, and after that he
can select an address from the list of addresses related to the currently selected city.

© 2017 SQL Maestro Group


54 MS SQL PHP Generator Help

To create cascading combo boxes with any number of levels, use the same technique as
described below.

Database schema requirements


To create an N-level autocomplete editor you need to have N+1 tables: the source table
for the generated webpage and N tables each of them refers to the primary key in the
previous table. The foreign key constraints are not required but highly recommended to
enforce the referential integrity at the database level.

The picture above demonstrates a two-level editor represented on an Address webpage


and allowing to specify a city using a list of countries. To create this control we used
three tables: Country, City, and Address. Address is the source table for the webpage.
The Address table refers to the primary key of the City table and City refers to the
primary key of Country.

Levels
Use this tab to select tables to be used for additional combo boxes, specify captions for
these combo boxes, and columns which data will be displayed in the drop-down lists.
Place tables in the reverse order of logical priority. In the example of three-levels editor
we used Country, City, Address, and Customer tables. Customer is the source table for
the generated webpage. Pay attention that the data entry order would be Country, City
and then Address; which by data hierarchy standards is backwards. So we need to add
Address first, then specify City and after that Country.

Example
Let's consider how to implement a three-level editor. Suppose we have the following
tables:

Our goal is to create a three-level editor like this.

© 2017 SQL Maestro Group


Customizing webpages 55

1. Open the editor of the page based on the Customer table, select the Address_id
column, and specify its lookup properties 29 . If you have a foreign key relationship and
the Setup lookup by foreign key 228 option is enabled, these properties are set
automatically.

2. Select Multi-level autocomplete editor as edit control and click the ellipsis button to

© 2017 SQL Maestro Group


56 MS SQL PHP Generator Help

open the Edit properties dialog

3. As we've written above, the tables for additional combo boxes are placed in the
reverse order of logical priority. The data entry order would be Country, City and then
Address, so we need to add Address first, then specify City and after that Country. To
add a new level for the control, click Add level and specify options of the Add filter
dialog as follows:

© 2017 SQL Maestro Group


Customizing webpages 57

4. Add the next level in the same way:

© 2017 SQL Maestro Group


58 MS SQL PHP Generator Help

Click OK in the Edit properties window to save all settings and return to the Page Editor.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Allow clear
Turn it ON to allow end users to clear the selected value using special button.

Minimum input length


Use this option to specify minimal amount of symbols to start the search (useful for large
lookup datasets where short search terms are not very useful).

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

© 2017 SQL Maestro Group


Customizing webpages 59

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

Formatting functions
Use these functions to format search results and the selection. For example, it is
possible to use fonts, colors, images, and so on. All you need is to specify two functions
in JavaScript each of which accepts the current item as a parameter and returns the
HTML code to represent search results and the selected item accordingly. Formatting
functions can be specified at the level basis. The screenshot below is from our demo
application:

4.1.1.3.6 Check box

Select this control to let the user to make a binary choice. This type of editor is
automatically selected for boolean and columns.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

© 2017 SQL Maestro Group


60 MS SQL PHP Generator Help

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.7 Check box group

Select this control to provide the user with the ability to select multiple items.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Values
You can specify another values to be represented as checkbox group values instead of
stored in the column. For this purpose use the dialog opened by the ellipsis button, or
add them manually as pairs allowed_value=value_to_be_represented separated by
commas (Example: 1=One, 2=Two).

Display mode
Use the drop-down list to select whether the check box group will be represented on the
same column (Stacked) or on the same line (Inline).

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

© 2017 SQL Maestro Group


Customizing webpages 61

4.1.1.3.8 Multiple select

Select this control to provide the user with the ability to select multiple items. It
provides the same functionality as Checkbox Group 61 (i.e. allows you to select several
options for a single field) but looks much different and requires less space in the forms.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Values
You can specify another values to be represented as checkbox group values instead of
stored in the column. For this purpose use the dialog opened by the ellipsis button, or
add them manually as pairs allowed_value=value_to_be_represented separated by
commas (Example: 1=One, 2=Two).

Maximum selection size


The "Maximum selection size" property allows you to restrict number of items that can
be selected simultaneously.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.9 DateTime

Select this control to let the user to enter date time values with datepicker, a
combination of an interactive calendar and a single-line editable textbox.

© 2017 SQL Maestro Group


62 MS SQL PHP Generator Help

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

By default, the format of the column's data is the same as it is set at the Project
options 229 . To use another Date time format, uncheck the Default format option and
select it from the corresponding field to setup a format to be applied to the input value.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.10 Time

Select this control to let the user to enter time values in a single-line editable textbox
provided by a spinner helping to quickly change the editor's value as well as to reset its
value to the current time.

© 2017 SQL Maestro Group


Customizing webpages 63

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.11 Spin edit

Select this control to create a single-line input field allowing users to edit numeric values
with ease. The editor consists of an edit region and one pairs of spin buttons which can
be used to adjust the numerical value.

© 2017 SQL Maestro Group


64 MS SQL PHP Generator Help

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Step specifies the legal number intervals for the input field. When an end-user presses a
spin button, the value is incremented or decremented by this amount. The default value
is 1.

To limit end-user input to a specified range, turn ON the Use constraints option and
define the editor's minimum and maximum allowed values.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.12 Range edit

The range input (so-called slider) is useful for imprecise number input. It is possible to
indicate the allowed range of values in the appropriate dialog window (default values are
0 and 100 for bottom and top limits accordingly).

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Step specifies the legal number intervals for the input field. When an end-user presses a
spin button, the value is incremented or decremented by this amount. The default value
is 1.

To limit end-user input to a specified range, turn ON the Use constraints option and
define the editor's minimum and maximum allowed values.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the

© 2017 SQL Maestro Group


Customizing webpages 65

purpose of providing information to make JavaScript functions easier. Such attributes


can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.13 Color edit

Use this control to edit values of columns storing HTML color codes with a native-
browser Color Picker (it is assumed that a string data type is used for storing such
values in the database).

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

© 2017 SQL Maestro Group


66 MS SQL PHP Generator Help

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.14 Mask edit

Use this control to define an edit box that limits the user to a specific format (dates,
phone numbers, etc) and accepts only valid characters.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Mask
A mask is defined by a format made up of mask literals and mask definitions. Any
character not in the definitions list below is considered a mask literal. Mask literals will be
automatically entered for the user as they type and will not be able to be removed by
the user. The following mask definitions are predefined:

a - Represents an alpha character (A-Z,a-z)


9 - Represents a numeric character (0-9)
* - Represents an alphanumeric character (A-Z,a-z,0-9)

Example
To define an edit box for telephone numbers, specify the following string as the mask of
the editor.
999-999-9999

In this case the created data entry field accepts only numeric input and if a user then
tries to enter a letter in this edit box, the application will not accept it.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes

© 2017 SQL Maestro Group


Customizing webpages 67

can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.15 Text area

Use this control to provide the Edit form with a multi-line text input control. A text area
can hold an unlimited number of characters, and the text renders in a fixed-width font
(usually Courier).

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

The size of a text area can be specified by the Column count and Row count values.

Placeholder
Use this field to set a short hint that describes the expected value of an input field (e.g.
a sample value or a short description of the expected format). The placeholder is
displayed in the input field before the user enters a value.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

© 2017 SQL Maestro Group


68 MS SQL PHP Generator Help

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

HTML filter
Use it to strip unwanted HTML tags and attributes from user input. By default all tags
and attributes are stripped out, so you have to define allowed items explicitly.

Settings on the screenshot above are to allow the <a> tag (optionally with the href
attribute as well as the <strong> and <h1> tags. All other tags and attributes will be
removed from the user input.
4.1.1.3.16 Html Wysiwyg

Select WYSIWYG (What You See Is What You Get) editor to provide users with an
ability to directly manipulate the layout of a HTML data stored in the column, without
having to type or remember names of layout commands.

© 2017 SQL Maestro Group


Customizing webpages 69

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

HTML filter
Use it to strip unwanted HTML tags and attributes from user input. By default all tags
and attributes are stripped out, so you have to define allowed items explicitly.

© 2017 SQL Maestro Group


70 MS SQL PHP Generator Help

Settings on the screenshot above are to allow the <a> tag (optionally with the href
attribute as well as the <strong> and <h1> tags. All other tags and attributes will be
removed from the user input.
4.1.1.3.17 Password

Select this control to add a masked textbox.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

4.1.1.3.18 File upload

Use this control to allow users to upload binary files to the database. To store files
externally, use the Upload File to Folder 73 control.

© 2017 SQL Maestro Group


Customizing webpages 71

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Use file size limitation


To restrict the size of uploaded files, check this option and specify the maximum allowed
file size in kilobytes.

You can save the type, name and size of uploaded files to table columns (optional).

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: Upload file to folder 73 , File download 39

4.1.1.3.19 Image upload

Use this control to allow users to upload images to the database. To store images
externally, use the Upload Image to Folder 74 control.

© 2017 SQL Maestro Group


72 MS SQL PHP Generator Help

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Use file size limitation


To restrict the size of uploaded files, check this option and specify the maximum allowed
file size in kilobytes.

You can save the type, name and size of uploaded files to table columns (optional).

Use image size limitation


To restrict the size of uploaded images, check this option and specify the maximum
allowed image width and height.

Uploaded images resizing


To upload resized images, check the Resize image option, select Resize type (Fit by
width, Fit by height) and specify the
height or width correspondingly.

Example
To allow uploading images which size is not greater than 200Kb, width is not greater
than 600px and height is not greater than 400px and to save the original file names to
the file_name column, specify the Edit properties as follows:

© 2017 SQL Maestro Group


Customizing webpages 73

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: Upload Image to Folder 74 , Image (view column) 38

4.1.1.3.20 Upload file to folder

Use this control to allow users to upload external files. To files stored in the database,
use the File Upload 70 control.

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Folder to upload

© 2017 SQL Maestro Group


74 MS SQL PHP Generator Help

Use this field to specify the folder to be used to store the uploaded files.

Check the Generate random file name option to save uploaded files with random
names or specify the File name template 76 to be used for file name generation.

Store file name only


Defines whether the full file path (e.g. external_data/uploaded_files/filename.ext) or only
file name (e.g. filename.ext) is stored in the database after the uploading.

Replace file if exists


This option allows you to set whether the uploaded file will be saved or ignored in case a
file with the same name already exists in the folder to upload.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: File Upload 70 , File download 39

4.1.1.3.21 Upload image to folder

Use this control to allow users to upload external images 41 . To images stored in the
database, use the Image Upload 71 control.

© 2017 SQL Maestro Group


Customizing webpages 75

Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.

Folder to upload
Use this field to specify the folder to be used to store the uploaded files.

Check the Generate random file name option to save uploaded files with random
names or specify the File name template 76 to be used for file name generation.

Store file name only


Defines whether the full file path (e.g. external_data/uploaded_files/filename.ext) or only
file name (e.g. filename.ext) is stored in the database after the uploading.

Replace file if exists


This option allows you to set whether the uploaded file will be saved or ignored in case a
file with the same name already exists in the folder to upload.

Enable the Generate thumbnail option to save reduced-size versions of the uploaded
files along with these files. By default thumbnails are saved in the same folder where full
size images are saved. The names of thumbnails are 'field name'_'uploaded_file_name'.
You can also specify another Folder to upload and File name template.

To set the size of thumbnails, select Resize type (Fit by width, Fit by height) and
specify the height or width correspondingly.

Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:

data-city="Boston" data-lang="js" data-food="Bacon"

© 2017 SQL Maestro Group


76 MS SQL PHP Generator Help

It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.

Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:

color: red; background-color: yellow;

See also: Image Upload 71 , Image (view column) 38

4.1.2 String templates


String templates are used by MS SQL PHP Generator on setting HREF templates, hints,
etc. The strings may contain column names enclosed by %.

Examples:
1. Suppose a table 'team' stores various info about NBA teams. The table has 'caption'
column with such data:
maverics
cavaliers

To create links to the team home pages:


http://www.nba.com/maverics/
http://www.nba.com/cavaliers/

set the HREF template


http://www.nba.com/%caption%/

2. Suppose there is a table 'employee' storing employee info. The table has 'first_name'
and 'last_name' columns with such data:
Forest Gump
Sara Connor

To add such hints to their photos on the generated webpage:


Forest Gump Photo
Sara Connor Photo

Specify the hint template:


%first_name% %last_name% Photo

4.1.3 Master-Detail Presentations


Master-detail presentations allow you to view and edit records from master and detail
data sources (like country/city) on a single page. So, browsing the page representing
product information, you can, for example, see all the orders related to a certain
product, add new orders, edit/delete existing orders, and so on; working with list of
countries - to inspect cities of specific countries as on the picture below.

© 2017 SQL Maestro Group


Customizing webpages 77

You can also create nested master-detail presentations when you can see the "details
of details". On the picture below the webpage with a list of countries is represented, for
any country all the corresponding cities may be browsed with a single click and at the
same time it is possible to see addresses of customers living in a certain city.

© 2017 SQL Maestro Group


78 MS SQL PHP Generator Help

To add a master-detail relation within MS SQL PHP Generator means to provide each
record of the result webpage with an ability to browse all records associated with this
record on a separate Details page as well as with an ability to view the 20 first such
records on the result page directly. To open the corresponding Details page, follow the
full view link.

Database schema requirements


To create a two-level master-detail presentation, you need to have two tables with a
parent-child relationship. The foreign key constraints are not required but highly
recommended to enforce the referential integrity at the database level.

Creating master-detail views


There are two ways to provide the result webpage with a master-detail presentation:

· The tables are tables linked with a foreign key. In case the Setup details by foreign
key 228 option is enabled, the detail relation will be set automatically.

© 2017 SQL Maestro Group


Customizing webpages 79

· The foreign key constraint between theses tables haven't been defined.
1. Open the Page Editor for the page based on the master table and go to the Details
tab.

2. Click the Add... item of the tab's popup menu.

© 2017 SQL Maestro Group


80 MS SQL PHP Generator Help

3. Set the relation properties to the child table: select this table as Detail data source,
and specify the columns with similar data as Master field (select from the list of parent
table columns) and Detail field (select from the list of child table columns).

© 2017 SQL Maestro Group


Customizing webpages 81

4. After the fields are completed use the Add button and then click OK.

To specify the details appearance, use the Edit... item of the corresponding popup menu
and set options in a usual way 27 .

To create a nested master-detail presentation, use the same technique as described


above (the case the foreign key constraint is not defined).

4.1.4 Events
MS SQL PHP Generator allows you to supply the generated applications with an
additional functionality with the help of event handlers. Event handlers are fragments of
PHP/Javascript code executed at the appointed time. This feature provides you with
wide opportunities: for example, you can equip webpages with tracking of user activity,
completely redesign any created page, supply the application with the power of third-
part libraries, etc.

All events supported by MS SQL PHP Generator may be divided by the scope the events
are fired on (possible options are all generated webpages (global events) or a certain
webpage (page-specific events)); and by the side the event handlers are executed on:
the webserver (written on PHP) or browsers (written on Javascript).

· Server-side application-level (global) events 82

· Server-side page-level events 107

· Client-side page-level events 98

© 2017 SQL Maestro Group


82 MS SQL PHP Generator Help

To add or modify an event handler:


· open the editor 27 of a webpage the event to be fired on (for Page events) or the
Project Options 157 (for Global events);
· go to the Events tab;
· select the desired event from the list and double-click the appropriate line in the
grid (it is also possible to use popup menu or Ctrl+Enter);
· enter your PHP/Javascript code in the text area.

To disable any specified event temporarily, use the corresponding checkboxes at the
Events tab of the according Page Editor 27 (for Page events) or the Project Options 157
(for Global events).

4.1.4.1 Application-level (global) Events

Handlers of global events contain pieces of PHP code that are not specific for any page
i.e. these events are fired on all the generated webpages.

· OnBeforePageExecute 83

· OnAfterLogin 83

· OnPreparePage 84

· OnGetCustomTemplate 85

· OnCustomHTMLHeader 85

· OnBeforeUpdateRecord 92

· OnBeforeInsertRecord 92

· OnBeforeDeleteRecord 93

· OnAfterUpdateRecord 94

· OnAfterInsertRecord 93

· OnAfterDeleteRecord 95

· OnGetFieldValue 96

· OnGetCustomExportOptions 96

· OnCustomizePageList 97

· OnGetCustomPagePermissions 97

To specify a handler for a global event, open the Events tab of the Project options 157 .

© 2017 SQL Maestro Group


Customizing webpages 83

4.1.4.1.1 OnBeforePageExecute

This event occurs before other events are declared and allow to create global objects,
declare functions, and include third-party libraries. This helps you to define a snapshot
of PHP code that will be included into all the pages.

Signature:
function OnBeforePageExecute()

Example:
In our Schema Browser demo project all the code implementing database filter,
formatting and highlighting SQL code we entered in the schema_browser_utlis.php file.
The following code is used to include it to into all application web pages.

include_once 'schema_browser_utils.php';

4.1.4.1.2 OnAfterLogin

This event occurs after a user is successfully logged in into the application.

© 2017 SQL Maestro Group


84 MS SQL PHP Generator Help

Signature:
function OnAfterLogin ($userName, $connection, $canLogin, $errorMessage)

Parameters:
$userName The name of the logged user.
$connection An instance of the EngConnection class 217 .
$canLogin Specifies whether a user can login (true by default). You can set
the value of this parameter to false to disable login even for a user
who provided valid credentials.
$errorMessage A message to be displayed when valid credentials are provided, but
$canLogin == false.

Example:
Let's show how to use this event for tracking the user activity. The code snippet below
inserts a new record containing user name and the connection time into the 'log' table.

$connection->ExecSQL("INSERT INTO log(user_name, log_date)


VALUES ('$userName', CURRENT_TIMESTAMP)");

4.1.4.1.3 OnPreparePage

This piece of code is a method of the Page class that is called at the end of the
constructor. It allows you to customize all members of the class.

Signature:
function OnPreparePage()

Parameters:
This method has no parameters.

Example
The following code hides the update_date_time column from the data grid and Single
Record View form as well as the status column from Edit and Insert forms from all users
except ones who have the Admin privilege for the current page.

if (!GetApplication()->IsLoggedInAsAdmin()) {
$updateDateTimeColumnName = 'update_date_time';
$column = $this->GetGrid()->getSingleRecordViewColumn($updateDateTimeColumnName);
if ($column) {
$column->setVisible(false);
}
$column = $this->GetGrid()->getViewColumn($updateDateTimeColumnName);
if ($column) {
$column->setVisible(false);
}

$statusColumnName = 'status';
$column = $this->GetGrid()->getEditColumn($statusColumnName);
if ($column) {
$column->setVisible(false);
}
$column = $this->GetGrid()->getInsertColumn($statusColumnName);
if ($column) {
$column->setVisible(false);

© 2017 SQL Maestro Group


Customizing webpages 85

}
}

4.1.4.1.4 OnCustomHTMLHeader

This event occurs when generating the HEAD section of the page. It allows you to
define the contents of the HEAD section (like meta tags or favicon) for all pages of the
generated website.

Signature:
function OnCustomHTMLHeader ($page, &$customHTMLHeaderText)

Parameters:
$page An instance of the Page class 215 declared in
components/page.php.
$customHtmlHeaderText The text block to be added to the head section of all
created pages.

Example:
To add a new title and a favicon to all webpages of the generated application, place the
following code to the event body.

$customHtmlHeaderText = '<meta name="author" content="SQL Maestro Group">';


$customHtmlHeaderText .= "\n";
$customHtmlHeaderText .= '<meta name="copyright" content="SQL Maestro Group" />';
$customHtmlHeaderText .= "\n";
$customHtmlHeaderText .= '<meta name="keywords" content="nba,basketball,game">';
$customHtmlHeaderText .= "\n";
$customHtmlHeaderText .= '<link rel="icon" href="favicon.ico" type="image/x-icon" />';

The screenshot demonstrates the result of the fired event.

4.1.4.1.5 OnGetCustomTemplate

This event allows you to customize almost any part of the generated application using
an own template instead of the default one.

Signature:
function OnGetCustomTemplate ($part, $mode, &$result, &$params)

Parameters:
$part The part of the page to be affected by the template.

© 2017 SQL Maestro Group


86 MS SQL PHP Generator Help

$mode The current state of the webpage the template to be used.


$result The path to the file to be used as template according to the
components/templates/custom_templates folder.
$params An associative array of additional parameters you want to assign
to the template.

PHP Generator uses Smarty 2.0 as template language. If you are not familiar with web
template engines, you might want to start here.

Our Feature Demo provides a number of live examples of customized templates. We


would recommend you to study them carefully before trying to customize your
application.

To customize a webpage, you need to:

· create a new template to be used for this webpage;


· instruct PHP Generator to use this template for the selected webpage.

The simplest way to create a new template is to modify an existing one (it is much
easier than create a new template "from scratch"). Use the table below to select the
template corresponding to the necessary state of page and page part. Custom template
files should be uploaded to the 'components/templates/custom_templates' directory.
This folder should be created by the user of PHP Generator and its content is not
changing during the further PHP Generator sessions.

State of Page Part Default template Parameters


the
webpage

webpage common/layout.tpl PagePart::Layout


layout Any PageMode

All Pages page_list_menu.tpl PagePart::PageList


(for top-side menu) Any PageMode
page list
page_list_sidebar.tpl
(for sidebar menu)
list/grid_table.tpl PagePart::Grid
(for grid view mode) PageMode::ViewAll
table grid
list/grid_card.tpl
(for card view mode)
List page
list/single_row.tpl PagePart::GridRow
(for grid view mode) PageMode::ViewAll
single row
list/sinlge_row_card.tpl
(for card view mode)
view/grid.tpl PagePart::RecordCard
View (separate page) PageMode::View

© 2017 SQL Maestro Group


Customizing webpages 87

forms/form.tpl PagePart::VerticalGrid
Edit form (editors area) PageMode::EditForm

forms/form.tpl PagePart::VerticalGrid
Insert form (editors area) PageMode::InsertForm

compare/grid.tpl PagePart::Grid
Record comparison page PageMode::Compare

forms/page_form.tpl PagePart::VerticalGrid
Edit (separate page) PageMode::Edit

forms/page_form.tpl PagePart::VerticalGrid
Insert (separate page) PageMode::Insert

forms/modal_form.tpl PagePart::VerticalGrid
Edit (modal dialog) PageMode::ModalEdit

forms/modal_form.tpl PagePart::VerticalGrid
Insert (modal dialog) PageMode::ModalInsert

view/record_card_view.tpl PagePart::VerticalGrid
View (modal dialog) PageMode::ModalView

forms/inline_form.tpl PagePart::VerticalGrid
Edit (inline form) PageMode::InlineEdit

forms/inline_form.tpl PagePart::VerticalGrid
Insert (inline form) PageMode::InlineInsert

print/page.tpl PagePart::PrintLayout
webpage
PageMode::PrintAll
layout

print/grid.tpl PagePart::Grid
Print table grid PageMode::PrintAll

print/detail_page.tpl PagePart::PrintLayout
detail page PageMode::PrintDetailPage

export/pdf_grid.tpl, export/ PagePart::Grid


excel_grid.tpl, export/ PageMode::ExportPdf,
Export data grid csv_grid.tpl, etc PageMode::ExportExcel,
PageMode::ExportCsv,
etc

© 2017 SQL Maestro Group


88 MS SQL PHP Generator Help

export/pdf_record.tpl PagePart::RecordCard
single record
PageMode::ExportPdf
(PDF only)

print/page.tpl PagePart::PrintLayout
webpage
PageMode::PrintOneRecord
Print layout
Single
Record view/print_grid.tpl PagePart::Grid
table grid PageMode::PrintOneRecord

login_page.tpl PagePart::LoginPage
Login page

login_control.tpl PagePart::LoginControl
Login control

home_page.tpl PagePart::HomePage
Home page

navigation.tpl PagePart::Navigation
Navigation

To instruct PHP Generator to use a customized template file for a certain webpage,
specify the following code in the page's OnGetCustomTemplate event handler (of course
you should replace YourPart and YourMode to the appropriate values from the table
above).

if ($part == YourPart && $mode == YourMode) {


$result = 'your_template_file.tpl';
}

Example 1:
Suppose we need to use components/templates/custom_templates/staff_edit.tpl file as
a template for the edit form of a webpage.

if ($part == PagePart::VerticalGrid && $mode == PageMode::Edit) {


$result = 'staff_edit.tpl';
}

Now we can compare the result webpages without using this event and with the enabled
one:

© 2017 SQL Maestro Group


Customizing webpages 89

Example 2:
A single event handler can be used to customize multiple templates:

if ($part == PagePart::Grid && $mode == PageMode::ViewAll)


$result = 'games_grid.tpl';
if ($part == PagePart::VerticalGrid && $mode == PageMode::Edit)
$result = 'games_edit.tpl';
if ($part == PagePart::RecordCard && $mode == PageMode::View)
$result = 'games_view.tpl';

Example 3
This example shows how to fill a SELECT input with names of all MySQL databases
available at the server.

1. Specify the OnGetCustomTemplate event handler as follows:

// set the template file


if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {
$result = 'custom_grid.tpl';

// get the list of available databases

© 2017 SQL Maestro Group


90 MS SQL PHP Generator Help

$queryResult = array();
$this->GetConnection()->ExecQueryToArray('SHOW DATABASES', $queryResult);

// fill a one-dimensional array with database names


$databaseNames = array();
foreach($queryResult as $row)
$databaseNames[] = $row[0];

// assign the parameter in the template


$params['databaseNames'] = $databaseNames;
}

2. Add the following code to the template file:

<select name="database">
{foreach from=$databaseNames item=database}
<option value="{$database}">{$database}</option>
{/foreach}
</select>

The screen below demonstrates the result output.

Example 4
This example shows the use of the superglobal $_GET array values in a custom template.

1. Specify the OnGetCustomTemplate event handler as follows:

if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {


$result = 'custom_grid.tpl';

// check if the parameter custom_var available


if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
}

2. Add the following code to the template file:

<div>
<h4>I am a custom template with a custom variable $custom_var. Its value

© 2017 SQL Maestro Group


Customizing webpages 91

{if !isset($custom_var)}
still undefined
{else}
= {$custom_var}
{/if}.
</h4>
</div>

Example 4
Let's see the login form customization used in our NBA online demo.

1. Specify the OnGetCustomTemplate event handler as follows:

if ($part == PagePart::LoginPage) {
$result = 'login_page.tpl';
}

2. Add the following code to the template file:

<h2>Logins</h2>
<table class="table table-bordered">
<thead>
<tr>
<th>Username</th>
<th>Password</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>admin</td>
<td>admin</td>
<td>Can modify any record at any page and manage other users.</td>
</tr>
<tr>
<td>lakers</td>
<td>lakers</td>
<td>Can modify team info, home games and players for LA Lakers.</td>
</tr>
<tr>
<td>boston</td>
<td>boston</td>
<td>The same for the Boston Celtics team.</td>
</tr>
<tr>
<td>game_manager</td>
<td>game</td>
<td>Can access only game list. Can modify any game.</td>
</tr>
</tbody>
</table>

Example 5
The example below is used in our NBA demo application to customize the template used
to export a single record to PDF.

if ($part == PagePart::RecordCard && $mode == PageMode::ExportPdf) {


$result = 'game_pdf.tpl';
}

© 2017 SQL Maestro Group


92 MS SQL PHP Generator Help

Live example can be found here.


4.1.4.1.6 OnBeforeInsertRecord

This event occurs when the Insert command is executed, and before the actual
insertion.

Signature:
function OnBeforeInsertRecord ($page, &$rowData, &$cancel, &$message,
&$messageDisplayTime, $tableName)

Parameters:
$page An instance of the Page 215 class declared in components/
page.php.
$rowData The associative array of values that corresponds to the
currently processed row.
$cancel The value indicating whether the operation should be
canceled.
$message The message string that is displayed after the operation is
completed (or canceled).
$messageDisplayTime A time interval (in seconds) after which the message will
disappear automatically. Default value is 0 (the message will
not disappear).
$tableName The name of processed table.

Example:
if (!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
}

See also: OnBeforeUpdateRecord 129 , OnBeforeDeleteRecord 129 , OnAfterInsertRecord 126 .


4.1.4.1.7 OnBeforeUpdateRecord

This event occurs when the Update command is executed, and before the actual
update.

Signature:
function OnBeforeUpdateRecord ($page, &$rowData, &$cancel, &$message,
&$messageDisplayTime, $tableName)

Parameters:
$page An instance of the Page 215 class declared in components/
page.php.
$rowData The associative array of values that corresponds to the
currently processed row.
$cancel The value indicating whether the operation should be
canceled.
$message The message string that is displayed after the operation is

© 2017 SQL Maestro Group


Customizing webpages 93

completed (or canceled).


$messageDisplayTime A time interval (in seconds) after which the message will
disappear automatically. Default value is 0 (the message will
not disappear).
$tableName The name of processed table.

Example:
if (!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
}

See also: OnBeforeDeleteRecord 129 , OnBeforeInsertRecord 128 , OnAfterUpdateRecord 127 .


4.1.4.1.8 OnBeforeDeleteRecord

This event occurs when the Delete command is executed, and before the actual
deletion.

Signature:
function OnBeforeDeleteRecord ($page, &$rowData, &$cancel, &$message,
&$messageDisplayTime, $tableName)

Parameters:
$page An instance of the Page 215 class declared in components/
page.php.
$rowData The associative array of values that corresponds to the
currently processed row.
$cancel The value indicating whether the operation should be
canceled.
$message The message string that is displayed after the operation is
completed (or canceled).
$messageDisplayTime A time interval (in seconds) after which the message will
disappear automatically. Default value is 0 (the message will
not disappear).
$tableName The name of processed table.

Example:
if (!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
}

See also: OnBeforeUpdateRecord 129 , OnBeforeInsertRecord 128 , OnAfterDeleteRecord 127 .


4.1.4.1.9 OnAfterInsertRecord

This event occurs when the Insert command is executed, and after the actual insertion.

Signature:
function OnAfterInsertRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)

© 2017 SQL Maestro Group


94 MS SQL PHP Generator Help

Parameters:
$page An instance of the Page 215 class.
$rowData The associative array of values that corresponds to the currently
processed row.
$tableName The name of processed table.
$success Indicates whether the last data manipulation statement was
successful or not.
$message A message to be displayed to a user. If the statement completed
successfully, the value of this parameter is equal to empty string.
If the statement failed, the value of this parameter contains the
error message that came from the database server.
$messageDisplay A time interval (in seconds) after which the message will
Time disappear automatically. Default value is 0 (the message will not
disappear).

Success messages are displayed in green while error messages are displayed in red.

Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}

See also: OnAfterUpdateRecord 127 , OnAfterDeleteRecord 127 , OnBeforeInsertRecord 128 .


4.1.4.1.10 OnAfterUpdateRecord

This event occurs when the Update command is executed, and after the actual update.

Signature:
function OnAfterUpdateRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)

Parameters:
$page An instance of the Page 215 class.
$rowData The associative array of values that corresponds to the currently
processed row.
$tableName The name of processed table.
$success Indicates whether the last data manipulation statement was
successful or not.
$message A message to be displayed to a user. If the statement completed
successfully, the value of this parameter is equal to empty string.
If the statement failed, the value of this parameter contains the
error message that came from the database server.
$messageDisplay A time interval (in seconds) after which the message will

© 2017 SQL Maestro Group


Customizing webpages 95

Time disappear automatically. Default value is 0 (the message will not


disappear).

Success messages are displayed in green while error messages are displayed in red.

Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}

See also: OnAfterDeleteRecord 127 , OnAfterInsertRecord 126 , OnBeforeUpdateRecord 129 .


4.1.4.1.11 OnAfterDeleteRecord

This event occurs when the Delete command is executed, and after the actual deletion.

Signature:
function OnAfterDeleteRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)

Parameters:
$page An instance of the Page 215 class.
$rowData The associative array of values that corresponds to the currently
processed row.
$tableName The name of processed table.
$success Indicates whether the last data manipulation statement was
successful or not.
$message A message to be displayed to a user. If the statement completed
successfully, the value of this parameter is equal to empty string.
If the statement failed, the value of this parameter contains the
error message that came from the database server.
$messageDisplay A time interval (in seconds) after which the message will
Time disappear automatically. Default value is 0 (the message will not
disappear).

Success messages are displayed in green while error messages are displayed in red.

Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}

See also: OnAfterUpdateRecord 127 , OnAfterInsertRecord 126 , OnBeforeDeleteRecord 129 .

© 2017 SQL Maestro Group


96 MS SQL PHP Generator Help

4.1.4.1.12 OnGetFieldValue

This event occurs on displaying a value of a field. It allows you to replace the actual
value of a field to your own.

Signature:
function OnGetFieldValue ($fieldName, &$value, $tableName)

Parameters:
$fieldName The name of currently processed field.
$value The actual value of the field. Can be changed to another value.
$tableName The name of currently processed table.

Example
This example shows how this event can be used for implementing a very simple
transparent encryption based on the str_rot13 PHP function.

if ($fieldName == 'private_data') {
$value = str_rot13($value);
}

Since the call of this function for an encrypted expression returns the original string, we
can define OnBeforeInsertRecord 128 and OnBeforeUpdateRecord 129 event handlers as
follows:

$rowData['private_data'] = str_rot13($rowData['private_data']);

This is just an example. We would recommend that you use more cryptographically
strong algorithms to encrypt your important data.
4.1.4.1.13 OnGetCustomExportOptions

This event fires on exporting data from a database to a file. It allows you to customize
some advanced export settings.

Signature:
function OnGetCustomExportOptions ($Page page, $exportType, $rowData, &$options)

Parameters:
$page An instance of the Page 215 class.
$exportType The type of the result file. Possible values are "csv", "xls", "doc",
"pdf", "xml".
$rowData An associative array of values that corresponds to the currently
processed row (for exporting a single row). NULL if a record list is
exported.
$options An associative array of options passed to the export engine (see
below).

The list of supported options is as follows:

All export types

© 2017 SQL Maestro Group


Customizing webpages 97

filename The name of the output file.

Export to PDF
orientation Page orientation. Possible values are "P" (portrait orientation) or
"L" (landscape orientation). Default value is "P".

Export to Excel
engine The engine to be used on data export. Possible values are
"template" (template-based export) and "phpexcel" (to create
native .xls files). Default value is "template".

Example
This example shows how to customize the result file name according to row values. If a
record list is exported, the file name is set to list.pdf (list.xml, list.xls, etc).

$options['filename'] = ($rowData ? $rowData['id'] : 'list') . '.' . $exportType;

4.1.4.1.14 OnCustomizePageList

This event allows you to add new groups and items to the application menu (both top-
side and sidebar).

Signature:
function OnCustomizePageList($page, $pageList)

Parameters:
$page An instance of the CommonPage class that corresponds currently
processed page.
$pageList An instance of the PageList class.

Example
This example shows how to add a new group with a couple of links.

$pageList->addGroup('External links');
$pageList->addPage(new PageLink('Home Site', 'http://www.mysite.com',
'Vist my site', false, false, 'External links'));
$pageList->addPage(new PageLink('Get Support', 'http://www.mysite.com/support/',
'Get support for this application', false, false, 'External links'));

4.1.4.1.15 OnGetCustomPagePermissions

This event allows you to customize page-level permissions.

Signature:
function OnGetCustomPagePermissions($page, &$permissions, &$handled)

Parameters:
$page An instance of the Page 215 class.
$permissions Permissions to be applied to the page. An instance of the
PermissionSet 218 class.

© 2017 SQL Maestro Group


98 MS SQL PHP Generator Help

$handled A parameter to indicate whether the new permissions should be


applied. Set $handled to true to apply the changes.

Example
This example shows how to implement a simple role-based permission model. Our goal is
to ensure that only site admins and members of the Sales role can add, remove and edit
records displayed on this page.

// do not apply these rules for site admins


if (!GetApplication()->HasAdminGrantForCurrentUser()) {

// retrieving the ID of the current user


$userId = GetApplication()->GetCurrentUserId();

// retrieving all user roles


$sql =
"SELECT r.role_name " .
"FROM phpgen_user_roles ur " .
"INNER JOIN phpgen_roles r ON r.id = ur.role_id " .
"WHERE ur.user_id = %d";
$result = $page->GetConnection()->fetchAll(sprintf($sql, $userId));

// iterating through retrieved roles


if (!empty($result)) {
foreach ($result as $row) {
// is current user a member of the Sales role?
if ($row['role_name'] === 'Sales') {
// if yes, allow all actions.
// otherwise default permissions for this page will be applied
$permissions->setGrants(true, true, true, true);
break;
}
}
};

// apply the new permissions


$handled = true;
}

See also: OnGetCustomRecordPermissions 137 .

4.1.4.2 Client Side Page Events

MS SQL PHP Generator provides events fired either on the server or client sides.
Handlers for client side events are written on Javascript and executed by browsers while
server side event handlers are written on PHP and executed by a web server.

· OnBeforePageLoad 99

· OnAfterPageLoad 99

· OnInsertFormValidate 99

· OnEditFormValidate 100

· OnInsertFormEditorValueChanged 101

· OnEditFormEditorValueChanged 103

· OnInsertFormLoaded 105

© 2017 SQL Maestro Group


Customizing webpages 99

· OnEditFormLoaded 106

See also: Server Side Events 107

4.1.4.2.1 OnBeforePageLoad

This event occurs before page loading. It allows you to declare functions and global
variables. Use the event to include one or several files of a third-party library into the
generated pages.

Example:
To get the details of the first master record expanded on opening of a certain page of
the generated application, define the expandFirstDetail function within the
OnBeforePageLoad event handler as follows:

function expandFirstDetail() {
if ($('table.pgui-grid').data('grid-class')){
var grid = $('table.pgui-grid').data('grid-class');
var $row = $('table.pgui-grid tr.pg-row').first();
grid.expandDetails($row);
return true;
}
else {
setTimeout(expandFirstDetail, 100);
}
}

This function then should be called within the OnAfterPageLoad 99 event handler.
4.1.4.2.2 OnAfterPageLoad

This event occurs after page has been fully rendered. It does not get triggered until all
assets such as images have been completely received and DOM hierarchy has been fully
constructed.

Example:
To get details of the first record expanded on the webpage opening, specify Javascript
code as follows:

$('a.expand-details').on("click", function() {
setTimeout(highlightWinLossRows, 3000);
});

It is also possible to specify the function above within the OnBeforePageLoad 99 event
handler. In this case the OnAfterPageload event handler should contain only the function
call:

expandFirstDetail();

4.1.4.2.3 OnInsertFormValidate

This event occurs before submitting of an insert form. It allows you to detect errors on
the client side before the form is submitted to the server to avoid the round trip of
information necessary for server-side validation.

Signature:
function OnInsertFormValidate (fieldValues, errorInfo)

© 2017 SQL Maestro Group


100 MS SQL PHP Generator Help

Parameters:
fieldValues An associative array of values containing user input.
errorInfo The object that provides interface (the SetMessage method) to set
a validation error message.

Example 1:
The code below demonstrates the verification of the percent number on the record
inserting.

if (fieldValues['percents'] < 0 || fieldValues['percents'] > 100)


{
errorInfo.SetMessage('Percent value should be between 0 and 100.');
return false;
}

Example 2:
The following code is used in the NBA demo project to ensure that home and away
teams are different for an inserted game:

if (fieldValues['home_team_id'] == fieldValues['away_team_id'])
{
errorInfo.SetMessage('"Home" and "Away" must be different');
return false;
}

See also: OnEditFormValidate 100

4.1.4.2.4 OnEditFormValidate

This event occurs before submitting an edit form. It allows you to detect errors on the
client before the form is submitted to the server to avoid the round trip of information
necessary for server-side validation.

Signature:
function OnEditFormValidate (fieldValues, errorInfo)

Parameters:
fieldValues An associative array of values containing the user input.
errorInfo An object that provides interface (the SetMessage method) to set
a validation error message.

Example 1:
To validate the 'percents' value and show a warning message in case of erroneous input,
use the following code:

if (fieldValues['percents'] < 0 || fieldValues['percents'] > 100)


{
errorInfo.SetMessage('Percent value should be between 0 and 100.');
return false;
}

Example 2:
The following code is used in the NBA demo project to ensure that home and away

© 2017 SQL Maestro Group


Customizing webpages 101

teams are different for an edited game:

if (fieldValues['home_team_id'] == fieldValues['away_team_id'])
{
errorInfo.SetMessage('"Home" and "Away" must be different');
return false;
}

See also: OnInsertFormValidate 99

4.1.4.2.5 OnInsertFormEditorValueChanged

This event occurs on changing a value in the Insert form.

Signature:
function OnInsertFormEditorValueChanged (sender, editors)

Parameters:
sender A control whose value has been changed.
editors An associative array of form controls.

The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 event
handlers.

Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.

console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue() == 1);
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();

© 2017 SQL Maestro Group


102 MS SQL PHP Generator Help

Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).

if (sender.getFieldName() == 'current_team_id')
{
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}

© 2017 SQL Maestro Group


Customizing webpages 103

See also: OnEditFormEditorValueChanged 103

4.1.4.2.6 OnEditFormEditorValueChanged

This event occurs on changing a value in the Edit form.

Signature:
function OnEditFormEditorValueChanged(sender, editor)

Parameters:
sender A control whose value has been changed.
editors An associative array of form controls.

The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 event
handlers.

Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.

console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue() == 1);
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();

© 2017 SQL Maestro Group


104 MS SQL PHP Generator Help

Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).

if (sender.getFieldName() == 'current_team_id')
{
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}

© 2017 SQL Maestro Group


Customizing webpages 105

See also: OnInsertFormEditorValueChanged 101

4.1.4.2.7 OnInsertFormLoaded

This event occurs after an Insert form is loaded.

Signature:
function OnInsertFormLoaded(editor)

Parameters:
editors An associative array of form controls.

Example:
This piece of code targets two things:

1) Player number is cleared and the appropriate control becomes disabled for players
that do not belong to a team.

if (editors['current_team_id'].getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
}
else
editors['current_number'].enabled(true);

2) Player's college is cleared and the appropriate control becomes disabled if player's
country is not USA (country code == 1). The inline hint describes the reason of the
disabling.

editors['college_id'].enabled(editors['country_id'].getValue() == 1);
addInlineHint('college_id', 'College can be selected only for players from USA.')
if (editors['country_id'].getValue() != 1)
editors['college_id'].setValue(null);

© 2017 SQL Maestro Group


106 MS SQL PHP Generator Help

See also: OnEditFormLoaded 106

4.1.4.2.8 OnEditFormLoaded

This event occurs after the Edit form is loaded.

Signature:
function OnEditFormLoaded(editor)

Parameters:
editors An associative array of form controls.

Example:
This piece of code targets two things:

1) Player number is cleared and the appropriate control becomes disabled for players
that do not belong to a team.

if (editors['current_team_id'].getValue() == '') {
editors['current_number'].setValue('');
editors['current_number'].setEnabled(false);
}
else {
editors['current_number'].setEnabled(true);
}

2) Player's college is cleared and the appropriate control becomes disabled if player's
country is not USA (country code == 1).

editors['college_id'].setEnabled(editors['country_id'].getValue() == 1);

© 2017 SQL Maestro Group


Customizing webpages 107

if (editors['country_id'].getValue() != 1)
editors['college_id'].setValue(null);

See also: OnInsertFormLoaded 105

4.1.4.3 Server Side Page Events

MS SQL PHP Generator provides events fired either on the server or client sides.
Handlers for client side events are written on Javascript and executed by browsers
while server side event handlers are written on PHP and executed by a web server.

· OnBeforePageExecute 108

· OnPreparePage 108

· OnCustomRenderColumn 110

· OnCustomRenderPrintColumn 113

· OnCustomRenderExportColumn 113

· OnCustomHTMLHeader 114

· OnExtendedCustomDrawRow 114

· OnCustomRenderTotals 117

· OnGetCustomTemplate 118

· OnCustomDrawRow 125

· OnAfterUpdateRecord 127

· OnAfterDeleteRecord 127

· OnAfterInsertRecord 126

· OnBeforeUpdateRecord 129

© 2017 SQL Maestro Group


108 MS SQL PHP Generator Help

· OnBeforeDeleteRecord 129

· OnBeforeInsertRecord 128

· OnGetFieldValue 130

· OnGetCustomExportOptions 130

· OnPrepareFilterBuilder 131

· OnPrepareColumnFilter 132

· OnGetCustomFormLayout 133

· OnGetCustomColumnGroup 134

· OnCustomCompareValues 135

· OnGetCustomUploadFileName 136

· OnGetCustomPagePermissions 136

· OnGetCustomRecordPermissions 137

Using variables
MS SQL PHP Generator supports some environment variables (such as
CURRENT_USER_ID, CURRENT_USER_NAME, UNIQUE_ID) in events. To obtain a complete
list of supported variables, turn ON the "Show environment variables" option in the
Project options dialog, re-generate the code and then open any of produced web pages
in the browser. The following example demonstrates how to use variables within the
OnBeforeInsertRecord 128 event handler.

$rowData['ip_address'] = $this->GetEnvVar('REMOTE_ADDR');
$userName = $this->GetEnvVar('CURRENT_USER_NAME');
if ($userName != 'admin')
$rowData['changed_by'] = $userName;

See also: Client Side Events 98

4.1.4.3.1 OnBeforePageExecute

This event handler contains PHP code to be included into the page. This code is
executed only once and intended to create global objects, declare functions, include
third-party libraries, and so on.

Example
Suppose we decided to implement a syntax highlighting using the GeSHi library
somewhere in the generated application. To implement such a feature, we need (among
other things) to include the main library file into the generated scripts, so the event
handler should be specified as follows:

include_once '../geshi/geshi.php';

4.1.4.3.2 OnPreparePage

This piece of code is a method of the Page class that is called at the end of the
constructor. It allows you to customize all members of the class.

Signature:
function OnPreparePage()

© 2017 SQL Maestro Group


Customizing webpages 109

Parameters:
This method has no parameters.

Example
The following code hides the update_date_time column from the data grid and Single
Record View form as well as the status column from Edit and Insert forms from all users
except ones who have the Admin privilege for the current page.

if (!GetApplication()->IsLoggedInAsAdmin()) {
$updateDateTimeColumnName = 'update_date_time';
$column = $this->GetGrid()->getSingleRecordViewColumn($updateDateTimeColumnName);
if ($column) {
$column->setVisible(false);
}
$column = $this->GetGrid()->getViewColumn($updateDateTimeColumnName);
if ($column) {
$column->setVisible(false);
}

$statusColumnName = 'status';
$column = $this->GetGrid()->getEditColumn($statusColumnName);
if ($column) {
$column->setVisible(false);
}
$column = $this->GetGrid()->getInsertColumn($statusColumnName);
if ($column) {
$column->setVisible(false);
}
}

4.1.4.3.3 OnPageLoaded

This event occurs after the page is completely loaded from the server. It allows you, for
example, to add additional filters to the dataset.

Signature:
function OnPageLoaded()

Parameters:
This method has no parameters.

Example 1
The following code is used in our Schema Browser Demo to filter database objects
belonging to the selected database:

applyDatasetFilter($this->dataset);

Here applyDatasetFilter() is a function defined in the schema_browser_utils.php file as


follows:

function applyDatasetFilter(Dataset $dataset) {


if (GetApplication()->IsGETValueSet('database'))
$value = GetApplication()->GetGETValue('database');
else
$value = ArrayUtils::GetArrayValueDef($_COOKIE, 'database');

© 2017 SQL Maestro Group


110 MS SQL PHP Generator Help

if (StringUtils::IsNullOrEmpty($value)) {
$globalConnectionOptions = GetGlobalConnectionOptions();
$value = $globalConnectionOptions['database'];
}
if (!StringUtils::IsNullOrEmpty($value)) {
$dataset->AddFieldFilter('Database_name', new FieldFilter($value, '='));
setcookie('database', $value);
}
}

Example 2
The following code is used in our Feature Demo to filter countries according to the
values selected in the form:

// default values
$minLifeExpectancy = 40;
$maxLifeExpectancy = 90;

// checking values in the browser address line


if (GetApplication()->isGetValueSet('minLifeExpectancy') &&
GetApplication()->isGetValueSet('maxLifeExpectancy')) {
$minLifeExpectancy = GetApplication()->GetGETValue('minLifeExpectancy');
$maxLifeExpectancy = GetApplication()->GetGETValue('maxLifeExpectancy');

// or (if not found) in the session


} else if (isset($_SESSION['minLifeExpectancy']) &&
isset($_SESSION['maxLifeExpectancy'])) {
$minLifeExpectancy = $_SESSION['minLifeExpectancy'];
$maxLifeExpectancy = $_SESSION['maxLifeExpectancy'];
}

// saving calculated values to the session


$_SESSION['minLifeExpectancy'] = $minLifeExpectancy;
$_SESSION['maxLifeExpectancy'] = $maxLifeExpectancy;

// applying filter to the dataset


$this->dataset->AddCustomCondition(
"life_expectancy >= {$minLifeExpectancy} ".
"AND life_expectancy <= {$maxLifeExpectancy}");

4.1.4.3.4 OnCustomRenderColumn

This event occurs before column rendering and allows you to completely replace the cell
content. It is an extremely useful event for conditional rendering or embedding third-
party components to extend standard functionality.

Signature:
function OnCustomRenderColumn ($fieldName, $fieldData, $rowData,
&$customText, &$handled)

Parameters:
$fieldName The field name for the currently processed cell.
$fieldData The data of currently processed cell.
$rowData The associative array of values that corresponds to the currently
processed row.
$customText A string to replace the original cell content.

© 2017 SQL Maestro Group


Customizing webpages 111

$handled A parameter to indicate whether the event handler takes effect.


Set $handled to true to apply the new content.

Example 1:
Suppose a table 'employee' has a column storing data about the employee's sex in that
way that '1' corresponds to male and '2' to female. Our goal is to represent the
employees sex as 'M' and 'F' for men and women accordingly. To do so, you could
specify the OnCustomRenderColumn event handler as follows:

if ($fieldName == 'sex') {
$customText = $rowData['sex'] == 1 ? 'M' : 'F';
$handled = true;
}

Example 2:
The code below is used in our demo project to show the number of overtime periods
played in the game.

if ($fieldName == 'overtime_count') {
if ($fieldData > 0)
$customText = $fieldData . ' OT';
else
$customText = '-';
$handled = true;
}

The screenshot demonstrates the result of this event fired on the Games webpage.

Example 3:
The code below is used in our demo project to add flag images to the "Country" column.

if ($fieldName == 'current_team_id')
{
if (!isset($fieldData))
{
$customText = 'Free agent';
$handled = true;
}
}
elseif ($fieldName == 'country_id')
{
$countriesPics = array (
1 => 'us',
2 => 'fr',
3 => 'br',
4 => 'it',
6 => 'sp',

© 2017 SQL Maestro Group


112 MS SQL PHP Generator Help

8 => 'ar',
11 => 'li',
15 => 'ru',
18 => 'gr',
20 => 'ge'
);
$customText =
'<div style="width: 80px; text-align: left;">' .
'<img src="countries/'.$countriesPics[$rowData['country_id']].'.png">' .
'&nbsp;' . $fieldData .
'</div>';
$handled = true;
}

Example 4
This example demonstrates the applying of the syntax highlighting provided by the Geshi
library. We use this library to highlight SQL syntax in strings stored in the 'Body' column.

if ($fieldName == 'Body') {
$source = $rowData['Body'];
$language = 'sql';
$formatted_sql = SqlFormatter::format($source, false);
$geshi = new GeSHi($formatted_sql, $language);
$customText = '<div align="left">'.$geshi->parse_code().'</div>';
$handled = true;
}

© 2017 SQL Maestro Group


Customizing webpages 113

See also: OnCustomRenderPrintColumn 113 , OnCustomRenderExportColumn 113

4.1.4.3.5 OnCustomRenderPrintColumn

This event occurs before column rendering on the print page and allows you to replace
cell content. It is an extremely useful for conditional rendering or embedding third-party
components to extend standard functionality.

Signature:
function OnCustomRenderPrintColumn ($fieldName, $fieldData, $rowData,
&$customText, &$handled)

Parameters:
$fieldName The field name of currently processed cell.
$fieldData The data of currently processed cell.
$rowData The associative array of values that corresponds to the currently
processed row.
$customText A string to replace the original cell content.
$handled A parameter to indicate whether the event handler executed. Set
$handled to true in the event handler to apply new content.

See also: OnCustomRenderColumn 110 , OnCustomRenderExportColumn 113

4.1.4.3.6 OnCustomRenderExportColumn

This event occurs before column rendering into Word, Excel, etc. and allows you to
replace cell content. It is an extremely useful event for conditional rendering.

Signature:
function OnCustomRenderExportColumn ($fieldName, $fieldData, $rowData,
&$customText, &$handled)

Parameters:
$fieldName The field name of currently processed cell.
$fieldData The data of currently processed cell.

© 2017 SQL Maestro Group


114 MS SQL PHP Generator Help

$rowData The associative array of values that corresponds to the currently


processed row.
$customText A string to replace the original cell content.
$handled A parameter to indicate whether the event handler executed. Set
$handled to true in the event handler to apply new content.

See also: OnCustomRenderColumn 110 , OnCustomRenderPrintColumn 113

4.1.4.3.7 OnCustomHTMLHeader

This event occurs when the head section of the page is generating. Use it to provide
additional information for the HEAD section of the page (such as keywords, author, or
description).

Signature:
function OnCustomHTMLHeader ($page, &$customHtmlHeaderText)

Parameters:
$page An instance of the Page class declared in components/
page.php
$customHtmlHeaderText A string to place into the head section

Example:
The following code demonstrates how to use this event to add metadata to the
generated webpage.

$customHtmlHeaderText = '<meta name="copyright" content="SQL Maestro Group"/>';

4.1.4.3.8 OnExtendedCustomDrawRow

This event occurs when rendering a grid row and allows you to change the row and/or
cell styles directly. It is an extremely useful event for conditional formatting such as
changing font color, font styles, row background color, cell background color, etc. The
specified styles and classes are applied to <tr> and <td> tags accordingly.

Signature:
function OnExtendedCustomDrawRow ($rowData, &$rowCellStyles, &$rowStyles,
&$rowClasses, &$cellClasses)

Parameters:
$rowData The associative array of values that corresponds to the currently
processed row.
$rowCellStyles The associative array of styles. Each field name is associated
with its style string.
$rowStyles Use this string to modify styles of a whole row.
$rowClasses Use this string to add a class to a whole row.
$cellClasses The associative array of cell classes.

This event (as well as the OnCustomDrawRow 125 one) is used for conditional formatting.
The only difference between these two events is that OnCustomDrawRow has a more

© 2017 SQL Maestro Group


Customizing webpages 115

understandable parameter list while OnExtendedCustomDrawRow provides more flexible


abilities.

Example 1:
The code below is used in our online demo to display the winning team and the losing
team scores according to the current theme.

if ($rowData['home_team_score'] > $rowData['away_team_score']) {


$cellClasses['home_team_score'] = 'win-score';
$cellClasses['away_team_score'] = 'loss-score';
}
else {
$cellClasses['home_team_score'] = 'loss-score';
$cellClasses['away_team_score'] = 'win-score';
}

The 'win-score' and 'loss-score' classes are defined in User-defined styles as follows:

.base-score {
font-size: 1.4em;
font-weight: bold;
}

.win-score {
&:extend(.base-score);
color: @brand-danger;
}

.loss-score {
&:extend(.base-score);
}

The screenshot below demonstrates the result of the event fired on the Game list
webpage in Cyborg Bootswatch theme for Bootstrap.

The next one shows the result of the event fired on this webpage in Facebook
Bootswatch theme.

© 2017 SQL Maestro Group


116 MS SQL PHP Generator Help

Example 2
The code below is used in our online demo to highlight fields representing player's height
depending on the value.

$height = $rowData['height'];
if ($height > 200)
$cellClass = 'tall';
elseif ($height > 185)
$cellClass = 'medium-height';
else
$cellClass = 'undersized';
$cellClasses ['height'] = $cellClass;

The 'undersized', 'medium-height', and 'tall' classes are defined in User Defined Styles as
follows:

@height-color: @state-warning-bg;

.undersized {
background-color: lighten(@height-color, 10%);
}

.medium-height {
background-color: @height-color;
}

.tall {
background-color: darken(@height-color, 10%);
}

The screenshot below demonstrates the result of the event fired on the Game list
webpage in Journal Bootswatch theme for Bootstrap.

© 2017 SQL Maestro Group


Customizing webpages 117

The next one shows the result of the event fired on this webpage in Superhero
Bootswatch theme.

4.1.4.3.9 OnCustomRenderTotals

This event occurs before total values rendering and allows you to replace the default
total footer content. To use it, enable the grid footer in the View properties 34 of the
corresponding column.

Signature:
function OnCustomRenderTotals ($totalValue, $aggregate, $columnName,
&$customText, &$handled)

Parameters:
$totalValue The value of currently processed total.
$aggregate The string representation of total aggregate ('AVG', 'SUM', 'MIN',
'MAX', 'COUNT').

© 2017 SQL Maestro Group


118 MS SQL PHP Generator Help

$columnName The column name of currently processed total.


$customText A string to replace the total cell content.
$handled A parameter to indicate whether the event handler executed. Set
$handled to true in the event handler to apply new content.

Example 1:
The code below changes the caption of the 'amount' column footer and gives it strong
importance.

if ($columnName == 'amount')
{
$customText = '<strong>Total: $' . $totalValue . '</strong>';
$handled = true;
}

This picture demonstrates the difference between a webpage generated with default
footer and a webpage with the OnCuStomRenderTotals event specified in this way:

Example 2:
The code below is used in our online demo on the 'Teams' page to display the year of
foundation of the oldest team on the page in more convenient form.

if ($columnName == 'year_founded') {
$customText = 'MIN: ' . intval(str_replace(',', '', $totalValue));
$handled = true;
}

4.1.4.3.10 OnGetCustomTemplate

This event allows you to customize almost any part of the generated application using
an own template instead of the default one.

© 2017 SQL Maestro Group


Customizing webpages 119

Signature:
function OnGetCustomTemplate ($part, $mode, &$result, &$params)

Parameters:
$part The part of the page to be affected by the template.
$mode The current state of the webpage the template to be used.
$result The path to the file to be used as template according to the
components/templates/custom_templates folder.
$params An associative array of additional parameters you want to assign
to the template.

PHP Generator uses Smarty 2.0 as template language. If you are not familiar with web
template engines, you might want to start here.

Our Feature Demo provides a number of live examples of customized templates. We


would recommend you to study them carefully before trying to customize your
application.

To customize a webpage, you need to:

· create a new template to be used for this webpage;


· instruct PHP Generator to use this template for the selected webpage.

The simplest way to create a new template is to modify an existing one (it is much
easier than create a new template "from scratch"). Use the table below to select the
template corresponding to the necessary state of page and page part. Custom template
files should be uploaded to the 'components/templates/custom_templates' directory.
This folder should be created by the user of PHP Generator and its content is not
changing during the further PHP Generator sessions.

State of Page Part Default template Parameters


the
webpage

webpage common/layout.tpl PagePart::Layout


layout Any PageMode

All Pages page_list_menu.tpl PagePart::PageList


(for top-side menu) Any PageMode
page list
page_list_sidebar.tpl
(for sidebar menu)
list/grid_table.tpl PagePart::Grid
(for grid view mode) PageMode::ViewAll
List page table grid
list/grid_card.tpl
(for card view mode)

© 2017 SQL Maestro Group


120 MS SQL PHP Generator Help

list/single_row.tpl PagePart::GridRow
(for grid view mode) PageMode::ViewAll
single row
list/sinlge_row_card.tpl
(for card view mode)
view/grid.tpl PagePart::RecordCard
View (separate page) PageMode::View

forms/form.tpl PagePart::VerticalGrid
Edit form (editors area) PageMode::EditForm

forms/form.tpl PagePart::VerticalGrid
Insert form (editors area) PageMode::InsertForm

compare/grid.tpl PagePart::Grid
Record comparison page PageMode::Compare

forms/page_form.tpl PagePart::VerticalGrid
Edit (separate page) PageMode::Edit

forms/page_form.tpl PagePart::VerticalGrid
Insert (separate page) PageMode::Insert

forms/modal_form.tpl PagePart::VerticalGrid
Edit (modal dialog) PageMode::ModalEdit

forms/modal_form.tpl PagePart::VerticalGrid
Insert (modal dialog) PageMode::ModalInsert

view/record_card_view.tpl PagePart::VerticalGrid
View (modal dialog) PageMode::ModalView

forms/inline_form.tpl PagePart::VerticalGrid
Edit (inline form) PageMode::InlineEdit

forms/inline_form.tpl PagePart::VerticalGrid
Insert (inline form) PageMode::InlineInsert

print/page.tpl PagePart::PrintLayout
webpage
PageMode::PrintAll
layout
Print
print/grid.tpl PagePart::Grid
table grid PageMode::PrintAll

© 2017 SQL Maestro Group


Customizing webpages 121

print/detail_page.tpl PagePart::PrintLayout
detail page PageMode::PrintDetailPage

export/pdf_grid.tpl, export/ PagePart::Grid


excel_grid.tpl, export/ PageMode::ExportPdf,
data grid csv_grid.tpl, etc PageMode::ExportExcel,
PageMode::ExportCsv,
Export etc
export/pdf_record.tpl PagePart::RecordCard
single record
PageMode::ExportPdf
(PDF only)

print/page.tpl PagePart::PrintLayout
webpage
PageMode::PrintOneRecord
Print layout
Single
Record view/print_grid.tpl PagePart::Grid
table grid PageMode::PrintOneRecord

login_page.tpl PagePart::LoginPage
Login page

login_control.tpl PagePart::LoginControl
Login control

home_page.tpl PagePart::HomePage
Home page

navigation.tpl PagePart::Navigation
Navigation

To instruct PHP Generator to use a customized template file for a certain webpage,
specify the following code in the page's OnGetCustomTemplate event handler (of course
you should replace YourPart and YourMode to the appropriate values from the table
above).

if ($part == YourPart && $mode == YourMode) {


$result = 'your_template_file.tpl';
}

Example 1:
Suppose we need to use components/templates/custom_templates/staff_edit.tpl file as
a template for the edit form of a webpage.

if ($part == PagePart::VerticalGrid && $mode == PageMode::Edit) {


$result = 'staff_edit.tpl';
}

Now we can compare the result webpages without using this event and with the enabled

© 2017 SQL Maestro Group


122 MS SQL PHP Generator Help

one:

Example 2:
A single event handler can be used to customize multiple templates:

if ($part == PagePart::Grid && $mode == PageMode::ViewAll)


$result = 'games_grid.tpl';
if ($part == PagePart::VerticalGrid && $mode == PageMode::Edit)
$result = 'games_edit.tpl';
if ($part == PagePart::RecordCard && $mode == PageMode::View)
$result = 'games_view.tpl';

Example 3
This example shows how to fill a SELECT input with names of all MySQL databases
available at the server.

1. Specify the OnGetCustomTemplate event handler as follows:

// set the template file


if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {
$result = 'custom_grid.tpl';

© 2017 SQL Maestro Group


Customizing webpages 123

// get the list of available databases


$queryResult = array();
$this->GetConnection()->ExecQueryToArray('SHOW DATABASES', $queryResult);

// fill a one-dimensional array with database names


$databaseNames = array();
foreach($queryResult as $row)
$databaseNames[] = $row[0];

// assign the parameter in the template


$params['databaseNames'] = $databaseNames;
}

2. Add the following code to the template file:

<select name="database">
{foreach from=$databaseNames item=database}
<option value="{$database}">{$database}</option>
{/foreach}
</select>

The screen below demonstrates the result output.

Example 4
This example shows the use of the superglobal $_GET array values in a custom template.

1. Specify the OnGetCustomTemplate event handler as follows:

if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {


$result = 'custom_grid.tpl';

// check if the parameter custom_var available


if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
}

2. Add the following code to the template file:

© 2017 SQL Maestro Group


124 MS SQL PHP Generator Help

<div>
<h4>I am a custom template with a custom variable $custom_var. Its value
{if !isset($custom_var)}
still undefined
{else}
= {$custom_var}
{/if}.
</h4>
</div>

Example 4
Let's see the login form customization used in our NBA online demo.

1. Specify the OnGetCustomTemplate event handler as follows:

if ($part == PagePart::LoginPage) {
$result = 'login_page.tpl';
}

2. Add the following code to the template file:

<h2>Logins</h2>
<table class="table table-bordered">
<thead>
<tr>
<th>Username</th>
<th>Password</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>admin</td>
<td>admin</td>
<td>Can modify any record at any page and manage other users.</td>
</tr>
<tr>
<td>lakers</td>
<td>lakers</td>
<td>Can modify team info, home games and players for LA Lakers.</td>
</tr>
<tr>
<td>boston</td>
<td>boston</td>
<td>The same for the Boston Celtics team.</td>
</tr>
<tr>
<td>game_manager</td>
<td>game</td>
<td>Can access only game list. Can modify any game.</td>
</tr>
</tbody>
</table>

Example 5
The example below is used in our NBA demo application to customize the template used
to export a single record to PDF.

if ($part == PagePart::RecordCard && $mode == PageMode::ExportPdf) {

© 2017 SQL Maestro Group


Customizing webpages 125

$result = 'game_pdf.tpl';
}

Live example can be found here.


4.1.4.3.11 OnCustomDrawRow

This event occurs on rendering a grid row. It is an extremely useful event for conditional
formatting such as changing font color, font styles, row background color, cell
background color, etc. This event (as well as the OnExtendedCustomDrawRow 114 one) is
used for conditional formatting. The only difference between these two events is that
OnCustomDrawRow has a more understandable parameter list while
OnExtendedCustomDrawRow provides more flexible abilities.

Signature:
function OnCustomDrawRow ($rowData, &$cellFontColor, &$cellFontSize, &$cellBgColor,
&$cellItalicAttr, &$cellBoldAttr)

Parameters:
$rowData The associative array of values that corresponds to the currently
processed row.
$cellFontColor The parameter allows to set a font color for selected fields.
$cellFontSize The parameter defines a font size of selected data.
$cellBgColor The parameter allows to set a background color of fields.
$cellItalicAttr Set the parameter to true to represent text in cursive font.
$cellBoldAttr Set the parameter to true to use bold font.

NB. $rowData array keys should contain the real column names in the data source
(table, view, or query). Don't use column captions instead!

Example 1:
Suppose we need to create a webpage with list of customers with addresses
represented in cursive. This column in the data source is named 'address_id' and the
column's caption is "Address".

To define the font attribute, use the following code:

$cellItalicAttr['address_id'] = true;

Example 2:

© 2017 SQL Maestro Group


126 MS SQL PHP Generator Help

In the example below we need to display winning team score in red and losing team
score in black; moreover, both scores should be in bold and displayed by a 16pt font.

$cellFontSize['home_team_score'] = '16pt';
$cellBoldAttr['home_team_score'] = true;

$cellFontSize['away_team_score'] = '16pt';
$cellBoldAttr['away_team_score'] = true;

if ($rowData['home_team_score'] > $rowData['away_team_score'])


$cellFontColor['home_team_score'] = '#F65317';
else
$cellFontColor['away_team_score'] = '#000000';

4.1.4.3.12 OnAfterInsertRecord

This event occurs when the Insert command is executed, and after the actual insertion.

Signature:
function OnAfterInsertRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)

Parameters:
$page An instance of the Page 215 class.
$rowData The associative array of values that corresponds to the currently
processed row.
$tableName The name of processed table.
$success Indicates whether the last data manipulation statement was
successful or not.
$message A message to be displayed to a user. If the statement completed
successfully, the value of this parameter is equal to empty string.
If the statement failed, the value of this parameter contains the
error message that came from the database server.
$messageDisplay A time interval (in seconds) after which the message will
Time disappear automatically. Default value is 0 (the message will not
disappear).

Success messages are displayed in green while error messages are displayed in red.

Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}

See also: OnAfterUpdateRecord 127 , OnAfterDeleteRecord 127 , OnBeforeInsertRecord 128 .

© 2017 SQL Maestro Group


Customizing webpages 127

4.1.4.3.13 OnAfterUpdateRecord

This event occurs when the Update command is executed, and after the actual update.

Signature:
function OnAfterUpdateRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)

Parameters:
$page An instance of the Page 215 class.
$rowData The associative array of values that corresponds to the currently
processed row.
$tableName The name of processed table.
$success Indicates whether the last data manipulation statement was
successful or not.
$message A message to be displayed to a user. If the statement completed
successfully, the value of this parameter is equal to empty string.
If the statement failed, the value of this parameter contains the
error message that came from the database server.
$messageDisplay A time interval (in seconds) after which the message will
Time disappear automatically. Default value is 0 (the message will not
disappear).

Success messages are displayed in green while error messages are displayed in red.

Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}

See also: OnAfterDeleteRecord 127 , OnAfterInsertRecord 126 , OnBeforeUpdateRecord 129 .


4.1.4.3.14 OnAfterDeleteRecord

This event occurs when the Delete command is executed, and after the actual deletion.

Signature:
function OnAfterDeleteRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)

Parameters:
$page An instance of the Page 215 class.
$rowData The associative array of values that corresponds to the currently
processed row.
$tableName The name of processed table.
$success Indicates whether the last data manipulation statement was

© 2017 SQL Maestro Group


128 MS SQL PHP Generator Help

successful or not.
$message A message to be displayed to a user. If the statement completed
successfully, the value of this parameter is equal to empty string.
If the statement failed, the value of this parameter contains the
error message that came from the database server.
$messageDisplay A time interval (in seconds) after which the message will
Time disappear automatically. Default value is 0 (the message will not
disappear).

Success messages are displayed in green while error messages are displayed in red.

Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}

See also: OnAfterUpdateRecord 127 , OnAfterInsertRecord 126 , OnBeforeDeleteRecord 129 .


4.1.4.3.15 OnBeforeInsertRecord

This event occurs when the Insert command is executed, and before the actual
insertion.

Signature:
function OnBeforeInsertRecord ($page, &$rowData, &$cancel, &$message,
&$messageDisplayTime, $tableName)

Parameters:
$page An instance of the Page 215 class declared in components/
page.php.
$rowData The associative array of values that corresponds to the
currently processed row.
$cancel The value indicating whether the operation should be
canceled.
$message The message string that is displayed after the operation is
completed (or canceled).
$messageDisplayTime A time interval (in seconds) after which the message will
disappear automatically. Default value is 0 (the message will
not disappear).
$tableName The name of processed table.

Example:
if (!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
}

© 2017 SQL Maestro Group


Customizing webpages 129

See also: OnBeforeUpdateRecord 129 , OnBeforeDeleteRecord 129 , OnAfterInsertRecord 126 .


4.1.4.3.16 OnBeforeUpdateRecord

This event occurs when the Update command is executed, and before the actual
update.

Signature:
function OnBeforeUpdateRecord ($page, &$rowData, &$cancel, &$message,
&$messageDisplayTime, $tableName)

Parameters:
$page An instance of the Page 215 class declared in components/
page.php.
$rowData The associative array of values that corresponds to the
currently processed row.
$cancel The value indicating whether the operation should be
canceled.
$message The message string that is displayed after the operation is
completed (or canceled).
$messageDisplayTime A time interval (in seconds) after which the message will
disappear automatically. Default value is 0 (the message will
not disappear).
$tableName The name of processed table.

Example:
if (!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
}

See also: OnBeforeDeleteRecord 129 , OnBeforeInsertRecord 128 , OnAfterUpdateRecord 127 .


4.1.4.3.17 OnBeforeDeleteRecord

This event occurs when the Delete command is executed, and before the actual
deletion.

Signature:
function OnBeforeDeleteRecord ($page, &$rowData, &$cancel, &$message,
&$messageDisplayTime, $tableName)

Parameters:
$page An instance of the Page 215 class declared in components/
page.php.
$rowData The associative array of values that corresponds to the
currently processed row.
$cancel The value indicating whether the operation should be
canceled.
$message The message string that is displayed after the operation is
completed (or canceled).

© 2017 SQL Maestro Group


130 MS SQL PHP Generator Help

$messageDisplayTime A time interval (in seconds) after which the message will
disappear automatically. Default value is 0 (the message will
not disappear).
$tableName The name of processed table.

Example:
if (!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
}

See also: OnBeforeUpdateRecord 129 , OnBeforeInsertRecord 128 , OnAfterDeleteRecord 127 .


4.1.4.3.18 OnGetFieldValue

This event occurs on displaying a value of a field. It allows you to replace the actual
value of a field to your own.

Signature:
function OnGetFieldValue ($fieldName, &$value, $tableName)

Parameters:
$fieldName The name of currently processed field.
$value The actual value of the field. Can be changed to another value.
$tableName The name of currently processed table.

Example
This example shows how this event can be used for implementing a very simple
transparent encryption based on the str_rot13 PHP function.

if ($fieldName == 'private_data') {
$value = str_rot13($value);
}

Since the call of this function for an encrypted expression returns the original string, we
can define OnBeforeInsertRecord 128 and OnBeforeUpdateRecord 129 event handlers as
follows:

$rowData['private_data'] = str_rot13($rowData['private_data']);

This is just an example. We would recommend that you use more cryptographically
strong algorithms to encrypt your important data.
4.1.4.3.19 OnGetCustomExportOptions

This event fires on exporting data from a database to a file. It allows you to customize
some advanced export settings.

Signature:
function OnGetCustomExportOptions ($Page page, $exportType, $rowData, &$options)

Parameters:
$page An instance of the Page 215 class.

© 2017 SQL Maestro Group


Customizing webpages 131

$exportType The type of the result file. Possible values are "csv", "xls", "doc",
"pdf", "xml".
$rowData An associative array of values that corresponds to the currently
processed row (for exporting a single row). NULL if a record list is
exported.
$options An associative array of options passed to the export engine (see
below).

The list of supported options is as follows:

All export types


filename The name of the output file.

Export to PDF
orientation Page orientation. Possible values are "P" (portrait orientation) or
"L" (landscape orientation). Default value is "P".

Export to Excel
engine The engine to be used on data export. Possible values are
"template" (template-based export) and "phpexcel" (to create
native .xls files). Default value is "template".

Example
This example shows how to customize the result file name according to row values. If a
record list is exported, the file name is set to list.pdf (list.xml, list.xls, etc).

$options['filename'] = ($rowData ? $rowData['id'] : 'list') . '.' . $exportType;

4.1.4.3.20 OnPrepareFilterBuilder

This event allows you to setup initial condition for the Filter Builder tool.

Signature:
function OnPrepareFilterBuilder(FilterBuilder $filterBuilder,
FixedKeysArray $columns)

Parameters:
$filterBuilder An instance of the FilterBuilder class.
$columns An associative array of columns available in the tool.

Example
This example shows how to setup initial value for Filter Builder (available live in the
Feature Demo).

$rootGroup = new FilterGroup(FilterGroupOperator::OPERATOR_AND,


array(
new FilterCondition($columns['rating'],
FilterConditionOperator::IS_BETWEEN, array(5, 7)),
new FilterCondition($columns['genre_id'],
FilterConditionOperator::EQUALS, array(14), array('Fantasy'))
)

© 2017 SQL Maestro Group


132 MS SQL PHP Generator Help

);
$filterBuilder->setFilterComponent($rootGroup);

4.1.4.3.21 OnPrepareColumnFilter

This event allows you to customize column-specific filters.

Signature:
function OnPrepareColumnFilter ($columnFilter)

Parameters:
$columnFilter An instance of the ColumnFilter class.

All examples below can be seen in action in the Feature Demo.

Example 1
This example shows how to setup a column filter as a list of custom values.

$columnFilter->setOptionsFor(
'rating',
array(
"Less than 3" => FilterCondition::lessThan(3),
"4-5" => FilterCondition::between(4, 5),
"6-7" => FilterCondition::between(6, 7),
"7-8" => FilterCondition::between(7, 8),
"Higher than 8" => FilterCondition::greaterThan(8)
),
false // no default values
);

Example 2
This example shows how to group custom values.

$columnFilter->setOptionsFor(
'runtime',
array(
'Shorter than 90 min' => FilterCondition::lessThan(90),
'90 - 180 min' => FilterGroup::orX(
array(
'90-120 min' => FilterCondition::between(90, 120),
'120-150 min' => FilterCondition::between(120, 150),
'150-180 min' => FilterCondition::between(150, 180)
)
),
'Longer than 180 min' => FilterCondition::greaterThan(180)
),
false // no default values
);

Example 3
This example shows how to add custom values to default ones.

$columnFilter->setOptionsFor('release_date',
array(
'2010s' => FilterCondition::between('2010-01-01', '2019-12-31'),
'2000s' => FilterCondition::between('2000-01-01', '2009-12-31')

© 2017 SQL Maestro Group


Customizing webpages 133

),
true // add default values (this parameter can be omitted)
);

4.1.4.3.22 OnGetCustomFormLayout

This event allows you to customize the layout for View, Edit, and Insert forms.

Signature:
function OnGetCustomFormLayout($mode, FixedKeysArray $columns,
FormLayout $layout)

Parameters
$mode The form mode. Possible values are "edit", "inline_edit",
"insert", "inline_insert", and "view".
$columns The associative array of columns displayed in the form.
$layout An instance of the FormLayout class.

Layout structure
The layout has the following hierarchical structure: layout -> groups -> rows ->
columns. This means you can add groups to the layout, rows to groups, and columns to
rows.

Layout mode
By default all forms are horizontal i.e. the control label is placed on the left of the editor
(for vertical forms the label is placed on the top of the editor). To create a vertical
form, use the following call:

$layout->setMode(FormLayoutMode::VERTICAL);

Adding a group
To add a new group to the layout, use the addGroup method of the FormLayout class:

function addGroup($name = null, $width = 12);

This function returns an instance of the FormLayoutGroup class that can be later used
to add rows to the new group (see below). Width is provided in relative units, possible
values are integers from 1 to 12.

Adding rows to a group


To add a new row to a group, use the addRow method of the FormLayoutGroup class
(see above):

function addRow();

This function has no parameters and returns an instance of the FormLayoutRow class
that can be later used to add controls to the new row (see below).

Adding controls to a row


To add a new control to a row, use the addCol method of the FormLayoutRow class
(see above):

© 2017 SQL Maestro Group


134 MS SQL PHP Generator Help

function addCol($column, $inputWidth = null, $labelWidth = null);

This function also returns an instance of the FormLayoutRow class to allow method
chaining. Here $column is an element of the $columns array and $inputWidth and
$labelWidth are relative widths of the editor and its label accordingly ($labelWidth can
be used only for horizontal forms).

Examples
All the examples below can be seen live in our Feature Demo.

Example 1
This example shows how to create a simple group with 2 rows and 2 controls in each
row (all controls have equal width):

$displayGroup = $layout->addGroup('Display');
$displayGroup->addRow()
->addCol($columns['display_type'], 6)
->addCol($columns['display_size'], 6);
$displayGroup->addRow()
->addCol($columns['display_resolution_x'], 6)
->addCol($columns['display_resolution_y'], 6);

Example 2
This example shows how to create a group and place 3 editors in the same row:

$storageGroup = $layout->addGroup('Storage', 12);


$storageGroup->addRow()
->addCol($columns['storage_min'], 4)
->addCol($columns['storage_max'], 4)
->addCol($columns['storage_external'], 4);

Example 3
This example shows how it is possible to place 2 groups in a row:

$hardwareGroup = $layout->addGroup('Hardware', 6);


$hardwareGroup->addRow()->addCol($columns['chipset'], 12);
$hardwareGroup->addRow()->addCol($columns['cpu'], 12);
$hardwareGroup->addRow()->addCol($columns['gpu'], 12);

$softwareGroup = $layout->addGroup('Software', 6);


$softwareGroup->addRow()->addCol($columns['os_basic'], 12);
$softwareGroup->addRow()->addCol($columns['os_upgradable'], 12);
$softwareGroup->addRow()->addCol($columns['web_browser'], 12);

4.1.4.3.23 OnGetCustomColumnGroup

This event allows you to setup multi-row grid header.

Signature:
function OnGetCustomColumnGroup(FixedKeysArray $columns,
ViewColumnGroup $columnGroup)

Parameters:
$columns The associative array of column headers.
$columnGroup The default (root) group. By default all column headers are

© 2017 SQL Maestro Group


Customizing webpages 135

placed in this group.

Description
You can organize columns in logical groups and display them using multi-row header
representation. A column group is visually represented by a header displayed above the
headers of the columns it combines. Each group can contain data columns as well as
other groups.

Examples
All the examples below can be seen live in our Feature Demo.

Example 1
This example shows how to define an additional header for 3 columns:

$columnGroup->add(new ViewColumnGroup('Common info',


array(
$columns['id'],
$columns['title'],
$columns['release_date']
)
));

Example 2
This example shows how to define nested column groups:

$columnGroup->add(new ViewColumnGroup('Addtional info',


array(
new ViewColumnGroup('Texts',
array(
$columns['genre_id'],
$columns['original_title'],
$columns['original_language_id']
)
),
new ViewColumnGroup('Numbers',
array(
$columns['runtime'],
$columns['rating']
)
)
)
));

4.1.4.3.24 OnCustomCompareValues

This event allows you to define your own function for value comparison.

Signature:
function OnCustomCompareValues($columnName, $valueA, $valueB, &$result)

Parameters:
$columnName The name of currently processed column.
$valueA The first value to compare.
$valueB The second value to compare.

© 2017 SQL Maestro Group


136 MS SQL PHP Generator Help

$result The result of the comparison. Should be set to 0 if values are


equal and to a non-zero value otherwise.

Example
This example shows how to define an algorithm that considers two values to be equal if
their difference is less than or equal to 0.5.

if (in_array($columnName, array('height', 'length', 'width'))) {


$result = abs($valueA - $valueB) <= 0.5;
}

The example can be seen in action in our Feature Demo.


4.1.4.3.25 OnGetCustomUploadFileName

This event allows you to customize the file name for files uploaded with Upload file to
folder 73 and Upload image to folder 74 editors.

Signature:
function OnGetCustomUploadFilename($fieldName, &$result, &$handled,
$originalFileName, $originalFileExtension, $fileSize)

Parameters:
$fieldName The name of currently processed column.
$rowData The associative array of values that corresponds to the
currently processed row.
$result The actual file name. Change the value of this parameter to
customize the filename.
$handled Indicate whether the event handler executed. Set $handled to
true in the event handler code to apply the changes.
$originalFileName The original file name
$originalFileExtension The original file extension
$fileSize The file size

Example
This example shows how to add current date and time to the uploaded filename.

if ($fieldName === 'photo') {


$result = date('Y-m-d_H-i-s') . "_" . $originalFileName;
$handled = true;
}

4.1.4.3.26 OnGetCustomPagePermissions

This event allows you to customize page-level permissions.

Signature:
function OnGetCustomPagePermissions($page, &$permissions, &$handled)

Parameters:
$page An instance of the Page 215 class.

© 2017 SQL Maestro Group


Customizing webpages 137

$permissions Permissions to be applied to the page. An instance of the


PermissionSet 218 class.
$handled A parameter to indicate whether the new permissions should be
applied. Set $handled to true to apply the changes.

Example
This example shows how to implement a simple role-based permission model. Our goal is
to ensure that only site admins and members of the Sales role can add, remove and edit
records displayed on this page.

// do not apply these rules for site admins


if (!GetApplication()->HasAdminGrantForCurrentUser()) {

// retrieving the ID of the current user


$userId = GetApplication()->GetCurrentUserId();

// retrieving all user roles


$sql =
"SELECT r.role_name " .
"FROM phpgen_user_roles ur " .
"INNER JOIN phpgen_roles r ON r.id = ur.role_id " .
"WHERE ur.user_id = %d";
$result = $page->GetConnection()->fetchAll(sprintf($sql, $userId));

// iterating through retrieved roles


if (!empty($result)) {
foreach ($result as $row) {
// is current user a member of the Sales role?
if ($row['role_name'] === 'Sales') {
// if yes, allow all actions.
// otherwise default permissions for this page will be applied
$permissions->setGrants(true, true, true, true);
break;
}
}
};

// apply the new permissions


$handled = true;
}

See also: OnGetCustomRecordPermissions 137 .


4.1.4.3.27 OnGetCustomRecordPermissions

This event allows you to customize record-level permissions 183 .

Signature:
function OnGetCustomRecordPermissions($page, &$usingCondition, $rowData,
&$allowEdit, &$allowDelete, &$mergeWithDefault, &$handled)

Parameters:
$page An instance of the Page 215 class.
$usingCondition Any logical SQL expression. Rows for which the expression
returns true will be visible
$rowData The associative array of values that corresponds currently

© 2017 SQL Maestro Group


138 MS SQL PHP Generator Help

processed row
$allowEdit If true, the user can edit values of the currently processed
row.
$allowDelete If true, the user can delete the currently processed row.
$mergeWithDefault Indicates whether custom permissions should be merged with
default ones 183 (if any). Default value is true.
$handled A parameter to indicate whether the new permissions should be
applied. Set $handled to true to apply the changes.

Example
Assume we have a small company with several sales departments. All users of our
application are sales managers, which work in one of these departments. Each such user
can work as an ordinary manager or as a head manager of the department. Our
challenge is to grant privileges in the following way:

- Ordinary managers must have full access to their own sales records except completed
ones. They should have no access to the sales made by other managers.
- Head managers must have full access to all sales records of the department. They
should have no access to sales of other departments.

To implement the scenario above, the following code can be used:

// do not apply these rules for site admins


if (GetApplication()->IsLoggedInAsAdmin()) {
return;
}

// retrieving the ID of the current user


$userId = $page->GetCurrentUserId();

// retrieving the ID of sales department and the status of the current user
$sql = "SELECT sales_department_id, is_head_manager " .
"FROM phpgen_users WHERE user_id = $userId";
$result = $page->GetConnection()->fetchAll($sql);

if (empty($result))
return;

$salesDepartmentId = $result[0]['sales_department_id'];
$isHeadManager = (boolean) $result[0]['is_head_manager'];

// Granting permissions according to the scenario


$allowEdit = $isHeadManager || !$rowData['completed'];
$allowDelete = $isHeadManager || !$rowData['completed'];

// Specifying the condition to show only necessary records


if ($isHeadManager) {
$sql = 'manager_id IN '.
'(SELECT user_id FROM phpgen_users WHERE sales_department_id = %d)';
$usingCondition = sprintf($sql, $salesDepartmentId);
} else {
$usingCondition = sprintf('manager_id = %d', $userId);
}

// apply granted permissions

© 2017 SQL Maestro Group


Customizing webpages 139

$handled = true;

// Do not merge the new record permissions with default ones (true by default).
// We have to add this line, otherwise head managers will not be able to see
// sales made by other managers of the department.
$mergeWithDefault = false;

See also: OnGetCustomPagePermissions 136 .

4.1.5 Filter
To reduce the number of records available at the page, specify the Filter condition. This
condition corresponds to the WHERE clause of the query returned page data (you must
not add the WHERE keyword to beginning of the condition).

Example 1
There is a table with test questions of a Web programming course. To display only
questions of the 'Beginner' level (level_id = 2) concerning to PHP
(statement_language_id = 1), set the filter condition as follows:

Example 2
You can use subqueries in the filter expression. For example, to display the list of
channels that hosted even if a single game, specify the Filter condition as follows:

(channel.id > 0) AND channel.id IN


(
SELECT game.channel_id
FROM game
)

4.1.6 Charts
MS SQL PHP Generator allows you to visualize data on your website with feature-rich,
responsive, customizable, and interactive charts.

Key facts

© 2017 SQL Maestro Group


140 MS SQL PHP Generator Help

1. Charts are based on the Google chart library.


2. Column, Bar, Pie, Line, Area, and Geo charts are currently supported.
3. Charts can be placed in rows above the data grid or below the grid.
4. Each row can contain any number of charts.
5. Common properties for each chart can be set up directly in the software interface.
6. All other properties provided by the library can be customized with the OnPrepareChart
event.
7. Charts are sensitive to the data grid i.e. if you apply a filter to the grid, charts will
change accordingly.

Creating and editing charts

To add a new chart to a webpage or edit an existing one:


· open the webpage editor 27 ;
· go to the Charts tab;
· Click Add... or Edit... to create a new chart or modify an existing chart accordingly;
· define an SQL query 140 to retrieve chart data;
· setup common 141 and advanced 142 options of the chart.

4.1.6.1 Data Query

This query returns data to be used by the chart. The retrieved data must contain
exactly one column to specify labels along the major axis of the chart (domain column)
and one or more columns to specify series data to render in the chart (data columns).

To allow a chart to be sensitive to grid data, refer to the chart's parent page query
using the %source% placeholder.

Example 1
Assume we have the following table:

CREATE TABLE usd_exchange_rate (


id int NOT NULL,
exchange_date date,
eur_rate decimal(10,4),
gbp_rate decimal(10,4),
chf_rate decimal(10,4),
cad_rate decimal(10,4),
aud_rate decimal(10,4),
/* Keys */
PRIMARY KEY (id)
);

Our goal is to create a chart that displays the USD course. As data are already grouped,
our query is very simple:

%source%

Then we should specify the exchange_rate column as domain column and all *_rate
columns as data columns.

© 2017 SQL Maestro Group


Customizing webpages 141

Example 2
Suppose we have two tables department and employee defined as follows:

CREATE TABLE department (


id int NOT NULL,
name varchar(100) NOT NULL,
/* Keys */
PRIMARY KEY (id)
);

CREATE TABLE employee (


id int NOT NULL,
full_name varchar(100) NOT NULL,
department_id int NOT NULL,
salary int NOT NULL,
/* Keys */
PRIMARY KEY (id),
/* Foreign keys */
CONSTRAINT fk_emp_department
FOREIGN KEY (department_id)
REFERENCES department(id)
);

Our goal is to create a chart representing the total salary by departments on the
Department webpage. The following query returns the appropriate data:

SELECT
d.name as dep_name,
SUM(e.salary) AS total_salary
FROM
(%source%) d
INNER JOIN employee e ON (e.department_id = d.id)
GROUP BY
d.name
order by 2 desc

Then we should specify dep_name as the domain column and total_salary as a data
column.

4.1.6.2 Common options

The second step of the chart editor allows you to specify common options of the chart.
Other settings can be specified in the OnPrepareChart 142 event handler.

Id
The unique identifier of the chart. Corresponds to the value of the id attribute of the
web element. Can contain letters, numbers, underscore, and hyphens.

Title
The chart title (to be displayed above the chart).

Type
The type for your chart. Allowed values are Column, Bar, Pie, Line, Area, and Geo.

Position (Above, Below)


Select whether the chart is placed above or below the data grid.

© 2017 SQL Maestro Group


142 MS SQL PHP Generator Help

Height
The height of the chart in pixels.

Width
The width of the chart in columns (from 1 to 12).

Visible
Allows to (temporarily) hide/show the chart.

Domain column
The column that specifies labels along the major axis of the chart. The Format property
is suitable for date and number columns and should be specified as a pattern (for
example, #,###,### or MMM d, yyyy).

Data columns
One or more columns to specify series data to render in the chart.

4.1.6.3 Advanced options

The previous topic 141 learns how to setup common options of a chart. This topic
explains how to customize the chart according to your needs.

The key idea is that you can setup absolutely all the options that are available in the
Google chart library. All you need is to study the reference from Google and write a few
lines of PHP code to set property values.

The function that is invoked for each chart on the page is defined as follows:

Signature:
function OnPrepareChart(Chart $chart)

Parameters:
$chart An instance of the Chart class
getId() Returns the identifier of the chart (unique among all charts on a
page).
setOptions($array) Sets chart options. Here $array is an associative array that
stores all the options you want to apply to the chart.

Example 1:
To set the value of the property propName, use the following syntax:

$chart->setOptions(array(
'propName' => 'Value',
));

To set the value of the property objectName.propName, use the following syntax:

$chart->setOptions(array(
'objectName' => array('propName' => 'value'),
));

Operating in the same way you can set any property provided by the library.

Example 2:

© 2017 SQL Maestro Group


Customizing webpages 143

The following code is used in our demo application to customize the chart on the Players
page:

if ($chart->getId() === 'height-by-avg-age') {


$chart->setOptions(array(
'height' => 400,
'theme' => 'maximized',
'legend' => array('position' => 'bottom'),
'hAxis' => array('format' => '0'),
));
}

Example 3:
The following code is used in our demo application to customize charts on the Teams-
>Home games and Teams->Away games pages:

$options = array(
'colors' => array('#9ECC3C', '#CC3C3C'),
'titleTextStyle' => array('fontSize' => 14),
);
if ($chart->getId() === 'overall-win-loss') {
$chart->setOptions(array_merge($options, array(
'chartArea' => array('width' => '70%', 'height' => '70%', 'top' => '18%'),
'legend' => 'none',
)));
} else if ($chart->getId() === 'win-loss-by-month') {
$chart->setOptions(array_merge($options, array(
'vAxis' => array('format' => '0'),
)));
}

4.1.7 Page Properties


The Page Properties window allows you to define general properties of the generated
page. All properties are grouped in several tabs.

· Common 144 properties define page appearance.


· RSS 148 allows you to create an RSS feed based on the table.
· Abilities 151 properties specify the mode to be used on data inserting, editing,
viewing, deleting, and other operations.
· Export tab options define which formats may be used for data export from the
generated page (Excel, Word, Xml, Csv, Pdf) and whether it will be possible to
print the page data.
· Options are set in accordance with the Page 157 project options. Use the tab to
modify them to a certain page.

To invoke the window, use the corresponding button of Page Editor 27 or select the
necessary page in the list of pages to be generated and click the Properties button on
the right side.

© 2017 SQL Maestro Group


144 MS SQL PHP Generator Help

By default, all properties are set in accordance with the project options 157 . To change
the situation, check off the Use default options box at the top of the tab and enter the
new value in the corresponding field.

4.1.7.1 Common properties

Here you can setup page-specific settings (i.e. settings that are not inherited from the
Project settings).

Titles and descriptions

Title
The title of the page.

Menu label
The text to be displayed in menus

View form title template, Edit form title template, Insert form title
The titles of View, Edit, and Insert forms accordingly. For View and Edit forms it is
possible to use field name tags in the title template, so you can easily change default
"Players" to a more user-friendly "Edit Tim Duncan profile".

Inline description
A text to be displayed at the top of the page. HTML tags are allowed.

© 2017 SQL Maestro Group


Customizing webpages 145

Detailed description
If specified, the generated webpage is equipped with a button with a question mark on
the right side of the title bar of the page. This button opens a modal window with the
specified description. HTML tags are allowed.

© 2017 SQL Maestro Group


146 MS SQL PHP Generator Help

Home page description


A text to be displayed at the home page (live example).

Behavior

Allow new records on Insert form


Defines whether the "Add another record" link is displayed on the Insert form.

Add multiple records at a time (set of values)


Defines additional items (if any) for the "Add new" button's drop-down menu (live
example).

Ask for filter condition before display data


If checked, no data is displayed in the grid until a user specifies a filter condition (can
be useful for pages containing a lot of data). A page with this option applied looks as
shown below.

Options

File name

© 2017 SQL Maestro Group


Customizing webpages 147

The name of generated .php file.If the file name extension is not specified, it will be as
defined in the application output options 230 .

Default ordering
To set the default sort order of page data, use the Sort dialog opened by the ellipsis
button next to the Default ordering option. Specify the columns to sort by moving them
from the Available columns list to the Columns to sort list and specify which order for
each column you prefer.

Header columns for record comparison


Columns which values will be displayed in the header row of the data comparison grid (
live example).

© 2017 SQL Maestro Group


148 MS SQL PHP Generator Help

Grid fixed width


To set a fixed width of the grid, check the Grid fixed width, specify the Width, and
select the Units.

Units Meaning
em The 'font-size' of the relevant font.
px (pixels) Relative to the viewing device.
in (inches) 1 inch is equal to 2.54 centimeters.
cm Centimeters
mm Millimeters
pt (points) The points used by CSS 2.1 are equal to 1/72nd of an inch.
pc (picas) 1 pica is equal to 12 points.

4.1.7.2 RSS options

With MS SQL PHP Generator you can create full-fledged RSS feeds based on Microsoft
SQL tables. To create an RSS document, open the Page Properties dialog and complete
the Use RSS options group.

Check the Use RSS box first and specify the following options:

Channel title
Defines the title of the channel.

Channel link
Defines the hyperlink to the channel.

Channel description
Describes the channel.

Item title template 76


Defines the title of the item.

© 2017 SQL Maestro Group


Customizing webpages 149

Item link template 76


Defines the hyperlink to the item.

Item description template 76

Describes the item.

Item publication date field


This field is optional. Defines the last publication date for the content of the feed.

For more details see the RSS specification.

The screen below provides you with a simple example.

© 2017 SQL Maestro Group


150 MS SQL PHP Generator Help

© 2017 SQL Maestro Group


Customizing webpages 151

4.1.7.3 Abilities

The Inline Insert/Inline Edit features allow a user to add/edit the content of the
generated page quickly without having to switch modes or screens. All work is done on
the same interface which helps the user maintain context.

To enable the inline inserting/editing on a webpage:


· Make sure that the Insert/Edit ability is set as Inline mode at the Page properties
143 . By default it is set according to Project Options 157 . To change the option
value, uncheck the Use default options box and select the necessary values from
the drop-down list.

4.1.8 Data Partitioning


The Data Partitioning wizard allows you to create a custom pagination i.e. split the
records on the generated page by a specified criteria.

Select the type of data partitioning on the first wizard step:


· Range partitioning
Selects a partition by determining if the partitioning expression value is inside a
certain range.
· List partitioning
A partition is assigned a list of values. If the partitioning expression value has one
of these values, the partition is chosen. For example, all rows where the column
'Country' is either Iceland, Norway, Sweden, Finland or Denmark could build a
partition for the 'Nordic countries'.

© 2017 SQL Maestro Group


152 MS SQL PHP Generator Help

· Custom partitioning
Create your own partitioning with fill partitions and build conditions functions.
· To disable data partitioning, select None.

Example 1 (Range partitioning)


There is a table storing information about films such as title, release year, and length.
See definition here

CREATE TABLE film (


film_id integer NOT NULL,
title varchar(255) NOT NULL,
release_year integer,
length integer UNSIGNED,
/* Keys */
PRIMARY KEY (film_id)
);

To create a pagination by the film length, select Range partitioning at the first wizard
step, choose 'length' as partition expression and set the partitioning ranges as follows:

Here you can see the result PHP script:

© 2017 SQL Maestro Group


Customizing webpages 153

Example 2 (Custom partitioning)


Assume that a table 'customer' contains the 'last_name' column. Our goal is to group
customers by the first letter of their last name as displayed below.

© 2017 SQL Maestro Group


154 MS SQL PHP Generator Help

To get around such a situation, select Custom partitioning and define functions as
follows:

function GetPartitions($partitions)
{
$tmp = array();
$this->GetConnection()->ExecQueryToArray("
SELECT DISTINCT
left(c.last_name, 1) as first_letter
FROM customer c
ORDER BY first_letter", $tmp
);
foreach($tmp as $letter) {
$partitions[$letter['first_letter']] = $letter['first_letter'];
}
}

function GetPartitionCondition($partitionKey, &$condition)


{
$condition = "left(last_name, 1) = '$partitionKey'";
}

© 2017 SQL Maestro Group


Customizing webpages 155

4.1.9 Data Validation


Data validation is intended to provide certain guarantees for accuracy and consistency
for any of various kinds of user input. MS SQL PHP Generator allows you to check for
correctness of input data on the client side and on the server side as well.

Client-side data validation


This type of data validation refers to validation performed on the client side. That is, it's
performed on the client's, also known as the user's, computer. This type of validation
checks the input information before it gets to the server. It has following advantages:

· Reducing the amount of traffic to and from your web server since the data
doesn't have to travel to the server before it gets checked (server-side data
validation). If an error is found in the data in the server-side validation, the error
must travel back to the user, who then corrects the problem and resubmits the
data. This back-and-forth traveling can eat up precious bandwidth.

· Saving processing time on the server by ensuring that data is clean and clear
before it gets to your database.

· Giving immediate feedback to your users since the processing is performed in their
browsers. The user doesn't have to wait for the data to travel to the server to
be checked and a response to be sent. They know immediately whether they
need to tweak the information they have entered.

MS SQL PHP Generator allows you to implement the client-side data validation on two
levels: when a user leaves a certain control and when a user submits a form.

To enable validation of data entered in a control, specify the appropriate Client


validator 43 .
Range The generated script validates if number is between the largest and
smallest values.
Length range The script validates if the length of text is between the min length
and the max length.
Email The script makes the element require a valid email.
Credit card The script makes the element require a credit card number.
Number The script makes the element require a decimal number.
URL The script makes the element require a valid URL.
Digits The script makes the element require digits only.
Regular You can also specify your regular expression for data validation.
expression Such expression is a pattern and every character entered in a form
field is matched against that pattern – the form can only be
submitted if the pattern and the user-input matches.

To implement data validation on submitting a form, use the OnInsertFormValidate 99


and OnEditFormValidate 100 client side events. It may be helpful to check the
compatibility of input data. When a user clicks the Save button, Javascript ensures that
the data conforms to specifications before moving on the server.

Server-side data validation


This type of data validation consists of validating user input on the server.

© 2017 SQL Maestro Group


156 MS SQL PHP Generator Help

This type of data validation means using PHP to verify that good values have been sent
to the script. Using server-side validation has pretty much the exact opposite pros and
cons of client-side development: it is more secure, works seamlessly with all browsers,
and allows to use session variables, but it does so at the cost of slightly higher server
load and slower feedback for users.

OnBeforeUpdateRecord 129
OnBeforeInsertRecord 128

© 2017 SQL Maestro Group


Customizing webpages 157

4.2 Project Options


MS SQL PHP Generator allows you to specify default settings to be applied to each
generated webpage. By default, most of these options have the same values as the
application options 222 . To open this dialog window, follow the Setup project options to
configure default page settings link at the Customizing webpages 24 wizard step

All settings are grouped into several tabs:

Page
The Page tab allows to modify the appearance of webpages, specify the script abilities
such as data formats available for data export, data view mode, data edit mode, data
insert mode and also delete, search and filter abilities. By default these settings are set
in accordance with the Application options 222 .

Display formats
These tab fields allow to adjust the display data formats in the way you need. By
default these settings are set in accordance with the Application options 222 .

Shared options 158


This tab allows you to specify options that are applied for a whole website (i.e. shared
between all pages).

Events
You can also specify application-level events 82 fired on all pages.

© 2017 SQL Maestro Group


158 MS SQL PHP Generator Help

4.2.1 Shared options


This tab allows you to specify options that are applied for a whole website (i.e. shared
between all pages).

Menu mode
Defines the location of the application menu. Possible values are as Top-side drop-
down menu (the menu will be displayed on the top of each page), Sidebar menu (the
menu will be displayed on the left of each page), and None (no menu will be displayed
at all).

© 2017 SQL Maestro Group


Customizing webpages 159

Generate home page


Defines whether a home page for the application is generated (live example). If checked,
you can customize a filename for this page (default value is index.php).

Show breadcrumb navigation


Defines whether a breadcrumb navigation is available in the application.

Force show PHP errors and warnings


If checked, the following PHP directives will be added to all pages:

error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 'On');

We would recommend you to turn this option ON in the development environment and
turn it OFF in the production environment.

Show environment variables


If checked, the list of the available environment variables will be displayed below the
data grid. These variables can be accessible in server-side event handlers via the
GetEnvVar 215 method of the Page 215 class.

Disable magic quotes_runtime option


Defines whether the magic quotes_runtime PHP option will be enabled or disabled. Please
note that this options was removed as of PHP 5.4.

PHP options (ini_set)


This allows you to customizing PHP configuration options during the application runtime.

© 2017 SQL Maestro Group


160 MS SQL PHP Generator Help

These options are represented as calls of the ini_set function in the phpgen_settings.
php file.

© 2017 SQL Maestro Group


Webpages appearance 161

5 Webpages appearance
MS SQL PHP Generator allows you to setup the appearance of created webpages in
several ways:

· Built-in color schemes 164


The simplest way to adjust the look and feel of the result application is to select
one of color schemes the software comes with.

A sample webpage generated using different color schemes.

· Custom color scheme 164


This allows you to provide the application with a specific look and feel defining the

© 2017 SQL Maestro Group


162 MS SQL PHP Generator Help

colors and font settings.

A sample webpage generated with custom color scheme.

· Header and Footer 165


These are fragments of HTML code that will be included into all the generated
pages. They can be customized within the appropriate window.

A sample webpage with specified header.


· Custom CSS 166
It is also possible to define a custom style sheet to be applied after all pre-defined
CSS rules. This can be useful to define such things as size of controls, text
alignments, background images, and more.

© 2017 SQL Maestro Group


Webpages appearance 163

· Events 81
Events are pieces of code that are run when an action is taken by the user. Such
events as OnBeforePageExecute 108 , OnCustomRenderColumn 110 , and
OnCustomDrawRow 125 can be used to change the webpage appearance. Please
find some examples of using these and other events in our demo application and in
the Resources section at the product home page. Use the User Javascript 168
window to define JavaScript functions that are called from several event handlers.

· Using templates 169


While all the previously described methods allow you to define colors, fonts, text
alignments, and other display attributes of generated webpages, this one helps
you to redesign the webpages entirely i.e. define what controls are displayed on a
specific form, where they are displayed, and what they display.

© 2017 SQL Maestro Group


164 MS SQL PHP Generator Help

5.1 Color schemes


The color scheme of created application contains the information on basic style
definitions for all key HTML components: fonts, colors, backgrounds, borders, and
others. MS SQL PHP Generator comes with a number of built-in color schemes. To use
one of them, select the appropriate item from the "Color scheme" drop-down list.

To change default scheme settings according to your needs, click the Customize color
scheme button and modify the necessary variables within the opened window. To learn
more about the LESS syntax used in this window, please refer to the LESS manual.

The Preview window displays current appearance settings applied to a sample webpage.

© 2017 SQL Maestro Group


Webpages appearance 165

5.2 Header and Footer


To add an HTML markup to be displayed at the top and at the bottom of each page of
the generated web application, enter the appropriate code in the Header and Footer
text boxes accordingly.

Example: To add the header like one on the screen above, paste the following text in
the Header edit box:

<span class="navbar-brand">
<span>
<img src="mysql_logo.png" style="height: 44px; margin-top: -14px;">
</span>
</span>
<span class="navbar-brand">
<span class="hidden-xs"><strong>MySQL Schema Browser</strong></span>
</span>

© 2017 SQL Maestro Group


166 MS SQL PHP Generator Help

5.3 User-defined styles


The ability to use custom styles allows you to set up such parameters of web pages as
size of controls, text alignment, and more. To define a custom style sheet that will be
applied after all the pre-defined rules, click the "Edit user styles" button and enter the
rules you need manually or load them from a file. Less syntax is allowed.

To determine a selector to apply the styles for, use any available inspect HTML tools
such as default Firefox developer tools, Firebug, Chrome developer tools, Internet
Explorer developer tools, and so on. Among other things these tools allows you to view
the current element's attributes and applied styles and experiment with new ones.

Example 1
The code below is used in our online demo to display the winning team and the losing
team scores according to the current theme. The 'win-score' and 'loss-score' classes are
defined as follows:

.base-score {
font-size: 1.4em;
font-weight: bold;
}

.win-score {
&:extend(.base-score);
color: @brand-danger;
}

.loss-score {
&:extend(.base-score);
}

The conditional formatting is specified in the OnExtendedCustomDrawRow event as


follows:

if ($rowData['home_team_score'] > $rowData['away_team_score']) {


$cellClasses['home_team_score'] = 'win-score';
$cellClasses['away_team_score'] = 'loss-score';
}
else {
$cellClasses['home_team_score'] = 'loss-score';
$cellClasses['away_team_score'] = 'win-score';
}

The screenshot below displays the Game list page in the Cyborg theme:

© 2017 SQL Maestro Group


Webpages appearance 167

The next one shows the same page in the Facebook theme:

Example 2
To limit maximum width of Date and DateTime pickers in all Edit and Insert forms by
300 pixels, use the following rule:

div.pgui-date-time-edit {
max-width: 300px;
}

© 2017 SQL Maestro Group


168 MS SQL PHP Generator Help

5.4 User JavaScript


The ability to use custom JS allows you to specify JavaScript code that will be included
into all the generated pages. This is the optimal place to define, for example, JavaScript
functions that are called from several event handlers (in order to avoid duplicate code).

Example
Suppose we want to fill the content of 'title' control depending of the value selected as
'sex' on Insert and Edit forms. Of course we can define the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 with the
same code, but it's easier to define a function in the User Javascript window and call it
in these event handlers.

User Javascript:

function fillRelatedTitles(sender, editors)


{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}

OnInsertFormEditorValueChanged/OnEditFormEditorValueChanged event handlers:

if (sender.getFieldName() == 'sex')
{
fillRelatedTitles(sender, editors);
}

© 2017 SQL Maestro Group


Webpages appearance 169

5.5 Using templates


Applications created by MS SQL PHP Generator use Smarty, a typical representative of
the web template engines family. So in order to redesign a webpage, you need to
change the appropriate template. All templates used by the software are stored in the
components/templates subfolder of the output directory. Each folder in this catalog
contains template files to be used by the application in different cases: on editing,
printing, inserting, etc.

Using custom templates

To change the webpage appearance with custom templates, follow these steps:

· Create a new template. Custom templates must be stored under the components/
templates/custom_templates folder which contents is not changing on re-generation
of the scripts. You must create this folder manually.
· Instruct PHP Generator to use this template for the selected webpage with the
OnGetCustomTemplate event.
· Customize the template according to your needs and preferences.

The detailed description of such customization is given in the appropriate article.


Another article learns how to add a chart component to a webpage using the way
described above. The demo application also shows some additional examples of using
custom templates.

© 2017 SQL Maestro Group


170 MS SQL PHP Generator Help

Changing existing templates


You can modify generated template files directly. The example of supplying of generated
pages with look and feel of an existing website illustrates this method in the appropriate
article. Since all the templates are rewritten each time you generate an application, you
have to add modified templates to the Excluded files 186 list to prevent them from
overwriting.

© 2017 SQL Maestro Group


Security settings 171

6 Security settings
Check the Enable security option to supply the generated application with a login page
to request user name and password when someone attempts to access your script. MS
SQL PHP Generator provides you with the following authorization types:

· Hard-coded authorization 173


Select this option to incorporate the authorization procedure directly into the PHP
code of the generated application.

· Table-based authorization 175


Select this option to authorize a user of the web application by a login/password
combination stored in a database table.

· Database server authorization 177


Select this option to accomplish the authorization by Microsoft SQL server.

· User-defined authorization 178


Select this option to use a custom function to check user identity.

See also: User permissions 179 , Record-level security 183

© 2017 SQL Maestro Group


172 MS SQL PHP Generator Help

© 2017 SQL Maestro Group


Security settings 173

6.1 Hard-coded authorization


On using this kind of authorization all user accounts are stored in generated .php files.
As any operation related to the user management requires re-generation and re-
uploading of the application, it is not recommended to use this kind of authorization for
real websites except the simplest ones.

To create the administrator user, fill in the Administrator login and Administrator
password fields. Check the Enable guest access option to allow an anonymous user to
access the generated app without completing the authentication procedure. Turn ON
the Enable MD5 password encryption checkbox to store user passwords encrypted with
the MD5 algorithm (recommended).

To manage additional users, click the Edit additional users button, then use Add/Edit/
Remove buttons or the user grid's popup menu.

© 2017 SQL Maestro Group


174 MS SQL PHP Generator Help

When creating/editing a user, provide its user name and password and check the
necessary options to grant application-level permissions to this user. To learn how to
specify page-level permissions, see the User permissions 179 section.

© 2017 SQL Maestro Group


Security settings 175

6.2 Table-based authorization


This kind of authorization means that user accounts are stored a database table. The
table may be prepared earlier or created within PHP Generator.

Using an existing table


Specify the table name in the Users table fields, then select columns where user names,
passwords, and IDs are stored. If passwords are encrypted, select the corresponding
algorithm from the Password Encryption drop down list or enter the algorithm manually (if
passwords are encrypted with a hash algorithm missing in the list like SHA512).

Using a new table


Click the Create new table... button, enter desired table and column names, then click
OK. A new table will be created in the database.

To be able to log in to your website, you should create the first user (i.e. the first
record in this table) with the Admin privilege manually (for example, you can do it with
our Microsoft SQL Maestro). Don't forget that the password should be encrypted with
the algorithm you selected. Other users can be created online via the Administration
Panel that is generated automatically.

Enable guest access


Turn this options ON to allow unauthorized users to access all or certain pages of your

© 2017 SQL Maestro Group


176 MS SQL PHP Generator Help

website.

Customizing permissions
By default all users have the SELECT privilege granted at the application level via the
PUBLIC group. Open the Permission Manager 179 window to setup permission storage and/
or customize the permissions.

Allow users to change their passwords


Turn this option ON to allow your end-users change their passwords themselves (the
appropriate button is located in the top right corner of the window). Please note that
this functionality required storing user permissions in a database table as described here
179 .

© 2017 SQL Maestro Group


Security settings 177

6.3 Database server authorization


This kind of authorization means that each user in your application should correspond to
a user at the database server. To allow access without entering a password, you need
to create an additional user account at the database server and specify its username/
password in the corresponding fields.

User permissions should also be managed with the server facilities (GRANT and REVOKE
statements). You can align user interface to real permissions granted at the server side
with the OnGetCustomPagePermissions 136 event.

© 2017 SQL Maestro Group


178 MS SQL PHP Generator Help

6.4 User-defined authorization


This kind of authorization allows you to define your own custom authentication. This
feature requires you to define a function that takes entered username and password and
returns true or false depending on their validity. This means you can use any possible
storage for user credentials and any encryption algorithm you like.

Example:
To check that the password is equal to the user name and password contains 5 or more
symbols, place the following code to the body of the CheckUserIdentity function. This
condition means that the 'John/John' or 'John/Michael' pair will be declined while the
'Michael/Michael' or 'Gloria/Gloria' login/password combination will be accepted.

if ($username == $password)
$result = strlen($password) >= 5;
else
$result = false;

See also: OnGetCustomPagePermissions 136 , OnGetCustomRecordPermissions 137 .

© 2017 SQL Maestro Group


Security settings 179

6.5 Permission manager


Permission manager allows you to restrict user access to the pages of the generated
application. To open this window, press the Manage permissions... button. This is not
applicable for the database server authorization, in that case the permissions should be
set with the server facilities (GRANT and REVOKE statements).

How permissions are granted and applied

1. Permissions can be granted at the application and page levels.

2. Permissions granted at the application level are automatically applied to all pages in
the application.

3. Page-level permissions are granted for each page individually. Effective user
permissions for a page are calculated as sum of permissions granted to the user at the
application and page levels i.e. permissions are cumulative.

4. PUBLIC permissions are permissions to be granted to all authorized users of your


application, including those that might be created later. Any user in the application will
have the sum of privileges granted directly to him and PUBLIC privileges. PUBLIC
privileges also can be granted at the application and page levels.

5. You can enable the guest account in your application to allow any unauthorized user
access to your website. The privileges can be granted to guest just like any user in

© 2017 SQL Maestro Group


180 MS SQL PHP Generator Help

the application. Note that PUBLIC privileges do not affect the guest privileges and vice
versa.

6. The following permissions can be granted: Select, Insert, Update, Delete, and Admin.
If a user has the Admin permission for a page, he/she can read, change, and delete all
the records of the page as well as add the new records and manage the page access
permissions via Admin Panel (if the table-based authorization 175 is used and
permissions are stored in a database table).

7. Exporting, Printing, and Comparison operations are available for everyone who has the
Select privilege.

8. The Copy operation is available for everyone who has the Insert privilege.

Live examples can be found in the Security Demo.

Hard-coded authorization
On using this kind of authorization, all users and their permissions are stored in
generated .php files, so it is necessary to re-generate the application to modify this
data. Use the checkboxes at the Permissions tab to grant/revoke the corresponding
application-level permissions to users specified at the Hard-coded authorization window
173 . To grant or revoke page-level permissions, use the Customize page level
permission... button.

Table-based authorization

© 2017 SQL Maestro Group


Security settings 181

On using this kind of authorization, user accounts are always stored in a database table
while permissions can be stored either in the generated files (as on using the hard-coded
authorization) or in a database table like user accounts (recommended). To choose
between these options, switch to the Storage tab and click the appropriate radio
button.

To store permissions in the database, you can use an existing table or create a new
one. On using this storage option, you can manage users and their permissions (both
application and page levels) without necessity of re-building your site via MS SQL PHP
Generator GUI as well as via the web-based Administration Panel.

© 2017 SQL Maestro Group


182 MS SQL PHP Generator Help

© 2017 SQL Maestro Group


Security settings 183

6.6 Record-level security


Record-level security allows you to specify records to be accessible to a certain user.
This feature is available for table-based 175 and hard-coded 173 authorization types.

To enable record-level security for a page, define a column that identifies the record
owner selecting the appropriate value from the drop down list in the Owner field name
column. Now all users are divided into two groups: the record owners, and the others.
Then grant privileges for each of these groups separately. Note the application and page
admins bypass record-level security, so they can access (and change) all the records.

Click the Set options for all button to specify owner field name and/or permissions for
all pages at once. Use the Reset settings button to clear all the settings made in this
window.

Live examples of using this feature can be found in the Security Demo.

You can customize record-level security for a certain page with the
OnGetCustomRecordPermissions 137 event.

© 2017 SQL Maestro Group


184 MS SQL PHP Generator Help

7 Interface language
By default a web application created with MS SQL PHP Generator has English interface
but it can be localized (i.e. translated) to any language. The text strings to be used in
the application's interface are stored in a localization file. To use a specific language,
select the corresponding file on the last wizard step. In case you use the same file on a
regular basis, it is recommended to specify it in the application output options 230 to
enable it by default.

Using prepared localization files


MS SQL PHP Generator comes with a number of localization files that can be found under
the installation folder, usually C:\Program Files\SQL Maestro Group\MS SQL PHP
Generator or C:\Program Files (x86)\SQL Maestro Group\MS SQL PHP Generator if you
have a 64-bit operation system installed on your computer. The table below contains
currently available files and the corresponding interface languages:
lang.ar.php Arabic

lang.br.php Brazilian

lang.cs.php Czech

lang.de.php German

lang.dk.php Danish

lang.en.php English

lang.es.php Spanish

lang.fr.php French

lang.hu.php Hungarian

lang.it.php Italian

lang.nl.php Dutch

lang.pl.php Polish

lang.ru.php Russian

lang.se.php Swedish

lang.sk.php Slovak

lang.sl.php Slovenian

lang.sr.php Serbian

lang.tr.php Turkish
These files were sent to us by our customers and we are not responsible for their
quality. If none of these files is right for you, it is possible to customize the localization
as described below. We will be very appreciated if you send us your custom file to be
enjoyed by all the MS SQL PHP Generator users.

Using a custom localization file


If none of supplied files is appropriate for your application, you can create the

© 2017 SQL Maestro Group


Interface language 185

localization yourself. For this purpose get a localization file the clearest for you, enter/
correct necessary captions with any text editor, and save it in the UTF-8 encoding
(this is very important for the correct displaying of captions in a web browser).

Example
Suppose we need to create a web application in Esperanto. First we need to define the
localization file that is the clearest for us. In our case it is lang.en.php. Let's open the
file with a text editor (we prefer Notepad++), translate all captions to Esperanto, select
the UTF-8 encoding and save it as lang.eo.php (eo is the two-char language code for
Esperanto). All we need to do is select this file at the last wizard step and generate the
application. The result is shown below.

© 2017 SQL Maestro Group


186 MS SQL PHP Generator Help

8 Common generation options


At the last wizard step you can specify header and footer 165 , set a localization file 184 ,
and define security settings 171 of the created application.

Access driver
There are several PHP drivers to communicate with database servers and MS SQL PHP
Generator allows you to select a driver to be used by the generated web application.
Note that the corresponding set of PHP functions should be available on your web
server. By default the driver is set in accordance with the application output options 230 .

Output directory
Generated files will be created in the output directory stored on your computer. To see
the result of the process, open any prepared .php file with any browser. Note, that to
run PHP code you need to have PHP and Apache installed or to run any portable web
server. To deploy ready web application to the Internet, copy the created directory to
your hosting 18 .

Generation options
To make the repeated generating process more fast, it's recommended to avoid
repeated copying of non-changeable system files stored in components,
database_engine, images, libs folders. These files must be rewritten only in case they
were generated by the former version of MS SQL PHP Generator.

© 2017 SQL Maestro Group


Common generation options 187

© 2017 SQL Maestro Group


188 MS SQL PHP Generator Help

9 Developer Reference
The following features and technologies allow you to develop applications with MS SQL
PHP Generator.

Client Side API 189


Extends the functionality of Insert and Edit forms of generated web applications.

Server Side API 215


Extends the functionality of the generated application by the possibility to execute
additional queries and use environment variables.

Style files compilation 220


Allows to create websites in several color schemas.

© 2017 SQL Maestro Group


Developer Reference 189

9.1 Client Side API


The programming interface allows you to extend the functionality of Insert and Edit
forms of generated web applications by the manipulating of their controls
programmatically. Use these functions to operate with editors' attributes and values on
the air.

MS SQL PHP Generator provides you with a number of operations executed on the client
side. These functions may be used in client side events 98 . Find out the description of
available operations appropriate to each editor type:

· All editors 189

· Text editor 199

· Text area 200

· Combobox 201

· Radio group 206

· Checkbox group 210

9.1.1 All editors


The following operations may be applied to all editors:

· getValue 189

· setValue 191

· getEnabled 193

· setEnabled 193

· getReadonly 195

· setReadonly 195

· getVisible 195

· setVisible 196

· getRequired 196

· setRequired 196

· getState 196

· setState 197

· setHint 197

· getFieldName 197

9.1.1.1 getValue

Returns a value of a certain control (input, textarea, select, radio button, etc). To set a
control value, use the appropriate function 191 .

Signature:
function getValue()

© 2017 SQL Maestro Group


190 MS SQL PHP Generator Help

The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 event
handlers.

Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.

console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue() == 1);
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();

Example 2:

© 2017 SQL Maestro Group


Developer Reference 191

Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).

if (sender.getFieldName() == 'current_team_id')
{
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}

See also: setValue 191

9.1.1.2 setValue

Sets the value of a certain control. To get a control value, use the appropriate function
189 .

Signature:
function setValue(value);

The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 event
handlers.

Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.

console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue() == 1);
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();

© 2017 SQL Maestro Group


192 MS SQL PHP Generator Help

Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).

if (sender.getFieldName() == 'current_team_id')
{
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}

© 2017 SQL Maestro Group


Developer Reference 193

See also: getValue 189

9.1.1.3 getEnabled

Returns the value specifying whether the control is enabled.

Signature:
function getEnabled();

Example:
var editorState = editors['current_number'].getEnabled();

See also: setEnabled 193

9.1.1.4 setEnabled

Sets a value specifying whether the control is enabled. True to enable the control; false
to disable it. Disabled input elements in a form will not be submitted.

Signature:
function setEnabled([true|false])

The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 event
handlers.

Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.

console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue() == 1);
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();

© 2017 SQL Maestro Group


194 MS SQL PHP Generator Help

Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).

if (sender.getFieldName() == 'current_team_id')
{
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}

© 2017 SQL Maestro Group


Developer Reference 195

See also: getEnabled 193

9.1.1.5 getReadonly

Returns the value specifying whether the control is readonly.

Signature:
function getReadonly()

Example:
var editorState = editors['team'].getReadonly();

See also: setReadonly 195

9.1.1.6 setReadonly

Sets a value specifying whether the control is readonly. A read-only input field cannot
be modified (however, a user can tab to it, highlight it, and copy the text from it). Form
elements with the readonly attribute set will get passed to the form processor.

Signature:
function setReadonly([true|false])

Example:
editors['team'].setReadonly(true);

See also: getReadonly 195

9.1.1.7 getVisible

Returns the value specifying whether the control is visible.

© 2017 SQL Maestro Group


196 MS SQL PHP Generator Help

Signature:
function getVisible()

Example:
var editorState = editors['team'].getVisible();

See also: setVisible 196

9.1.1.8 setVisible

Sets a value specifying whether the control is visible. An invisible element stays in its
original position and size.

Signature:
function setVisible([true|false])

Example:
editors['team'].setVisible(true);

See also: getVisible 195

9.1.1.9 getRequired

Returns the value specifying whether the control is required.

Signature:
function getRequired()

Example:
var editorState = editors['team'].getRequired();

See also: setRequired 196

9.1.1.10 setRequired

Sets or clears the required attribute for a control.

Signature:
function setRequired([true|false])

Example:

if (sender.getFieldName() === 'payment_method') {


var isCreditCard = editors.payment_method.getValue() === 'Credit Card';
editors.credit_card.setVisible(isCreditCard).setRequired(isCreditCard);
}

The example can be seen live in our Feature Demo.

See also: getRequired 196

9.1.1.11 getState

Returns the current state of a control.

Signature:
function getRequired()

© 2017 SQL Maestro Group


Developer Reference 197

Returning value:
One of the following strings: 'normal', 'warning', 'error', or 'success'.

Example:
var editorState = editors['team'].getState();

See also: setState 197

9.1.1.12 setState

Sets the state for a control.

Signature:
function setState(['normal'|'warning'|'error'|'success'])

Example:

if (sender.getValue() < 10) {


editors['percentage'].setState('warning');
}
else {
editors['percentage'].setState('normal');
}

See also: getState 196

9.1.1.13 setHint

Sets or clears an inline hint for a control.

Signature:
function setHint(['Hint text'|null])

Example:

To set a hint for a control:

editors['field_name'].setHint('Hint text');

To clear a hint:

editors['field_name'].setHint(null);

9.1.1.14 getFieldName

Returns the name of the field in the database the editor corresponds to.

Signature:
function getFieldName()

The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 101 and OnEditFormEditorValueChanged 103 event
handlers.

© 2017 SQL Maestro Group


198 MS SQL PHP Generator Help

Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.

console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue() == 1);
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();

Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).

© 2017 SQL Maestro Group


Developer Reference 199

if (sender.getFieldName() == 'current_team_id')
{
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}

9.1.2 Text editor


The following operations may be applied to one-line input fields:

· getPlaceholder 199

· setPlaceholder 199

9.1.2.1 getPlaceholder

Returns the value specifying whether the control has a placeholder.

Signature:
function getPlaceholder()

Example:
var placeholder = editors['user_name'].getPlaceholder();

See also: setPlaceholder 199

9.1.2.2 setPlaceholder

Specifies a short hint that describes the expected value of an input field (e.g. a sample
value or a short description of the expected format). The short hint is displayed in the
input field before the user enters a value.

Signature:
function setPlaceholder(value)

Example:
To add a placeholder to an Insert form depending of the entered first name, place the
following strings to the OnInsertFormValueChanged.

if (editors['first_name'].getValue() == 'John')
{
editors['last_name'].setPlaceholder('Hi, John! Enter here your surname :).');
}

© 2017 SQL Maestro Group


200 MS SQL PHP Generator Help

See also: getPlaceholder 199

9.1.3 Text area


The following operations may be applied to multi-line text input controls:

· getPlaceholder 200

· setPlaceholder 200

9.1.3.1 getPlaceholder

Returns the value specifying whether the control has a placeholder.

Signature:
function getPlaceholder()

Example:
var placeholder = editors['user_name'].getPlaceholder();

See also: setPlaceholder 199

9.1.3.2 setPlaceholder

Specifies a short hint that describes the expected value of an input field (e.g. a sample
value or a short description of the expected format). The short hint is displayed in the
input field before the user enters a value.

Signature:
function setPlaceholder(value)

Example:
To add a placeholder to an Insert form depending of the entered first name, place the
following strings to the OnInsertFormValueChanged.

if (editors['first_name'].getValue() == 'John')
{
editors['last_name'].setPlaceholder('Hi, John! Enter here your surname :).');
}

© 2017 SQL Maestro Group


Developer Reference 201

See also: getPlaceholder 199

9.1.4 Combobox
The following operations may be used to manipulate comboboxes on a form:

· addItem 201

· removeItem 203

· getItemCount 205

· getCaption 205

· clear 205

9.1.4.1 addItem

Adds items to a combobox dynamically.

Signature:
function addItem(value, caption);

Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 event handlers to change the 'Title' content
depending of the selected 'Sex' value.

function fillRelatedTitles(sender, editors)


{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}

The screenshot demonstrates the result of the fired event.

© 2017 SQL Maestro Group


202 MS SQL PHP Generator Help

© 2017 SQL Maestro Group


Developer Reference 203

See also: removeItem 203 , getItemCount 205 , clear 205

9.1.4.2 removeItem

Removes an item from a combobox.

Signature:
function removeItem(value)

Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 event handlers to change the 'Title' content
depending of the selected 'Sex' value.

function fillRelatedTitles(sender, editors)


{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}

The screenshot demonstrates the result of the fired event.

© 2017 SQL Maestro Group


204 MS SQL PHP Generator Help

© 2017 SQL Maestro Group


Developer Reference 205

See also: addItem 201 , getItemCount 205 , clear 205

9.1.4.3 getItemCount

Returns the number of combobox elements.

Signature:
function getItemCount()

Example:
The following code populates the item_count variable with the number of combobox
elements.

var item_count = editors['title'].getItemCount();

See also: addItem 201 , removeItem 203 , clear 205

9.1.4.4 getCaption

Returns the caption of a certain control.

Signature:
function getCaption()

Let's see the difference between getValue() and getCaption() functions. Assume we we
have a Combobox editor with the following properties:

... and the second item is selected:

The following code shows the difference between these functions:

var value = editors['color'].getValue(); // value == 2


var caption = editors['color'].getCaption(); // caption == 'yellow'

See also: addItem 201 , removeItem 203 , getItemCount 205 , clear 205

9.1.4.5 clear

Deletes all elements in a combobox.

Signature:
function clear()

© 2017 SQL Maestro Group


206 MS SQL PHP Generator Help

Example:
The following code empties the 'title' control.

editors['title'].clear();

See also: addItem 201 , removeItem 203 , getItemCount 205

9.1.5 Radio group


The following operations may be applied to groups of radio buttons:

· addItem 206

· removeItem 207

· getItemCount 209

· getCaption 209

· clear 209

9.1.5.1 addItem

Adds items to a radio group dynamically.

Signature:
function addItem(value, caption);

Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 event handlers to change the 'Title' content
depending of the selected 'Sex' value.

function fillRelatedTitles(sender, editors)


{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}

The screenshot demonstrates the result of the fired event.

© 2017 SQL Maestro Group


Developer Reference 207

See also: removeItem 207 , getItemCount 209 , clear 209

9.1.5.2 removeItem

Removes an item from a radio group.

Signature:
function removeItem(value)

Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 event handlers to change the 'Title' content
depending of the selected 'Sex' value.

© 2017 SQL Maestro Group


208 MS SQL PHP Generator Help

function fillRelatedTitles(sender, editors)


{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}

The screenshot demonstrates the result of the fired event.

© 2017 SQL Maestro Group


Developer Reference 209

See also: addItem 206 , getItemCount 209 , clear 209

9.1.5.3 getItemCount

Returns the number of radio group elements.

Signature:
function getItemCount()

Example:
The following code populates the item_count variable with the number of combobox
elements.

var item_count = editors['title'].getItemCount();

See also: addItem 206 , removeItem 207 , clear 209

9.1.5.4 getCaption

Returns the caption of a certain control.

Signature:
function getCaption()

Let's see the difference between getValue() and getCaption() functions. Assume we we
have a Radio group editor with the following properties:

... and the second item is selected:

The following code shows the difference between these functions:

var value = editors['color'].getValue(); // value == 2


var caption = editors['color'].getCaption(); // caption == 'yellow'

See also: addItem 206 , removeItem 207 , getItemCount 209 , clear 209

9.1.5.5 clear

Deletes all elements in a radio group.

Signature:
function clear()

Example:
The following code empties the 'title' control.

editors['title'].clear();

© 2017 SQL Maestro Group


210 MS SQL PHP Generator Help

See also: addItem 206 , removeItem 207 , getItemCount 209

9.1.6 Checkbox group and Multiple select


These function are helpful to define the behaviour of a checkbox group or a multiple
select:

· addItem 210

· removeItem 211

· getItemCount 212

· clear 213

9.1.6.1 addItem

Adds items to a checkbox group or a multiple select dynamically.

Signature:
function addItem(value, caption);

Example:
The code below placed in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 changes the content of the 'Clothes' checkbox group
depending of the selected season.

if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}

© 2017 SQL Maestro Group


Developer Reference 211

}
}

The screenshot demonstrates the result of the fired event.

See also: removeItem 211 , getItemCount 212 , clear 213

9.1.6.2 removeItem

Removes an item from a checkbox group or a multiple select.

Signature:
function removeItem(value)

Example:
The code below placed in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 changes the content of the 'Clothes' checkbox group
depending of the selected season.

if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');

© 2017 SQL Maestro Group


212 MS SQL PHP Generator Help

editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
}
}

The screenshot demonstrates the result of the fired event.

See also: addItem 210 , getItemCount 212 , clear 213

9.1.6.3 getItemCount

Returns the number of checkbox group or a multiple select elements.

Signature:
function getItemCount()

Example:
The code below placed in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 changes the content of the 'Clothes' checkbox group
depending of the selected season.

if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}

© 2017 SQL Maestro Group


Developer Reference 213

}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
}
}

The screenshot demonstrates the result of the fired event.

See also: removeItem 211 , addItem 210 , clear 213

9.1.6.4 clear

Deletes all elements in a checkbox group or a multiple select.

Signature:
function clear()

Example:
The code below placed in the OnInsertFormEditorValueChanged 101 and
OnEditFormEditorValueChanged 103 changes the content of the 'Clothes' checkbox group
depending of the selected season.

if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');

© 2017 SQL Maestro Group


214 MS SQL PHP Generator Help

editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
}
}

The screenshot demonstrates the result of the fired event.

See also: addItem 210 , removeItem 211 , getItemCount 212

© 2017 SQL Maestro Group


Developer Reference 215

9.2 Server Side API


The programmatic interface allows you to extend the functionality of the generated
application executing additional queries and using environment variables. Available
methods are grouped by classes they belong to. Use them in the sever side events 107 .
Current page may be called as $this.

· Page 215

· Application 216

· EngConnection 217

· Global functions 219

9.2.1 class Page


The following methods of class Page are available:

· GetEnvVar 215

· GetConnection 215

9.2.1.1 GetEnvVar

Returns the value of a specified environment variable.

Signature:
function GetEnvVar($name)

Example:
The following example demonstrates how to use variables within the
OnBeforeInsertRecord 128 event handler.

$rowData['ip_address'] = $this->GetEnvVar('REMOTE_ADDR');
$userName = $this->GetEnvVar('CURRENT_USER_NAME');
if ($userName != 'admin')
$rowData['changed_by'] = $userName;

9.2.1.2 GetConnection

Returns the connection object (an instance of the EngConnection 217 class).

Signature:
function GetConnection()

Example:
To get the list of available databases, use the following code:

$queryResult = array();
$this->GetConnection()->ExecQueryToArray('SHOW DATABASES', $queryResult);

© 2017 SQL Maestro Group


216 MS SQL PHP Generator Help

9.2.2 class Application


The following methods of class Application are available:

· IsGETValueSet 216

· GetGETValue 216

· IsPOSTValueSet 217

· GetPOSTValue 217

· IsLoggedInAsAdmin 217

9.2.2.1 IsGETValueSet

Checks if $_GET contains a parameter named paramName. Returns true if such


parameter does exist and false otherwise.

Signature:
function IsGETValueSet($paramName)

Example:
The code below checks if a $_GET parameter does exist and, if so, assigns its value to a
variable.

// check if the parameter custom_var available


if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';

See also: GetGETValue 216

9.2.2.2 GetGETValue

Returns the value of a parameter named paramName from the superglobal $_GET array.

Signature:
function GetGETValue($name)

Example:
The code below checks if a $_GET parameter does exist and, if so, assigns its value to a
variable.

// check if the parameter custom_var available


if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';

See also: IsGETValueSet 216

© 2017 SQL Maestro Group


Developer Reference 217

9.2.2.3 IsPOSTValueSet

Checks if $_POST contains a parameter named paramName. Returns true if such


parameter does exist and false otherwise.

Signature:
function IsPOSTValueSet($paramName)

The code below checks if a $_POST parameter does exist and, if so, assigns its value to
a variable.

// check if the parameter custom_var available


if (GetApplication()->IsPOSTValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetPOSTValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';

See also: GetPOSTValue 217

9.2.2.4 GetPOSTValue

Returns the value of a parameter named paramName from the superglobal $_POST array.

Signature:
function GetPOSTValue($name)

The code below checks if a $_POST parameter does exist and, if so, assigns its value to
a variable.

// check if the parameter custom_var available


if (GetApplication()->IsPOSTValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetPOSTValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';

See also: IsPOSTValueSet 217

9.2.2.5 IsLoggedInAsAdmin

Checks whether currently logged in user has admin permissions at the application level.

Signature:
function IsLoggedInAsAdmin()

Example

if (!GetApplication()->IsLoggedInAsAdmin()) {
// perform some actions for ordinal users
}

9.2.3 class EngConnection


The following methods of class EngConnection are available:

© 2017 SQL Maestro Group


218 MS SQL PHP Generator Help

· ExecScalarSQL 218

· ExecSQL 218

· ExecQueryToArray 218

9.2.3.1 ExecScalarSQL

Executes a query returning a single value.

Signature:
function ExecScalarSQL($sql)

Example:
$one = $this->GetConnection()->ExecScalarSQL('SELECT 1');

9.2.3.2 ExecSQL

Executes a query that does not return results.

Signature:
function ExecSQL($sql)

Example:
$this->GetConnection()->ExecSQL('INSERT INTO ...');

9.2.3.3 ExecQueryToArray

Еxecute a query that returns a result set.

Signature:
function ExecQueryToArray($sql, &$array)

Example:
$values = array();
$this->GetConnection()->ExecQueryToArray(
'SELECT 1 as a UNION SELECT 2 as a',
$values
);

9.2.4 class PermissionSet


PermissionSet is a simple class that encapsulates object permissions and provide
methods to query/change all or certain permissions. An instance of this class is passed
to the OnGetCustomPagePermissions 136 event to customize page-level permissions.

Querying permissions
The following methods can be used to query the current state of a class instance. All
functions return Boolean.

Signature Description
hasViewGrant() Returns whether the current user can view records.
hasAddGrant() Returns whether the current user can add records.
hasEditGrant() Returns whether the current user can edit records.
hasDeleteGrant() Returns whether the current user can delete records.

© 2017 SQL Maestro Group


Developer Reference 219

hasAdminGrant() Returns whether the current user has admin privileges for
the current page.

Changing permissions
The following methods can be used to change the current state of a class instance. All
parameters are Boolean.

Signature Description
setViewGrant($value) Allows the current user to view records.
setAddGrant($value) Allows the current user to add records.
setEditGrant($value) Allows the current user to edit records.
setDeleteGrant($value) Allows the current user to delete records.
setAdminGrant($value) Grants the current user admin privileges
for the current page.
setGrants($view, $add, $edit, $delete) Sets all page permissions at once.

9.2.5 Global functions


Global functions:

· GetApplication 219

9.2.5.1 GetApplication

Returns an instance of the Application 216 class. Actually it is implemented via the
Singleton pattern, so the same instance always will be returned.

Signature:
function GetApplication()

Example:
To check if the parameter custom_var is available, use the following code:

if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';

© 2017 SQL Maestro Group


220 MS SQL PHP Generator Help

9.3 Style sheets internals


Style sheets structure
PHP Generator's style sheets are made with LESS, a dynamic style sheet language that
can be compiled into Cascading Style Sheets (CSS). The choice of Less is motivated by
such advantages of this language as variables, mixins, functions and many other
techniques that simplify the development of large style sheets.

All .less files are stored in the components/assets/less folder of the output directory.
The main.less file references (directly or indirectly) all styles defined in other files and
subdirectories of this folder as well as user-defined styles, which are stored in
components/assets/less/user.less. Current color theme is defined in components/assets/
less/theme.less. When you click "Generate" in MS SQL PHP Generator, the software
automatically compiles main.less and saves the results to components/assets/css/main.
css.

Manual compilation of LESS files


You might want to compile .less files manually. To do so, you will need to compile main.
less using any .less compiler you like. For example, you can use dotless.Compiler (a
command-line compiler that comes with PHP Generator and can be found in SQL Maestro
Group\DotLess inside the Common Files directory) using the following command:

dotless.compiler.exe -r -m full/path/to/main.less

Visit dotless.Compiler wiki to find more info on using this tool.

© 2017 SQL Maestro Group


Options 221

10 Options
MS SQL PHP Generator allows you to customize the way it works within the Options
dialog. To open the dialog, use the More button and select Options at the drop-down
list.

The window allows you to customize the options grouped by the following sections:

· Application 222
General MS SQL PHP Generator options: generation rules, default page options, and
display data formats.

· Editors & Viewers 232


Customizing of all the SQL editors.

· Appearance 240
Customizing program interface - bars, trees, menus, etc.

It is a good idea to check through these settings before you start working with MS SQL
PHP Generator. You may be surprised at all the things you can adjust and configure!

© 2017 SQL Maestro Group


222 MS SQL PHP Generator Help

10.1 Application
The Application section allows you to customize common rules of MS SQL PHP Generator
behavior. The section consists of several tab; follow the links to find out more about
each of them.

· Page 222

· Generation defaults 228

· Display formats 229

· Output 230

10.1.1 Page
All page properties are separated in three groups depending of the pages they will be
used.

© 2017 SQL Maestro Group


Options 223

Common
These options will be used for all generated pages.

Content encoding
The default option value is UTF-8 and you must have really good reasons to change it.

Direction of page
The position and alignment of the Navigation bar are represented according to this option
value.

Modal form size


A preferred size (default, small, or large) for View, Edit, and Insert modal windows.

Hide sidebar menu by default


If checked, the sidebar menu will be closed until a user opens it manually.

List
These options will be used for grids and cards.

Page navigator
Use this options group to define the position of the navigational elements and the
default number of records displayed on the page. This value may be changed by
application users in runtime if the Runtime Customization 227 option is enabled.

The default navigational elements are the numbers of pages. To create a custom
pagination, use Data Partitioning 151 .

View mode
Select whether page data will be displayed in grid or as info cards. The end-user can
easily switch from the grid mode to the card one and vice versa using the Page Settings
dialog (if the Runtime Customization 227 option is enabled).

© 2017 SQL Maestro Group


224 MS SQL PHP Generator Help

Number of cards in a row


Allows you to specify maximum number of cards displayed in a row for each screen
resolution. These values also can be changed by end-users if the Runtime Customization
227 option is enabled.

Control buttons position


Select whether the Edit, View, Delete, and Copy buttons to be displayed on the left side
of the generated page or on the right one.

Bordered table
Check this option to add borders on all sides of the table and cells.

Condensed table
Turn it 'ON' to make tables more compact by cutting cell padding in half.

Enable visual effects


If this option is 'OFF', all the javascript animation is disabled.

Highlight row at mouse over


To enable the list of all created webpages to be displayed at the Navigation bar of
webpage and to allows the highlighting of rows at mouse over check this options.

Check the Use images for actions option to enable control buttons. If the option is not
checked the actions are available via corresponding links.

The Use fixed grid header option allows to set the grid header will be represented at the
page on scrolling.

Show key columns images


Turn is 'ON' to mark key columns with the 'key' images.

© 2017 SQL Maestro Group


Options 225

Check the Show line numbers option to add row numbering to the grid.

The Disable custom ordering option disallow users to sort data in the grid.

The Edit/Insert options allow you to enable/disable "Set NULL" and "Set Default"
checkboxes on Edit and Insert forms.
10.1.1.1 Export

Use this tab to specify file formats to be available for data export from the generated
application.

© 2017 SQL Maestro Group


226 MS SQL PHP Generator Help

The screenshot below demonstrates the Export menu of the generated application. In
case a file format is excluded from the export abilities, the corresponding menu line is
hidden.

© 2017 SQL Maestro Group


Options 227

10.1.1.2 Abilities

This tab allows you to specify default operations to be available on all the generated
pages in all applications. These settings can be overwritten for a project as well as for a
certain page.

View
Defines whether browsing a single record is available. Possible values are Disabled,
Separated Page (default value), and Modal window.

Edit
Defines whether data editing is available. Possible values are Disabled, Separated Page
(default value), Inline mode, and Modal window.

Quick Edit
Defines whether the quick edit mode is available. Possible values are List and view (quick
editing is available in both data grid and single record view window), List only, View only,
and None.

Insert
Defines whether data insertion is available. Possible values are Disabled, Separated Page
(default value), Inline mode, and Modal window.

Copying
Defines whether data copying is available. Possible values are Disabled, Separated Page
(default value), Inline mode, and Modal window.

Delete
Defines whether data deletion is available. Possible values are Enabled (default) and
Disabled.

Multi-delete
Defines whether multi deletion is available (user can delete multiple records at a time).
Possible values are Enabled (default) and Disabled.

Quick search
Defines whether the Quick Search box is displayed. Possible values are Enabled (default)
and Disabled.

Filter Builder
Defines whether the Filter Builder tool is available. Possible values are Enabled (default)
and Disabled.

Runtime Customization
Defines whether end user is able to customize such page properties as number of
records displayed on a page and a number of cards for each screen resolution. Possible
values are Enabled (default) and Disabled.

Records comparison
Defines whether the record comparison tool is available. Possible values are Enabled
(default) and Disabled.

© 2017 SQL Maestro Group


228 MS SQL PHP Generator Help

10.1.2 Generation rules


Use this tab to define rules to be used for the page generation. These options allow you
to enable/disable the automatic implementation of lookup editors and details by foreign
keys, the editing of autoincrement fields and inserting data into them, automatic
enabling of text area editors for columns storing varchar data with length greater than a
specified value and automatic setting Image view control and Image upload edit control
for binary fields.

Specify here the Max visible length of text fields value. If the text length is greater than
this value, the residual text will be hidden under the More... link on the generated page.
Full text can be displayed in the special window in this case.

© 2017 SQL Maestro Group


Options 229

10.1.3 Display formats


Use this tab's fields to adjust the display data formats in the way you need.

© 2017 SQL Maestro Group


230 MS SQL PHP Generator Help

10.1.4 Output
Use this tab to specify default values for project output options 186 .

PHP Driver
There are several PHP drivers to communicate with database servers and MS SQL PHP
Generator allows you to select a driver to be used by the generated web application.
Note that the corresponding set of PHP functions should be available on your web
server.

Localization file
Use this field to define the interface language to be used for the generated application
by default. Find out more on applications localization at the corresponding page 184 .

You can also set here the output file extension and the default color scheme for the
generated pages.

© 2017 SQL Maestro Group


Options 231

10.1.5 Confirmations
This tab allows you to disable/enable application confirmations. Check corresponding
options to enable necessary confirmation dialogs such as key column notification, exit
from application confirmation and others.

© 2017 SQL Maestro Group


232 MS SQL PHP Generator Help

10.2 Editors & Viewers


The Editors & Viewers section allows you to set the parameters of viewing and editing
the SQL statements within MS SQL PHP Generator.

· General 232

· Display 233

· SQL highlight 234

· PHP highlight 236

· XML highlight 235

· Code Insight 237

· Code Folding 238

10.2.1 General
If the Auto indent option is checked, each new indention is the same as the previous
when editing SQL text.

Insert mode
If this option is checked, insert symbols mode is default on.

Use syntax highlight


Enables syntax highlight in the object editor window.

Always show links


If this option is checked, hyperlinks are displayed in the editor window. To open a link
click it with the Ctrl button pressed.

Show line numbers


If this option is checked, line numbers are displayed in the editor window.

Show special chars


If this option is checked, special chars (like line breaks) are displayed in the editor
window.

Use smart tabs


With this option on the number of tab stops is calculated automatically, depending on
the previous line tab.

Convert tabs to spaces


If this option is checked, each time you press the Tab key, the appropriate number of
spaces will be added to the edited text.

Tab Stops
Defines the tab length, used when editing text.

Undo Limit

© 2017 SQL Maestro Group


Options 233

Defines the maximum number of changes possible to be undone.

10.2.2 Display
You can disable/enable the right text margin and the gutter of the editor area, set the
position of the right text margin as Right margin, and the Gutter width.

Use the Editor font and Font size to define the font used in all program editors and
viewers. The panel below displays the sample of the selected font.

© 2017 SQL Maestro Group


234 MS SQL PHP Generator Help

10.2.3 SQL highlight


Use the SQL highlight item to customize syntax highlight in all SQL editors and viewers.
Select the text element from the list, e.g. comment or SQL keyword and adjust its
foreground color, background color and text attributes according to your preferences.

© 2017 SQL Maestro Group


Options 235

10.2.4 XML highlight


Use the XML highlight item to customize XML syntax highlight for the text representation
of BLOBs. Select the text element from the list, e.g. attribute or attribute value and
adjust its foreground color, background color and text attributes according to your
wishes.

© 2017 SQL Maestro Group


236 MS SQL PHP Generator Help

10.2.5 PHP highlight


Select the text element from the list (e.g. Keyword, Comment, Identifier), and adjust its
foreground color, background color and text attributes according to your wishes.

© 2017 SQL Maestro Group


Options 237

10.2.6 Code Insight


You can disable/enable the code completion with the corresponding option and also set
the time is appears as Delay, and case of words inserted automatically.

© 2017 SQL Maestro Group


238 MS SQL PHP Generator Help

10.2.7 Code Folding


The Code Folding item group makes it possible both to view the whole text and to divide
it into logical parts (regions). Each part can be collapsed and extended. In extended
mode the whole text is displayed (set by default), in collapsed mode the text is hidden
behind one text line denoting the first line of the collapsed region.

© 2017 SQL Maestro Group


Options 239

You can enable/disable code folding in SQL editors and viewers and customize the colors
of its items.

© 2017 SQL Maestro Group


240 MS SQL PHP Generator Help

10.3 Appearance
The Appearance section allows you to customize the application interface style to your
preferences.

Use the Scheme name box to select the interface scheme you prefer: Office XP style,
Windows XP native style, etc. You can create your own interface schemes by
customizing any visual options (Bars and menus, Trees and lists, Edit controls, Check
boxes, Buttons, etc.) and clicking the Save As button. All the customized options are
displayed on the sample panel.

· Bars and menus 240

· Trees and lists 241

· Edit controls 242

· Check boxes 243

· Buttons 244

· Page controls 245

· Group boxes 246

· Splitters 247

10.3.1 Bars and menus


Use the Bars and menus item to customize MS SQL PHP Generator toolbars style and
menus animation.

The item allows you to select Bar style and menu animation from the corresponding
drop-down lists and to enable or disable such options as sunken border, F10 key for
opening menu, viewing full menus after delay, flat close buttons, gray-scale images.

© 2017 SQL Maestro Group


Options 241

10.3.2 Trees and lists


Use the Trees and lists item to select various tree view options. Use the item to select
standard, flat or ultraflat styles, check or uncheck the hide selection, hide focus
rectangle and native style options.

© 2017 SQL Maestro Group


242 MS SQL PHP Generator Help

10.3.3 Edit controls


Use the Edit controls item to customize the appearance of different MS SQL PHP
Generator edit controls. The tab allows you to select the edit controls border style,
button style and transparency, enable/disable hot tracks, shadows, native style and
customize edges. It is also possible to define samples for the text edit, button edit and
combo box controls.

© 2017 SQL Maestro Group


Options 243

10.3.4 Check boxes


The Check boxes item allows you to customize the appearance of check boxes and radio
buttons. The tab allows you to customize the appearance of check boxes: set border
style, enable/disable hot tracks, shadows, native style. It is also possible to define
samples for check boxes and radio buttons.

© 2017 SQL Maestro Group


244 MS SQL PHP Generator Help

10.3.5 Buttons
Use the Buttons item to customize MS SQL PHP Generator buttons. The tab allows you
to adjust the appearance of buttons and define sample buttons as well.

© 2017 SQL Maestro Group


Options 245

10.3.6 Page controls


The Page controls item allows you to customize the style of all MS SQL PHP Generator
page controls. The tab allows you to select tab styles, enable/disable hot track, multi-
line pages and native style.

© 2017 SQL Maestro Group


246 MS SQL PHP Generator Help

10.3.7 Group boxes


Use the Group boxes item to customize all MS SQL PHP Generator group boxes according
to your preferences. Use tab to apply styles for group boxes, enable/disable native style
and define samples.

© 2017 SQL Maestro Group


Options 247

10.3.8 Splitters
Use the Splitters item to customize all MS SQL PHP Generator splitters according to your
preferences. Use the tab to select hot zone style (Windows XP task bar, Media Player 8,
Media Player 9, Simple or none) and specify the Hot zone drags a splitter option.

© 2017 SQL Maestro Group


248 MS SQL PHP Generator Help

© 2017 SQL Maestro Group


Index 249

Connection options 12

Index -D-
-A- Developer reference 188
Client Side API 189
Appearance Options Server Side API 215
Bar and menus 240 Style sheets internals 220
Buttons 244
Check boxes
Edit controls
243
242 -E-
Group boxes 246 Editor & Viewer Options
Page controls 245 Code Folding 238
Splitters 247 Code Insight 237
Trees and lists 241 Display 233
General 232

-C- PHP highlight 236


SQL highlight 234
Charts XML highlight 235
General options 141 EULA 5
OnPrepareChart 142 Events 81
Query 140 Global Events 82
class Application Page Events executed at Client Side 81, 98
GetGETValue 216 Page Events executed at Server Side 81, 107
GetPOSTValue 217
IsGETValueSet 216
IsLoggedInAsAdmin 217 -G-
IsPOSTValueSet 217 Getting started 11
Client Side API Global Events
All editors API 189 OnAfterDeleteRecord 95
getEnabled 193 OnAfterInsertRecord 93
getFieldName 197 OnAfterLogin 83
getPlaceholder 199, 200 OnAfterUpdateRecord 94
getReadonly 195 OnBeforeDeleteRecord 93
getRequired 196 OnBeforeInsertRecord 92
getState 196 OnBeforeUpdateRecord 92
getValue 189, 191 OnCustomHTMLHeader 85
getVisible 195, 196 OnCustomizePageList 97
setEnabled 193 OnGetCustomExportOptions 96
setHint 197 OnGetCustomPagePermissions 97
setPlaceholder 199, 200 OnGetFieldValue 96
setReadonly 195 OnPreparePage 84
setRequired 196
setState 197
Text editors 199 -I-
Command line options 15
Connect to database 12 Installation instructions 3

© 2017 SQL Maestro Group


250 MS SQL PHP Generator Help

OnAfterDeleteRecord 92, 93, 95, 126, 127, 128,


129
-L- OnAfterUpdateRecord 94, 127
OnBeforePageExecute 108
License Agreement 5
OnCustomDrawRow 125
OnCustomHTMLHeader 114
-M- OnCustomRenderColumn 110
OnCustomRenderExportColumn 113
MS SQL PHP Generator OnCustomRenderPrintColumn 113
Installation 3 OnCustomRenderTotals 117
License agreement 5 OnExtendedCustomDrawRow 114
Overview 1 OnGetCustomExportOptions 96, 130
Registration 4 OnGetCustomTemplate 85, 118
System requirements 2 OnGetFieldValue 96, 130
Page properties

-O- Abilities 151


Common options 144
Options 221 RSS options 148
Appearance 240 Projects 14
Application 222 Purchase MS SQL PHP Generator 4
Editor & Viewers 232
Page 222
-R-
-P- Registration 4
Report sending 16
Page Editor
Charts 139
Columns 27
-S-
Data Partitioning 151 Security options
Edit properties 43 Database server authorization 177
Events 81 Hard-coded authorization 173
Filter 139 Permission manager 179
Lookup options 29 Record-level security 183
Master- Detail Presentations 76 Table-based authorization 175
Multi-level autocomplete editor 53 User-defined authorization 178
Page properties 143 Server Side API
Templates 76 class Page 215
View properties 34 Server Side Page Events
Page Events executed at Client Side 98 OnCustomCompareValues 135
OnAfterPageLoad 99 OnGetCustomColumnGroup 134
OnBeforePageLoad 99 OnGetCustomFormLayout 133
OnEditFormEditorValueChanged 103 OnGetCustomPagePermissions 97, 136
OnEditFormLoaded 106 OnGetCustomRecordPermissions 137
OnEditFormValidate 100 OnGetCustomUploadFileName 136
OnInsertFormEditorValueChanged 101 OnPageLoaded 109
OnInsertFormLoaded 105 OnPrepareColumnFilter 132
OnInsertFormValidate 99 OnPrepareFilterBuilder 131
Page Events executed at Server Side 107
© 2017 SQL Maestro Group
Index 251

System requirements 2

-W-
Webpage appearance 161
Color Scheme 164
Color Scheme Customization 164
Custom CSS 166
Custom templates 169
Header and Footer 165
Using templates 169
Working with MS SQL PHP Generator
Adding queries 22
Advanced generation options 186
Configuring datasources 19
Customizing content of webpages 24
Deployment to the Internet 18
Localization 184
Output folder 186
Page Editor 27
Project Options 157
Security options 171
Selecting tables and views 21
Shared Options 158
Webpage appearance 161

© 2017 SQL Maestro Group

You might also like