diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 00000000..ecedcec0 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,15 @@ +name: Pre-commit + +on: + push: + pull_request: + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: '3.x' + - uses: pre-commit/action@v3.0.0 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2a50e8cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Composer dependencies +vendor/ + +# PHPStan temporary files +phpstan-tmp.neon + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo + +# OS files +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..9c9d4527 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,9 @@ +repos: + - repo: local + hooks: + - id: phpstan + name: PHPStan + entry: ./scripts/run-phpstan.sh + language: system + files: \.(php)$ + pass_filenames: false \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..bf2323a5 --- /dev/null +++ b/README.md @@ -0,0 +1,179 @@ +# ACCESS Module + +A collection of Drupal modules for ACCESS Match and related cyberinfrastructure platforms. + +## Overview + +The ACCESS module is a custom Drupal module suite that provides functionality for the ACCESS (Advanced Cyberinfrastructure Coordination Ecosystem: Services & Support) ecosystem. This module contains several sub-modules that handle different aspects of the ACCESS platform, including affinity groups, CI links, mentorship, and various specialized features. + +## Development Setup + +### Prerequisites +- PHP 8.1+ +- Drupal 9 or 10 +- Composer + +### Installation +1. Clone this repository into your Drupal installation's `web/modules/custom/access` directory +2. Install dependencies: + ```bash + composer install + ``` + +3. Install pre-commit hooks for code quality: + ```bash + pre-commit install + ``` + This ensures PHPStan analysis runs automatically before each commit. + +### Code Quality +This module uses PHPStan for static analysis to catch issues before they reach production. + +#### Linting Commands +```bash +# Run PHPStan analysis +composer lint + +# Generate new baseline (when adding new code with acceptable issues) +composer lint:baseline +``` + +#### Pre-commit Hooks +- Automatically runs PHPStan on PHP files before commits +- Configuration: `.pre-commit-config.yaml` +- PHPStan config: `phpstan.neon` +- Baseline: `phpstan-baseline.neon` + +## Sub-modules + +### Core Modules + +#### access_affinitygroup +**Purpose**: Custom functionality for Affinity Groups +- Manages affinity group memberships and interactions +- Provides blocks for affinity group content +- Handles email notifications and group communications +- Integrates with ConstantContact API + +#### access_badges +**Purpose**: Badge system management +- Handles user achievement badges +- Provides badge display and management tools + +#### access_cilink +**Purpose**: CI Link customizations +- Manages cyberinfrastructure resource links +- Handles resource flagging and voting +- Provides resource view enhancements + +#### access_events +**Purpose**: Event management functionality +- Event waitlist management +- Event instance sidebar blocks +- Integration with XSEDE API for event data + +#### access_llm +**Purpose**: AI/LLM integration +- AI reference generation capabilities +- Integrates with OpenAI API + +#### access_match_engagement +**Purpose**: Match engagement tracking +- Tracks user engagement with matches +- Provides engagement analytics and reporting + +#### access_misc +**Purpose**: Miscellaneous ACCESS utilities +- User login customizations +- General site tools and utilities +- Security ticket creation +- People directory functionality +- Custom tags and search enhancements + +#### access_news +**Purpose**: News and announcements +- News and events display blocks +- Request news submission functionality + +#### access_outages +**Purpose**: System outage notifications +- Displays current system outages +- Affinity group-specific outage information + +#### access_shortcodes +**Purpose**: Content shortcode system +- Accordion shortcodes +- CTA (Call-to-Action) blocks +- Icon blocks +- Square content blocks + +### Platform-Specific Modules + +#### ccmnet +**Purpose**: CCMnet (Campus Champions Mentorship Network) functionality +- Mentorship program management +- Mentor-mentee matching and tracking +- Mentorship engagement metrics +- User registration redirects + +#### cssn +**Purpose**: CSSN (Community for Science Software and Network) features +- Community persona management +- User directory with skills/interests +- Project and match lookup functionality +- Join form and community features + +#### ondemand +**Purpose**: OnDemand platform integration +- Basic OnDemand platform support + +#### ticketing +**Purpose**: Support ticket system +- Account support ticket creation +- Organization list management +- Email notifications for tickets +- Webform integration + +#### user_profiles +**Purpose**: Enhanced user profile functionality +- Extended user profile management +- Organization toggle features +- User profile commands and utilities + +## Dependencies + +### PHP Packages +- `openai-php/client`: OpenAI API integration +- `gioni06/gpt3-tokenizer`: GPT tokenization support + +### Development Dependencies +- `phpstan/phpstan`: Static analysis +- `mglaman/phpstan-drupal`: Drupal-specific PHPStan rules + +## Support + +- **Issues**: [GitHub Issues](https://github.com/necyberteam/access/issues) +- **Source**: [GitHub Repository](https://github.com/necyberteam/access) + +## Contributing + +1. Fork the repository +2. Create a feature branch +3. Install pre-commit hooks: `pre-commit install` +4. Make your changes +5. Ensure all code quality checks pass +6. Submit a pull request + +## License + +GPL-2.0+ + +## Authors + +- Miles France (@protitude) +- Andrew Pasquale +- FloQuinn (@FloQuinn) +- Hannah L Cameron (@laheara143) +- Jasper Lieber +- Lissie F (@lissief) +- Shawn Rice \ No newline at end of file diff --git a/composer.json b/composer.json index 75ceb716..30546b23 100644 --- a/composer.json +++ b/composer.json @@ -17,5 +17,19 @@ "support": { "issues": "https://github.com/necyberteam/access/issues", "source": "https://github.com/necyberteam/access" + }, + "require-dev": { + "phpstan/phpstan": "*", + "mglaman/phpstan-drupal": "*", + "phpstan/extension-installer": "*" + }, + "config": { + "allow-plugins": { + "phpstan/extension-installer": true + } + }, + "scripts": { + "lint": "../../../../vendor/bin/phpstan analyse --configuration=phpstan.neon --memory-limit=512M", + "lint:baseline": "../../../../vendor/bin/phpstan analyse --configuration=phpstan.neon --memory-limit=512M --generate-baseline" } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..3fd28174 --- /dev/null +++ b/composer.lock @@ -0,0 +1,994 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "06bffdd15f3fc6fc2bec7f60f8734161", + "packages": [ + { + "name": "gioni06/gpt3-tokenizer", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/Gioni06/GPT3Tokenizer.git", + "reference": "86f824f0e852e6a26887dac367e03bdeed07ef42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Gioni06/GPT3Tokenizer/zipball/86f824f0e852e6a26887dac367e03bdeed07ef42", + "reference": "86f824f0e852e6a26887dac367e03bdeed07ef42", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Gioni06\\Gpt3Tokenizer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Jonas Duri", + "email": "jonas.duri@gmail.com" + } + ], + "description": "PHP package for Byte Pair Encoding (BPE) used by GPT-3.", + "homepage": "https://github.com/Gioni06/GPT3Tokenizer", + "keywords": [ + "GPT-3", + "decode", + "encode", + "gpt-2", + "openai", + "tokenizer" + ], + "support": { + "issues": "https://github.com/Gioni06/GPT3Tokenizer/issues", + "source": "https://github.com/Gioni06/GPT3Tokenizer" + }, + "time": "2023-04-16T12:49:18+00:00" + }, + { + "name": "openai-php/client", + "version": "v0.4.2", + "source": { + "type": "git", + "url": "https://github.com/openai-php/client.git", + "reference": "bbfbc0a28872d679d6990712d7feaae2c9f96fc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/openai-php/client/zipball/bbfbc0a28872d679d6990712d7feaae2c9f96fc2", + "reference": "bbfbc0a28872d679d6990712d7feaae2c9f96fc2", + "shasum": "" + }, + "require": { + "php": "^8.1.0", + "php-http/discovery": "^1.15.3", + "php-http/multipart-stream-builder": "^1.2.0", + "psr/http-client": "^1.0.2", + "psr/http-client-implementation": "^1.0.1", + "psr/http-factory-implementation": "*", + "psr/http-message": "^1.1.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.5.0", + "guzzlehttp/psr7": "^2.4.4", + "laravel/pint": "^1.8.0", + "nunomaduro/collision": "^7.4.0", + "pestphp/pest": "^2.4.0", + "pestphp/pest-plugin-arch": "^2.1.1", + "pestphp/pest-plugin-mock": "^2.0.0", + "phpstan/phpstan": "^1.10.11", + "rector/rector": "^0.14.8", + "symfony/var-dumper": "^6.2.8" + }, + "type": "library", + "autoload": { + "files": [ + "src/OpenAI.php" + ], + "psr-4": { + "OpenAI\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + }, + { + "name": "Sandro Gehri" + } + ], + "description": "OpenAI PHP is a supercharged PHP API client that allows you to interact with the Open AI API", + "keywords": [ + "GPT-3", + "api", + "client", + "codex", + "dall-e", + "language", + "natural", + "openai", + "php", + "processing", + "sdk" + ], + "support": { + "issues": "https://github.com/openai-php/client/issues", + "source": "https://github.com/openai-php/client/tree/v0.4.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/gehrisandro", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2023-04-12T04:26:02+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, + { + "name": "php-http/multipart-stream-builder", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/multipart-stream-builder.git", + "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e", + "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/discovery": "^1.15", + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/message": "^1.5", + "php-http/message-factory": "^1.0.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Message\\MultipartStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "A builder class that help you create a multipart stream", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "multipart stream", + "stream" + ], + "support": { + "issues": "https://github.com/php-http/multipart-stream-builder/issues", + "source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2" + }, + "time": "2024-09-04T13:22:54+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + } + ], + "packages-dev": [ + { + "name": "mglaman/phpstan-drupal", + "version": "2.0.9", + "source": { + "type": "git", + "url": "https://github.com/mglaman/phpstan-drupal.git", + "reference": "fed292ee0e3cc5b86d6f818585697022f46ade3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/fed292ee0e3cc5b86d6f818585697022f46ade3c", + "reference": "fed292ee0e3cc5b86d6f818585697022f46ade3c", + "shasum": "" + }, + "require": { + "php": "^8.1", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-deprecation-rules": "^2.0", + "symfony/finder": "^6.2 || ^7.0", + "symfony/yaml": "^6.2 || ^7.0", + "webflo/drupal-finder": "^1.3.1" + }, + "require-dev": { + "behat/mink": "^1.10", + "composer/installers": "^1.9 || ^2", + "drupal/core-recommended": "^10", + "drush/drush": "^11 || ^12 || ^13", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9 || ^10 || ^11", + "slevomat/coding-standard": "^8.6", + "squizlabs/php_codesniffer": "^3.7", + "symfony/phpunit-bridge": "^6.2 || ^7.0" + }, + "suggest": { + "jangregor/phpstan-prophecy": "Provides a prophecy/prophecy extension for phpstan/phpstan.", + "phpstan/phpstan-deprecation-rules": "For catching deprecations, especially in Drupal core.", + "phpstan/phpstan-phpunit": "PHPUnit extensions and rules for PHPStan." + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + }, + "installer-paths": { + "tests/fixtures/drupal/core": [ + "type:drupal-core" + ], + "tests/fixtures/drupal/libraries/{$name}": [ + "type:drupal-library" + ], + "tests/fixtures/drupal/themes/contrib/{$name}": [ + "type:drupal-theme" + ], + "tests/fixtures/drupal/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "tests/fixtures/drupal/profiles/contrib/{$name}": [ + "type:drupal-profile" + ] + } + }, + "autoload": { + "psr-4": { + "mglaman\\PHPStanDrupal\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Glaman", + "email": "nmd.matt@gmail.com" + } + ], + "description": "Drupal extension and rules for PHPStan", + "support": { + "issues": "https://github.com/mglaman/phpstan-drupal/issues", + "source": "https://github.com/mglaman/phpstan-drupal/tree/2.0.9" + }, + "funding": [ + { + "url": "https://github.com/mglaman", + "type": "github" + }, + { + "url": "https://opencollective.com/phpstan-drupal", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/mglaman/phpstan-drupal", + "type": "tidelift" + } + ], + "time": "2025-08-05T14:22:12+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.0 || ^2.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.4.3" + }, + "time": "2024-09-04T20:21:43+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.22", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4", + "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-08-04T19:17:37+00:00" + }, + { + "name": "phpstan/phpstan-deprecation-rules", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", + "reference": "468e02c9176891cc901143da118f09dc9505fc2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/468e02c9176891cc901143da118f09dc9505fc2f", + "reference": "468e02c9176891cc901143da118f09dc9505fc2f", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.15" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", + "support": { + "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.3" + }, + "time": "2025-05-14T10:56:57+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/b8d7d868da9eb0919e99c8830431ea087d6aae30", + "reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "webflo/drupal-finder", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/webflo/drupal-finder.git", + "reference": "73045060b0894c77962a10cff047f72872d8810c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/73045060b0894c77962a10cff047f72872d8810c", + "reference": "73045060b0894c77962a10cff047f72872d8810c", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "php": ">=8.1" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^10.4", + "symfony/process": "^6.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "DrupalFinder\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Florian Weber", + "email": "florian@webflo.org" + } + ], + "description": "Helper class to locate a Drupal installation.", + "support": { + "issues": "https://github.com/webflo/drupal-finder/issues", + "source": "https://github.com/webflo/drupal-finder/tree/1.3.1" + }, + "time": "2024-06-28T13:45:36+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": {}, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/modules/access_affinitygroup/access_affinitygroup.module b/modules/access_affinitygroup/access_affinitygroup.module index b5806f79..efdeaa28 100644 --- a/modules/access_affinitygroup/access_affinitygroup.module +++ b/modules/access_affinitygroup/access_affinitygroup.module @@ -109,7 +109,7 @@ function access_affinitygroup_preprocess_views_view_field(&$variables) { $flag_ag = \Drupal::service('flag.link_builder')->build('taxonomy_term', $tid, 'affinity_group', 'full'); $flag_ag['#attributes']['class'][] = 'btn-sm btn-small btn-secondary-outline py-0 px-4'; - $flag_ag = \Drupal::service('renderer')->renderPlain($flag_ag); + $flag_ag = \Drupal::service('renderer')->renderInIsolation($flag_ag); // Attach a custom cache tag to the output. $variables['#cache']['tags'][] = 'affinity_group_field_' . $tid; diff --git a/modules/access_affinitygroup/src/Commands/AffinityGroupCommands.php b/modules/access_affinitygroup/src/Commands/AffinityGroupCommands.php index c1ddf58e..195500ec 100644 --- a/modules/access_affinitygroup/src/Commands/AffinityGroupCommands.php +++ b/modules/access_affinitygroup/src/Commands/AffinityGroupCommands.php @@ -286,7 +286,7 @@ public function showNews() { $view_builder = \Drupal::entityTypeManager()->getViewBuilder('node'); $renderArray = $view_builder->view($node, 'newsBody'); // $renderArray = $view_builder->view($node); - $display = \Drupal::service('renderer')->renderPlain($renderArray); + $display = \Drupal::service('renderer')->renderInIsolation($renderArray); $this->output()->writeln($display); $this->output()->writeln('---'); @@ -352,7 +352,7 @@ public function showEventsI() { // Get the custom view display eventinstance.email_summary $view_builder = \Drupal::entityTypeManager()->getViewBuilder('eventinstance'); $renderArray = $view_builder->view($enode, 'rollup_list'); - $display = \Drupal::service('renderer')->renderPlain($renderArray); + $display = \Drupal::service('renderer')->renderInIsolation($renderArray); // $this->output()->writeln($display); // TEMP @@ -393,7 +393,7 @@ public function showEventsS() { // $renderArray = $view_builder->view($node); // $this->output()->writeln('c-----------'); $body = ''; - // $body = \Drupal::service('renderer')->renderPlain($renderArray); + // $body = \Drupal::service('renderer')->renderInIsolation($renderArray); // $this->output()->writeln('d-----------'); // $this->output()->writeln($body); // $this->output()->writeln('e-----------'); diff --git a/modules/access_affinitygroup/src/Plugin/Block/TopAskCiTags.php b/modules/access_affinitygroup/src/Plugin/Block/TopAskCiTags.php index 8ab02f15..1e821599 100644 --- a/modules/access_affinitygroup/src/Plugin/Block/TopAskCiTags.php +++ b/modules/access_affinitygroup/src/Plugin/Block/TopAskCiTags.php @@ -11,6 +11,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; use Symfony\Component\DependencyInjection\ContainerInterface; /** diff --git a/modules/access_cilink/access_cilink.module b/modules/access_cilink/access_cilink.module index 7e8164a8..f48d48e8 100644 --- a/modules/access_cilink/access_cilink.module +++ b/modules/access_cilink/access_cilink.module @@ -174,7 +174,7 @@ function access_cilink_preprocess_views_view_field(&$variables) { // Upvote widget. $flag_upvote = \Drupal::service('flag.link_builder')->build('webform_submission', $sid, 'upvote', 'full'); - $flag_upvote = \Drupal::service('renderer')->renderPlain($flag_upvote); + $flag_upvote = \Drupal::service('renderer')->renderInIsolation($flag_upvote); $flag_upvote = "