function ctools_context_keyword_substitute in Chaos Tool Suite (ctools) 7
Same name and namespace in other branches
- 6 includes/context.inc \ctools_context_keyword_substitute()
Perform keyword and context substitutions.
Parameters
string $string: The string in which to replace keywords.
array $keywords: Array of keyword-replacement pairs.
array $contexts:
array $converter_options: Options to pass on to ctools_context_convert_context(), defaults to an empty array.
Return value
string The returned string, with substitutions performed.
6 calls to ctools_context_keyword_substitute()
- CtoolsContextKeywordsSubstitutionTestCase::testKeywordsSubstitution in tests/
context.test - Test the keyword substitution.
- ctools_content_render in includes/
content.inc - Get the content from a given content type.
- ctools_custom_content_type_render in plugins/
content_types/ custom/ custom.inc - Output function for the 'custom' content type. Outputs a custom based on the module and delta supplied in the configuration.
- ctools_entity_field_content_type_substitute_keywords in plugins/
content_types/ entity_context/ entity_field.inc - Replace context keywords.
- page_manager_http_response_render in page_manager/
plugins/ task_handlers/ http_response.inc
File
- includes/
context.inc, line 1012 - Contains code related to the ctools system of 'context'.
Code
function ctools_context_keyword_substitute($string, $keywords, $contexts, array $converter_options = array()) {
// Ensure a default keyword exists:
$keywords['%%'] = '%';
// Match contexts to the base keywords:
$context_keywords = array();
foreach ($contexts as $context) {
if (isset($context->keyword)) {
$context_keywords[$context->keyword] = $context;
}
}
// Look for context matches we we only have to convert known matches.
$matches = array();
if (preg_match_all('/%(%|[a-zA-Z0-9_-]+(?:\\:[a-zA-Z0-9_-]+)*)/us', $string, $matches)) {
foreach ($matches[1] as $keyword) {
// Ignore anything it finds with %%.
if ($keyword[0] == '%') {
continue;
}
// If the keyword is already set by something passed in, don't try to
// overwrite it.
if (array_key_exists('%' . $keyword, $keywords)) {
continue;
}
// Figure out our keyword and converter, if specified.
if (strpos($keyword, ':')) {
list($context, $converter) = explode(':', $keyword, 2);
}
else {
$context = $keyword;
if (isset($context_keywords[$keyword])) {
$plugin = ctools_get_context($context_keywords[$context]->plugin);
// Fall back to a default converter, if specified.
if ($plugin && !empty($plugin['convert default'])) {
$converter = $plugin['convert default'];
}
}
}
if (!isset($context_keywords[$context])) {
$keywords['%' . $keyword] = '%' . $keyword;
}
else {
if (empty($context_keywords[$context]) || !empty($context_keywords[$context]->empty)) {
$keywords['%' . $keyword] = '';
}
else {
if (!empty($converter)) {
$keywords['%' . $keyword] = ctools_context_convert_context($context_keywords[$context], $converter, $converter_options);
}
else {
$keywords['%' . $keyword] = $context_keywords[$keyword]->title;
}
}
}
}
}
return strtr($string, $keywords);
}