askWithCarousel() is returning empty response - actions-on-google

here is the code snippet i'm using:
app.askWithCarousel('Which of these looks good?',
app.buildCarousel()
.addItems([
app.buildOptionItem("SELECTION_KEY_ONE",
['synonym of KEY_ONE 1', 'synonym of KEY_ONE 2'])
.setTitle('Number one'),
app.buildOptionItem("SELECTION_KEY_TWO",
['synonym of KEY_TWO 1', 'synonym of KEY_TWO 2'])
.setTitle('Number two'),
]));
here is the screenshot:

I found a solution. It's probably a Google bug. All you have to do is to add .setDescription method
app.askWithCarousel('Which of these looks good?',
app.buildCarousel()
.addItems(
app.buildOptionItem("SELECTION_KEY_ONE",
['synonym of KEY_ONE 1', 'synonym of KEY_ONE 2'])
.setTitle('Number one')
.setDescription('Number one description')
)
.addItems(
app.buildOptionItem("SELECTION_KEY_TWO",
['synonym of KEY_TWO 1', 'synonym of KEY_TWO 2'])
.setTitle('Number two')
.setDescription('Number two description')
)
);
UPDATE
I've found out just now it's impossible to set an empty string like .setDescription(''). It returns an error. So, I got along with space .setDescription(' ')

Related

I m trying to fetch order details from website and getting error "A non-null String must be provided to a Text widget'

1.getting error on this line as null
enter code here
return OrderItem(
order: model.myOrders[index],
onRefresh: refreshMyOrders,
);
}),
),
)
You have to check if the indexed order is null and set a default value to protect your code from these types of errors like this:
return OrderItem(
order: model.myOrders[index] ?? 'Default Value',
onRefresh: refreshMyOrders,
);
}),
),
)

TYPO3: How to configure $GLOBALS['TCA']['tt_content']['types']

I have an extension with a content element. I want to display it in the content element wizard. For this, I created tt_content.php. The code in it looks like this:
$GLOBALS['TCA']['tt_content']['types']['extensionkey_contentelementname'] = array(
'types' => [
'0' => [
'showitem' => '
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, category, subject, message,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, personal
',
],
]
);
(I obviously replaced extensionkey_contentelementname with the real name)
This throws me an error when trying to create the content element:
No or invalid showitem definition in TCA table tt_content for type extensionkey_contentelementname
What did I do wrong?
You are adding two array levels too much. You are already in $GLOBALS['TCA']['tt_content']['types'], so the typesand 0 is not needed anymore.
https://docs.typo3.org/typo3cms/extensions/fluid_styled_content/7.6/AddingYourOwnContentElements/Index.html#configuration-tca-overrides-tt-content-php
In Configuration/TCA/Overrides/tt_content.php:
$GLOBALS['TCA']['tt_content']['types']['extensionkey_contentelementname'] = [
'showitem' => '
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, category, subject, message,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, personal
',
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
'tt_content',
'CType',
[
'My content element',
'extensionkey_contentelementname',
'content-image',
],
'textmedia',
'after'
);
You got a duplicate 'types' there.
Use this in page TS config to have it in the content element wizard.
$GLOBALS['TCA']['tt_content']['types']['extensionkey_contentelementname'] = [
'showitem' => '
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, category, subject, message,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, personal
',
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
'tt_content',
'CType',
[
'My content element',
'extensionkey_contentelementname',
'content-image',
],
'textmedia',
'after'
);

I am using pdf lib to generate pdf and want put a dyanamic table in flutter

