L.A.
Account created on 13 January 2007, almost 18 years ago
#

Merge Requests

Recent comments

🇺🇸United States TolstoyDotCom L.A.

The two issues are related, but I don't think this is a duplicate: the other issue is about how to present the info, this issue is about giving more info. As with art, I know what UX I like but I can't draw a crooked line so I'm perfectly willing to let others handle that aspect of things. No matter what it ends up looking like, the permissions page is going to need more info if anyone expects regular users to use it. Regular users are going to need much more detailed explanations of what various things do.

And, there needs to be some sort of structure rather than confronting them with dozens of permissions from one module. Field UI has 28 permissions and Node has 42. That's going to overwhelm people and dividing the permissions into sections would make it easier for newer users. One of the node permissions is "Bypass content access control"; regular users aren't going to understand what that means, the side-effects, etc etc without a detailed explanation and examples.

🇺🇸United States TolstoyDotCom L.A.

I've written code to parse the yml format I gave above and I'll release it as a contrib module within a week or so.

This does not necessarily require changes to core because the parser class I'm replacing (PermissionHandler) is a service (user.permissions) and, unless something's doing something it shouldn't, I should be able to override that. I'll duplicate the code to show the permissions page and replace that path.

Hopefully the core team will see the utility of a much less cryptic permissions page.

🇺🇸United States TolstoyDotCom L.A.

My suspicion is this is about annotations not being parsed correctly. If this issue happens to anyone else, please test out the suggestion at the end of #39.

🇺🇸United States TolstoyDotCom L.A.

An additional idea is to add sections. For instance, the 'Access any webform configuration' permission could go in an 'admin' section while 'Edit own submission' could go in a 'user' section. Sections would have weights and extended_help. Permissions would also have weights that would control their position within its section. 'section_callbacks' would be similar to 'permission_callbacks'; if both 'section_callbacks' and 'sections' are provided, then sections from the callback(s) are appended to 'sections'.

All of these changes would be optional so current *.permissions.yml files would continue to work, they'd just have one section and no extended_help.

If enough are interested I can make a patch for PermissionHandler::buildPermissionsYaml() to add these optional items to the return from PermissionHandler::getPermissions(). I'd probably use a helper object in buildPermissionsYaml() but the return value of getPermissions() would stay the same. Then, these changes could be worked into the UI.

main:
  extended_help: These permissions deal with the webform module. You can probably use the default settings, however, if you want to do [ABC], you might want to [XYZ]. Another possible use case is [ABC2]. In that case you'd [XYZ2].

section_callbacks:
  - Drupal\xyz\ABC::xyz
  - Drupal\xyz2\ABC::xyz2

sections:
  - name: admin
    weight: 1
    extended_help: something, something, and something
  - name: users
    weight: 2
    extended_help: another thing, another thing, another thing

'access webform overview':
  title: 'Access the webform overview page'
  section: 'admin'
  weight: 1
  description: 'Get an overview of all webforms.'
  extended_help: Users with this permission can view the page [ABC]. They'll be able to see [XYZ], [ABC2], and [XYZ2]. So, you should only give this permission to users who need to see [ABC].
🇺🇸United States TolstoyDotCom L.A.

One possibility is to augment *.permissions.yml files so they have "extended_help" sections. For instance, webform.permissions.yml would have:

main:
  extended_help: These permissions deal with the webform module. You can probably use the default settings, however, if you want to do [ABC], you might want to [XYZ]. Another possible use case is [ABC2]. In that case you'd [XYZ2].

'access webform overview':
  title: 'Access the webform overview page'
  description: 'Get an overview of all webforms.'
  extended_help: Users with this permission can view the page [ABC]. They'll be able to see [XYZ], [ABC2], and [XYZ2]. So, you should only give this permission to users who need to see [ABC].

There would be the standard question mark in a circle image that users could mouse over to see the extended_help in a popup.

🇺🇸United States TolstoyDotCom L.A.

Look in the browser console, the image URLs are probably bad.

🇺🇸United States TolstoyDotCom L.A.

I made some minor changes to what's in git and the pages load. I don't know if it will work or not but you can find out:

