| 1 | <?php |
||||
| 2 | |||||
| 3 | // ------------------------------------------------------------------------- |
||||
| 4 | // OVIDENTIA http://www.ovidentia.org |
||||
| 5 | // Ovidentia is free software; you can redistribute it and/or modify |
||||
| 6 | // it under the terms of the GNU General Public License as published by |
||||
| 7 | // the Free Software Foundation; either version 2, or (at your option) |
||||
| 8 | // any later version. |
||||
| 9 | // |
||||
| 10 | // This program is distributed in the hope that it will be useful, but |
||||
| 11 | // WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
| 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||||
| 13 | // See the GNU General Public License for more details. |
||||
| 14 | // |
||||
| 15 | // You should have received a copy of the GNU General Public License |
||||
| 16 | // along with this program; if not, write to the Free Software |
||||
| 17 | // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
||||
| 18 | // USA. |
||||
| 19 | // ------------------------------------------------------------------------- |
||||
| 20 | /** |
||||
| 21 | * @license http://opensource.org/licenses/gpl-license.php GNU General Public License (GPL) |
||||
| 22 | * @copyright Copyright (c) 2022 by SI4YOU ({@link https://www.siforyou.com}) |
||||
| 23 | */ |
||||
| 24 | namespace Capwelton\LibApp\Ctrl; |
||||
| 25 | |||||
| 26 | use Capwelton\Widgets\Widgets\Page\WidgetPage; |
||||
|
0 ignored issues
–
show
|
|||||
| 27 | use Capwelton\Widgets\Widgets\Table\WidgetTableModelView; |
||||
|
0 ignored issues
–
show
The type
Capwelton\Widgets\Widget...le\WidgetTableModelView was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths Loading history...
|
|||||
| 28 | use Capwelton\LibApp\Ui\AppToolbar; |
||||
| 29 | use Capwelton\LibApp\Exceptions\AppAccessException; |
||||
| 30 | use Capwelton\LibApp\Ui\Page\AppPage; |
||||
| 31 | use Capwelton\Widgets\Widgets\Item\WidgetLink; |
||||
|
0 ignored issues
–
show
The type
Capwelton\Widgets\Widgets\Item\WidgetLink was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths Loading history...
|
|||||
| 32 | use Capwelton\LibApp\Set\AppCustomField; |
||||
| 33 | use Capwelton\LibOrm\MySql\ORMMySqlBackend; |
||||
|
0 ignored issues
–
show
The type
Capwelton\LibOrm\MySql\ORMMySqlBackend was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths Loading history...
|
|||||
| 34 | |||||
| 35 | /** |
||||
| 36 | * This controller manages actions that can be performed on custom fields |
||||
| 37 | * @method self proxy() |
||||
| 38 | */ |
||||
| 39 | class AppCtrlCustomField extends AppCtrlRecord |
||||
| 40 | { |
||||
| 41 | |||||
| 42 | protected function toolbar(WidgetTableModelView $tableView) |
||||
| 43 | { |
||||
| 44 | $W = bab_Widgets(); |
||||
| 45 | $App = $this->App(); |
||||
| 46 | |||||
| 47 | $toolbar = new AppToolbar(); |
||||
| 48 | $toolbar->addItem($W->Link($App->translate('Add a custom field'), $this->proxy() |
||||
| 49 | ->edit()) |
||||
| 50 | ->addClass('icon', \Func_Icons::ACTIONS_LIST_ADD) |
||||
| 51 | ->setOpenMode(WidgetLink::OPEN_DIALOG_AND_RELOAD)); |
||||
| 52 | |||||
| 53 | return $toolbar; |
||||
| 54 | } |
||||
| 55 | |||||
| 56 | /** |
||||
| 57 | * {@inheritdoc} |
||||
| 58 | * @see AppCtrlRecord::display() |
||||
| 59 | */ |
||||
| 60 | public function display($id) |
||||
| 61 | { |
||||
| 62 | } |
||||
| 63 | |||||
| 64 | /** |
||||
| 65 | * Display form to add a custom field on specified object class. |
||||
| 66 | * |
||||
| 67 | * @param string $object |
||||
| 68 | * 'Contact', 'Organization'... |
||||
| 69 | * @throws AppAccessException:: |
||||
| 70 | * @return AppPage |
||||
| 71 | */ |
||||
| 72 | public function add($object = null) |
||||
| 73 | { |
||||
| 74 | $App = $this->App(); |
||||
| 75 | $Ui = $App->Ui(); |
||||
| 76 | $page = $Ui->Page(); |
||||
| 77 | |||||
| 78 | $page->addClass('app-page-editor'); |
||||
| 79 | $page->setTitle($App->translate('Add a custom field')); |
||||
| 80 | |||||
| 81 | $set = $App->CustomFieldSet(); |
||||
| 82 | $customfield = $set->newRecord(); |
||||
| 83 | $customfield->object = $object; |
||||
| 84 | |||||
| 85 | $form = $Ui->CustomFieldEditor($customfield); |
||||
| 86 | |||||
| 87 | $page->addItem($form); |
||||
| 88 | |||||
| 89 | return $page; |
||||
| 90 | } |
||||
| 91 | |||||
| 92 | /** |
||||
| 93 | * @return WidgetPage |
||||
| 94 | */ |
||||
| 95 | public function edit($customfield = null) |
||||
| 96 | { |
||||
| 97 | $W = bab_Widgets(); |
||||
| 98 | $App = $this->App(); |
||||
| 99 | $Ui = $App->Ui(); |
||||
| 100 | $page = $Ui->Page(); |
||||
| 101 | |||||
| 102 | $page->addClass('app-page-editor'); |
||||
| 103 | $page->setTitle($App->translate('Edit custom field')); |
||||
| 104 | |||||
| 105 | if(null !== $customfield){ |
||||
| 106 | $set = $App->CustomFieldSet(); |
||||
| 107 | $customfield = $set->request($customfield); |
||||
| 108 | } |
||||
| 109 | |||||
| 110 | $form = $Ui->CustomFieldEditor($customfield); |
||||
| 111 | |||||
| 112 | $page->addItem($form); |
||||
| 113 | |||||
| 114 | if($customfield instanceof AppCustomField){ |
||||
| 115 | $actionsFrame = $page->ActionsFrame(); |
||||
| 116 | $page->addContextItem($actionsFrame); |
||||
| 117 | |||||
| 118 | $actionsFrame->addItem($W->Link($W->Icon($App->translate('Delete'), \Func_Icons::ACTIONS_EDIT_DELETE), $this->proxy() |
||||
|
0 ignored issues
–
show
$this->proxy()->delete($customfield->id) of type true is incompatible with the type Widget_Action|bab_url|string expected by parameter $url of Func_Widgets::Link().
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 119 | ->delete($customfield->id))); |
||||
| 120 | } |
||||
| 121 | |||||
| 122 | return $page; |
||||
| 123 | } |
||||
| 124 | |||||
| 125 | /** |
||||
| 126 | * @return bool |
||||
| 127 | */ |
||||
| 128 | public function save($customfield = null) |
||||
| 129 | { |
||||
| 130 | $App = $this->App(); |
||||
| 131 | |||||
| 132 | $set = $App->CustomFieldSet(); |
||||
| 133 | |||||
| 134 | if(empty($customfield['id'])){ |
||||
| 135 | $record = $set->newRecord(); |
||||
| 136 | } |
||||
| 137 | else{ |
||||
| 138 | $record = $set->get($customfield['id']); |
||||
| 139 | } |
||||
| 140 | |||||
| 141 | if('Enum' === $customfield['fieldtype'] || 'Set' === $customfield['fieldtype']){ |
||||
| 142 | $enumvalues = array(); |
||||
| 143 | foreach ($customfield['enumvalues'] as $enumkey => $enumvalue){ |
||||
| 144 | $enumvalues[$enumkey] = $set->enumvalues->input($enumvalue); |
||||
| 145 | } |
||||
| 146 | $record->enumvalues = serialize($enumvalues); |
||||
| 147 | } |
||||
| 148 | else{ |
||||
| 149 | $record->enumvalues = ''; |
||||
| 150 | } |
||||
| 151 | |||||
| 152 | unset($customfield['enumvalues']); |
||||
| 153 | $record->setFormInputValues($customfield); |
||||
| 154 | |||||
| 155 | $record->save(); |
||||
| 156 | |||||
| 157 | // refresh target table structure |
||||
| 158 | |||||
| 159 | $object = $record->object . 'Set'; |
||||
| 160 | $mysqlbackend = new ORMMySqlBackend($GLOBALS['babDB']); |
||||
| 161 | |||||
| 162 | $recordSet = $App->$object(); |
||||
| 163 | if(method_exists($recordSet, 'useLang')){ |
||||
| 164 | // This is necessary if the recordSet constructor uses a setLang(). |
||||
| 165 | // We need to revert to multilang fields before synchronizing. |
||||
| 166 | $recordSet->useLang(false); |
||||
| 167 | } |
||||
| 168 | |||||
| 169 | $sql = $mysqlbackend->setToSql($recordSet); |
||||
| 170 | |||||
| 171 | require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php'; |
||||
| 172 | $synchronize = new \bab_synchronizeSql(); |
||||
| 173 | $synchronize->fromSqlString($sql); |
||||
| 174 | |||||
| 175 | return true; |
||||
| 176 | } |
||||
| 177 | |||||
| 178 | /** |
||||
| 179 | * {@inheritdoc} |
||||
| 180 | * @see AppCtrlRecord::delete() |
||||
| 181 | */ |
||||
| 182 | public function delete($customfield) |
||||
| 183 | { |
||||
| 184 | $App = $this->App(); |
||||
| 185 | |||||
| 186 | if(! $customfield){ |
||||
| 187 | throw new AppAccessException($App->translate('Access denied')); |
||||
| 188 | } |
||||
| 189 | |||||
| 190 | $set = $App->CustomFieldSet(); |
||||
| 191 | $record = $set->request($customfield); |
||||
| 192 | $object = $record->object . 'Set'; |
||||
| 193 | $set->delete($set->id->is($customfield)); |
||||
| 194 | |||||
| 195 | $recordSet = $App->$object(); |
||||
| 196 | if(method_exists($recordSet, 'useLang')){ |
||||
| 197 | // This is necessary if the recordSet constructor uses a setLang(). |
||||
| 198 | // We need to revert to multilang fields before synchronizing. |
||||
| 199 | $recordSet->useLang(false); |
||||
| 200 | } |
||||
| 201 | |||||
| 202 | $mysqlbackend = new ORMMySqlBackend($GLOBALS['babDB']); |
||||
| 203 | $sql = $mysqlbackend->setToSql($recordSet); |
||||
| 204 | |||||
| 205 | require_once $GLOBALS['babInstallPath'] . 'utilit/devtools.php'; |
||||
| 206 | $synchronize = new \bab_synchronizeSql(); |
||||
| 207 | $synchronize->fromSqlString($sql); |
||||
| 208 | |||||
| 209 | return true; |
||||
| 210 | } |
||||
| 211 | } |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths