Adds form task, token to search form. Adds url updater to search area.

This commit is contained in:
Llewellyn van der Merwe 2022-11-12 22:42:08 +02:00
parent 461edf5c3f
commit 7759738938
Signed by untrusted user: Llewellyn
GPG Key ID: A9201372263741E7
9 changed files with 56 additions and 26 deletions

View File

@ -140,11 +140,11 @@ TODO
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
+ *First Build*: 30th April, 2015 + *First Build*: 30th April, 2015
+ *Last Build*: 8th November, 2022 + *Last Build*: 12th November, 2022
+ *Version*: 3.1.11 + *Version*: 3.1.11
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt + *License*: GNU General Public License version 2 or later; see LICENSE.txt
+ *Line count*: **334294** + *Line count*: **334324**
+ *Field count*: **2004** + *Field count*: **2004**
+ *File count*: **2183** + *File count*: **2183**
+ *Folder count*: **381** + *Folder count*: **381**

View File

@ -140,11 +140,11 @@ TODO
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
+ *First Build*: 30th April, 2015 + *First Build*: 30th April, 2015
+ *Last Build*: 8th November, 2022 + *Last Build*: 12th November, 2022
+ *Version*: 3.1.11 + *Version*: 3.1.11
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt + *License*: GNU General Public License version 2 or later; see LICENSE.txt
+ *Line count*: **334294** + *Line count*: **334324**
+ *Field count*: **2004** + *Field count*: **2004**
+ *File count*: **2183** + *File count*: **2183**
+ *Folder count*: **381** + *Folder count*: **381**

View File

