From f227bb4e852744dbe84b9859568241f1f2fd2401 Mon Sep 17 00:00:00 2001 From: alekos Date: Wed, 1 May 2019 14:25:24 +0600 Subject: [PATCH 1/4] #657 added radio switcher field to field manager --- admin/templates/default/field-type-content-manage.tpl | 5 +++++ includes/classes/ia.core.field.php | 5 +++++ install/dump/install.sql | 3 ++- templates/_common/field-type-content-manage.tpl | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/admin/templates/default/field-type-content-manage.tpl b/admin/templates/default/field-type-content-manage.tpl index 735f5491..f6500778 100644 --- a/admin/templates/default/field-type-content-manage.tpl +++ b/admin/templates/default/field-type-content-manage.tpl @@ -59,6 +59,11 @@ {/if} + {case iaField::SWITCHER break} +
+ {html_radio_switcher value=$value|default:0 name={$fieldName}} +
+ {case iaField::DATE break} {assign var='default_date' value=($value && !in_array($value, ['0000-00-00', '0000-00-00 00:00:00'])) ? {$value|escape} : ''} diff --git a/includes/classes/ia.core.field.php b/includes/classes/ia.core.field.php index 50e2e8c8..84b7c311 100644 --- a/includes/classes/ia.core.field.php +++ b/includes/classes/ia.core.field.php @@ -40,6 +40,7 @@ class iaField extends abstractCore const TEXTAREA = 'textarea'; const TREE = 'tree'; const URL = 'url'; + const SWITCHER = 'switcher'; const RELATION_DEPENDENT = 'dependent'; const RELATION_PARENT = 'parent'; @@ -568,6 +569,7 @@ public function parsePost($itemName, array &$itemData) // BREAK stmt omitted intentionally case self::COMBO: + case self::SWITCHER: case self::RADIO: $item[$fieldName] = $value; @@ -1115,6 +1117,9 @@ private function _alterCmdBody(array $fieldData) case self::URL: $result.= 'TINYTEXT '; break; + case self::SWITCHER: + $result.= 'TINYINT(1) '; + break; case self::TREE: case self::IMAGE: case self::STORAGE: diff --git a/install/dump/install.sql b/install/dump/install.sql index 128c0bfc..632a7c5c 100644 --- a/install/dump/install.sql +++ b/install/dump/install.sql @@ -230,7 +230,7 @@ CREATE TABLE `{install:prefix}fields` ( `name` varchar(60) NOT NULL, `item` varchar(50) NOT NULL default 'member', `fieldgroup_id` smallint(5) unsigned NOT NULL, - `type` enum('text','url','number','date','textarea','combo','radio','checkbox','storage','image','pictures','currency','tree','iconpicker') NOT NULL default 'text', + `type` enum('text','url','number','date','textarea','combo','radio','checkbox','storage','image','pictures','currency','tree','iconpicker','switcher') NOT NULL default 'text', `length` mediumint(7) unsigned NOT NULL, `values` text, `default` tinytext NOT NULL, @@ -1718,6 +1718,7 @@ INSERT INTO `{install:prefix}language` (`key`,`value`,`category`) VALUES ('field_type_pictures','Multiple Images Upload','admin'), ('field_type_radio','Radio Buttons Set','admin'), ('field_type_storage','Upload Attachment','admin'), +('field_type_switcher','Switches ON/OFF','admin'), ('field_type_text','Single Line Text Input','admin'), ('field_type_textarea','Multiline Textarea','admin'), ('field_type_url','URL Text Input','admin'), diff --git a/templates/_common/field-type-content-manage.tpl b/templates/_common/field-type-content-manage.tpl index 8a52faf4..f4736aaa 100644 --- a/templates/_common/field-type-content-manage.tpl +++ b/templates/_common/field-type-content-manage.tpl @@ -95,6 +95,12 @@ + {case iaField::SWITCHER break} + + {case iaField::TEXTAREA break} {if $field.multilingual && isset($item["{$fieldName}_{$core.language.iso}"])} {$value = $item["{$fieldName}_{$core.language.iso}"]} From 88aa55277da44502d5e0a1168e5c9637a6d84beb Mon Sep 17 00:00:00 2001 From: alekos Date: Thu, 2 May 2019 10:40:38 +0600 Subject: [PATCH 2/4] #598 fixed created sql dump --- includes/classes/ia.admin.dbcontrol.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/classes/ia.admin.dbcontrol.php b/includes/classes/ia.admin.dbcontrol.php index d38f77cd..e93e3d94 100644 --- a/includes/classes/ia.admin.dbcontrol.php +++ b/includes/classes/ia.admin.dbcontrol.php @@ -183,7 +183,7 @@ public function makeStructureBackup($tableName, $aDrop = false, $prefix = true) } } - $output = substr($output, 0, -3); + $output = substr(trim($output), 0, -1); $output .= PHP_EOL . ')'; if ($collation = $this->_getTableCollation($tableName)) { From b6ca7877a608ea5f16b871023d55c1b739098ea5 Mon Sep 17 00:00:00 2001 From: alekos Date: Thu, 2 May 2019 14:17:58 +0600 Subject: [PATCH 3/4] #396 fixed URL type field --- includes/classes/ia.core.field.php | 40 ++++++++++--------- templates/_common/field-type-content-view.tpl | 22 ++++++++-- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/includes/classes/ia.core.field.php b/includes/classes/ia.core.field.php index 84b7c311..c17b8f9d 100644 --- a/includes/classes/ia.core.field.php +++ b/includes/classes/ia.core.field.php @@ -194,8 +194,8 @@ public function filter($itemName, array &$itemData, $pageName = null, $where = n is_null($pageName) && $pageName = $this->iaView->name(); is_null($where) && $where = iaDb::EMPTY_CONDITION; - $where.= iaDb::printf(" && f.status = ':status'", ['status' => iaCore::STATUS_ACTIVE]); - $where.= !empty($itemData['sponsored_plan_id']) && !empty($itemData['sponsored']) + $where .= iaDb::printf(" && f.status = ':status'", ['status' => iaCore::STATUS_ACTIVE]); + $where .= !empty($itemData['sponsored_plan_id']) && !empty($itemData['sponsored']) ? " && (f.plans = '' || FIND_IN_SET('{$itemData['sponsored_plan_id']}', f.plans))" : " && f.plans = ''"; @@ -209,7 +209,7 @@ public function filter($itemName, array &$itemData, $pageName = null, $where = n foreach ($rows as $row) { $iaAcl->checkAccess('field', $itemName . '_' . $row['name']) - && $result[$row['id']] = $row; + && $result[$row['id']] = $row; } self::_unpackValues($result); @@ -320,7 +320,7 @@ protected static function _unpackValues(array &$fields) $field['class'] = 'fieldzone'; if ($field['plans']) { foreach (explode(',', $field['plans']) as $p) { - $field['class'].= sprintf(' plan_%d ', $p); + $field['class'] .= sprintf(' plan_%d ', $p); } } @@ -566,7 +566,7 @@ public function parsePost($itemName, array &$itemData) case self::CHECKBOX: is_array($value) && $value = implode(',', $value); - // BREAK stmt omitted intentionally + // BREAK stmt omitted intentionally case self::COMBO: case self::SWITCHER: @@ -711,6 +711,10 @@ public function parsePost($itemName, array &$itemData) ? str_replace($validProtocols, '', $value['url']) : $value['title']; + if ($url === 'http://') { + $url = ''; + } + $item[$fieldName] = $url . '|' . $title; } else { $errors[$fieldName] = iaLanguage::get('error_url') . ': ' . self::getFieldTitle($field['item'], $fieldName); @@ -1104,48 +1108,48 @@ private function _alterCmdBody(array $fieldData) switch ($fieldData['type']) { case self::DATE: - $result.= 'DATETIME '; + $result .= 'DATETIME '; break; case self::NUMBER: - $result.= 'DOUBLE '; + $result .= 'DOUBLE '; break; case self::TEXT: - $result.= 'VARCHAR(' . $fieldData['length'] . ') ' + $result .= 'VARCHAR(' . $fieldData['length'] . ') ' . ($fieldData['default'] ? "DEFAULT '{$fieldData['default']}' " : ''); break; case self::ICONPICKER: case self::URL: - $result.= 'TINYTEXT '; + $result .= 'TINYTEXT '; break; case self::SWITCHER: - $result.= 'TINYINT(1) '; + $result .= 'TINYINT(1) '; break; case self::TREE: case self::IMAGE: case self::STORAGE: case self::PICTURES: - $result.= 'TEXT '; + $result .= 'TEXT '; break; case self::TEXTAREA: - $result.= 'MEDIUMTEXT '; + $result .= 'MEDIUMTEXT '; break; case self::CURRENCY: - $result.= 'DECIMAL(' . ($fieldData['length'] + 2) . ',2) unsigned '; + $result .= 'DECIMAL(' . ($fieldData['length'] + 2) . ',2) unsigned '; break; default: if (isset($fieldData['values'])) { $values = explode(',', $fieldData['values']); - $result.= ($fieldData['type'] == self::CHECKBOX) ? 'SET' : 'ENUM'; - $result.= "('" . implode("','", $values) . "')"; + $result .= ($fieldData['type'] == self::CHECKBOX) ? 'SET' : 'ENUM'; + $result .= "('" . implode("','", $values) . "')"; if (!empty($fieldData['default'])) { - $result.= " DEFAULT '{$fieldData['default']}' "; + $result .= " DEFAULT '{$fieldData['default']}' "; } } } - $result.= $fieldData['allow_null'] ? 'NULL' : 'NOT NULL'; + $result .= $fieldData['allow_null'] ? 'NULL' : 'NOT NULL'; return $result; } @@ -1394,7 +1398,7 @@ public function deleteUploadedFile($fieldName, $itemName, $itemId, $fileName = n // check if image removed from the entry of currently logged in user // and reload his identity if so iaUsers::getItemName() == $itemName && iaUsers::hasIdentity() - && $itemId == iaUsers::getIdentity()->id && iaUsers::reloadIdentity(); + && $itemId == iaUsers::getIdentity()->id && iaUsers::reloadIdentity(); return true; } diff --git a/templates/_common/field-type-content-view.tpl b/templates/_common/field-type-content-view.tpl index a77785a2..0f6e8679 100644 --- a/templates/_common/field-type-content-view.tpl +++ b/templates/_common/field-type-content-view.tpl @@ -84,11 +84,25 @@ {else}
{if !isset($excludedTitles) || !in_array($name, $excludedTitles)} -
{lang key=$fieldName}
+ {if isset($value)} + {if !empty($value[0])} +
{lang key=$fieldName}
+ {/if} + {else} +
{lang key=$fieldName}
+ {/if} + {/if} + {if isset($value)} + {if !empty($value[0])} +
+ {$_field_text} +
+ {/if} + {else} +
+ {$_field_text} +
{/if} -
- {$_field_text} -
{/if} {elseif empty($item.$name) && $field.empty_field} From 8ce791291cdc38677c9614bdc88737757f90d38b Mon Sep 17 00:00:00 2001 From: alekos Date: Thu, 2 May 2019 15:27:35 +0600 Subject: [PATCH 4/4] #829 fixed sorting by url in pages --- includes/classes/ia.base.controller.admin.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/includes/classes/ia.base.controller.admin.php b/includes/classes/ia.base.controller.admin.php index b41822d6..85d1b13c 100644 --- a/includes/classes/ia.base.controller.admin.php +++ b/includes/classes/ia.base.controller.admin.php @@ -138,7 +138,7 @@ final public function process() $entry = []; $this->_setDefaultValues($entry); - // intentionally missing BREAK stmt + // intentionally missing BREAK stmt case iaCore::ACTION_EDIT: if (iaCore::ACTION_EDIT == $iaView->get('action')) { @@ -314,6 +314,7 @@ public function getTable() { return $this->_table; } + public function setTable($tableName) { $this->_table = $tableName; @@ -323,6 +324,7 @@ public function getHelper() { return $this->_helper; } + public function setHelper($helperClassInstance) { $this->_helper = &$helperClassInstance; @@ -376,6 +378,9 @@ protected function _gridGetSorting(array $params) ? $this->_gridSorting[$params['sort']][1] . '.' : $this->_gridQueryMainTableAlias; + if ($column == 'url') { + return sprintf(' ORDER BY `%s` %s', $column, $direction); + } return sprintf(' ORDER BY %s`%s` %s', $tableAlias, $column, $direction); } @@ -491,10 +496,10 @@ protected function _gridUnpackColumnsArray() $this->_gridColumns = array_merge($persistentColumns, $this->_gridColumns); foreach ($this->_gridColumns as $key => $field) { - $result.= is_int($key) + $result .= is_int($key) ? $this->_gridQueryMainTableAlias . '`' . $field . '`' : sprintf('%s `%s`', is_numeric($field) ? $field : $this->_gridQueryMainTableAlias . '`' . $field . '`', $key); - $result.= ', '; + $result .= ', '; } $result = substr($result, 0, -2);