mkdir temp
cd temp
[put the patch file in temp]
git clone git@git.drupal.org:project/paypal_roles.git
cd paypal_roles
git checkout remotes/origin/8.x-2.x
patch -p1 < ../paypal_roles-2633302-10.patch
🇺🇸United States TolstoyDotCom L.A.

Look on admin/reports/dblog. There will also be logs under /var/log/apache2 or similar, but you might need to ask your host to see those.

🇺🇸United States TolstoyDotCom L.A.

Those replies raise several questions. Where has it been discussed? Is the discussion open?

"The details will be posted when we have them." Who will supply those details?

I'm not suggesting focusing on cPanel to the exclusion of others. I don't use such control panels and I'm not familiar with their competitors, so read "cPanel" as "cPanel, Plesk, or whatever". But, will such control panels be urged to provide what I described?

Will those "hosted solutions" just be Acquia, Pantheon, and perhaps some other insiders, or could major hosting companies like 1&1, Blue Host, GoDaddy, etc make it part of their offerings? The idea of just reserving this for "Drupal hosts" is self-marginalizing.

🇺🇸United States TolstoyDotCom L.A.

Can you search all of the Drupal files for 'logduty'? Maybe it's a contrib module.

If you don't find it, and you don't let visitors register accounts, maybe you got hacked. Does the user have elevated permissions?

🇺🇸United States TolstoyDotCom L.A.

