diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9501566..f46fc05 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -3,22 +3,21 @@ on: branches: - main - master - - availability pull_request: branches: - main - master - - availability name: tests jobs: setup: name: setup - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest steps: - name: Slack Notification on Start uses: rtCamp/action-slack-notify@v2.2.0 + if: env.SLACK_WEBHOOK != '' env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TESTS }} SLACK_CHANNEL: notify-nc3-tests @@ -28,11 +27,11 @@ jobs: tests: name: tests needs: setup - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest strategy: matrix: - php: [ '7.1', '7.2', '7.3', '7.4' ] - mysql: [ '5.7', '8.0' ] + php: [ '7.4' ] + mysql: [ '8.0' ] env: NC3_BUILD_DIR: "/opt/nc3" @@ -44,6 +43,7 @@ jobs: MYSQL_VERSION: ${{ matrix.mysql }} MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: cakephp_test + COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 @@ -91,46 +91,53 @@ jobs: docker-compose exec -T nc3app bash /opt/scripts/app-build.sh - name: phpcs (PHP CodeSniffer) + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose exec -T nc3app bash /opt/scripts/phpcs.sh - name: phpmd (PHP Mess Detector) + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose exec -T nc3app bash /opt/scripts/phpmd.sh - name: phpcpd (PHP Copy/Paste Detector) + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose exec -T nc3app bash /opt/scripts/phpcpd.sh - name: gjslint (JavaScript Style Check) + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose exec -T nc3app bash /opt/scripts/gjslint.sh - name: phpdoc (PHP Documentor) + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose exec -T nc3app bash /opt/scripts/phpdoc.sh - name: phpunit (PHP UnitTest) + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose exec -T nc3app bash /opt/scripts/phpunit.sh sudo -s chmod a+w -R ${NC3_BUILD_DIR}/build - - name: push coveralls - env: - COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COVERALLS_FLAG_NAME: ${{ matrix.php }} - run: | - cd ${NC3_BUILD_DIR} - ls -la ${NC3_BUILD_DIR} - vendors/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v +# - name: push coveralls +# env: +# COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} +# COVERALLS_FLAG_NAME: ${{ matrix.php }} +# run: | +# cd ${NC3_BUILD_DIR} +# ls -la ${NC3_BUILD_DIR} +# vendors/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v - name: docker-compose remove + if: always() run: | cd ${NC3_DOCKER_DIR} docker-compose rm -f @@ -138,7 +145,7 @@ jobs: # テスト失敗時はこちらのステップが実行される - name: Slack Notification on Failure uses: rtCamp/action-slack-notify@v2.2.0 - if: failure() + if: env.SLACK_WEBHOOK != '' && failure() env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TESTS }} SLACK_CHANNEL: notify-nc3-tests @@ -147,13 +154,13 @@ jobs: teardown: name: teardown - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest needs: tests steps: # テスト成功時はこちらのステップが実行される - name: Slack Notification on Success - if: success() uses: rtCamp/action-slack-notify@v2.2.0 + if: env.SLACK_WEBHOOK != '' && success() env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TESTS }} SLACK_CHANNEL: notify-nc3-tests diff --git a/Config/Migration/1753253996_add_index.php b/Config/Migration/1753253996_add_index.php new file mode 100644 index 0000000..caaebf8 --- /dev/null +++ b/Config/Migration/1753253996_add_index.php @@ -0,0 +1,70 @@ + + * @link http://www.netcommons.org NetCommons Project + * @license http://www.netcommons.org/license.txt NetCommons License + * @copyright Copyright 2014, NetCommons Project + */ + +/** + * AddIndex Migration + * + * @author Hiroki Mochizuki + * @package NetCommons\Multidatabases\Config\Migration + * + */ +class AddIndex extends CakeMigration { + +/** + * Migration description + * + * @var string + */ + public $description = 'add_index'; + +/** + * Actions to be performed + * + * @var array $migration + */ + public $migration = array( + 'up' => array( + 'create_field' => array( + 'multidatabase_contents' => array( + 'indexes' => array( + 'key' => array('column' => 'key', 'unique' => 0), + 'block_id' => array('column' => 'block_id', 'unique' => 0), + ), + ), + ), + ), + 'down' => array( + 'drop_field' => array( + 'multidatabase_contents' => array('indexes' => array('key', 'block_id')), + ), + ), + ); + +/** + * Before migration callback + * + * @param string $direction Direction of migration process (up or down) + * @return bool Should process continue + */ + public function before($direction) { + return true; + } + +/** + * After migration callback + * + * @param string $direction Direction of migration process (up or down) + * @return bool Should process continue + */ + public function after($direction) { + return true; + } +} diff --git a/Config/Migration/1769652195_add_index.php b/Config/Migration/1769652195_add_index.php new file mode 100644 index 0000000..7ca1814 --- /dev/null +++ b/Config/Migration/1769652195_add_index.php @@ -0,0 +1,62 @@ + array( + 'create_field' => array( + 'multidatabase_metadatas' => array( + 'indexes' => array( + 'idx1_p_multidatabase_metadatas' => array('column' => array('multidatabase_id', 'is_title'), 'unique' => 0), + 'idx2_p_multidatabase_metadatas' => array('column' => array('multidatabase_id', 'position', '`rank`'), 'unique' => 0), + ), + ), + ), + ), + 'down' => array( + 'drop_field' => array( + 'multidatabase_metadatas' => array('indexes' => array('idx1_p_multidatabase_metadatas', 'idx2_p_multidatabase_metadatas')), + ), + ), + ); + +/** + * Before migration callback + * + * @param string $direction Direction of migration process (up or down) + * @return bool Should process continue + */ + public function before($direction) { + return true; + } + +/** + * After migration callback + * + * @param string $direction Direction of migration process (up or down) + * @return bool Should process continue + */ + public function after($direction) { + return true; + } +} diff --git a/Config/Schema/schema.php b/Config/Schema/schema.php index a67f3c0..5b83cff 100644 --- a/Config/Schema/schema.php +++ b/Config/Schema/schema.php @@ -161,7 +161,9 @@ public function after($event = array()) { 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'), 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'), 'indexes' => array( - 'PRIMARY' => array('column' => 'id', 'unique' => 1) + 'PRIMARY' => array('column' => 'id', 'unique' => 1), + 'key' => array('column' => 'key', 'unique' => 0), + 'block_id' => array('column' => 'block_id', 'unique' => 0) ), 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB') ); @@ -212,7 +214,9 @@ public function after($event = array()) { 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'), 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'), 'indexes' => array( - 'PRIMARY' => array('column' => 'id', 'unique' => 1) + 'PRIMARY' => array('column' => 'id', 'unique' => 1), + 'idx1_p_multidatabase_metadatas' => array('column' => array('multidatabase_id', 'is_title'), 'unique' => 0), + 'idx2_p_multidatabase_metadatas' => array('column' => array('multidatabase_id', 'position', '`rank`'), 'unique' => 0) ), 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB') ); diff --git a/Controller/MultidatabaseContentsController.php b/Controller/MultidatabaseContentsController.php index ec8627a..d67e2c8 100644 --- a/Controller/MultidatabaseContentsController.php +++ b/Controller/MultidatabaseContentsController.php @@ -19,6 +19,7 @@ * * @author Tomoyuki OHNO (Ricksoft Co., Ltd.) * @package NetCommons\Multidatabases\Controller + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ class MultidatabaseContentsController extends MultidatabasesAppController { @@ -130,13 +131,11 @@ public function beforeFilter() { return false; } - $frameSetting = $this->MultidatabaseFrameSetting->getMultidatabaseFrameSetting(true); - $this->set('multidatabaseFrameSetting', $frameSetting['MultidatabaseFrameSetting']); - // ゲストアクセスOKのアクションを設定 $this->Auth->allow('index', 'detail', 'search'); $this->_prepare(); + $this->set('multidatabaseFrameSetting', $this->_frameSetting['MultidatabaseFrameSetting']); } /** @@ -409,6 +408,7 @@ public function download() { * 検索 * * @return void + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function search() { // クエリを取得する @@ -444,6 +444,9 @@ public function search() { } $searchConds = $this->MultidatabaseContentSearch->getSearchConds($query); + if (!$searchConds) { + $searchConds = ['conditions' => [], 'order' => []]; + } $conditions = $this->__listBase($searchConds['conditions']); // paginatorへ渡すための条件を取得する @@ -503,7 +506,7 @@ private function __condSortOrder($sortCol = '') { */ private function __condSelect() { $pagerNamed = $this->Paginator->Controller->params->named; - return $this->MultidatabaseContentSearch->getCondSelect($pagerNamed); + return $this->MultidatabaseContentSearch->getCondSelect($pagerNamed, $this->_metadata); } /** @@ -546,12 +549,39 @@ private function __list($extraConditions = []) { ); } + $field = [ + 'Block.*', + 'Like.*', + 'LikesUser.*', + 'MultidatabaseContent.id', + 'MultidatabaseContent.key', + 'MultidatabaseContent.multidatabase_key', + 'MultidatabaseContent.multidatabase_id', + 'MultidatabaseContent.language_id', + 'MultidatabaseContent.block_id', + 'MultidatabaseContent.title_icon', + 'MultidatabaseContent.status', + 'MultidatabaseContent.is_active', + 'MultidatabaseContent.is_latest', + 'MultidatabaseContent.created_user', + 'MultidatabaseContent.created', + 'MultidatabaseContent.modified_user', + 'MultidatabaseContent.modified', + ]; + + foreach ($this->_metadata as $metadata) { + if ($metadata['is_visible_list']) { + $field[] = 'MultidatabaseContent.' . 'value' . $metadata['col_no']; + } + } + $this->Paginator->settings = array_merge( $this->Paginator->settings, [ 'conditions' => $conditions, 'limit' => $this->_frameSetting['MultidatabaseFrameSetting']['content_per_page'], - 'order' => $this->__condSortOrder() + 'order' => $this->__condSortOrder(), + 'fields' => $field ] ); diff --git a/Controller/MultidatabasesAppController.php b/Controller/MultidatabasesAppController.php index 0b5b790..4eb5eb6 100644 --- a/Controller/MultidatabasesAppController.php +++ b/Controller/MultidatabasesAppController.php @@ -72,25 +72,10 @@ class MultidatabasesAppController extends AppController { * @return void */ protected function _prepare() { - $this->_setupMultidatabaseTitle(); $this->_initMultidatabase(['multidatabaseSetting']); $this->_loadFrameSetting(); } -/** - * ブロック名を汎用DBタイトルとしてセットする - * - * @return void - */ - protected function _setupMultidatabaseTitle() { - $this->loadModel('Blocks.Block'); - $block = $this->Block->find('first', [ - 'recursive' => 0, - 'conditions' => ['Block.id' => Current::read('Block.id')], - ]); - $this->_multidatabaseTitle = $block['BlocksLanguage']['name']; - } - /** * 初期設定 * @@ -103,24 +88,23 @@ protected function _initMultidatabase() { } // メタデータを取得 - if (!$metadata = $this->MultidatabaseMetadata->getEditMetadatas( + if (!$metadatas = $this->MultidatabaseMetadata->getEditMetadatas( $multidatabase['Multidatabase']['id']) ) { return $this->throwBadRequest(); } - if (!$metadataGroups = $this->MultidatabaseMetadata->getMetadataGroups( - $multidatabase['Multidatabase']['id']) - ) { - return $this->throwBadRequest(); + foreach ($metadatas as $metadata) { + $metadataGroups[$metadata['position']][$metadata['rank']] = $metadata; } $this->_multidatabaseTitle = $multidatabase['Multidatabase']['name']; $this->set('multidatabase', $multidatabase); - $this->set('multidatabaseMetadata', $metadata); + $this->set('multidatabaseMetadata', $metadatas); $this->set('multidatabaseMetadataGroups', $metadataGroups); - if (!$multidatabaseSetting = $this->MultidatabaseSetting->getMultidatabaseSetting()) { + $multidatabaseSetting['MultidatabaseSetting'] = $multidatabase['MultidatabaseSetting']; + if (!$multidatabaseSetting) { $multidatabaseSetting = $this->MultidatabaseSetting->createBlockSetting(); $multidatabaseSetting['MultidatabaseSetting']['multidatabase_key'] = null; } else { @@ -129,7 +113,7 @@ protected function _initMultidatabase() { } $this->_multidatabase = $multidatabase; - $this->_metadata = $metadata; + $this->_metadata = $metadatas; $this->_setting = $multidatabaseSetting; $this->set('multidatabaseSetting', $multidatabaseSetting['MultidatabaseSetting']); $this->set('userId', (int)$this->Auth->user('id')); diff --git a/Model/Multidatabase.php b/Model/Multidatabase.php index 5092f95..90729df 100644 --- a/Model/Multidatabase.php +++ b/Model/Multidatabase.php @@ -267,7 +267,7 @@ public function deleteMultidatabase($data) { } $conditions = [ - $this->MultidatabaseMetadata->alias . '.multidatabase_id' => $data['Multidatabase']['id'] + $this->MultidatabaseMetadata->alias . '.multidatabase_id' => $multidatabaseIds ]; if (!$this->MultidatabaseMetadata->deleteAll($conditions, false, false)) { throw new InternalErrorException(__d('net_commons', 'Internal Server Error')); diff --git a/Model/MultidatabaseContent.php b/Model/MultidatabaseContent.php index 1275cd2..d9fdc36 100644 --- a/Model/MultidatabaseContent.php +++ b/Model/MultidatabaseContent.php @@ -288,6 +288,14 @@ public function saveContent($data, $isUpdate) { } $data = $this->data; + // $this->dataには、クレンジングされたデータが保持されており、添付ファイルの削除フラグが消されてしまっている。 + // 後続の処理で、添付ファイルを削除する際に、`$data['value5__attach_del'] = 'on'`がないと削除してくれないため、 + // $dataを引数$dataにある値を戻す。 + foreach ($deleteFiles as $colNo) { + $delColumn = 'value' . $colNo . '_attach'; + $data[$delColumn . '_del'] = 'on'; + } + $result = $this->MultidatabaseContentEdit->makeSaveData($data, $metadatas, $isUpdate); return $this->__saveContent($result); @@ -365,7 +373,7 @@ public function deleteContentByKey($key) { $this->deleteCommentsByContentKey($key); // 添付ファイルの削除 - if (! $this->MultidatabaseContentFile->removeFileByContentKey($key)) { + if (! $this->MultidatabaseContentFile->removeFilesByContentKey($key)) { throw new InternalErrorException(__d('net_commons', 'Internal Server Error')); } @@ -373,6 +381,8 @@ public function deleteContentByKey($key) { 'MultidatabaseContent.Key' => $key, ]; + $this->Behaviors->load('Topics.Topics'); + if ($result = $this->deleteAll($conditions, true, true)) { $this->commit(); } else { @@ -470,14 +480,16 @@ private function __saveContent($data) { $attachPasswords ); - $this->commit(); - // ファイルを削除する if (! empty($removeAttachFields)) { $this->MultidatabaseContentFile->removeAttachFile( - $removeAttachFields, $data['MultidatabaseContent']['key']); + $removeAttachFields, + $data['MultidatabaseContent']['key'] + ); } + $this->commit(); + } catch (Exception $e) { $this->rollback($e); } diff --git a/Model/MultidatabaseContentFile.php b/Model/MultidatabaseContentFile.php index cf06d2c..b39a71e 100644 --- a/Model/MultidatabaseContentFile.php +++ b/Model/MultidatabaseContentFile.php @@ -241,6 +241,38 @@ public function removeFileByContentKey($key, $fieldName = '') { return $this->__removeFile($fileInfo, $fieldName); } +/** + * Remove File(s) + * ファイルを削除する(コンテンツKeyより) + * + * @param string $contentKey コンテンツKey + * @return bool + */ + public function removeFilesByContentKey($contentKey) { + $UploadFile = ClassRegistry::init('Files.UploadFile'); + $pluginKey = 'multidatabases'; + + $options = [ + 'recursive' => -1, + 'fields' => [ + 'UploadFile.id', + ], + 'conditions' => [ + 'UploadFile.plugin_key' => $pluginKey, + 'UploadFile.content_key' => $contentKey, + ], + 'callbacks' => false, + ]; + + $files = $UploadFile->find('all', $options); + + foreach ($files as $file) { + $UploadFile->deleteUploadFile($file['UploadFile']['id']); + } + + return true; + } + /** * RemoveFile(s) Base * ファイルを削除する diff --git a/Model/MultidatabaseContentSearch.php b/Model/MultidatabaseContentSearch.php index f809cb7..1eca98f 100644 --- a/Model/MultidatabaseContentSearch.php +++ b/Model/MultidatabaseContentSearch.php @@ -101,9 +101,10 @@ public function getSearchConds($query = []) { * 複数選択、単一選択の絞込条件出力 * * @param array $values 値 + * @param array $metadatas メタデータ * @return array */ - public function getCondSelect($values = []) { + public function getCondSelect($values = [], $metadatas = []) { $this->loadModels([ 'MultidatabaseMetadata' => 'Multidatabases.MultidatabaseMetadata', 'MultidatabaseContentSearchCond' => 'Multidatabases.MultidatabaseContentSearchCond', @@ -113,7 +114,9 @@ public function getCondSelect($values = []) { return []; } - $metadatas = $this->MultidatabaseMetadata->getEditMetadatas(); + if (empty($metadatas)) { + $metadatas = $this->MultidatabaseMetadata->getEditMetadatas(); + } $result = []; $valueKey = null; @@ -133,7 +136,7 @@ public function getCondSelect($values = []) { ); break; case 'checkbox': - $result += $this->MultidatabaseContentSearchCond->getCondSelCheck( + $result[] = $this->MultidatabaseContentSearchCond->getCondSelCheck( $metadata['selections'], $values, $valueKey ); break; @@ -178,7 +181,11 @@ public function getCondSortOrder($sortCol = '') { $sortColDir = 'desc'; } - $sortOrder = ['MultidatabaseContent.' . $sortCol => $sortColDir]; + $sortOrder = [ + 'MultidatabaseContent.' . $sortCol => $sortColDir, + 'MultidatabaseContent.created' => $sortColDir, + 'MultidatabaseContent.id' => $sortColDir + ]; return $sortOrder; } diff --git a/Model/MultidatabaseContentSearchCond.php b/Model/MultidatabaseContentSearchCond.php index 7ea8dac..cf2dff4 100644 --- a/Model/MultidatabaseContentSearchCond.php +++ b/Model/MultidatabaseContentSearchCond.php @@ -57,20 +57,28 @@ public function getCondSelVal($query) { */ public function getCondStartEndDt($query) { $conditions = []; + + //サーバタイムゾーンの日時に変換 + $date = new DateTime($query['start_dt']['value']); + $createdStart = (new NetCommonsTime())->toServerDatetime($date->format('Y-m-d H:i:s')); + $date = new DateTime($query['end_dt']['value']); + $date->modify('+59 second'); + $createdEnd = (new NetCommonsTime())->toServerDatetime($date->format('Y-m-d H:i:s')); + if ( !empty($query['start_dt']['value']) && !empty($query['end_dt']['value']) ) { $conditions['MultidatabaseContent.created between ? and ?'] = [ - $query['start_dt']['value'], - $query['end_dt']['value'] + $createdStart, + $createdEnd ]; } else { if (!empty($query['start_dt']['value'])) { - $conditions['MultidatabaseContent.created <='] = $query['start_dt']['value']; + $conditions['MultidatabaseContent.created >='] = $createdStart; } if (!empty($query['end_dt']['value'])) { - $conditions['MultidatabaseContent.created >='] = $query['end_dt']['value']; + $conditions['MultidatabaseContent.created <='] = $createdEnd; } } diff --git a/Model/MultidatabaseFrameSetting.php b/Model/MultidatabaseFrameSetting.php index 36d42dd..a2229c5 100644 --- a/Model/MultidatabaseFrameSetting.php +++ b/Model/MultidatabaseFrameSetting.php @@ -80,6 +80,7 @@ public function getMultidatabaseFrameSetting() { $frameSetting = $this->find('first', [ 'recursive' => -1, 'conditions' => $conditions, + 'callbacks' => false, ] ); diff --git a/Model/MultidatabaseMetadata.php b/Model/MultidatabaseMetadata.php index e1f4a0b..83034b0 100644 --- a/Model/MultidatabaseMetadata.php +++ b/Model/MultidatabaseMetadata.php @@ -222,7 +222,14 @@ public function getMetadatasColNo($multidatabaseId = 0) { */ public function getMetadatas($multidatabaseId = 0, $extraConditions = []) { if (empty($multidatabaseId)) { - if (! $multidatabase = $this->Multidatabase->getMultidatabase()) { + $multidatabase = $this->Multidatabase->find('first', [ + 'recursive' => 0, + 'fields' => 'Multidatabase.id', + 'conditions' => $this->Multidatabase->getBlockConditionById(), + 'callbacks' => false, + ]); + + if (!$multidatabase) { return false; } $multidatabaseId = $multidatabase['Multidatabase']['id']; diff --git a/VERSION.txt b/VERSION.txt index fa7adc7..dee3cd5 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -3.3.5 +3.3.7.1 diff --git a/View/Helper/MultidatabaseContentViewElementHelper.php b/View/Helper/MultidatabaseContentViewElementHelper.php index 5871e09..007b727 100644 --- a/View/Helper/MultidatabaseContentViewElementHelper.php +++ b/View/Helper/MultidatabaseContentViewElementHelper.php @@ -161,7 +161,7 @@ private function __renderViewElementFile($content, $colNo, $showCounter = 0) { $result .= ''; // 表示が全てダウンロードとなる。ファイル名を表示する //$result .= __d('multidatabases', 'Download'); - $result .= $fileInfo['UploadFile']['original_name']; + $result .= h($fileInfo['UploadFile']['original_name']); $result .= ''; } else { $result = $this->__renderViewElementFileReqAuth($content, $colNo, $fileInfo); diff --git a/View/Helper/MultidatabaseContentViewHelper.php b/View/Helper/MultidatabaseContentViewHelper.php index a87fb73..6806fe8 100644 --- a/View/Helper/MultidatabaseContentViewHelper.php +++ b/View/Helper/MultidatabaseContentViewHelper.php @@ -215,6 +215,7 @@ public function renderGroupItems($metadatas) { public function dropDownToggleSelect($metadatas, $viewType = 'index') { $params = $this->_View->Paginator->params; $named = $params['named']; + $named['page'] = 1; $url = $named; $result = ''; diff --git a/View/MultidatabaseContents/search.ctp b/View/MultidatabaseContents/search.ctp index 6650f9a..333743e 100644 --- a/View/MultidatabaseContents/search.ctp +++ b/View/MultidatabaseContents/search.ctp @@ -48,15 +48,6 @@ echo $this->NetCommonsHtml->css([ echo $this->NetCommonsForm->input('type', $options); ?> - -
- __d('multidatabases', 'Create user') - ]; - echo $this->NetCommonsForm->input('create_user', $options); - ?> -