@ -26,15 +26,21 @@ const doSearch = async (signal, tables) => {
// set some search values // set some search values
let searchValue = searchObject.value; let searchValue = searchObject.value;
let replaceValue = replaceObject.value; let replaceValue = replaceObject.value;
let matchValue = matchObject.checked ? 1 : 0;
let wholeValue = wholeObject.checked ? 1 : 0;
let regexValue = regexObject.checked ? 1 : 0;
// add the form data // add the form data
formData.append('table_name', ''); formData.append('table_name', '');
formData.append('type_search', typeSearch); formData.append('type_search', typeSearch);
formData.append('search_value', searchValue); formData.append('search_value', searchValue);
formData.append('replace_value', replaceValue); formData.append('replace_value', replaceValue);
formData.append('match_case', matchObject.checked ? 1 : 0); formData.append('match_case', matchValue);
formData.append('whole_word', wholeObject.checked ? 1 : 0); formData.append('whole_word', wholeValue);
formData.append('regex_search', regexObject.checked ? 1 : 0); formData.append('regex_search', regexValue);
// update the URL
updateUrlQuery(searchValue, replaceValue, matchValue, wholeValue, regexValue, typeSearch);
let abort_this_search_values = false; let abort_this_search_values = false;
@ -338,7 +344,7 @@ const replaceAll = async (signal, tables) => {
if (regexValue == 0) { if (regexValue == 0) {
// set the replace value as the search value // set the replace value as the search value
UIkit.modal.confirm(Joomla.JText._('COM_COMPONENTBUILDER_WOULD_YOU_LIKE_TO_DO_A_REVERSE_SEARCH'), function(){ UIkit.modal.confirm(Joomla.JText._('COM_COMPONENTBUILDER_WOULD_YOU_LIKE_TO_DO_A_REVERSE_SEARCH'), function(){
setSearch(replaceValue, searchValue, matchValue, wholeValue, regexValue, 2); startNewSearch(replaceValue, searchValue, matchValue, wholeValue, regexValue, 2);
}, function () { }, function () {
UIkit.modal.confirm(Joomla.JText._('COM_COMPONENTBUILDER_WOULD_YOU_LIKE_TO_REPEAT_THE_SAME_SEARCH'), function(){ UIkit.modal.confirm(Joomla.JText._('COM_COMPONENTBUILDER_WOULD_YOU_LIKE_TO_REPEAT_THE_SAME_SEARCH'), function(){
startSearch(); startSearch();
@ -484,6 +490,9 @@ const clearSelectedItem = async () => {
*/ */
const clearTableItems = async () => { const clearTableItems = async () => {
let table = new DataTable('#search_results_table'); let table = new DataTable('#search_results_table');
// clear search
table.search('').columns().search( '' );
// clear items
table.clear().draw( true ); table.clear().draw( true );
// hide the update all items // hide the update all items
@ -512,22 +521,45 @@ const clearSearch = async () => {
/** /**
* JS Function to set the search and replace values * JS Function to set the search and replace values
*/ */
const setSearch = async (search, replace = '', match = 0, whole = 0, regex = 0, mode = 1) => { const startNewSearch = async (search, replace = '', match = 0, whole = 0, regex = 0, mode = 1) => {
// redirect to a new search
window.location.href = getSearchURL(search, replace, match, whole, regex, mode);
};
/**
* JS Function to update the URL of the browser with the search query
*/
const updateUrlQuery = async (search, replace = '', match = 0, whole = 0, regex = 0, mode = 1) => {
// update the url query
window.history.pushState({}, '', getSearchURL(search, replace, match, whole, regex, mode));
};
/**
* JS Function to get the current search URL
*/
const getSearchURL = (search, replace = '', match = 0, whole = 0, regex = 0, mode = 1) => {
// check if its a single table search
let table = tableObject.value;
let table_name = '';
if (table != -1) {
table_name = '&table_name=' + urlencode(table);
}
// update the type of search // update the type of search
if (mode == 1) { if (mode == 1) {
window.location.href = UrlSearch + return UrlSearch + table_name +
'&search_value=' + urlencode(search) + '&search_value=' + urlencode(search) +
'&type_search=1&match_case=' + match + '&type_search=1&match_case=' + match +
'&whole_word=' + whole + '&whole_word=' + whole +
'&regex_search=' + regex; '&regex_search=' + regex;
} else if (mode == 2) { } else if (mode == 2) {
window.location.href = UrlSearch + return UrlSearch + table_name +
'&search_value=' + urlencode(search) + '&search_value=' + urlencode(search) +
'&replace_value=' + urlencode(replace) + '&replace_value=' + urlencode(replace) +
'&type_search=2&match_case=' + match + '&type_search=2&match_case=' + match +
'&whole_word=' + whole + '&whole_word=' + whole +
'&regex_search=' + regex; '&regex_search=' + regex;
} }
return UrlSearch + table_name;
}; };
/** /**
@ -591,7 +623,7 @@ const startSearch = (field, forced = false) => {
} }
// get search value // get search value
const searchValue = searchObject.value; const searchValue = searchObject.value;
if (searchValue.length > 3 || (searchValue.length > 0 && forced)) { if (searchValue.length > 2 || (searchValue.length > 0 && forced)) {
// Cancel any ongoing requests // Cancel any ongoing requests
if (controller) controller.abort(); if (controller) controller.abort();

View File

@ -9191,7 +9191,6 @@ COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="Th
COM_COMPONENTBUILDER_THE_BSB_RETURNED_AN_INVALID_STRING="The <b>%s</b> returned an invalid string!" COM_COMPONENTBUILDER_THE_BSB_RETURNED_AN_INVALID_STRING="The <b>%s</b> returned an invalid string!"
COM_COMPONENTBUILDER_THE_BSHOW_IN_ALL_LIST_VIEWSB_OPTION_WILL_ADD_THIS_FIELD_TO_ALL_LIST_VIEWS_ADMIN_AMP_LINKED="The <b>Show in All List Views</b> option will Add this field to all list views, admin &amp; linked." COM_COMPONENTBUILDER_THE_BSHOW_IN_ALL_LIST_VIEWSB_OPTION_WILL_ADD_THIS_FIELD_TO_ALL_LIST_VIEWS_ADMIN_AMP_LINKED="The <b>Show in All List Views</b> option will Add this field to all list views, admin &amp; linked."
COM_COMPONENTBUILDER_THE_BSINGLE_FILTERB_SELECTION_OPTION_ALLOWS_THE_USER_TO_SELECT_JUST_ONE_VALUE_IN_THIS_FILTERFIELD="The <b>single filter</b> selection option allows the user to select just one value in this filter/field." COM_COMPONENTBUILDER_THE_BSINGLE_FILTERB_SELECTION_OPTION_ALLOWS_THE_USER_TO_SELECT_JUST_ONE_VALUE_IN_THIS_FILTERFIELD="The <b>single filter</b> selection option allows the user to select just one value in this filter/field."
COM_COMPONENTBUILDER_THE_CHANGES_YOU_MAKE_HERE_CAN_NOT_BE_UNDONE_THEREFORE_YOU_MUST_ALWAYS_USE_THE_UPDATE_AND_REPLACE_FEATURES_WITH_GREAT_CAUTION_SEARCH_FEATURE_IS_IN_BETA_STAGE="The changes you make here can not be undone, therefore you must always use the update and replace features with great caution. Search feature is in BETA stage."
COM_COMPONENTBUILDER_THE_CODESTRING_FROM_BSB_HAS_BEEN_ADDED_FOR_THE_BFIRST_TIMEB_PLEASE_IINVESTIGATEI_TO_ENSURE_THE_CORRECT_CODESTRING_WAS_USED_BSHOULD_YOU_NOT_KNOW_ABOUT_THIS_NEW_EXTERNAL_CODESTRING_BEING_ADDED_THEN_THIS_IS_A_SERIOUS_DANGER_AND_REQUIRES_IMMEDIATE_ATTENTIONB_DO_NOT_IGNORE_THIS_WARNING_AS_IT_WILL_ONLY_SHOW_BONCEB="The code/string from <b>%s</b> has been added for the <b>first time</b>. Please <i>investigate</i> to ensure the correct code/string was used! <b>Should you not know about this NEW external code/string being added, then this is a serious danger! and requires immediate attention!</b> Do not ignore this warning as it will only show <b>once</b>." COM_COMPONENTBUILDER_THE_CODESTRING_FROM_BSB_HAS_BEEN_ADDED_FOR_THE_BFIRST_TIMEB_PLEASE_IINVESTIGATEI_TO_ENSURE_THE_CORRECT_CODESTRING_WAS_USED_BSHOULD_YOU_NOT_KNOW_ABOUT_THIS_NEW_EXTERNAL_CODESTRING_BEING_ADDED_THEN_THIS_IS_A_SERIOUS_DANGER_AND_REQUIRES_IMMEDIATE_ATTENTIONB_DO_NOT_IGNORE_THIS_WARNING_AS_IT_WILL_ONLY_SHOW_BONCEB="The code/string from <b>%s</b> has been added for the <b>first time</b>. Please <i>investigate</i> to ensure the correct code/string was used! <b>Should you not know about this NEW external code/string being added, then this is a serious danger! and requires immediate attention!</b> Do not ignore this warning as it will only show <b>once</b>."
COM_COMPONENTBUILDER_THE_CODESTRING_FROM_BSB_HAS_BEEN_BCHANGEDB_SINCE_THE_LAST_COMPILATION_PLEASE_INVESTIGATE_TO_ENSURE_THE_CHANGES_ARE_SAFE_BSHOULD_YOU_NOT_EXPECT_THIS_CHANGE_TO_THE_EXTERNAL_CODESTRING_BEING_ADDED_THEN_THIS_IS_A_SERIOUS_ISSUE_AND_REQUIRES_IMMEDIATE_ATTENTIONB_DO_NOT_IGNORE_THIS_WARNING_AS_IT_WILL_ONLY_SHOW_BONCEB="The code/string from <b>%s</b> has been <b>changed</b> since the last compilation. Please investigate to ensure the changes are safe! <b>Should you not expect this change to the external code/string being added, then this is a serious issue! and requires immediate attention!</b> Do not ignore this warning as it will only show <b>once</b>." COM_COMPONENTBUILDER_THE_CODESTRING_FROM_BSB_HAS_BEEN_BCHANGEDB_SINCE_THE_LAST_COMPILATION_PLEASE_INVESTIGATE_TO_ENSURE_THE_CHANGES_ARE_SAFE_BSHOULD_YOU_NOT_EXPECT_THIS_CHANGE_TO_THE_EXTERNAL_CODESTRING_BEING_ADDED_THEN_THIS_IS_A_SERIOUS_ISSUE_AND_REQUIRES_IMMEDIATE_ATTENTIONB_DO_NOT_IGNORE_THIS_WARNING_AS_IT_WILL_ONLY_SHOW_BONCEB="The code/string from <b>%s</b> has been <b>changed</b> since the last compilation. Please investigate to ensure the changes are safe! <b>Should you not expect this change to the external code/string being added, then this is a serious issue! and requires immediate attention!</b> Do not ignore this warning as it will only show <b>once</b>."
COM_COMPONENTBUILDER_THE_COMPONENT="The Component" COM_COMPONENTBUILDER_THE_COMPONENT="The Component"

View File

@ -180,7 +180,8 @@ class ComponentbuilderModelSearch extends ItemModel
'replace_value' => SearchFactory::_('Config')->get('replace_value', ''), 'replace_value' => SearchFactory::_('Config')->get('replace_value', ''),
'match_case' => SearchFactory::_('Config')->get('match_case', 0), 'match_case' => SearchFactory::_('Config')->get('match_case', 0),
'whole_word' => SearchFactory::_('Config')->get('whole_word', 0), 'whole_word' => SearchFactory::_('Config')->get('whole_word', 0),
'regex_search' => SearchFactory::_('Config')->get('regex_search', 0) 'regex_search' => SearchFactory::_('Config')->get('regex_search', 0),
'table_name' => SearchFactory::_('Config')->get('table_name', -1)
]; ];
if (empty($data)) if (empty($data))

View File

@ -42,10 +42,6 @@ $search_value = $this->form->getField('search_value');
</script> </script>
<?php $urlId = (isset($this->item->id)) ? '&id='. (int) $this->item->id : ''; ?> <?php $urlId = (isset($this->item->id)) ? '&id='. (int) $this->item->id : ''; ?>
<div class="alert alert-warning" role="alert">
<?php echo JText::_('COM_COMPONENTBUILDER_THE_CHANGES_YOU_MAKE_HERE_CAN_NOT_BE_UNDONE_THEREFORE_YOU_MUST_ALWAYS_USE_THE_UPDATE_AND_REPLACE_FEATURES_WITH_GREAT_CAUTION_SEARCH_FEATURE_IS_IN_BETA_STAGE'); ?>
</div>
<hr />
<?php if(!empty( $this->sidebar)): ?> <?php if(!empty( $this->sidebar)): ?>
<div id="j-sidebar-container" class="span2"> <div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar; ?> <?php echo $this->sidebar; ?>
@ -143,6 +139,8 @@ $search_value = $this->form->getField('search_value');
<?php echo $this->form->getInput('item_code'); ?> <?php echo $this->form->getInput('item_code'); ?>
</div> </div>
</div> </div>
<input type="hidden" name="task" value="" />
<?php echo JHtml::_('form.token'); ?>
</form> </form>
<?php endif; ?> <?php endif; ?>
</div> </div>

View File

@ -257,7 +257,7 @@ class ComponentbuilderViewSearch extends HtmlView
'class' => 'list_class', 'class' => 'list_class',
'description' => 'COM_COMPONENTBUILDER_SELECT_THE_TABLE_TO_SEARCH', 'description' => 'COM_COMPONENTBUILDER_SELECT_THE_TABLE_TO_SEARCH',
'required' => 'true', 'required' => 'true',
'default' => -1]; 'default' => $this->urlvalues['table_name']];
// start the component options // start the component options
$options = []; $options = [];
$options['-1'] = 'COM_COMPONENTBUILDER__SEARCH_ALL_'; $options['-1'] = 'COM_COMPONENTBUILDER__SEARCH_ALL_';

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="4" method="upgrade"> <extension type="component" version="4" method="upgrade">
<name>COM_COMPONENTBUILDER</name> <name>COM_COMPONENTBUILDER</name>
<creationDate>8th November, 2022</creationDate> <creationDate>12th November, 2022</creationDate>
<author>Llewellyn van der Merwe</author> <author>Llewellyn van der Merwe</author>
<authorEmail>joomla@vdm.io</authorEmail> <authorEmail>joomla@vdm.io</authorEmail>
<authorUrl>https://dev.vdm.io</authorUrl> <authorUrl>https://dev.vdm.io</authorUrl>

View File

@ -102,10 +102,10 @@ class Config extends BaseConfig
/** /**
* get posted area/table * get posted area/table
* *
* @return string Table name * @return string|null Table name
* @since 3.2.0 * @since 3.2.0
*/ */
protected function getTablename(): string protected function getTablename(): ?string
{ {
return $this->input->get('table_name', null, 'word'); return $this->input->get('table_name', null, 'word');
} }
@ -113,10 +113,10 @@ class Config extends BaseConfig
/** /**
* get posted field * get posted field
* *
* @return string Field name * @return string|null Field name
* @since 3.2.0 * @since 3.2.0
*/ */
protected function getFieldname(): string protected function getFieldname(): ?string
{ {
return $this->input->get('field_name', null, 'word'); return $this->input->get('field_name', null, 'word');
} }
@ -138,7 +138,7 @@ class Config extends BaseConfig
* @return int we start at 0 * @return int we start at 0
* @since 3.2.0 * @since 3.2.0
*/ */
protected function getFieldcounter(): ?int protected function getFieldcounter(): int
{ {
return 0; return 0;
} }
@ -149,7 +149,7 @@ class Config extends BaseConfig
* @return int we start at 0 * @return int we start at 0
* @since 3.2.0 * @since 3.2.0
*/ */
protected function getLinecounter(): ?int protected function getLinecounter(): int
{ {
return 0; return 0;
} }