It'd be a good idea to replace this, but now there's an SSH class that has things like ssh2_exec($this->connection, 'rm -Rf ' . escapeshellarg($directory)). There's no check if $directory is '/', '/bin', 'bin', '/home/*', etc. That code is in the removeDirectoryJailed method so presumably it's only allowed to operate within a specific directory.

Also, the vendor directory for D11 dev is chock full of calls to exec() and shell_exec(). Symfony even includes an .exe file.

🇺🇸United States TolstoyDotCom L.A.

I tried this on a version of D11 dev with 2.0.8 of ECA (I enabled its Content/Core/UI/Views submodules) and I don't see the same issue. In one of the other posts you said it was due to Taxonomy Manager, is that still the case?

Can you start from a blank slate and give a text description of the steps to reproduce this?

Have you tried with other browsers and disabling any extensions in those browsers?

🇺🇸United States TolstoyDotCom L.A.

If you do that as it is, someone could hijack your site and your visitors' computers: CSS can load URLs. If you really want to allow this, I'd suggest either a) having an admin with deep CSS knowledge review each submission before allowing it to be published (and make sure the admin doesn't load the CSS in the page, only in a textarea), or b) running it through a CSS parser and having a whitelist of what's allowed.

🇺🇸United States TolstoyDotCom L.A.

I assume the new hosting uses a MySQL version that D7 doesn't support. IIRC, every D7 query goes through one function in mysql.inc or similar so you should be able to do a search and replace there.

🇺🇸United States TolstoyDotCom L.A.

D9 is no longer supported. What's keeping them from moving to D10? It shouldn't be that difficult.

🇺🇸United States TolstoyDotCom L.A.

Please file a bug report in the advagg issue queue.

🇺🇸United States TolstoyDotCom L.A.

I based this on the latest dev version. I injected services in the last two places I listed in #23. I didn't deal with the drush code. It'd be great if we could freeze changes to dev for a while, test the patch on D9/D10/D11 (I only tested in on D11), and then deal with drush etc.

To use:

git clone git@git.drupal.org:project/wordpress_migrate.git
cd wordpress_migrate
patch -p1 < ../d11update-3435726-26.patch
🇺🇸United States TolstoyDotCom L.A.

I have the dev version of D11 installed and the Drush version is 13.2.0.0. So, that might indicate an issue.

The other thing that I wonder about is #3. It'd probably be better to change the web server config to serve out of the 'web' directory. If you can't do that, move the installation so index.php etc are in 'public_html' and 'vendor' is above it. You'll probably need to change 'web' to 'public_html' in composer.json and composer.lock. But, it'd be better to just change the web server config.

If there's still a problem, look at any files you changed. They might have something that's printing something out inadvertently. There might be a closing PHP tag followed by whitespace. Siteground might also be running something that causes output.

🇺🇸United States TolstoyDotCom L.A.

I count five instances of \Drupal:
- in README.md. I don't think that should be replaced
- in a drush function. Unless that's changed to use classes, that can't be injected.
- in SourceSelectForm. I didn't inject that because getFileValidators will be reworked so the Drupal call is no longer needed once the module doesn't support D9
- in ImportWizard. I don't know if there will be a conflict with how ctools does things. If there is, this might have to remain.
- in ImageSelectForm. I can replace that.

I'll post another patch over the weekend that deals with the last two items.

🇺🇸United States TolstoyDotCom L.A.

I haven't tested this, but do a find for function system_status

Then, change the line to be $requirements = module_invoke_all('requirements', 'runtime'); print_r($requirements);exit;

That might show you the problem. Just make sure to change the line back.

🇺🇸United States TolstoyDotCom L.A.

Release it to the public and solicit feedback or pay someone (such as yours truly) to do it.

If you have *specific* concerns about a contrib module (like unsafe code you see in it), privately contact the Drupal security team: https://www.drupal.org/drupal-security-team

If you don't have specific security concerns and it's a contrib module, what's the issue?

🇺🇸United States TolstoyDotCom L.A.

AFAIK, the link in my last comment is where the latest code is. If anyone wants to test it, just:

git clone git@git.drupal.org:project/wordpress_migrate.git
cd wordpress_migrate
patch -p1 < d11update-3435726-13.patch

🇺🇸United States TolstoyDotCom L.A.

I can't say that for certain because when I've used them it's been in conjunction with contrib or custom code that determines if the user has access to the file. I'd suggest just using that contrib or custom code.

🇺🇸United States TolstoyDotCom L.A.

Have you tried 'drush cc' and then choosing the Drush cache? You can also truncate 'cache_' tables in the db, run cron, run update.php, clear cache, etc.

🇺🇸United States TolstoyDotCom L.A.

Read the comments before that line of the file. You need a module that implements hook_file_download and decides if the user can access that file. I believe that'd be something like private_files_download_permission

🇺🇸United States TolstoyDotCom L.A.

I'm not an SEO and search engines have their own ways of doing things, but if you keep the URLs the same and avoid 404s and have the same features in the page (like site-specific metadata), it seems like that should be enough. This module might help: https://www.drupal.org/project/seo_checklist

The design question is a little tricky since Drupal and WP themes use different technologies. If your WP theme is based on Bootstrap that would probably make it easier. If your WP theme has a lot of customizations that'd make things more difficult. There are carousels and other types of widgets for Drupal if you're using those with WP. In any case, a good CSS person should be able to make the themes look the same.

If you have a budget for this I can help you set up the site and do the migration.

🇺🇸United States TolstoyDotCom L.A.

Here's an updated patch. It should work with D9/D10 but I only tested D11 this time.

🇺🇸United States TolstoyDotCom L.A.

I can rework my patch to have the missing parts, it does work on D11.

However: the rector patch uses the backwards compatibility layer. My patch instead tests if things are available. That's not an issue if you don't want to support D9.

Should I post a new patch?

🇺🇸United States TolstoyDotCom L.A.

That's odd, I'll update it tomorrow. I'll also test out #5 on the other thread.

An abridged def is:
namespace Drupal\wordpress_migrate;

interface WordPressMigrationGeneratorInterface {
public function createMigrations(array $configuration): void;
}

and the services file:
services:
wordpress_migration_generator_factory:
class: Drupal\wordpress_migrate\WordpressMigrationGeneratorFactory
arguments: ['@entity_field.manager', '@plugin.manager.migration', '@file_url_generator']

🇺🇸United States TolstoyDotCom L.A.

Are the tags being written to the search index?

You could also have a list of tags, a tags cloud, use faceted search, etc.

🇺🇸United States TolstoyDotCom L.A.

In Twig 3.14.0 (used by a version of D11 dev), that method is just this.

I don't know if this version relies on something that's not in earlier versions, but you can always try swapping this in. If that fixes it, then try to upgrade to a version of Drupal that uses a higher version of Twig, or just make the change each time you upgrade something.

   public function ensureToStringAllowed($obj, int $lineno = -1, ?Source $source = null)
   {
       if ($this->isSandboxed($source) && $obj instanceof \Stringable) {
           try {
               $this->policy->checkMethodAllowed($obj, '__toString');
           } catch (SecurityNotAllowedMethodError $e) {
               $e->setSourceContext($source);
               $e->setTemplateLine($lineno);

               throw $e;
           }
       }

       return $obj;
   }

🇺🇸United States TolstoyDotCom L.A.

You'll need to provide more info. What's the code around that line? What are the values of the variables involved?

Have you tried running cron, clearing the cache (if necessary, in the db), and running update.php?

🇺🇸United States TolstoyDotCom L.A.

Hopefully that will be clearer for non-native speakers.

🇺🇸United States TolstoyDotCom L.A.

It's probably a MySQL setting related to packet size, timeouts, etc.

Why not just use mysqldump?

🇺🇸United States TolstoyDotCom L.A.

You should post how you solved it. Did you visit admin/reports/dblog? Look in the watchdog table in the database? Look through the web server's error log?

🇺🇸United States TolstoyDotCom L.A.

It would help if you could indicate the classes & methods involved in a 404.

🇺🇸United States TolstoyDotCom L.A.

As a matter of policy you might want to rethink this. Using a VPN doesn't necessarily mean the user is up to no good. For banks etc blocking VPNs might make sense, but the reason Google/Facebook/etc look askance at them is because they want to compile dossiers on people and follow them around the internet.

🇺🇸United States TolstoyDotCom L.A.

What's $callback before the call to doTrustedCallback? This sounds like it could be a difference in PHP versions, but it might also be a data issue.

🇺🇸United States TolstoyDotCom L.A.

I was able to duplicate the issue. The patch applied and looks OK.

One question is whether using a non-existent format should thrown an exception or not. Given the use of a fallback format, it seems like the idea is that a formatted date should be returned even if a bad format is used. So, this seems OK to me unless someone suggests logging a warning the first time a non-existent format is used.

🇺🇸United States TolstoyDotCom L.A.

Are you saying you're getting this on a *fresh* install? If so *and* you meet all the requirements, *and* you can duplicate this and document the steps, then file this in the core issue queue.

But, since this is D10, I suspect you have some sort of... unmet dependency. You'll need to look in the server error log to find out what it is. Or, print out $invalid_default_config and $missing_dependencies in ConfigInstaller::checkConfigurationToInstall().

🇺🇸United States TolstoyDotCom L.A.

What are the links on admin/structure/taxonomy? It's probably not great to use URLs like taxonomy/term/%ID%, instead you'd want something more SEO friendly. But, if you want those and they aren't like that, you can write code to change them.

🇺🇸United States TolstoyDotCom L.A.

The mail thing is a key bit of info. If you can't get your hosting to enable mail, then you'll need to install something like maillog to prevent mail from being sent.

🇺🇸United States TolstoyDotCom L.A.

The issue appears to be the error. You've probably got a message with a red "X" or similar on the page I mentioned. You need to find that, or an error in your server logs.

If you have a budget for this I can look at the admin side of the site. It shouldn't take long to find the error, but fixing the error may or may not take a while.

🇺🇸United States TolstoyDotCom L.A.

It's probably the "unexpected error". Are there errors listed on admin/reports/dblog or in the web server error log?

🇺🇸United States TolstoyDotCom L.A.

There's no way to tell since you haven't provided enough info. When you go to admin/config/development/configuration/single/export and export a role, is everything listed in there available on the target site?

Can you write code to ensure the role is actually set, or use migrate_devel to show the destination?

If you write code to set a role programmatically outside the migration, does it work or throw an error?

🇺🇸United States TolstoyDotCom L.A.

Since others haven't added to this issue, I assume it has something to do with your environment. Can you disable custom/contrib modules one by one and see if the problem keeps happening? Some code somewhere is probably trying to store the database connection in the db or similar.

🇺🇸United States TolstoyDotCom L.A.

What I'd do is create a test setup with just a couple of sites and then add code that logs what the update module is doing.

🇺🇸United States TolstoyDotCom L.A.

If you don't get much traffic and your cache is 10gigs, I'd first figure out what's filling the tables.

Setting up Redis or memcache is straightforward. Your host might already have one of them installed, or you can do it with SSH access. But, you're going to need a lot of RAM.

I'd figure out a better way to do caching based on what's being cached.

You can also clear all the tables starting 'cache_' using 'TRUNCATE ' or similar. You might delete something someone was just using, but unless you take the site offline for a bit that can't be helped.

🇺🇸United States TolstoyDotCom L.A.

You can duplicate this by creating a node type with a reference to media entities. Then, create a node of that type and add images. Photoswipe should work OK. Then, edit the node and add a video. You'll get the crash above.

In my case, $this->settings['photoswipe_reference_image_field'] in ImageDTO's constructor is field_media_image, but $this->getMediaSourceField($media) is field_media_video_file for the video. Thus, $media->get($photoswipe_reference_image_field); crashes.

It's easier for me to just add a separate video field to my node type, but you might want to skip media types that you aren't expecting.

🇺🇸United States TolstoyDotCom L.A.

Why delete the node at all? If Hoarding: Buried Alive has taught us anything, it's that we should Just mark it with some special sign (like a 'Not completed' term) but keep it around so you have a record

🇺🇸United States TolstoyDotCom L.A.

[Copying from the since closed "Hiding the node title makes node form submission crash 🐛 Hiding the node title makes node form submission crash Active "]

It seems to me that everything should have a title, even in the case of a "Person" object. The title could be random, or constructed from something else, but you should always be able to count on an existing entity having a title of some kind just as you can count on it having an ID.

Also, I don't think handling this at the form level would be a good idea since someone might hide the title and then have custom code or a contrib module that provides the title. Preventing them from hiding the title would cause problems for them. If you let them do it but instead show a warning that would annoy people who know what they're doing and confuse others.

I suggest changing SqlContentEntityStorage::mapToStorageRecord to throw an exception if a field is required but empty. It already throws an exception in one case throw new EntityStorageException("Table mapping contains invalid field $field_name."); so adding a check in the same area doesn't seem out of place. You're going to get an exception in any case, it might as well give the user a clue what the problem is.

🇺🇸United States TolstoyDotCom L.A.

The problem you're talking about isn't clear enough, but for such cases you can try to access a file like README.md. Adjust your web server settings or file permissions until you can read that in the browser.

🇺🇸United States TolstoyDotCom L.A.

Is bootstrap_layout_builder installed and enabled?

🇺🇸United States TolstoyDotCom L.A.

I had this issue on Drupal 11.0.4 and it was because there was no language.entity.en config entity. There were such entities for various other languages, just not en. I have no idea how that happened.

Just because it might mask an underlying issue is no reason not to make the updateLockedLanguageWeights method more bulletproof.

I've attached my attempt to do that based on D11 dev of Oct 18, 2024.

🇺🇸United States TolstoyDotCom L.A.

Please send me an email via my profile here and I'll reply. I'm on Pacific time.

🇺🇸United States TolstoyDotCom L.A.

Have you tried using views?

🇺🇸United States TolstoyDotCom L.A.

You might be able to export the config files and change the names in them and then re-import them. Or you might be able to run search-and-replace db queries but those might not work if serialization is involved. Or you could write a script to load everything in the db, change names, and write it back.

But, it's probably going to be easier to just do a migration. You can export your data to JSON using views (including custom fields, image paths, etc) and then migrate them in.

This shows how I structured it: https://github.com/TolstoyDotCom/migrate_json_test I should add a note that it expects the module to be in the modules/custom directory.

🇺🇸United States TolstoyDotCom L.A.

Drupal should avoid getting into political issues. That means removing the Ukraine banners, asking people what race they are, DEI initiatives, etc etc. This site and the software should be neutral.

You illustrate a problem that happens by not being neutral: now they have to come up with an explanation for why they'd support one issue over another.

There are plenty of other sites that are willing to take stands on issues.

🇺🇸United States TolstoyDotCom L.A.

I worked with that a while back but I forget the specifics. IIRC it wouldn't let you add something to the cart if it was out of stock and I had to add code to deal with things that could be backordered. I'm available for consulting if you don't figure it out.

🇺🇸United States TolstoyDotCom L.A.

It seems to me that everything should have a title, even in the case of a "Person" object. The title could be random, or constructed from something else, but you should always be able to count on an existing entity having a title of some kind just as you can count on it having an ID.

Also, I don't think handling this at the form level would be a good idea since someone might hide the title and then have custom code or a contrib module that provides the title. Preventing them from hiding the title would cause problems for them. If you let them do it but instead show a warning that would annoy people who know what they're doing and confuse others.

I suggest changing SqlContentEntityStorage::mapToStorageRecord to throw an exception if a field is required but empty. It already throws an exception in one case throw new EntityStorageException("Table mapping contains invalid field $field_name."); so adding a check in the same area doesn't seem out of place. You're going to get an exception in any case, it might as well give the user a clue what the problem is.

🇺🇸United States TolstoyDotCom L.A.

Provides additional functionality for Drupal's migration system. Use this module if you need to migrate from JSON files, replace parts of strings, get fields from an existing entity, and much more.

🇺🇸United States TolstoyDotCom L.A.

This is like an archeology dig. You should migrate to D10/11 if possible.

The first set of warnings were resolved in the version you upgraded to: https://www.drupal.org/node/3298593

You should try to upgrade your PHP if possible. I don't know how high you could go with D7 and your modules, but try to get to PHP 7 if you can. Even so, I believe only PHP 8 versions are still supported.

error_log shouldn't be inside your web root, that's a security risk: hackers might be able to get useful info from it. In any case, it will contain different messages than dblog: error_log comes from the web server, dblog messages come from Drupal. In dblog, just look for messages marked in red. You can filter things by severity. There's also a setting letting you change how many dblog messages are saved.

🇺🇸United States TolstoyDotCom L.A.

Re the comments about Nestle above, now do Margaret Sanger.

🇺🇸United States TolstoyDotCom L.A.

For future reference, this explains how to troubleshoot clean URLs not working:

https://www.drupal.org/docs/administering-a-drupal-site/troubleshooting-...

🇺🇸United States TolstoyDotCom L.A.

Only you can answer that question, but it's not that difficult to move a Drupal site so you could start on your local computer or on temporary hosting like AWS or Azure.

🇺🇸United States TolstoyDotCom L.A.

I think you're referring to a feature that was removed pending a better version.

In the meantime, you should look into using composer: https://www.drupal.org/forum/support/post-installation/2024-10-07/instal...

🇺🇸United States TolstoyDotCom L.A.

Please search how to post an issue, since that's not much help. Are you talking about admin/modules? If not, what's the path? What happens? Are there any error messages on the page, anything listed on admin/reports/dblog, anything in the web server error log?

🇺🇸United States TolstoyDotCom L.A.

Maybe it installed to SQLite. If you can duplicate this using the dev version of D11, then post about this to the core issue queue.

🇺🇸United States TolstoyDotCom L.A.

If your host gives SSH access, using the command line as was suggested (using AI for tips) is fairly easy. You just have to be careful and make a backup.

To make it easier (albeit less secure), ask your host to let you access SSH using a password instead of a key file. Also ask your host for the full path to the root of your site (where the composer.json file is). All you need is cd [that path] followed by the composer command.

🇺🇸United States TolstoyDotCom L.A.

The clue to cron is probably either at admin/reports/dblog or in the web server error log (which your host can direct you to if necessary).

No one can answer the first question without looking at the site, but you can install the devel_themer module and it might show you where the spurious elements are coming from. Switch to another theme to see if it's a theme or a module issue. Disable all blocks to see if it's one of those. Disable non-essential modules to see if it's one of those. In the worst case, grep the source and change the names of things (like "page-wrapper2") to help you spot where it's coming from.

🇺🇸United States TolstoyDotCom L.A.

I added the missing 2 lines in but it looks like I was using an earlier version and it's now fixed. So this can be closed.

While I'm here, a documentation-related issue is that instances of getRaw( should be changed to getRawOutput(.

Another issue is that in ModeratePreRequestEventSubscriber::moderatePreRequest, $this->getConfig()->get('moderations') can return NULL and I added a line to make it an empty array in that case, but that might mask a deeper issue.

🇺🇸United States TolstoyDotCom L.A.

I ran into this with a copy of D11 dev that I downloaded a few weeks ago. I installed the ai module and several of its submodules at the same time, including experimental modules. I assume the issue was because of ai_translate. I only had the default language installed. The error I got was: Uncaught PHP Exception TypeError: "Drupal\\language\\LanguageNegotiator::updateConfiguration(): Argument #1 ($types) must be of type array, null given, called in /web/core/modules/language/language.module on line 321" at /web/core/modules/language/src/LanguageNegotiator.php line 306, referer: admin/modules/list/confirm-non-stable

When I went to admin/config/regional/language/detection as #34 suggests, I got another error: Uncaught PHP Exception TypeError: "in_array(): Argument #2 ($haystack) must be of type array, null given" at /web/core/modules/language/src/Form/NegotiationConfigureForm.php line 141

The problem is calls to $configurable = $this->languageTypes->get('configurable') and $configurable = $this->config->get('configurable') can return NULL. When $configurable is used in in_array etc it results in those errors.

Unless that return value shouldn't ever be null and there's a more fundamental problem, it seems like the solution is to follow those calls with $configurable = $configurable ?? []; or similar.

🇺🇸United States TolstoyDotCom L.A.

I just ran into this when cloning a 10.3 site. I copied a db dump of the existing site into a new database and truncated the cache tables. It probably didn't help that I was running PHP8.2, but after switching to PHP8.3 I got this error.

I resolved it by running drush eval "drupal_flush_all_caches();". However, since this is such a common error perhaps throwing the exception should be made optional, or stopgaps should be used. That might at least keep some sites online while the problem is found.

Re #36, I assume that's a reference to Drupal\Component\Annotation\Doctrine\StaticReflectionParser::parse(). That uses Doctrine\Common\Annotations\TokenParser which is basically a wrapper around token_get_all(). However, there's an important note in the latter file explaining why they call token_get_all() a second time. Maybe that has something to do with it. Or, maybe token_get_all() is getting confused. The next time this happens, maybe someone could test it by adding whitespace before the '#[' of the plugin that isn't being found. Maybe PHP is getting confused by an immediately preceding regular comment or something like that.

🇺🇸United States TolstoyDotCom L.A.

Isn't this a case of "it hurts when I do that/so stop doing that"? I don't know if it's still an issue, but having a theme and a module with the same machine name also resulted in conflicts. Is there a check for that now? Not everything can be checked.

Maybe this could just be put into documentation.

🇺🇸United States TolstoyDotCom L.A.

In the existing code, I'm not clear on why it's $raw_term->parents[0] == 0 instead of just !$raw_term->parents[0] or similar. Does $raw_term->parents always exist and is it always an array? If $raw_term->parents[0] is NULL or "", is that equivalent to being 0 or does it always have to be a number? What if it's "0"? For the change, it seems like farming the checks out to other methods or a library would be better. Either of those could check if $raw_term->parents[0] exists and has a number or something else.

🇺🇸United States TolstoyDotCom L.A.

First, that's an old settings file, the newer ones use "[]" instead of "array()".

Second, while that file doesn't have an error, it also includes settings.local.php without checking if it exists. That should be fixed. And, the error might be in that file.

I suggest you use a more recent settings file and just copy the database/hash salt info in. I also suggest looking at the end of the file you posted and take preventative action.

🇺🇸United States TolstoyDotCom L.A.

It's probably easier to create media entities using the process I outlined.

🇺🇸United States TolstoyDotCom L.A.

First, unless you have *lots* of content, it might be easier to export the D7 site to JSON and then import that. You can more easily pre-process the JSON file than changing things coming out of the db.

What I've done is create a file entity from the images, and then create a media entity from the file entity. This or another page at their site might have more info: https://understanddrupal.com/lessons/migrating-files-and-images-drupal/

But, are you saying you don't want to create media entities? If so, why?

🇺🇸United States TolstoyDotCom L.A.

The accordions and 'Read more' buttons aren't going to work when printed.

You've probably got a print template somewhere and you can modify that. But, what might be easier is to just create a new, basic page as you want it, and then print that out.

🇺🇸United States TolstoyDotCom L.A.

Open a command line and run php -l [full path to settings.php]

Do you get the same error? Maybe you're using the wrong settings.php file.

Temporarily remove the comments to make it easier to see. Replace the whole $databases bit with this and see if that command still gives an error: $databases = [];

Look for any hidden special characters, like copying the whole file into a basic text editor and saving that as the new file.

If there's still a problem, upload the actual file (without the password).

🇺🇸United States TolstoyDotCom L.A.

I tested this with D10.3.5 and Drush 13.2. I was able to visit content and admin pages after enabling that module with Drush. I didn't see any issues.

If you start a new site with 10.3.5, does this still happen? Maybe it's just a problem with the site you tested with.

🇺🇸United States TolstoyDotCom L.A.

MigrateExecutable::import calls checkRequirements() on the migration and stops the import if it throws an exception. One option would be to add something else in that method but just have it post a warning.

However, maybe a separate service that takes a yml file and runs it through a series of tests might be better. That would help debug issues with the file. Each test could be a plugin: a ClobberedSubfield plugin, one that checks if the source file exists, is readable, and has real data, etc.

🇺🇸United States TolstoyDotCom L.A.

I've updated the module to D11 and kept D9 and D10 compatibility. I did one of the backwards compatibility issues differently than rector and found another similar issue. I lightly tested it on D9/D10/D11. The two methods I added at the end of SourceSelectForm can be changed once D9 is no longer supported.

I and someone in the Slack channel (https://drupal.slack.com/archives/C226VLXBP/p1726971471014629) had a problem where the protocol of the uploaded file was set to 'public://', but that wasn't resolved to 'http://'. I assume it was resolved in the past but behavior changed somewhere. I didn't look into that, I just changed the code to resolve the URL.

I also made a factory to create instances of WordPressMigrationGenerator and made that factory a service.

🇺🇸United States TolstoyDotCom L.A.

Did you add the line to set the value to the end of settings.php? If not, could something later in the file have overwritten it? Do you have multiple settings.php files? Does setting other values work?

🇺🇸United States TolstoyDotCom L.A.

I think I know your problem: you're using the Red X version of Drupal.

Maybe you installed a module that depends on Groups, you'll need to uninstall that first.

Otherwise, try running cron, clearing caches, and running update.php a few times, maybe a group is cached somewhere.

If all that fails, you could reduce the Groups module down to just its info.yml file without dependencies. That might crash your site if something depends on it so you might need to provide a dummy service or similar. Doing that might make it possible to uninstall the module.

🇺🇸United States TolstoyDotCom L.A.

I changed the repo to match what I assume you were doing before and I didn't see a problem.

If you want to post a pull request that shows the problem I can try that, otherwise it looks like this was just a temporary problem.

🇺🇸United States TolstoyDotCom L.A.

What I'm talking about is at a lower level.

For instance, the iris dataset has 150 lines like these, where the four numbers are measurements of the iris and the string is the type of iris. You run it through Weka which creates a model, and then you can feed new measurements (like 1,2,3,4) to that model to get its guess of the type:

5.1,3.5,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.7,2.5,5.8,1.8,Iris-virginica

Another model takes someone's weight, number of pregnancies, glucose level, etc and predicts how likely they are to become diabetic.

Is there a place in this system for things like that, or is it mostly at a higher level?

🇺🇸United States TolstoyDotCom L.A.

Is this the same as Weka classifiers? For instance, the iris dataset which takes four floating point numbers with plant measurements and returns a string indicating which type of iris it likely is: https://archive.ics.uci.edu/dataset/53/iris

If so, I posted an open source helper library to Github designed to make it easier to deal with Weka: https://github.com/TolstoyDotCom/aiaiai

If there's enough interest and I can get Java <-> PHP communication working, I could provide a module that uses your API or that provides a simple API.

Production build 0.71.5 2024