I am trying to add a dynamic table with a loop in pdf, but it is not working.
pdfLib.Table.fromTextArray(
context: context,
data: <List<String>>[
<String>[
'#',
'Product Name',
'HSN',
'Qty',
'Unit Price',
'MRP',
'Disc%',
'Disc Amnt',
'Taxable Amnt',
'SGST%',
'SGST Amnt',
'CGST%',
'CGST Amnt',
'Net Amnt'
],
_list(),
],
),
_list here is a function which returns list of strings but it is only able to add one row in table,
for (var i = 0; i < _items.length; i++) {
return <String>[
(i + 1).toString(),
_items[i].title,
'HSN',
_items[i].quantity.toString(),
_items[i].price.toString(),
_items[i].mrp.toString(),
_items[i].discount.toString(),
_item[i].gst,
_item[i].amount
_item[i].sGst,
_item[i].someitem,
_item[i].cGst,
_items[i].price,
_items[i].quantity];
}
Can someone please help me with this?
Thanks
_list needs to return a List<List<String>> as it need to return multiple string lists - one for each item. It can be written with List.map() like:
List<List<String>> _list() {
return _items
.map((item) => <String>[
item.title,
'HSN',
item.quantity.toString(),
// etc
])
.toList();
}
which maps each item into a string list, and returns the list of lists.
You need to change how you use that to use a spread operator ... so that the list of items is expanded into the overall list, like this:
var data = <List<String>>[
<String>[
'#',
'Product Name',
'HSN',
'Qty',
'Unit Price',
'MRP',
'Disc%',
'Disc Amnt',
'Taxable Amnt',
'SGST%',
'SGST Amnt',
'CGST%',
'CGST Amnt',
'Net Amnt'
],
..._list(),
];
}
Or, you could inline the whole operation with the for operator:
var data = <List<String>>[
<String>[
'#',
'Product Name',
'HSN',
'Qty',
'Unit Price',
'MRP',
'Disc%',
'Disc Amnt',
'Taxable Amnt',
'SGST%',
'SGST Amnt',
'CGST%',
'CGST Amnt',
'Net Amnt'
],
for (var item in _items)
<String>[
item.title,
'HSN',
item.quantity.toString(),
// etc
],
];
}
There are several ways to do it, I prefer to fill the List separately, like:
`List<List<String>> salidas = new List();
salidas.add(<String>['Title1','Title2', ... , 'Title n']);
for(var indice=0;indice<records.length;indice++) {
var recind = {
'field1': records[indice].Stringfield1,
'field2': records[indice].Stringfield2,
...
'fieldn': records[indice].Stringfieldn
};
salidas.add(recind);
}
...
fpdf.Table.fromTextArray(context: context,data: salidas),
`
// Generate Dynamic PDF
_generatePdfAndView(context) async {
final pw.Document pdf = pw.Document(deflate: zlib.encode);
pdf.addPage(
pw.MultiPage(
build: (context) => [
pw.Table.fromTextArray(
context: context,
data: <List<String>>[
// These will be your columns as Parameter X, Parameter Y etc.
<String>[
'Parameter',
'Price',
],
for (int i = 0; i < featureNames.length; i++)
<String>[
// ith element will go in ith column means
// featureNames[i] in 1st column
featureNames[i],
// featureValues[i] in 2nd column
featureValues[i].toString(),
],
],
),
],
),
);
}
Hope that will work for you.

Combined ANY/ALL (AND/OR) in GravityForms GFAPI::get_entries?

Can GFAPI::get_entries take a NESTED set of field_filters, so the top filter uses 'mode' => 'all' and the child filter uses 'mode' => 'any' ?
My goal is to find entries where
Color = 'Red' AND City = 'Chicago' OR 'Boston'
The docs for GFAPI do not mention this capability, but there are not many examples anyway. I tried the following code, but it results in a 500-error.
$form_id = '11';
$search_criteria = array(
'field_filters' => array(
'mode' => 'all' // 'and'; default
array(
'key' => '23', // color
'value' => 'red'
),
array(
'mode' => 'any', // 'or'
array(
'key' => '12', // city
'value' => 'Chicago'
),
array(
'key' => '12',
'value' => 'Boston'
),
),
) // field_filters
); // $search_criteria
$entries = GFAPI::get_entries( $form_id, $search_criteria );
Alternatively, I can do the 2nd filter (for City) separately, in a foreach ($entries as $entry), if necessary.
Wondering if anyone has tried something like this and could advise.
Thanks.
This isn't possible with the GFAPI::get_entries method; however, if you're willing to go beneath the hood a little further, you can use the GF_Query class to do complex clauses as you've described.
Take a look at this simple form export. I've setup two Drop Down fields, each with three choices. I've submitted three sample entries:
Now, let's say we only want to get entries where Drop Down A is "First Choice" and Drop Down B is "Second Choice" or "Third Choice". That'd look something like this:
$form_id = 387;
$gf_query = new GF_Query( $form_id );
$gf_query->where( call_user_func_array( array( 'GF_Query_Condition', '_and' ), array(
new GF_Query_Condition(
new GF_Query_Column( '1' ),
GF_Query_Condition::EQ,
new GF_Query_Literal( 'First Choice' )
),
call_user_func_array( array( 'GF_Query_Condition', '_or' ), array(
new GF_Query_Condition(
new GF_Query_Column( '2' ),
GF_Query_Condition::EQ,
new GF_Query_Literal( 'Second Choice' )
),
new GF_Query_Condition(
new GF_Query_Column( '2' ),
GF_Query_Condition::EQ,
new GF_Query_Literal( 'Third Choice' )
),
) ),
) ) );
$entries = $gf_query->get();
This is the same basic structure as your example with the color and city. Just update the form ID, field IDs, and field values and you'll be good to go.

Removing stop words from single string

