File "form-create-template.php"
Full Path: /home/humancap/cl.humancap.com.my/generator/generator-templates/form-create-template.php
File size: 56.19 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// phpcs:disable PSR1.Files.SideEffects
// phpcs:disable Generic.WhiteSpace.ScopeIndent
use phpformbuilder\database\DB;
use phpformbuilder\database\pdodrivers\Mysql;
use phpformbuilder\database\pdodrivers\Pgsql;
use generator\TemplatesUtilities;
use common\Utils;
use crud\ElementsUtilities;
include_once GENERATOR_DIR . 'class/generator/TemplatesUtilities.php';
include_once ADMIN_DIR . 'class/crud/ElementsUtilities.php';
/* To debug:
call $generator->debug($var),
build the forms from the generator
then inspect the comments in the form code.
-------------------------------------------------- */
$generator = $_SESSION['generator'];
$form_id = 'form-create-' . str_replace('_', '-', $generator->table);
$has_fileuploader = false;
if (in_array('image', $generator->columns['field_type']) || in_array('file', $generator->columns['field_type'])) {
$has_fileuploader = true;
}
/* External fields
-------------------------------------------------- */
/*
$generator->external_columns = array(
'target_table' => '',
'target_fields' => array(),
'table_label' => '',
'fields_labels' => array(),
'relation' => '',
'allow_crud_in_list' => false,
'allow_in_forms' => true,
'forms_fields' => array(),
'field_type' => array(), // 'select-multiple' | 'checkboxes'
'active' => false
);
// relation = $generator->relations['from_to'][$i]
*/
$show_external = false;
$active_ext_cols = array();
foreach ($generator->external_columns as $key => $ext_col) {
if ($ext_col['active'] === true && !empty($ext_col['relation']['intermediate_table']) && $ext_col['allow_in_forms'] === true) {
$show_external = true;
$active_ext_cols[] = $ext_col;
}
}
echo '<?php' . "\n";
?>
use phpformbuilder\Form;
<?php if ($has_fileuploader === true) { ?>
use fileuploader\server\FileUploader;
<?php } ?>
use phpformbuilder\Validator\Validator;
use phpformbuilder\database\DB;
use common\Utils;
use secure\Secure;
include_once ADMIN_DIR . 'secure/class/secure/Secure.php';
<?php if ($has_fileuploader === true) { ?>
include_once CLASS_DIR . 'phpformbuilder/plugins/fileuploader/server/class.fileuploader.php';
<?php } ?>
$debug_content = '';
/* =============================================
validation if posted
============================================= */
if ($_SERVER["REQUEST_METHOD"] == "POST" && Form::testToken('<?php echo $form_id; ?>') === true) {
$validator = Form::validate('<?php echo $form_id; ?>', FORMVALIDATION_PHP_LANG);
<?php
/* =============================================
Create validation statements
============================================= */
for ($i=0; $i < $generator->columns_count; $i++) {
$column_name = $generator->columns['name'][$i];
$column_type = $generator->columns['column_type'][$i];
$column_validation = $generator->columns['validation'][$i];
$field_type = $generator->columns['field_type'][$i];
if (!empty($column_validation) && is_array($column_validation) && (!in_array($column_name, $generator->auto_increment_keys))) {
$validation = $column_validation;
for ($j=0; $j < count($validation); $j++) {
$validation_function = $validation[$j]['function'];
$validation_args = $validation[$j]['args'];
if ($validation_function == 'date' || $validation_function == 'minDate' || $validation_function == 'maxDate') {
?>
if (isset($_POST['<?php echo $column_name; ?>_submit'])) {
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate('<?php echo $column_name; ?>_submit');
} else {
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate('<?php echo $column_name; ?>');
}
<?php
} elseif ($field_type == 'password') {
?>
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate('<?php echo $column_name; ?>');
<?php
} elseif ($generator->columns['select_multiple'][$i] > 0 || $field_type == 'checkbox') {
// Array values
if ($validation_function == 'required') {
// validate only 1st entry
?>
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate('<?php echo $column_name; ?>.0');
<?php
} elseif ($validation_function == 'maxLength') {
// validate json encoded value
?>
$json_value = json_encode($_POST['<?php echo $column_name; ?>']);
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate($json_value, JSON_UNESCAPED_UNICODE);
<?php
} else {
// validate each entry
// used for all validation functions except required and maxLength
?>
if (is_array($_POST['<?php echo $column_name; ?>']) || $_POST['<?php echo $column_name; ?>'] instanceof Countable) {
$count = count($_POST['<?php echo $column_name; ?>']);
for ($i=0; $i < $count; $i++) {
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate('<?php echo $column_name; ?>.' . $i);
}
}
<?php
}
} else {
?>
$validator-><?php echo $validation_function; ?>(<?php echo $validation_args; ?>)->validate('<?php echo $column_name; ?>');
<?php
}
}
}
}
?>
// check for errors
if ($validator->hasErrors()) {
$_SESSION['errors']['<?php echo $form_id; ?>'] = $validator->getAllErrors();
} else {
require_once CLASS_DIR . 'phpformbuilder/database/db-connect.php';
require_once CLASS_DIR . 'phpformbuilder/database/DB.php';
$db = new DB(DEBUG);
$db->setDebugMode('register');
// begin transaction
$db->transactionBegin();
$values = array();
<?php
/* =============================================
Create update query
============================================= */
/* field_types : boolean|checkbox|color|date|datetime|email|file|hidden|image|month|number|password|radio|select|text|textarea|time|url
column types:
tinyint | smallint | mediumint | int | bigint | decimal | float | double | real
date | datetime | timestamp | time | year
char | varchar | tinytext | text | mediumtext | longtext
enum | set | json
*/
$column_types_integers = array('tinyint', 'smallint', 'mediumint', 'int', 'bigint');
$column_types_floats = array('decimal', 'float', 'double', 'real');
$auto_increment_column_name = '';
$has_auto_increment_function = false;
for ($i=0; $i < $generator->columns_count; $i++) {
$column_name = $generator->columns['name'][$i];
$column_type = $generator->columns['column_type'][$i];
$column_auto_increment = $generator->columns['auto_increment'][$i];
$auto_increment_function = $generator->columns['auto_increment_function'][$i];
$column_type = $generator->columns['column_type'][$i];
$field_type = $generator->columns['field_type'][$i];
$special3 = $generator->columns['special3'][$i];
$has_relation = false;
if (!empty($generator->columns['relation'][$i]['target_table'])) {
$has_relation = true;
}
if ($column_auto_increment) {
$auto_increment_column_name = $column_name;
if (PDO_DRIVER === 'firebird' && !empty($auto_increment_function)) {
$has_auto_increment_function = true;
?>
$sql = 'SELECT NEXT VALUE FOR <?php echo $auto_increment_function; ?> FROM rdb$database';
if ($next_<?php echo \strtolower($column_name); ?> = $db->queryValue($sql)) {
$values['<?php echo $column_name; ?>'] = $next_<?php echo \strtolower($column_name); ?>;
}
<?php
} elseif (PDO_DRIVER === 'oci') {
// ommit the auto-incremented column, the value will be generated by a sequence trigger or an IDENTITY column.
} else {
?>
$values['<?php echo $column_name; ?>'] = null;
<?php
}
} elseif ($field_type == 'color' || $field_type == 'email' || $field_type == 'hidden' || $field_type == 'text' || $field_type == 'textarea' || $field_type == 'url') {
?>
$values['<?php echo $column_name; ?>'] = $_POST['<?php echo $column_name; ?>'];
<?php
} elseif ($field_type == 'boolean') {
?>
if (isset($_POST['<?php echo $column_name; ?>'])) {
$values['<?php echo $column_name; ?>'] = intval($_POST['<?php echo $column_name; ?>']);
}
<?php
} elseif ($field_type == 'radio' || $field_type == 'number') {
if (in_array($column_type, $column_types_integers)) {
?>
if (isset($_POST['<?php echo $column_name; ?>'])) {
$values['<?php echo $column_name; ?>'] = intval($_POST['<?php echo $column_name; ?>']);
}
<?php
} elseif (in_array($column_type, $column_types_floats)) {
?>
if (isset($_POST['<?php echo $column_name; ?>'])) {
$values['<?php echo $column_name; ?>'] = floatval($_POST['<?php echo $column_name; ?>']);
}
<?php
} else {
?>
if (isset($_POST['<?php echo $column_name; ?>'])) {
$values['<?php echo $column_name; ?>'] = $_POST['<?php echo $column_name; ?>'];
}
<?php
}
} elseif ($field_type == 'file') {
?>
if (!empty($_POST['<?php echo $column_name; ?>']) && $_POST['<?php echo $column_name; ?>'] != '[]') {
$posted_file = FileUploader::getPostedFiles($_POST['<?php echo $column_name; ?>']);
$values['<?php echo $column_name; ?>'] = $posted_file[0]['file'];
} else {
$values['<?php echo $column_name; ?>'] = '';
}
<?php
} elseif ($field_type == 'image') {
?>
if (!empty($_POST['<?php echo $column_name; ?>']) && $_POST['<?php echo $column_name; ?>'] != '[]') {
$posted_img = FileUploader::getPostedFiles($_POST['<?php echo $column_name; ?>']);
$values['<?php echo $column_name; ?>'] = $posted_img[0]['file'];
} else {
$values['<?php echo $column_name; ?>'] = '';
}
<?php
} elseif ($field_type == 'password') {
?>
if (!empty($_POST['<?php echo $column_name; ?>'])) {
$password = Secure::encrypt($_POST['<?php echo $column_name; ?>']);
$values['<?php echo $column_name; ?>'] = $password;
}
<?php
} elseif ($field_type == 'select') {
?>
if (is_array($_POST['<?php echo $column_name; ?>'])) {
<?php
if ($column_type == 'enum' || $column_type == 'set') {
?>
$array_values = implode(',', $_POST['<?php echo $column_name; ?>']);
$values['<?php echo $column_name; ?>'] = $array_values;
<?php
} else {
?>
$json_values = json_encode($_POST['<?php echo $column_name; ?>'], JSON_UNESCAPED_UNICODE);
$values['<?php echo $column_name; ?>'] = $json_values;
<?php
}
?>
} else {
<?php
if (in_array($column_type, $column_types_integers)) {
if ($has_relation) {
?>
$values['<?php echo $column_name; ?>'] = intval($_POST['<?php echo $column_name; ?>']);
if ($values['<?php echo $column_name; ?>'] < 1) {
$values['<?php echo $column_name; ?>'] = null;
}
<?php
} else {
?>
$values['<?php echo $column_name; ?>'] = intval($_POST['<?php echo $column_name; ?>']);
<?php
}
} elseif (in_array($column_type, $column_types_floats)) {
?>
$values['<?php echo $column_name; ?>'] = floatval($_POST['<?php echo $column_name; ?>']);
<?php
} else {
?>
$values['<?php echo $column_name; ?>'] = $_POST['<?php echo $column_name; ?>'];
<?php
}
?>
}
<?php
} elseif ($field_type == 'checkbox') {
if ($column_type == 'enum' || $column_type == 'set') {
?>
$array_values = implode(',', $_POST['<?php echo $column_name; ?>']);
$values['<?php echo $column_name; ?>'] = $array_values;
<?php
} else {
?>
$json_values = json_encode($_POST['<?php echo $column_name; ?>'], JSON_UNESCAPED_UNICODE);
$values['<?php echo $column_name; ?>'] = $json_values;
<?php
}
} elseif ($field_type == 'date' || $field_type == 'month') {
?>
$date_value = $_POST['<?php echo $column_name; ?>'];
if (isset($_POST['<?php echo $column_name; ?>_submit'])) {
$date_value = $_POST['<?php echo $column_name; ?>_submit'];
}
if (trim($date_value) == '') {
$values['<?php echo $column_name; ?>'] = null;
} else {
$values['<?php echo $column_name; ?>'] = $date_value;
}
<?php
} elseif ($field_type == 'datetime') {
if (intval($special3) > 0) {
// date_now_hidden
?>
$values['<?php echo $column_name; ?>'] = $_POST['<?php echo $column_name; ?>'];
<?php
} else {
?>
$value_date = $_POST['<?php echo $column_name; ?>'];
$value_time = $_POST['<?php echo $column_name; ?>-time'];
if (isset($_POST['<?php echo $column_name; ?>_submit'])) {
$value_date = $_POST['<?php echo $column_name; ?>_submit'];
}
if (isset($_POST['<?php echo $column_name; ?>-time_submit'])) {
$value_time = $_POST['<?php echo $column_name; ?>-time_submit'];
}
if (trim($value_date . ' ' . $value_time) == '') {
$values['<?php echo $column_name; ?>'] = null;
} else {
$values['<?php echo $column_name; ?>'] = $value_date . ' ' . $value_time;
}
<?php
}
} elseif ($field_type == 'time') {
?>
$value_time = $_POST['<?php echo $column_name; ?>'];
if (isset($_POST['<?php echo $column_name; ?>_submit'])) {
$value_time = $_POST['<?php echo $column_name; ?>_submit'];
}
if (trim($value) == '') {
$values['<?php echo $column_name; ?>'] = null;
} else {
$values['<?php echo $column_name; ?>'] = $value_time;
}
<?php
}
} // END for
/* =============================================
DB UPDATE
============================================= */
?>
try {
// insert into <?php echo $generator->table; ?>
if (DEMO !== true && $db->insert('<?php echo $generator->table; ?>', $values, DEBUG_DB_QUERIES) === false) {
$error = $db->error();
throw new \Exception($error);
} else {
<?php
/* External fields
-------------------------------------------------- */
/*
$generator->external_columns = array(
'target_table' => '',
'target_fields' => array(),
'table_label' => '',
'fields_labels' => array(),
'relation' => '',
'allow_crud_in_list' => false,
'allow_in_forms' => true,
'forms_fields' => array(),
'field_type' => array(), // 'select-multiple' | 'checkboxes'
'active' => false
);
// relation = $generator->relations['from_to'][$i]
$ext_col['relation'] = array(
'origin_table'
'origin_column'
'intermediate_table'
'intermediate_column_1' // refers to origin_table
'intermediate_column_2' // refers to target_table
'target_table'
'target_column',
'cascade_delete_from_intermediate' // true will automatically delete all matching records according to foreign keys constraints. Default: true
'cascade_delete_from_origin' // true will automatically delete all matching records according to foreign keys constraints. Default: true
)
*/
if ($show_external === true) {
foreach ($active_ext_cols as $key => $ext_col) {
$origin_table = $ext_col['relation']['origin_table'];
$origin_column = $ext_col['relation']['origin_column'];
$intermediate_table = $ext_col['relation']['intermediate_table'];
$relation_origin_column = $ext_col['relation']['intermediate_column_1'];
$relation_target_column = $ext_col['relation']['intermediate_column_2'];
$target_table = $ext_col['relation']['target_table'];
$target_column = $ext_col['relation']['target_column'];
$table_label = $ext_col['table_label'];
// (products => products_categories => categories)
// many to many
// the posted records will be added to the intermediate table.
// get the primary keys of the intermediate table
// case 1: the intermediate table HAS an auto-incremented primary key.
// case 2: the intermediate table DOESN't HAVE an auto-incremented primary key.
// in both cases the WHERE clause is:
// $intermediate_table.$relation_origin_column = $origin_table.$origin_column
$intermediate_table_auto_incremented_pk_column = null;
$db = new DB();
$columns = $db->getColumns($intermediate_table);
$pdo_driver_object = 'phpformbuilder\\database\\pdodrivers\\' . ucfirst(PDO_DRIVER);
$pdo_driver = new $pdo_driver_object($db->getPdo());
$columns = $pdo_driver->convertColumns($intermediate_table, $columns);
if ($columns) {
foreach ($columns as $col) {
// last row is table comments, skip it.
if (isset($col->Field) && $col->Key == 'PRI' && $col->Extra == 'auto_increment') {
$intermediate_table_auto_incremented_pk_column = $col->Field;
}
}
}
if (PDO_DRIVER === 'firebird' && $has_auto_increment_function) {
?>
$<?php echo $generator->table; ?>_last_insert_ID = $next_<?php echo \strtolower($auto_increment_column_name); ?>;
<?php
} elseif (PDO_DRIVER === 'oci') {
?>
$<?php echo $generator->table; ?>_last_insert_ID = $db->getMaximumValue('<?php echo $generator->table; ?>', '<?php echo $auto_increment_column_name; ?>', DEBUG_DB_QUERIES);
<?php
} else {
?>
$<?php echo $generator->table; ?>_last_insert_ID = $db->getLastInsertID();
<?php
}
?>
// insert records in <?php echo $intermediate_table ?>
foreach ($_POST['ext_<?php echo $target_table; ?>'] as $value) {
$values = array();
<?php
if (!is_null($intermediate_table_auto_incremented_pk_column)) {
?>
$values['<?php echo $intermediate_table_auto_incremented_pk_column; ?>'] = null;
<?php
}
?>
$values['<?php echo $relation_origin_column; ?>'] = $<?php echo $generator->table; ?>_last_insert_ID;
$values['<?php echo $relation_target_column; ?>'] = $value;
if (DEMO !== true && $db->insert('<?php echo $intermediate_table; ?>', $values, DEBUG_DB_QUERIES) === false) {
$error = $db->error();
throw new \Exception($error);
}
}
<?php
} // end foreach
} // end if
?>
// ALL OK
if (!DEBUG_DB_QUERIES) {
$db->transactionCommit();
$_SESSION['msg'] = Utils::alert(INSERT_SUCCESS_MESSAGE, 'alert-success has-icon');
// reset form values
Form::clear('<?php echo $form_id; ?>');
// redirect to list page
if (isset($_SESSION['active_list_url'])) {
header('Location:' . $_SESSION['active_list_url']);
} else {
header('Location:' . ADMIN_URL . '<?php echo $generator->item; ?>');
}
// if we don't exit here, $_SESSION['msg'] will be unset
exit();
} else {
$debug_content .= $db->getDebugContent();
$db->transactionRollback();
$_SESSION['msg'] = Utils::alert(INSERT_SUCCESS_MESSAGE . '<br>(' . DEBUG_DB_QUERIES_ENABLED . ')', 'alert-success has-icon');
}
}
} catch (\Exception $e) {
$db->transactionRollback();
$msg_content = DB_ERROR;
if (DEBUG) {
$msg_content .= '<br>' . $e->getMessage() . '<br>' . $db->getLastSql();
}
$_SESSION['msg'] = Utils::alert($msg_content, 'alert-danger has-icon');
}
} // END else
} // END if POST
<?php
/* =============================================
form Update
============================================= */
?>
$form = new Form('<?php echo $form_id; ?>', 'horizontal', 'novalidate');
$form->setAction(ADMIN_URL . '<?php echo $generator->item; ?>/create');
$form->startFieldset();
<?php
// get grouped fields & fields width
$current_group = array();
$is_grouped = array();
for ($i=0; $i < $generator->columns_count; $i++) {
// SKIP primary keys
// if (!in_array($generator->columns['name'][$i], $generator->auto_increment_keys)) {
$is_grouped[$i] = false;
$flex_option[$i] = 'end';
if (strpos($generator->columns['field_width'][$i], 'grouped') !== false || ($generator->columns['field_type'][$i] == 'datetime' && intval($generator->columns['special3'][$i]) < 1)) {
$is_grouped[$i] = true;
}
$w = $generator->columns['field_width'][$i];
$field_width[$i] = 10;
$field_percent_width[$i] = 100;
if ($w == '66% single' || $w == '66% grouped') {
$field_width[$i] = 6;
$field_percent_width[$i] = 66.66;
if ($w == '66% single') {
$flex_option[$i] = 'start';
}
} elseif ($w == '50% single' || $w == '50% grouped') {
$field_width[$i] = 4;
$field_percent_width[$i] = 50;
if ($w == '50% single') {
$flex_option[$i] = 'start';
}
} elseif ($w == '33% single' || $w == '33% grouped') {
$field_width[$i] = 2;
$field_percent_width[$i] = 33.33;
if ($w == '33% single') {
$flex_option[$i] = 'start';
}
}
// }
}
// the loop must be restarted because of group fields.
for ($i=0; $i < $generator->columns_count; $i++) {
// if (!in_array($generator->columns['name'][$i], $generator->auto_increment_keys)) {
$field_type = $generator->columns['field_type'][$i];
$ajax_loading = false;
if (isset($generator->columns['ajax_loading'][$i])) {
$ajax_loading = $generator->columns['ajax_loading'][$i];
}
$name = $generator->columns['name'][$i];
$label = $generator->columns['fields'][$name];
$special = $generator->columns['special'][$i];
$special2 = $generator->columns['special2'][$i];
$special3 = $generator->columns['special3'][$i];
$special4 = $generator->columns['special4'][$i];
$special5 = $generator->columns['special5'][$i];
$special6 = $generator->columns['special6'][$i];
$special7 = $generator->columns['special7'][$i];
$select_from = $generator->columns['select_from'][$i];
$select_from_table = $generator->columns['select_from_table'][$i];
$select_from_value = $generator->columns['select_from_value'][$i];
$select_from_field_1 = $generator->columns['select_from_field_1'][$i];
$select_from_field_2 = $generator->columns['select_from_field_2'][$i];
$select_custom_values = $generator->columns['select_custom_values'][$i];
$select_multiple = $generator->columns['select_multiple'][$i];
$help_text = $generator->columns['help_text'][$i];
$tooltip = $generator->columns['tooltip'][$i];
$required = $generator->columns['required'][$i];
$char_count = $generator->columns['char_count'][$i];
$char_count_max = $generator->columns['char_count_max'][$i];
$tinyMce = $generator->columns['tinyMce'][$i];
$grouped = $is_grouped[$i];
$width = $field_width[$i];
$height = $generator->columns['field_height'][$i];
$flex = $flex_option[$i];
/* field_types : input|password|textarea|select|radio|boolean|checkbox|file|image|date|hidden */
// attributes
$attr = [];
if ($required) {
$attr[] = 'required';
}
// multiple
if ($field_type == 'select' && $select_multiple > 0) {
$name .= '[]';
}
?>
// <?php echo $name; ?> --
<?php
// group
if (empty($current_group) && $is_grouped[$i]) {
$percent_width = 0;
for ($j=$i; $j < ($i + 4); $j++) {
if (isset($is_grouped[$j]) && $is_grouped[$j]) {
$percent_width += $field_percent_width[$j];
if ($percent_width <= 100) {
// include to current group & remove from others incoming groups
$current_group[] = '\'' . $generator->columns['name'][$j] . '\'';
if ($generator->columns['field_type'][$j] == 'datetime') {
$current_group[] = '\'' . $generator->columns['name'][$j] . '-time\'';
}
$is_grouped[$j] = false;
}
}
}
?>
$form->groupElements(<?php echo implode(', ', $current_group) ?>);
<?php
}
if (($i == 0 && $flex == 'start') || ($i > 0 && $flex != $flex_option[$i - 1])) {
?>
$options = array(
'elementsWrapper' => '<div class="form-group row justify-content-<?php echo $flex; ?>"></div>'
);
$form->setOptions($options);
<?php
}
// reset group
$percent_width = 0;
$current_group = array();
// layout
if ($i < 1 || $width != $field_width[$i - 1] || in_array($generator->columns['name'][$i - 1], $generator->auto_increment_keys)) {
?>
$form->setCols(2, <?php echo $width; ?>);
<?php
}
// help text
if (!empty($help_text)) {
?>
$form->addHelper('<?php echo addslashes($help_text); ?>', '<?php echo $name; ?>', 'after');
<?php
}
// label & tooltip
$label = ucwords(addslashes($label));
if (!empty($tooltip)) {
$label .= '<a href="#" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="' . str_replace('"', '\'', addslashes($tooltip)) . '" class="append"><span class="badge text-bg-info">?</span></a>';
}
// char count
if ($char_count && !$tinyMce) {
?>
$form->addPlugin('word-character-count', '#<?php echo $name; ?>', 'default', array('maxCharacters' => <?php echo $char_count_max; ?>));
<?php
// char count + tinyMce
} elseif ($char_count && $tinyMce) {
$attr[] = 'class=tinyMce';
?>
$form->addPlugin('tinymce', '#<?php echo $name; ?>', 'word_char_count', array('maxCharacters' => <?php echo $char_count_max; ?>));
<?php
// tinyMce
} elseif ($tinyMce) {
$attr[] = 'class=tinyMce';
?>
$form->addPlugin('tinymce', '#<?php echo $name; ?>');
<?php
}
// color|email|number|url
if ($field_type == 'text' || $field_type == 'color' || $field_type == 'email' || $field_type == 'url') {
?>
$form->addInput('<?php echo $field_type; ?>', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'number') {
// if number with decimals, $special is the numbe of decimals
if (!empty($special)) {
$attr[] = 'data-decimals=' . $special;
$attr[] = 'step=' . pow(10, -intval($special) - 1);
}
?>
$form->addInput('<?php echo $field_type; ?>', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'password') {
?>
$form->addPlugin('passfield', '#<?php echo $name; ?>', '<?php echo $special; ?>');
$form->addInput('password', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'textarea') {
$attr[] = 'cols=10';
if ($height !== '') {
$available_heights = array(
'xs' => '1',
'sm' => '2',
'md' => '8',
'lg' => '12',
'xlg' => '16'
);
if (isset($available_heights[$height])) {
$attr[] = 'rows=' . $available_heights[$height];
} else {
$attr[] = 'rows=8';
}
} else {
$attr[] = 'rows=10';
}
?>
$form->addTextarea('<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'select' || $field_type == 'radio' || $field_type == 'checkbox') {
$indent = '';
$join_query = '';
if ($field_type == 'select') {
if ($ajax_loading) {
$attr[] = 'class=ajax-select';
$attr[] = 'data-minimum-input-length=2';
$attr[] = 'data-placeholder=' . SELECT_CONST . ' ...';
} else {
$attr[] = 'data-slimselect=true';
}
if ($select_multiple) {
$attr[] = 'multiple';
}
}
/* START if ($select_from == 'from_table')
-------------------------------------------------- */
if ($select_from == 'from_table') {
$indent = ' ';
$fields_query = $select_from_table . '.' . $select_from_value;
$order_by = $select_from_table . '.' . $select_from_value;
$option_text_for_ajax = $select_from_table . '.' . $select_from_value;
if ($select_from_field_1 != $select_from_value) {
if (!strpos($select_from_field_1, '.')) {
$fields_query .= ', ' . $select_from_table . '.' . $select_from_field_1;
$order_by = $select_from_table . '.' . $select_from_field_1;
$option_text_for_ajax = $select_from_table . '.' . $select_from_field_1;
} else {
// if the target field comes from a secondary relation. E.g: city.country.country
$split = explode('.', $select_from_field_1);
$secondary_target_table = $split[0];
$secondary_target_field = $split[1];
$fields_query .= ', ' . $secondary_target_table . '.' . $secondary_target_field;
$order_by = $secondary_target_table . '.' . $secondary_target_field;
$option_text_for_ajax = $secondary_target_table . '.' . $secondary_target_field;
}
}
if (!empty($select_from_field_2)) {
if (!strpos($select_from_field_2, '.')) {
$fields_query .= ', ' . $select_from_table . '.' . $select_from_field_2;
$option_text_for_ajax .= ' + ' . $select_from_table . '.' . $select_from_field_2;
} else {
// if the target field comes from a secondary relation. E.g: city.country.country
$split = explode('.', $select_from_field_2);
$secondary_target_table = $split[0];
$secondary_target_field = $split[1];
$fields_query .= ', ' . $secondary_target_table . '.' . $secondary_target_field;
$option_text_for_ajax .= ' + ' . $secondary_target_table . '.' . $secondary_target_field;
}
}
if (strpos($select_from_field_1, '.') || strpos($select_from_field_2, '.') && in_array($secondary_target_table, $generator->relations['all_db_related_tables'])) {
// INNER JOIN country ON city.country_country_id = country.country_id'
foreach ($generator->relations['from_to'] as $ft) {
if ($ft['origin_table'] === $select_from_table && empty($ft['intermediate_table']) && $ft['target_table'] === $secondary_target_table) {
$join_query = ' INNER JOIN ' . $secondary_target_table . ' ON ' . $select_from_table . '.' . $ft['origin_column'] . ' = ' . $ft['target_table'] . '.' . $ft['target_column'];
}
}
}
?>
$from = '<?php echo $select_from_table . $join_query; ?>';
$columns = '<?php echo $fields_query; ?>';
$where = array();
$extras = array(
'select_distinct' => true,
'order_by' => '<?php echo $order_by; ?>'
);
// restrict if relationship table is the users table OR if the relationship table is used in the restriction query
if (ADMIN_LOCKED === true && Secure::canCreateRestricted('<?php echo $generator->table; ?>')) {
$secure_restriction_query = Secure::getRestrictionQuery('<?php echo $generator->table; ?>');
if (!empty($secure_restriction_query)) {
if ('<?php echo $select_from_table; ?>' == USERS_TABLE) {
$restriction_query = '<?php echo $select_from_table . '.' . $select_from_value ?> = ' . $_SESSION['secure_user_ID'];
$where[] = $restriction_query;
} elseif (preg_match('/<?php echo $select_from_table; ?>\./', $secure_restriction_query[0])) {
$restriction_query = '<?php echo $generator->table; ?>' . $secure_restriction_query[0];
$where[] = $restriction_query;
}
}
}
<?php
if ($ajax_loading) {
?>
$pdo_select_settings = array(
'from' => $from,
'values' => $columns,
'where' => $where,
'extras' => $extras
);
$_SESSION['select_ajax']['<?php echo $name; ?>']['table'] = '<?php echo $select_from_table; ?>';
$_SESSION['select_ajax']['<?php echo $name; ?>']['field_value'] = '<?php echo $select_from_table . '.' . $select_from_value ?>';
$_SESSION['select_ajax']['<?php echo $name; ?>']['option_text'] = '<?php echo $option_text_for_ajax ?>';
$_SESSION['select_ajax']['<?php echo $name; ?>']['pdo_select_settings'] = $pdo_select_settings;
// set the selected value if it has been sent in URL query parameters
if (isset($_GET['<?php echo $name; ?>'])) {
$_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'] = addslashes($_GET['<?php echo $name; ?>']);
}
// set an empty option for the placeholder
$form->addOption('<?php echo $name; ?>', '', '');
// set an option to select the current value
if (!empty($_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'])) {
$current_value_from = '<?php echo $select_from_table . $join_query; ?>';
$current_value_columns = '<?php echo $fields_query; ?>';
$current_value_where = array('<?php echo $select_from_table . '.' . $select_from_value ?>' => $_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>']);
$current_value_extras = array(
'select_distinct' => true,
'limit' => 1
);
$db = new DB(DEBUG);
$db->setDebugMode('register');
$db->select($current_value_from, $current_value_columns, $current_value_where, $current_value_extras, DEBUG_DB_QUERIES);
if (DEBUG_DB_QUERIES) {
$debug_content .= $db->getDebugContent();
}
$db_count = $db->rowCount();
if (!empty($db_count)) {
$row = $db->fetch();
$value = $row-><?php echo $select_from_value; ?>;
<?php
if ($select_from_field_1 != $select_from_value) {
if (!strpos($select_from_field_1, '.')) {
?>
$display_value = $row-><?php echo $select_from_field_1; ?>;
<?php
} else {
$split = explode('.', $select_from_field_1);
$secondary_target_table = $split[0];
$secondary_target_field = $split[1];
?>
$display_value = $row-><?php echo $secondary_target_field; ?>;
<?php
}
} else {
?>
$display_value = $row-><?php echo $select_from_value; ?>;
<?php
}
if (!empty($select_from_field_2)) {
if (!strpos($select_from_field_2, '.')) {
?>
$display_value .= ' ' . $row-><?php echo $select_from_field_2; ?>;
<?php
} else {
$split = explode('.', $select_from_field_2);
$secondary_target_table = $split[0];
$secondary_target_field = $split[1];
?>
$display_value .= ' ' . $row-><?php echo $secondary_target_field; ?>;
<?php
}
}
?>
$form->addOption('<?php echo $name; ?>', $value, $display_value);
}
}
$form->addSelect('<?php echo $name; ?>', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
} else { // if NO ajax_loading
?>
// default value if no record exist
$value = '';
$display_value = '';
// set the selected value if it has been sent in URL query parameters
if (isset($_GET['<?php echo $name; ?>'])) {
$_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'] = addslashes($_GET['<?php echo $name; ?>']);
}
$db = new DB(DEBUG);
$db->setDebugMode('register');
$db->select($from, $columns, $where, $extras, DEBUG_DB_QUERIES);
if (DEBUG_DB_QUERIES) {
$debug_content .= $db->getDebugContent();
}
$db_count = $db->rowCount();
if (!empty($db_count)) {
<?php
if ($required !== true) {
if ($field_type == 'select') {
?>
<?php echo $indent; ?>$form->addOption('<?php echo $name; ?>', '', '-');
<?php
} elseif ($field_type == 'radio') {
?>
<?php echo $indent; ?>$form->addRadio('<?php echo $name; ?>', '-', '');
<?php
} elseif ($field_type == 'checkbox') {
?>
<?php echo $indent; ?>$form->addCheckbox('<?php echo $name; ?>', '-', '');
<?php
}
}
?>
while ($row = $db->fetch()) {
$value = $row-><?php echo $select_from_value; ?>;
<?php
if ($select_from_field_1 != $select_from_value) {
if (!strpos($select_from_field_1, '.')) {
?>
$display_value = $row-><?php echo $select_from_field_1; ?>;
<?php
} else {
$split = explode('.', $select_from_field_1);
$secondary_target_table = $split[0];
$secondary_target_field = $split[1];
?>
$display_value = $row-><?php echo $secondary_target_field; ?>;
<?php
}
} else {
?>
$display_value = $row-><?php echo $select_from_value; ?>;
<?php
}
if (!empty($select_from_field_2)) {
if (!strpos($select_from_field_2, '.')) {
?>
$display_value .= ' ' . $row-><?php echo $select_from_field_2; ?>;
<?php
} else {
$split = explode('.', $select_from_field_2);
$secondary_target_table = $split[0];
$secondary_target_field = $split[1];
?>
$display_value .= ' ' . $row-><?php echo $secondary_target_field; ?>;
<?php
}
}
$min_count_for_field = 1;
if ($required !== true) {
$min_count_for_field = 0;
}
if ($select_from == 'from_table' && !$ajax_loading) {
?>
if ($db_count > <?php echo $min_count_for_field; ?>) {
<?php
}
if ($field_type == 'select') {
?>
<?php echo $indent; ?>$form->addOption('<?php echo $name; ?>', $value, $display_value);
<?php
} elseif ($field_type == 'radio') {
?>
<?php echo $indent; ?>$form->addRadio('<?php echo $name; ?>', $display_value, $value);
<?php
} elseif ($field_type == 'checkbox') {
?>
<?php echo $indent; ?>$form->addCheckbox('<?php echo $name; ?>', $display_value, $value);
<?php
}
?>
}
}
}
<?php
/* END if (!$ajax_loading) {
-------------------------------------------------- */
}
/* END if ($select_from == 'from_table')
-------------------------------------------------- */
} elseif ($select_from == 'custom_values') {
foreach ($select_custom_values as $custom_label => $custom_value) {
if ($field_type == 'select') {
?>
$form->addOption('<?php echo $name; ?>', '<?php echo $custom_value; ?>', '<?php echo $custom_label; ?>');
<?php
} elseif ($field_type == 'radio') {
?>
$form->addRadio('<?php echo $name; ?>', '<?php echo $custom_label; ?>', '<?php echo $custom_value; ?>');
<?php
} elseif ($field_type == 'checkbox') {
?>
$form->addCheckbox('<?php echo $name; ?>', '<?php echo $custom_label; ?>', '<?php echo $custom_value; ?>');
<?php
}
}
}
if (!$ajax_loading) {
if ($select_from == 'from_table') {
?>
if ($db_count > <?php echo $min_count_for_field; ?>) {
<?php
}
if ($field_type == 'select') {
?>
<?php echo $indent; ?>$form->addSelect('<?php echo $name; ?>', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'radio') {
?>
<?php echo $indent; ?>$form->printRadioGroup('<?php echo $name; ?>', '<?php echo $label; ?>', true, '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'checkbox') {
?>
<?php echo $indent; ?>$form->printCheckboxGroup('<?php echo $name; ?>', '<?php echo $label; ?>', true, '<?php echo implode(', ', $attr) ?>');
<?php
}
if ($select_from == 'from_table') {
$attr[] = 'readonly';
?>
} else {
// for display purpose
$form->addInput('text', '<?php echo $name; ?>-display', $display_value, '<?php echo $label; ?>', 'readonly');
// for send purpose
$form->addInput('hidden', '<?php echo $name; ?>', $value);
}
<?php
}
/* END if (!$ajax_loading) {
-------------------------------------------------- */
}
} elseif ($field_type == 'boolean') {
?>
$form->addRadio('<?php echo $name; ?>', NO, 0);
$form->addRadio('<?php echo $name; ?>', YES, 1);
$form->printRadioGroup('<?php echo $name; ?>', '<?php echo $label; ?>', true, '<?php echo implode(', ', $attr) ?>');
<?php
} elseif ($field_type == 'file') {
// default allowed extensions
$extensions = '[\'doc\', \'docx\', \'xls\', \'xlsx\', \'pdf\', \'txt\']';
if (preg_match_all('`([^,]+)(?:,)*(?:\s)*`', $special3, $out)) {
$extensions = '[\'' . implode('\', \'', $out[1]) . '\']';
}
?>
// get current file if exists
$current_file = '';
if (!empty($_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'])) {
if (isset($_POST['<?php echo $name; ?>']) && !empty($_POST['<?php echo $name; ?>'])) {
// get filename from POST data (JSON)
$posted_file = FileUploader::getPostedFiles($_POST['<?php echo $name; ?>']);
$current_file_name = $posted_file[0]['file'];
} else {
// get filename from Database (text)
$current_file_name = $_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'];
}
$current_file_path = ROOT . '<?php echo $special; ?>';
if (file_exists($current_file_path . $current_file_name)) {
$current_file_size = filesize($current_file_path . $current_file_name);
$current_file_type = mime_content_type($current_file_path . $current_file_name);
$current_file = array(
'name' => $current_file_name,
'size' => $current_file_size,
'type' => $current_file_type,
'file' => BASE_URL . '<?php echo $special; ?>' . $current_file_name,
'data' => array(
'listProps' => array(
'file' => $current_file_name
)
)
);
}
}
$fileUpload_config = array(
'upload_dir' => '../../../../../../<?php echo $special; ?>', // the directory to upload the files. relative to [plugins dir]/fileuploader/[xml]/php/[uploader]
'limit' => 1, // max. number of files
'file_max_size' => 5, // each file's maximal size in MB {null, Number}
'extensions' => <?php echo $extensions; ?>,
'debug' => true
);
$form->addFileUpload('<?php echo $name; ?>', '', '<?php echo $label; ?>', '', $fileUpload_config, $current_file);
<?php
} elseif ($field_type == 'image') {
$thumbnails = 'false';
$editor = 'false';
$width = '9999';
$height = '9999';
$crop = 'false';
if ($special3 > 0) {
$thumbnails = 'true';
}
if ($special4 > 0) {
$editor = 'true';
}
if ($special5 > 0) {
$width = $special5;
}
if ($special6 > 0) {
$height = $special6;
}
if ($special7 > 0) {
$crop = 'true';
}
?>
// get current image if exists
$current_file = '';
if (!empty($_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'])) {
if (isset($_POST['<?php echo $name; ?>']) && !empty($_POST['<?php echo $name; ?>'])) {
// get filename from POST data (JSON)
$posted_file = FileUploader::getPostedFiles($_POST['<?php echo $name; ?>']);
$current_file_name = $posted_file[0]['file'];
} else {
// get filename from Database (text)
$current_file_name = $_SESSION['<?php echo $form_id; ?>']['<?php echo $name; ?>'];
}
$current_file_path = ROOT . '<?php echo $special; ?>';
if (file_exists($current_file_path . $current_file_name)) {
$current_file_size = filesize($current_file_path . $current_file_name);
$current_file_type = mime_content_type($current_file_path . $current_file_name);
$current_file = array(
'name' => $current_file_name,
'size' => $current_file_size,
'type' => $current_file_type,
'file' => BASE_URL . '<?php echo $special; ?>' . $current_file_name,
'data' => array(
'listProps' => array(
'file' => $current_file_name
)
)
);
}
}
$fileUpload_config = array(
'xml' => 'image-upload', // the thumbs directories must exist
'uploader' => 'ajax_upload_file.php', // the uploader file in phpformbuilder/plugins/fileuploader/[xml]/php
'upload_dir' => '../../../../../../<?php echo $special; ?>', // the directory to upload the files. relative to [plugins dir]/fileuploader/[xml]/php/[uploader]
'limit' => 1, // max. number of files
'file_max_size' => 5, // each file's maximal size in MB {null, Number}
'extensions' => ['jpg', 'jpeg', 'png'],
'thumbnails' => <?php echo $thumbnails; ?>,
'editor' => <?php echo $editor; ?>,
'width' => <?php echo $width; ?>,
'height' => <?php echo $height; ?>,
'crop' => <?php echo $crop; ?>,
'debug' => true
);
$form->addFileUpload('<?php echo $name; ?>', '', '<?php echo $label; ?>', '', $fileUpload_config, $current_file);
<?php
} elseif ($field_type == 'date') {
if (intval($special3) > 0) {
?>
$form->addInput('hidden', '<?php echo $name; ?>', date('Y-m-d'));
<?php
} else {
$attr[] = 'data-format=' . $special . ', data-format-submit=yyyy-mm-dd, data-set-default-date=true';
?>
$form->addPlugin('pickadate', '#<?php echo $name; ?>');
$form->addInput('text', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
}
} elseif ($field_type == 'datetime') {
if (intval($special3) > 0) {
?>
$form->addInput('hidden', '<?php echo $name; ?>', date('Y-m-d H:i'));
<?php
} else {
$date_attr = $attr;
$time_attr = $attr;
$material_time_attr = $attr;
$date_format = 'yyyy mmmm dddd';
$time_format = 'H:i a';
$material_time_format = 'HH:i';
if (!empty($special)) {
$date_format = $special;
}
$twelve_hour = 'false';
if (!empty($special2)) {
$time_format = $special2;
if (strpos($special2, 'h') !== false) {
$twelve_hour = 'true';
$material_time_format = 'hh:i A';
}
}
$date_attr[] = 'data-format=' . $date_format;
$date_attr[] = 'data-format-submit=yyyy-mm-dd';
$date_attr[] = 'data-set-default-date=true';
$time_attr[] = 'data-format=' . $time_format;
$time_attr[] = 'data-format-submit=HH:i';
$time_attr[] = 'data-interval=15';
$material_time_attr[] = 'data-format=hh:i A';
$material_time_attr[] = 'data-format-submit=HH:i';
$material_time_attr[] = 'data-twelve-hour=' . $twelve_hour;
$material_time_attr[] = 'data-interval=15';
?>
$form->addPlugin('pickadate', '#<?php echo $name; ?>'); // date field
$form->addPlugin('pickadate', '#<?php echo $name; ?>-time', 'pickatime'); // time field
<?php
// set date & time fields width
if ($width == 4) {
$date_width = 2;
$time_width = 2;
} elseif ($width == 10) {
$date_width = 6;
$time_width = 4;
}
?>
$form->setCols(2, <?php echo $date_width; ?>);
$form->addInput('text', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $date_attr) ?>');
$form->setCols(0, <?php echo $time_width; ?>);
<?php
// time placeholder
$time_attr[] = 'placeholder=' . TIME_PLACEHOLDER;
$material_time_attr[] = 'placeholder=' . TIME_PLACEHOLDER;
?>
if (DATETIMEPICKERS_STYLE === 'material') {
$form->addInput('text', '<?php echo $name; ?>-time', '', '', '<?php echo implode(', ', $material_time_attr) ?>');
} else {
$form->addInput('text', '<?php echo $name; ?>-time', '', '', '<?php echo implode(', ', $time_attr) ?>');
}
$form->setCols(2, <?php echo $width; ?>);
<?php
}
} elseif ($field_type == 'time') {
if (intval($special3) > 0) {
?>
$form->addInput('hidden', '<?php echo $name; ?>', date('HH:i'));
<?php
} else {
$time_attr = $attr;
$material_time_attr = $attr;
$time_format = 'H:i a';
$material_time_format = 'HH:i';
$twelve_hour = 'false';
if (!empty($special2) && strpos($special2, 'h') !== false) {
$twelve_hour = 'true';
$material_time_format = 'hh:i A';
}
$time_attr[] = 'data-format=' . $time_format;
$time_attr[] = 'data-format-submit=HH:i';
$time_attr[] = 'data-interval=15';
$material_time_attr[] = 'data-format=hh:i A';
$material_time_attr[] = 'data-format-submit=HH:i';
$material_time_attr[] = 'data-twelve-hour=' . $twelve_hour;
$material_time_attr[] = 'data-interval=15';
?>
$form->addPlugin('pickadate', '#<?php echo $name; ?>', 'pickatime'); // time field
if (DATETIMEPICKERS_STYLE === 'material') {
$form->addInput('text', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $material_time_attr) ?>');
} else {
$form->addInput('text', '<?php echo $name; ?>', '', '<?php echo $label; ?>', '<?php echo implode(', ', $time_attr) ?>');
}
<?php
}
} elseif ($field_type == 'month') {
if (intval($special3) > 0) {
?>
$form->addInput('hidden', '<?php echo $name; ?>', date('m'));
<?php
} else {
$attr[] = 'data-slimselect=true';
?>
$form->addOption('<?php echo $name; ?>', JANUARY, JANUARY);
$form->addOption('<?php echo $name; ?>', FEBRUARY, FEBRUARY);
$form->addOption('<?php echo $name; ?>', MARCH, MARCH);
$form->addOption('<?php echo $name; ?>', APRIL, APRIL);
$form->addOption('<?php echo $name; ?>', MAY, MAY);
$form->addOption('<?php echo $name; ?>', JUNE, JUNE);
$form->addOption('<?php echo $name; ?>', JULY, JULY);
$form->addOption('<?php echo $name; ?>', AUGUST, AUGUST);
$form->addOption('<?php echo $name; ?>', SEPTEMBER, SEPTEMBER);
$form->addOption('<?php echo $name; ?>', OCTOBER, OCTOBER);
$form->addOption('<?php echo $name; ?>', NOVEMBER, NOVEMBER);
$form->addOption('<?php echo $name; ?>', DECEMBER, DECEMBER);
$form->addSelect('<?php echo $name; ?>', '<?php echo $label; ?>', '<?php echo implode(', ', $attr) ?>');
<?php
}
} elseif ($field_type == 'hidden') {
?>
$form->addInput('hidden', '<?php echo $name; ?>', '');
<?php
}
// }
}
/* External fields
-------------------------------------------------- */
/*
$generator->external_columns = array(
'target_table' => '',
'target_fields' => array(),
'table_label' => '',
'fields_labels' => array(),
'relation' => '',
'allow_crud_in_list' => false,
'allow_in_forms' => true,
'forms_fields' => array(),
'field_type' => array(), // 'select-multiple' | 'checkboxes'
'active' => false
);
// relation = $generator->relations['from_to'][$i]
*/
if ($show_external === true) {
foreach ($active_ext_cols as $key => $ext_col) {
$origin_table = $ext_col['relation']['origin_table'];
$intermediate_table = $ext_col['relation']['intermediate_table'];
$target_table = $ext_col['relation']['target_table'];
$target_column = $ext_col['relation']['target_column'];
$table_label = $ext_col['table_label'];
$fields_query = implode(', ', $ext_col['forms_fields']);
// add primary key in query if necessary
if (!in_array($target_column, $ext_col['forms_fields'])) {
$fields_query .= ', ' . $target_column;
}
$row_value = '$row->' . $target_column;
$row_display_value = '$row->' . implode(' . \' - \' . $row->', $ext_col['forms_fields']);
?>
// external relation: <?php echo $origin_table; ?> => <?php echo $intermediate_table; ?> => <?php echo $target_table; ?>;
$from = '<?php echo $target_table; ?>';
$columns = '<?php echo $fields_query; ?>';
$where = false;
$extras = array(
'select_distinct' => true
);
$db = new DB();
$db->select($from, $columns, $where, $extras, DEBUG_DB_QUERIES);
if (DEBUG_DB_QUERIES) {
$debug_content .= $db->getDebugContent();
}
$db_count = $db->rowCount();
if (!empty($db_count)) {
$values = array();
$display_values = array();
while ($row = $db->fetch()) {
$values[] = <?php echo $row_value; ?>;
$display_values[] = <?php echo $row_display_value; ?>;
}
for ($i=0; $i < $db_count; $i++) {
<?php
if ($ext_col['field_type'] == 'select-multiple') {
?>
$form->addOption('ext_<?php echo $target_table; ?>[]', $values[$i], $display_values[$i]);
<?php
} else {
?>
$form->addCheckbox('ext_<?php echo $target_table; ?>', $display_values[$i], $values[$i]);
<?php
}
?>
}
<?php
if ($ext_col['field_type'] == 'select-multiple') {
?>
$form->addSelect('ext_<?php echo $target_table; ?>[]', '<?php echo $table_label; ?>', 'data-slimselect=true, multiple, data-close-on-select=false');
<?php
} else {
?>
$form->printCheckboxGroup('ext_<?php echo $target_table; ?>', '<?php echo $table_label; ?>');
<?php
}
?>
}
<?php
} // end foreach
} // end if
// layout
if ($generator->columns['field_width'][$i - 1] < 10) {
?>
$form->setCols(2, <?php echo $width; ?>);
<?php
}
?>
$form->addBtn('button', 'cancel', 0, '<i class="' . ICON_BACK . ' prepend"></i>' . CANCEL, 'class=btn btn-warning, data-ladda-button=true, data-style=zoom-in, onclick=history.go(-1)', 'btn-group');
$form->addBtn('submit', 'submit-btn', 1, SUBMIT . '<i class="' . ICON_CHECKMARK . ' append"></i>', 'class=btn btn-success, data-ladda-button=true, data-style=zoom-in', 'btn-group');
$form->setCols(0, 12);
$form->centerContent();
$form->printBtnGroup('btn-group');
$form->endFieldset();
$form->addPlugin('pretty-checkbox', '#<?php echo $form_id; ?>');
$form->addPlugin('formvalidation', '#<?php echo $form_id; ?>', 'default', array('language' => FORMVALIDATION_JAVASCRIPT_LANG));