Yes I will try.
Can you please suggest to which files or locations you would prefer that in the structure of your module?
Thank you.
I have drafted a module for a custom ECA action - yet untested. Because if you like the idea then it will probably be much better if it is included into your module. Also I would like to hear your considerations.
The code is just an idea, yet:
name: 'AI Chat with Full Data'
type: module
description: 'Provides an ECA Action for AI chat that returns the full API response and token count.'
core_version_requirement: ^10 || ^11
package: 'Artificial Intelligence'
# This dependency ensures this module loads after the modules it uses.
dependencies:
- ai_integration_eca:ai_integration_eca
- gemini_provider:gemini_provider
<?php
namespace Drupal\chat_full_data\Plugin\ECA\Action;
use Drupal\eca\Plugin\Action\ActionBase;
use Drupal\gemini_provider\ApiClient;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Provides the "AI Chat with full response" action.
*
* @Action(
* id = "chat_full_data_action",
* label = @Translation("AI Chat with full response"),
* category = @Translation("AI"),
* description = @Translation("This action calls an AI model with a prompt and provides multiple outputs.
*
* OUTPUTS:
* The data from this action is available to subsequent tasks as tokens. The token pattern is [task_id:output_name], where 'task_id' is the unique ID you give this task in the BPMN modeler.
*
* For example, if you set this task's ID to 'security_check':
* - Text answer: [security_check:answer]
* - Full JSON response: [security_check:full_response]
* - Token usage count: [security_check:token_usage]
* "),
* context_definitions = {
* "prompt" = @ContextDefinition("string",
* label = @Translation("Prompt"),
* description = @Translation("The main text/question for the current turn."),
* required = TRUE
* ),
* "history" = @ContextDefinition("string",
* label = @Translation("Chat History (Token Name)"),
* description = @Translation("The token name for a variable containing the JSON conversation history."),
* required = FALSE
* ),
* "model" = @ContextDefinition("string",
* label = @Translation("Model"),
* description = @Translation("The specific AI model to use. Overrides the global setting."),
* required = FALSE
* ),
* "config" = @ContextDefinition("string",
* label = @Translation("Specific Configuration (YAML)"),
* description = @Translation("YAML for extra settings like temperature or system_prompt."),
* required = FALSE
* )
* }
* )
*/
class ChatWithFullResponse extends ActionBase {
/**
* The Gemini Provider API client.
*
* @var \Drupal\gemini_provider\ApiClient
*/
protected $geminiApiClient;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->geminiApiClient = $container->get('gemini_provider.api_client');
return $instance;
}
/**
* {@inheritdoc}
*/
public function execute() {
// Get all inputs from the ECA workflow's input mapping.
$prompt = $this->getContextValue('prompt');
$history_json = $this->getContextValue('history');
$model = $this->getContextValue('model');
$config_yaml = $this->getContextValue('config');
if ($prompt) {
// Pass all inputs to the intelligent service from the patched gemini_provider module.
$result = $this->geminiApiClient->generateText($prompt, $history_json, $model, $config_yaml);
if ($result) {
$fullResponse = $this->geminiApiClient->getLastResponse();
// Provide all outputs for the next tasks in the workflow.
$this->setProvidedContext('answer', $result['answer']);
$this->setProvidedContext('full_response', $fullResponse ? json_encode($fullResponse, JSON_PRETTY_PRINT) : NULL);
$this->setProvidedContext('token_usage', (int) $result['usage']);
}
}
}
/**
* {@inheritdoc}
*/
public function getProvidedContext() {
return [
'answer' => @ContextDefinition("string", label: @Translation("Answer")),
'full_response' => @ContextDefinition("string", label: @Translation("Full Response (JSON)")),
'token_usage' => @ContextDefinition("integer", label: @Translation("Token Usage")),
];
}
}
If it is too difficult it does not matter. I just thought it may be some simple parameter.
But I think once the stable version with the new numbering is out it will solve itself.
Please look at #2.
Also, I will only reference your module page if it has a detailed and exact description including a screenshot.
I don't know how many weeks I have lost in my life because the module descriptions are so ambiguous and not precise about the features of the modules ...
If it your module does something different we could try to make this work for webform. Just I have never used webform.
As far as I can see your module page it seems there is a difference:
Your module adds validation. And i don't understand - serverside? clientside? But validation is something that checks if you enter a number usually before saving.
This module helps with inputting. It does not validate in Drupal terms. it helps you formatting the number while inputting.
Can you please elaborate the difference between the modules. I am not sure about the similarities just yet.
After so many years I couldn't say if that limit is still current.
But I also do not know where to look for that.
Hi, I cannot even say, where that limit is imposed... in the field UI?
But in my opinion there is no reason to have such a low limitation.
Given the prevalence of various browsers, a conservative limit of around 2,048 characters is often recommended to ensure that URLs work for all users.
Web servers also impose their own limits on the length of the request line (which includes the URL and parameters).
Apache: By default, Apache has a LimitRequestLine directive set to 8190 bytes (approximately 8190 characters). This can be configured to a higher value if needed.
Nginx: The large_client_header_buffers directive in Nginx controls the maximum size of the request line. The default is typically 4 kilobytes (around 4096 characters), but this is also configurable.
PHP Settings
PHP, the language Drupal is built on, can also limit the length of a URL's query string. The suhosin security patch, which is used by some hosting providers, includes a setting suhosin.get.max_value_length that defaults to 512 characters for the value of a single GET parameter. This can be a significant constraint if you are passing large amounts of data in the URL.
Drupal's Internal Handling
Within Drupal itself, the length of a URL path or alias is primarily limited by the database schema. Historically, the url_alias table in Drupal had a limit of 255 characters for path aliases. However, in more recent versions of Drupal, there have been ongoing discussions and patches to increase this limit. For instance, the Pathauto module has seen its maximum alias length increased.
But another question: why does it not communicate with the regular Drupal status messages?
It does not do anything when I click it. I use Claro as an admin theme that is also used for editing content.
But I don't get any errors in the browser console... So there is nothing I can provide.
What should I look for?
I opened a question here: https://www.drupal.org/project/drupal/issues/3546528 →
Thank you for your help!
Does this look good?
<?php
namespace Drupal\proxy_language_vary\Cache\Context;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Cache\Context\CacheContextInterface;
use Drupal\page_cache_vary\VaryCacheContextInterface;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Defines the ProxyLanguageCacheContext service.
*
* This cache context varies the cache by the Accept-Language, Cookie, and
* Accept-Encoding headers, as suggested by the page_cache_vary maintainer.
*/
class ProxyLanguageCacheContext implements CacheContextInterface, VaryCacheContextInterface {
/**
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* Constructs a new ProxyLanguageCacheContext object.
*
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack.
*/
public function __construct(RequestStack $request_stack) {
$this->requestStack = $request_stack;
}
/**
* {@inheritdoc}
*/
public static function getLabel() {
return t('Proxy Language Vary');
}
/**
* {@inheritdoc}
*/
public function getContext() {
$request = $this->requestStack->getCurrentRequest();
if (!$request) {
return '';
}
$accept_language = $request->headers->get('Accept-Language');
$cookie = $request->headers->get('Cookie');
$accept_encoding = $request->headers->get('Accept-Encoding');
return hash('sha256', $accept_language . $cookie . $accept_encoding);
}
/**
* {@inheritdoc}
*/
public function getCacheableMetadata() {
return new CacheableMetadata();
}
/**
* {@inheritdoc}
*/
public function getVaryHeaders() {
return ['Accept-Language', 'Cookie', 'Accept-Encoding'];
}
}
The solution:
In order to pass the nid in the enqueuing model the token has to be passed the value of the entity:nid.
Instead of just [entity:nid] you pass it [entity:nid:value].
This will change the enqueud task like this:
Data
__PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\eca_queue\Task
[taskName:protected] => prelimcheck
[taskValue:protected] =>
[data:protected] => Array
(
[cpbnid] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\eca\Plugin\DataType\DataTransferObject
[definition:protected] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\eca\TypedData\DataTransferObjectDefinition
[definition:protected] => Array
(
[type] => dto
)
[dto:protected] => __PHP_Incomplete_Class Object
*RECURSION*
)
[name:protected] =>
[parent:protected] =>
[_serviceIds:protected] => Array
(
[typedDataManager] => typed_data_manager
)
[_entityStorages:protected] => Array
(
)
[stringTranslation:protected] =>
[values:protected] => Array
(
)
[properties:protected] => Array
(
)
[stringRepresentation:protected] => 659
[disableRekey:protected] =>
)
)
[notBefore:protected] => 0
[_serviceIds:protected] => Array
(
[time] => datetime.time
)
[_entityStorages:protected] => Array
(
)
)
Thank you for helping me help myself!
I solved my problem.I will just put the steps and my confusion here, so that it may help someone else.
The solution will be in the next comment.
In the enqueuer model I put a message: The entity:id [entity:id] exists and the cpbnid [cpbnid] also.
resulting log msg: The entity:id 657 exists and the cpbnid value: '657' also.
Into the processing model I added this log message: cpbnid has a value of: [cpbnid]
This is the output:
cpbnid has a value of: value: '654'
So obviously do not know how to get number? It is obviously a string.
I am asking because passing the nid must be such a common scenario that there must be some automatic other than parsing and tampering to integer each time.
Just in case here is also the ECA Task:
Data
__PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\eca_queue\Task
[taskName:protected] => prelimcheck
[taskValue:protected] =>
[data:protected] => Array
(
[cpbnid] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\eca\Plugin\DataType\DataTransferObject
[definition:protected] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\eca\TypedData\DataTransferObjectDefinition
[definition:protected] => Array
(
[type] => dto
)
[dto:protected] => __PHP_Incomplete_Class Object
*RECURSION*
)
[name:protected] =>
[parent:protected] =>
[_serviceIds:protected] => Array
(
[typedDataManager] => typed_data_manager
)
[_entityStorages:protected] => Array
(
)
[stringTranslation:protected] =>
[values:protected] => Array
(
)
[properties:protected] => Array
(
[value] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\Core\TypedData\Plugin\DataType\IntegerData
[definition:protected] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Drupal\Core\TypedData\DataDefinition
[definition:protected] => Array
(
[type] => integer
)
)
[name:protected] => value
[parent:protected] => __PHP_Incomplete_Class Object
*RECURSION*
[_serviceIds:protected] => Array
(
[typedDataManager] => typed_data_manager
)
[_entityStorages:protected] => Array
(
)
[stringTranslation:protected] =>
[value:protected] => 658
)
)
[stringRepresentation:protected] =>
[disableRekey:protected] =>
)
)
[notBefore:protected] => 0
[_serviceIds:protected] => Array
(
[time] => datetime.time
)
[_entityStorages:protected] => Array
(
)
)
Ok. Probably I am too dump.
You are right: I can pass a token that contains a string just fine.
But when I try to pass the nid it does not work. Do I need to convert the token value to some number in order to make it work.
Please look at the screenshot.
In case it does not work: Is there any more information that I can provide here in order to get down to the problem?
Thank you!
I think I tried that. But I will definitely try again according to your instructions.
May I ask: Can I pass the token of an entire node as well?
e.g. token: my_node
And how would I access its fields (e.g. ID) inside a model ran by the eca_task?
my_node.nid?
maxilein → created an issue.
composer require 'drupal/eca_tamper:^2.0'
./composer.json has been updated
Running composer update drupal/eca_tamper
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires drupal/eca_tamper ^2.0 -> satisfiable by drupal/eca_tamper[2.0.0, ..., 2.0.4].
- drupal/eca_tamper[2.0.0, ..., 2.0.2] require drupal/eca ^2.0 -> found drupal/eca[2.0.0, ..., 2.1.13] but it conflicts with your root composer.json require (^3.0).
- drupal/eca_tamper[2.0.3, ..., 2.0.4] require drupal/tamper ^1.0 -> found drupal/tamper[dev-1.x, 1.0.0-alpha1, ..., 1.x-dev (alias of dev-1.x)] but it does not match your minimum-stability.
Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
maxilein → created an issue.
Could you please, please make a D11 version.
Thank you!
Autonumeric 4.10.9
https://github.com/autoNumeric/autoNumeric/releases/tag/v4.10.9
maxilein → created an issue.
maxilein → created an issue.
See here: https://www.drupal.org/project/drupal/issues/2972483 🐛 Page Cache must respect Vary, otherwise it might serve mismatched responses. Active a module that might help in the meantime: https://www.drupal.org/project/page_cache_vary →
See here: https://www.drupal.org/project/drupal/issues/2972483 🐛 Page Cache must respect Vary, otherwise it might serve mismatched responses. Active a module that might help in the meantime: https://www.drupal.org/project/page_cache_vary →
Maybe we can get a patch to work with many variations as a first step - at least that important functionality works then.
Then we can optimize the many variation if we have a working version. But now we cannot even test it.
Thank you.
The latest merge is in conflict: https://git.drupalcode.org/project/drupal/-/merge_requests/6512/diffs
Conflict: This file was modified in both the source and target branches. Ask someone with write access to resolve it.
Re #217
So perhaps a site with en_EN and fr_FR. A browser comes along and tells the site "Hi i'm en-GB,en-US;q=0.9,en;q=0.8". The site would find out what this will end up as so
en-GB,en-US;q=0.9,en;q=0.8 magic => en_EN, we cache this and threat serve cache asif en_EN. This would mean (at least on the drupal side) only the records for inLang => outLang exist, which are pretty small and we dont end up with loads of difference permutations.
Not entirely sure how we would implement that, but feels like a way to have drupal cache be happy.
The little devil on my shoulder also has a voice though. Which does tell me this is kinda a. can of worms as this could also easily break caching on the caches in front of Drupal, be it varnisch or maybe smoething like cloudflare. That is kinda the scary part. Perhaps contrib is better to have this live, instead of trying to get this into core.
If you think of creating that can of worms, then at least make it configurable and for an admin to see which rules apply.
e.g.
field normalized language: "de" field permuting languages: "de-at,de-de, ..."
Well are some issues with the language detection and caching anyway ... see here https://www.drupal.org/project/drupal/issues/3221375 🐛 Wrong language field labels after `drush cr` because of Drush language negotiation Needs work
Sorry, I don't. Then I would have made a suggestion.
I think the "recommended version" shown on your site's update page is determined by a combination of factors managed by the Drupal.org packaging system.
This is what gemini told me. And I think the hint may be in the first paragraph.
How the "Recommended Version" is Determined
Essentially, the recommended version is the latest stable release of a module on Drupal.org that is compatible with your site's major Drupal core version.
Here's what the module maintainer does, and how your site gets the information:
Code is Updated: The maintainer updates the module's code to be compatible with a new version of Drupal (like Drupal 11).
info.yml is Key: They update the core_version_requirement in the module's *.info.yml file to reflect this new compatibility. For a module to be compatible with Drupal 11, this line must include a constraint that matches, for example: core_version_requirement: '^10 || ^11'.
A New Release is Created: The maintainer then creates a new, tagged release on Drupal.org (e.g., 8.x-2.5, 2.0.0, etc.). When creating this release, they associate it with a specific Drupal core version.
Drupal.org's Update Service: Drupal.org's system reads the info.yml file from this new tagged release and notes its core compatibility. It then flags this new version as the latest stable, "recommended" release for that line of compatibility.
Your Site Checks In: When the Update Manager on your site contacts the Drupal.org update service, it reports your current Drupal core version. Drupal.org then responds by saying, "For your version of Drupal, here is the latest stable release of that module we have on record."
So, to directly answer your question:
There is nothing extra you need to add to the info.yml file to show a recommended version.
The only thing that matters in the info.yml file is the core_version_requirement key. Having a new, stable release on Drupal.org with an updated core_version_requirement is what makes it the "recommended" version for sites that are compatible with it. The Drupal.org infrastructure handles the rest.
How do you address automatic browser detection upon session start and when the user changes language (e.g. using a language switcher) by url keep that?
Could we please expand this article to make language selection work behind a proxy?
maxilein → created an issue.
Thank you all. I will read them asap.
Although I found a solution in the parent case I leave this case in order for someone to evaluate if there is something to be done about it.
I am not sure if this is correct but if it is, then token system has evolved and meta tag isn't using it:
1. The "Shortcut" Syntax (:social_share_jpeg:url)
This syntax is a holdover from the older, simpler token system. It was designed as a convenient shortcut for the most common use case: getting a URL for a styled image. It's a special-case syntax that is hardcoded to look for an image style and then a URL.
2. The "Explicit" Syntax (:entity:image_style:social_share_jpeg)
This syntax is a direct reflection of the modern, more powerful Entity API introduced in Drupal 8. In this system, everything is an "entity," and you can chain methods together to get data. The token system mirrors this.
...:field_media_image_1 gets you the field.
...:entity gets you the File entity that the field points to.
...:image_style:social_share_jpeg accesses the "image_style" property of that File entity and passes the "social_share_jpeg" argument.
maxilein → created an issue.
In the documentation there is also an error:
The commands listed for making the files folders writeable are not recursive:
find ./*/files -type d -exec chmod ug=rwx,o= '{}' \;
find ./*/files -type f -exec chmod ug=rw,o= '{}' \;
They should be:
find web/sites/default/files -type d -exec chmod ug=rwx,o=rx '{}' \;
find web/sites/default/files -type f -exec chmod ug=rw,o=r '{}' \;
At least at an existing install.
Can someone check if these are the correct settings for the modern D11 folder structure:
/var/www/web - this is documented already.
The following folders need just read access for the www-data:
/var/www/vendor
/var/www/patches
The following folders need also write access for the www-data:
/var/www/private
/var/www/configsync
/var/www/recipes - I am not sure if D11 needs write access to this?
This would add the following commands to the documentation:
sudo chown -R deploy:www-data /var/www/vendor
find /var/www/vendor -type d -exec chmod u=rwx,g=rx,o= '{}' \;
find /var/www/vendor -type f -exec chmod u=rw,g=r,o= '{}' \;
sudo chown -R deploy:www-data /var/www/patches
find /var/www/patches -type d -exec chmod u=rwx,g=rx,o= '{}' \;
find /var/www/patches -type f -exec chmod u=rw,g=r,o= '{}' \;
sudo chown -R deploy:www-data /var/www/private
find /var/www/private -type d -exec chmod ug=rwx,o= '{}' \;
find /var/www/private -type f -exec chmod ug=rw,o= '{}' \;
sudo chown -R deploy:www-data /var/www/configsync
find /var/www/configsync -type d -exec chmod ug=rwx,o= '{}' \;
find /var/www/configsync -type f -exec chmod ug=rw,o= '{}' \;
sudo chown -R deploy:www-data /var/www/recipes
find /var/www/recipes -type d -exec chmod ug=rwx,o= '{}' \;
find /var/www/recipes -type f -exec chmod ug=rw,o= '{}' \;
Please, make a new release that is D11 compatible.
Can you add this to the dev version please.
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality for core number fields
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality
https://www.drupal.org/project/formatted_number_input →
I be created a module, since I really needed that functionality
https://www.drupal.org/project/formatted_number_input →
Try the formatted number input module
Please make a D11 version.
Thank you very much. I can confirm it looks perfectly now.
Thank you very much!
maxilein → created an issue.
Thinking about it: I see that all settings regarding the menu are region based.
Would it be possible to make the primary menu settings - menu based in order to make menus work in any region?
For instance a checkbox that selects menus that should have the settings as in Primary menu region - but then they work like that in any region?
maxilein → created an issue.
The span is positioned with a padding top/bottom of 10px.
Thank you. Looks much better.
There remains just a little padding difference between an a tag inside a menu entry and only a span. Please screenshots.
maxilein → created an issue.
Sorry my error.
maxilein → created an issue.
Thank you Julien. That patch made the errors go away when upgrading.
More information on the Drupal CMS upgrade for vinodhini.e:
composer update
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 11 updates, 0 removals
- Upgrading drupal/core (11.2.2 => 11.2.3)
- Upgrading drupal/core-composer-scaffold (11.2.2 => 11.2.3)
- Upgrading drupal/core-project-message (11.2.2 => 11.2.3)
- Upgrading drupal/core-recommended (11.2.2 => 11.2.3)
- Upgrading drupal/geofield (1.64.0 => 1.65.0)
- Upgrading drupal/linkit (7.0.7 => 7.0.8)
- Upgrading drupal/project_browser (2.1.0-beta2 => 2.1.0-beta3)
- Upgrading drupal/solo (dev-1.0.x babe75b => dev-1.0.x 4b6e29e)
- Upgrading drush/drush (13.6.1 => 13.6.2)
- Upgrading nette/utils (v4.0.7 => v4.0.8)
- Upgrading sebastian/diff (6.0.2 => 7.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 11 updates, 0 removals
- Downloading sebastian/diff (7.0.0)
- Downloading drupal/core (11.2.3)
- Downloading drupal/linkit (7.0.8)
- Downloading nette/utils (v4.0.8)
- Downloading drupal/geofield (1.65.0)
- Downloading drupal/project_browser (2.1.0-beta3)
- Downloading drush/drush (13.6.2)
- Syncing drupal/solo (dev-1.0.x 4b6e29e) into cache
- Upgrading drupal/core-composer-scaffold (11.2.2 => 11.2.3): Extracting archive
- Upgrading drupal/core-project-message (11.2.2 => 11.2.3): Extracting archive
- Upgrading sebastian/diff (6.0.2 => 7.0.0): Extracting archive
- Upgrading drupal/core (11.2.2 => 11.2.3): Extracting archive
- Upgrading drupal/core-recommended (11.2.2 => 11.2.3)
- Upgrading drupal/linkit (7.0.7 => 7.0.8): Extracting archive
- Upgrading nette/utils (v4.0.7 => v4.0.8): Extracting archive
- Upgrading drupal/geofield (1.64.0 => 1.65.0): Extracting archive
- Upgrading drupal/project_browser (2.1.0-beta2 => 2.1.0-beta3): Extracting archive
- Upgrading drush/drush (13.6.1 => 13.6.2): Extracting archive
- Upgrading drupal/solo (dev-1.0.x babe75b => dev-1.0.x 4b6e29e): Checking out 4b6e29ea92 from cache
Generating optimized autoload files
54 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
And the final working result with the patch included:
drush updb
[warning] Drupal requires databases that support JSON storage.
(Currently using Database support for JSON Available
)
[warning] Package Manager is available for early testing. To install the module set the
value of 'testing_package_manager' to TRUE in your settings.php file.
┌ Requirements check reports errors. Do you wish to continue? ─┐
│ Yes │
└──────────────────────────────────────────────────────────────┘
----------------- --------------- ------------- ----------------------------
Module Update ID Type Description
----------------- --------------- ------------- ----------------------------
project_browser convert_enabl post-update Updates Project Browser
ed_sources_to settings to support
_arrays source-specific
configuration.
project_browser rebuild_conta post-update Clears the cache so that
iner_for_oo_h Project Browser's OO hooks
ooks are registered.
----------------- --------------- ------------- ----------------------------
┌ Do you wish to run the specified pending updates? ───────────┐
│ Yes │
└──────────────────────────────────────────────────────────────┘
> [notice] Update started: project_browser_post_update_convert_enabled_sources_to_arrays
> [notice] Update completed: project_browser_post_update_convert_enabled_sources_to_arrays
> [notice] Update started: project_browser_post_update_rebuild_container_for_oo_hooks
> [notice] Update completed: project_browser_post_update_rebuild_container_for_oo_hooks
[success] Finished performing updates.