My query is string = 'Alligator in water' where in is a stop word. How can I remove it so that I get stop_remove = 'Alligator water' as output. I have tried it with ismember but it returns integer value for matching word, I want to get the remaining words as output.
in is just an example, I'd like to remove all possible stop words.
A slightly more elegant way than Luis Mendo's solution is to use regexprep that does exactly what you want
>> result = regexprep( 'Alligator in water', 'in\s*', '' ); % replace with an empty string
result =
Alligator water
If you have several stop words you can simply add them to the pattern (in this example I consider 'in' and 'near' as stop words):
>> result = regexprep( 'Alligator in water near land', {'in\s*','near\s*'}, '' )
result =
Alligator water land
Use this for removing all stop-words.
Code
% Source of stopwords- http://norm.al/2009/04/14/list-of-english-stop-words/
stopwords_cellstring={'a', 'about', 'above', 'above', 'across', 'after', ...
'afterwards', 'again', 'against', 'all', 'almost', 'alone', 'along', ...
'already', 'also','although','always','am','among', 'amongst', 'amoungst', ...
'amount', 'an', 'and', 'another', 'any','anyhow','anyone','anything','anyway', ...
'anywhere', 'are', 'around', 'as', 'at', 'back','be','became', 'because','become',...
'becomes', 'becoming', 'been', 'before', 'beforehand', 'behind', 'being', 'below',...
'beside', 'besides', 'between', 'beyond', 'bill', 'both', 'bottom','but', 'by',...
'call', 'can', 'cannot', 'cant', 'co', 'con', 'could', 'couldnt', 'cry', 'de',...
'describe', 'detail', 'do', 'done', 'down', 'due', 'during', 'each', 'eg', 'eight',...
'either', 'eleven','else', 'elsewhere', 'empty', 'enough', 'etc', 'even', 'ever', ...
'every', 'everyone', 'everything', 'everywhere', 'except', 'few', 'fifteen', 'fify',...
'fill', 'find', 'fire', 'first', 'five', 'for', 'former', 'formerly', 'forty', 'found',...
'four', 'from', 'front', 'full', 'further', 'get', 'give', 'go', 'had', 'has', 'hasnt',...
'have', 'he', 'hence', 'her', 'here', 'hereafter', 'hereby', 'herein', 'hereupon', ...
'hers', 'herself', 'him', 'himself', 'his', 'how', 'however', 'hundred', 'ie', 'if',...
'in', 'inc', 'indeed', 'interest', 'into', 'is', 'it', 'its', 'itself', 'keep', 'last',...
'latter', 'latterly', 'least', 'less', 'ltd', 'made', 'many', 'may', 'me', 'meanwhile',...
'might', 'mill', 'mine', 'more', 'moreover', 'most', 'mostly', 'move', 'much', 'must',...
'my', 'myself', 'name', 'namely', 'neither', 'never', 'nevertheless', 'next', 'nine',...
'no', 'nobody', 'none', 'noone', 'nor', 'not', 'nothing', 'now', 'nowhere', 'of', 'off',...
'often', 'on', 'once', 'one', 'only', 'onto', 'or', 'other', 'others', 'otherwise',...
'our', 'ours', 'ourselves', 'out', 'over', 'own','part', 'per', 'perhaps', 'please',...
'put', 'rather', 're', 'same', 'see', 'seem', 'seemed', 'seeming', 'seems', 'serious',...
'several', 'she', 'should', 'show', 'side', 'since', 'sincere', 'six', 'sixty', 'so',...
'some', 'somehow', 'someone', 'something', 'sometime', 'sometimes', 'somewhere', ...
'still', 'such', 'system', 'take', 'ten', 'than', 'that', 'the', 'their', 'them',...
'themselves', 'then', 'thence', 'there', 'thereafter', 'thereby', 'therefore', ...
'therein', 'thereupon', 'these', 'they', 'thickv', 'thin', 'third', 'this', 'those',...
'though', 'three', 'through', 'throughout', 'thru', 'thus', 'to', 'together', 'too',...
'top', 'toward', 'towards', 'twelve', 'twenty', 'two', 'un', 'under', 'until', 'up',...
'upon', 'us', 'very', 'via', 'was', 'we', 'well', 'were', 'what', 'whatever', 'when',...
'whence', 'whenever', 'where', 'whereafter', 'whereas', 'whereby', 'wherein',...
'whereupon', 'wherever', 'whether', 'which', 'while', 'whither', 'who', 'whoever',...
'whole', 'whom', 'whose', 'why', 'will', 'with', 'within', 'without', 'would', 'yet',...
'you', 'your', 'yours', 'yourself', 'yourselves', 'the'};
str1 = 'Alligator in water of the pool'
split1 = regexp(str1,'\s','Split');
out_str1 = strjoin(split1(~ismember(split1,stopwords_cellstring)),' ')
Output
str1 =
Alligator in water of the pool
out_str1 =
Alligator water pool
NOTE: This code uses strjoin from Mathworks File-exchange.
Use regexp:
string = 'Alligator in water'; %// data string
result = regexp(string, 'in\s*', 'split'); %// split according to stop word
result = [result{:}]; %// join remaining pieces