Skip to content

QR code plugin#1356

Open
tarunnjoshi wants to merge 4 commits intodevfrom
add-qr-code-plugin-for-event
Open

QR code plugin#1356
tarunnjoshi wants to merge 4 commits intodevfrom
add-qr-code-plugin-for-event

Conversation

@tarunnjoshi
Copy link
Member

@tarunnjoshi tarunnjoshi commented Jul 15, 2025

QR code plugin

Summary by CodeRabbit

  • New Features

    • Introduced hooks for customizing QR code check-in token values.
    • Added an API endpoint for marking participants as attended via QR code check-in.
    • Implemented upgrade steps migrating settings for QR code-enabled events.
    • Added QR code image generation and management integrated with event participants.
    • Provided a permission system controlling access to QR code check-in features.
    • Added a cron job to trigger WhatsApp flows via Glific for event participants with QR codes.
  • User Interface

    • Added a QR code check-in landing page with participant and event details, status display, and update functionality.
    • Included new templates and styles for event options and check-in pages.
    • Added JavaScript to update participant attendance status from the check-in page.
  • Documentation

    • Added detailed README covering installation, usage, tokens, permissions, and workflow.
    • Included license files and localization templates.
  • Developer Tools

    • Added PHPUnit tests covering API and core functionality.
    • Provided PHPUnit configuration and bootstrap for testing.
    • Bundled QR code generation library with extensive example scripts and output formats.
    • Added extension utility classes and lifecycle hooks for integration with CiviCRM.
  • Chores

    • Added Composer configuration files and autoloaders for dependencies.
    • Included vendor libraries and supporting files for QR code generation and settings container.
    • Added continuous integration workflows and static analysis configurations.

@coderabbitai
Copy link

coderabbitai bot commented Jul 15, 2025

Walkthrough

This pull request introduces a new CiviCRM extension, "QR Code Checkin," enabling event participants to check in via QR codes. The update adds PHP, JavaScript, CSS, and template files for QR code generation, check-in workflows, API endpoints, permissions, settings, and extensive unit and integration tests. It also integrates the chillerlan/php-qrcode library and its dependencies. Additionally, a new API cron job is added to trigger WhatsApp flows via Glific for event participants of a specified event.

Changes

File(s) / Path(s) Change Summary
CRM/Qrcodecheckin/Hook.php, CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php, CRM/Qrcodecheckin/Upgrader.php Added core PHP classes for hooks, landing page logic, and extension upgrade routines.
CRM/Qrcodecheckin/Upgrader.php Implements upgrade logic for settings migration.
api/v3/Qrcodecheckin/Checkin.php Introduces a new API endpoint for QR code check-in, with permission and parameter validation.
qrcodecheckin.php Implements main extension logic: hook registration, QR code generation, event settings, permissions, and token handling.
settings/qrcodecheckin.setting.php Declares extension settings for QR-enabled events.
templates/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.tpl, templates/qrcode-checkin-event-options.tpl Adds Smarty templates for the check-in landing page and event configuration UI.
qrcodecheckin.css, qrcodecheckin.js Adds styles and JavaScript for the check-in interface and participant status updates.
qrcodecheckin.civix.php Adds extension utility and Civix-generated hook delegation.
README.md, LICENSE.txt, info.xml Adds documentation, licensing, and extension metadata.
test.php Adds a standalone PHP test script for QR code generation.
composer.json Adds Composer metadata and dependency on chillerlan/php-qrcode.
phpunit.xml.dist, tests/phpunit/** Adds PHPUnit configuration and tests for API and bootstrap logic.
vendor/** Adds chillerlan/php-qrcode library and its dependencies, including examples, configs, and tests.
vendor/composer/** Adds Composer autoloader and metadata files.
api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php Adds a new API cron job to trigger WhatsApp flows via Glific for event participants, including helper functions for contact ID retrieval and flow triggering.

Sequence Diagram(s)

sequenceDiagram
    participant Registrant
    participant Email
    participant QRCode
    participant RegistrationWorker
    participant WebPage
    participant CiviCRM
    participant GlificAPI

    Registrant->>CiviCRM: Registers for event
    CiviCRM->>QRCode: Generates QR code for participant
    QRCode->>Email: Embeds QR code in confirmation email
    Email->>Registrant: Delivers email with QR code
    Registrant->>RegistrationWorker: Presents QR code at event
    RegistrationWorker->>WebPage: Scans QR code, opens landing page
    WebPage->>CiviCRM: Verifies participant & hash
    CiviCRM-->>WebPage: Returns participant status/details
    RegistrationWorker->>WebPage: Clicks "Update to Attended"
    WebPage->>CiviCRM: Calls API to update status
    CiviCRM-->>WebPage: Confirms status update
    loop Periodic Cron
        CiviCRM->>GlificAPI: Fetch participants and contact IDs
        GlificAPI->>CiviCRM: Returns contact IDs
        CiviCRM->>GlificAPI: Triggers WhatsApp flows for contacts
        GlificAPI-->>CiviCRM: Confirms flow triggers
    end
Loading

Possibly related PRs

  • Glific integration Phase-1 #1223: Adds foundational Glific integration components such as DAO, API client, helper classes, and group mapping UI, which support the new WhatsApp flow cron job introduced here.

Suggested labels

status : ready for review

Poem

QR codes now dance in CiviCRM's halls,
Event check-ins quick—no more paper stalls!
With hooks and tokens, and tests galore,
Participants glide right through the door.
A scan, a click, and status ascends—
Code and community, now best of friends!
🟩🟧🟥

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 62

♻️ Duplicate comments (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/LICENSE (1)

2-20: Same legal due-diligence applies to Composer’s MIT licence

Replicate the checks mentioned for the php-qrcode licence to stay compliant.

🧹 Nitpick comments (69)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpmd.xml (1)

1-6: Re-evaluate committing vendor QA config under version control

The PMD ruleset lives inside vendor/…/php-qrcode. Shipping third-party code + its QA config inflates the repo and muddies ownership. Prefer pulling the library via Composer (composer.json + composer.lock) and storing project-level QA rules in your own directory. This keeps updates painless and avoids accidental edits to external sources.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.scrutinizer.yml (1)

1-5: Vendored CI configs add noise to root tooling

This Scrutinizer config lives inside vendor/ and will never be picked up by your project’s CI, yet it clutters the repo.

- wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.scrutinizer.yml

Consider excluding all third-party CI/meta files from version control to avoid confusion and reduce repository size.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.gitignore (1)

1-4: Re-evaluate committing full vendor/ tree

Committing third-party vendor/ sources (plus their internal .gitignore, IDE files, CI configs, etc.) inflates the repository and complicates dependency updates.

Recommended workflow:

  1. Keep only your extension code in VCS.
  2. Use Composer on build/deploy (composer install --no-dev --optimize-autoloader) to materialise dependencies.
  3. Commit a minimal composer.lock for reproducibility.

Adopting this will cut PR diff noise and avoid future merge conflicts in external libraries.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.css (1)

2-31: Prefer relative units & CSS variables for better accessibility and theming

Hard-coded font-size: xx-large/large and named colours (green, orange, red) can break in high-DPI or custom theme contexts and may fail WCAG contrast ratios. Switching to rem units and project-level CSS variables (e.g. var(--success-color)) improves responsiveness and maintainability without functional impact.

Example tweak:

-#qrcheckin-participant-name {
-  font-size: xx-large;
+#qrcheckin-participant-name {
+  font-size: 2rem; /* ~32 px on default root size */

Colors:

-.qrcheckin-status-attended { color: green; }
+.qrcheckin-status-attended { color: var(--color-success, #198754); }
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/test.php (1)

3-8: Strip dead code & rely on a single autoloader

Lines 6-7 contain commented-out loader tweaks that are no longer needed now that Composer generates vendor/autoload.php. Leaving these fragments around clutters the file and invites confusion about which autoloader path is actually used.

-// $loader->add('chillerlan\QRCode', __DIR__.'/vendor/chillerlan/php-qrcode/src/');
-//use chillerlan\php-qrcode\QRCode;
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/autoload.php (1)

1-7: Avoid committing Composer-generated vendor files

vendor/autoload.php and the entire vendor/ tree are machine-generated.
Keeping them under VCS balloon the repo and causes merge conflicts whenever dependencies change. Prefer:

  1. Commit only composer.json / composer.lock.
  2. Add vendor/ to .gitignore.
  3. Let CI/build steps run composer install --no-dev --optimize-autoloader.

If bundling is absolutely required for deployment, consider using artefact builds rather than checking them into source.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.travis.yml (1)

1-20: Third-party CI configs should be excluded

The Travis CI configuration belongs to the upstream library. It serves no purpose in your extension and will be ignored by your project’s CI. Keeping it increases maintenance overhead.

Recommend deleting .travis.yml (and other CI configs) from the bundled vendor directory if you decide to keep vendor/ in VCS.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/composer.json (1)

5-8: Add Composer metadata for CiviCRM extensions

Consider adding fields that help downstream tooling:

   "type": "library",
+  "license": "MIT",
+  "authors": [
+    { "name": "Your Org", "email": "dev@example.com" }
+  ],
+  "support": {
+    "issues": "https://github.com/ColoredCow/goonj/issues"
+  },

Also double-check whether "type": "civicrm-extension" (rather than "library") would integrate better with CiviCRM’s Extension Manager.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpdoc.xml (1)

1-14: Consider removing dev-only tooling from the production build

A full‐blown PhpDocumentor config inside vendor/ ships documentation tooling to production.
That unnecessarily inflates the repository size and clutters plugin releases.

If API docs are required, they can be generated during CI and uploaded as an artefact, leaving the phpdoc.xml out of the committed tree.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.travis.yml (1)

1-18: CI config inside vendor/ is dead weight for consumers

The Travis config is only useful for the upstream library and is never executed in this repository.
Keeping CI configs of dependencies bloats the tree and can confuse maintainers searching for active workflows.

Recommend pruning .travis.yml (and similar) during packaging.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/templates/qrcode-checkin-event-options.tpl (1)

5-8: Swap label & control for better accessibility

Screen-readers expect the <label> element before the associated form control. Rendering the control first ({$form.qrcode_enabled_event.html}) and then the label breaks that expectation and may confuse assistive technology.

-      {$form.qrcode_enabled_event.html}
-      {$form.qrcode_enabled_event.label}
+      {$form.qrcode_enabled_event.label}
+      {$form.qrcode_enabled_event.html}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/image.php (1)

1-61: Do not ship example scripts publicly

examples/image.php can be invoked over the web and will happily render arbitrary data if modified, leaking library internals and wasting server resources.
Recommend excluding the entire examples/ tree from the deployed plugin (composer install --no-dev or prune during build).

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpunit.xml (1)

1-7: Unnecessary test config in production package

phpunit.xml is a dev artifact and need not be shipped to production; it increases clutter and potentially exposes directory layout. Recommend excluding phpunit*.xml via .gitattributes or build script.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imagick.php (3)

4-4: Fix incorrect @filesource documentation.

The @filesource comment references "image.php" but this file is "imagick.php". This creates confusion about the file's actual purpose and location.

- * @filesource   image.php
+ * @filesource   imagick.php

56-60: Remove trailing empty lines for cleaner code.

Multiple trailing empty lines violate clean code standards and add unnecessary whitespace to the file.

 echo (new QRCode($options))->render($data);
-

-

-

-

17-17: Consider using a more generic example URL.

The hardcoded YouTube URL makes this example less universal. Consider using a more generic placeholder URL for demonstration purposes.

-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+$data = 'https://example.com/qr-code-demo';
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/l10n/net.ourpowerbase.qrcodecheckin.pot (1)

8-8: Update outdated POT creation date.

The POT-Creation-Date shows "2021-07-16T18:31:32+02:00" which appears outdated for a newly added extension. This can cause confusion during translation workflows and version tracking.

-"POT-Creation-Date: 2021-07-16T18:31:32+02:00\n"
+"POT-Creation-Date: 2025-01-XX T18:31:32+02:00\n"

Replace with the actual creation date of this extension version.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/svg.php (1)

70-74: Improve gzip handling for better example clarity.

The hardcoded gzip flag and conditional logic add complexity to what should be a simple SVG generation example. This makes it harder for developers to understand the core QR code generation functionality.

-if($gzip === true){
-	header('Vary: Accept-Encoding');
-	header('Content-Encoding: gzip');
-	$qrcode = gzencode($qrcode ,9);
-}
+// Optional: Enable gzip compression by adding ?gzip=1 to URL
+if($gzip){
+	header('Vary: Accept-Encoding');
+	header('Content-Encoding: gzip');
+	$qrcode = gzencode($qrcode, 9);
+}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/settings/qrcodecheckin.setting.php (1)

22-22: Fix inconsistent indentation.

Line 22 uses tabs instead of spaces, which is inconsistent with the rest of the file's indentation style.

-	],
+  ],
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/text.php (1)

17-17: Consider example file security for production deployments.

The hardcoded YouTube URL is fine for an example, but ensure example files are not accessible in production environments or consider using placeholder URLs for security.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/phpunit.xml.dist (1)

8-12: Refine code coverage whitelist to exclude vendor files.

The current whitelist includes the entire directory, which will include vendor files in coverage reports. Consider excluding vendor directories for more accurate coverage metrics.

  <filter>
    <whitelist>
      <directory suffix=".php">./</directory>
+     <exclude>
+       <directory>./vendor</directory>
+     </exclude>
    </whitelist>
  </filter>
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/custom_output.php (1)

17-17: Extract hardcoded data to improve example flexibility.

The hardcoded YouTube URL makes the example less educational and reusable.

-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+// Example data - you can replace this with any string
+$data = $argv[1] ?? 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml (1)

19-22: Consider using setup-php action for better PHP management.

Hardcoded PHP binary names are fragile and limit flexibility.

    strategy:
      matrix:
-        php-binary:
-          - php7.2
-          - php7.3
-          - php7.4
+        php-version:
+          - '7.2'
+          - '7.3'
+          - '7.4'

    steps:
      - name: "Checkout"
        uses: actions/checkout@v4

+      - name: "Setup PHP"
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: ${{ matrix.php-version }}
+          coverage: none

      - name: "Install dependencies with composer"
-        run: ${{ matrix.php-binary }} $(which composer) update --no-interaction --no-progress --no-suggest
+        run: composer update --no-interaction --no-progress --no-suggest
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php (2)

22-44: Improve constant organization and readability.

The large constant array mixing light and dark module values violates readability principles and could be better organized.

 	const DEFAULT_MODULE_VALUES = [
-		// light
-		QRMatrix::M_DATA            => false, // 4
-		QRMatrix::M_FINDER          => false, // 6
-		QRMatrix::M_SEPARATOR       => false, // 8
-		QRMatrix::M_ALIGNMENT       => false, // 10
-		QRMatrix::M_TIMING          => false, // 12
-		QRMatrix::M_FORMAT          => false, // 14
-		QRMatrix::M_VERSION         => false, // 16
-		QRMatrix::M_QUIETZONE       => false, // 18
-		QRMatrix::M_LOGO            => false, // 20
-		QRMatrix::M_TEST            => false, // 255
-		// dark
-		QRMatrix::M_DARKMODULE << 8 => true,  // 512
-		QRMatrix::M_DATA << 8       => true,  // 1024
-		QRMatrix::M_FINDER << 8     => true,  // 1536
-		QRMatrix::M_ALIGNMENT << 8  => true,  // 2560
-		QRMatrix::M_TIMING << 8     => true,  // 3072
-		QRMatrix::M_FORMAT << 8     => true,  // 3584
-		QRMatrix::M_VERSION << 8    => true,  // 4096
-		QRMatrix::M_FINDER_DOT << 8 => true,  // 5632
-		QRMatrix::M_TEST << 8       => true,  // 65280
+		// Light modules (false/white)
+		QRMatrix::M_DATA        => false,
+		QRMatrix::M_FINDER      => false,
+		QRMatrix::M_SEPARATOR   => false,
+		QRMatrix::M_ALIGNMENT   => false,
+		QRMatrix::M_TIMING      => false,
+		QRMatrix::M_FORMAT      => false,
+		QRMatrix::M_VERSION     => false,
+		QRMatrix::M_QUIETZONE   => false,
+		QRMatrix::M_LOGO        => false,
+		QRMatrix::M_TEST        => false,
+		
+		// Dark modules (true/black) - shifted by 8 bits
+		QRMatrix::M_DARKMODULE << 8  => true,
+		QRMatrix::M_DATA << 8        => true,
+		QRMatrix::M_FINDER << 8      => true,
+		QRMatrix::M_ALIGNMENT << 8   => true,
+		QRMatrix::M_TIMING << 8      => true,
+		QRMatrix::M_FORMAT << 8      => true,
+		QRMatrix::M_VERSION << 8     => true,
+		QRMatrix::M_FINDER_DOT << 8  => true,
+		QRMatrix::M_TEST << 8        => true,
 	];

53-53: Improve method signature documentation and type safety.

The return type is too generic and the parameter lacks validation documentation.

 	/**
 	 * generates the output, optionally dumps it to a file, and returns it
 	 *
-	 * @param string|null $file
+	 * @param string|null $file path to save the output, null to return only
 	 *
-	 * @return mixed
+	 * @return string|bool output data or success status depending on implementation
+	 * @throws \InvalidArgumentException when file path is invalid
+	 * @throws \RuntimeException when output generation fails
 	 */
 	public function dump(string $file = null);
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php (1)

17-17: Fix formatting: Missing space in class declaration.

The class declaration is missing a space before the opening brace, which violates PSR-12 coding standards.

-class MyCustomOutput extends QROutputAbstract{
+class MyCustomOutput extends QROutputAbstract {
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/html.php (1)

60-94: Consider extracting the large configuration array for better readability.

The hardcoded URL and extensive moduleValues configuration create a dense block that impacts readability. While acceptable for an example, this violates the principle of keeping code segments focused and readable.

Consider extracting the configuration:

<?php
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$moduleColors = [
+	// finder
+	1536 => '#A71111', // dark (true)
+	6    => '#FFBFBF', // light (false)
+	// alignment
+	2560 => '#A70364',
+	10   => '#FFC9C9',
+	// timing
+	3072 => '#98005D',
+	12   => '#FFB8E9',
+	// format
+	3584 => '#003804',
+	14   => '#00FB12',
+	// version
+	4096 => '#650098',
+	16   => '#E0B8FF',
+	// data
+	1024 => '#4A6000',
+	4    => '#ECF9BE',
+	// darkmodule
+	512  => '#080063',
+	// separator
+	8    => '#AFBFBF',
+	// quietzone
+	18   => '#FFFFFF',
+];

-	$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
 	$options = new QROptions([
 		'version' => 5,
 		'outputType' => QRCode::OUTPUT_MARKUP_HTML,
 		'eccLevel' => QRCode::ECC_L,
-		'moduleValues' => [
-			// finder
-			1536 => '#A71111', // dark (true)
-			6    => '#FFBFBF', // light (false)
-			// alignment
-			2560 => '#A70364',
-			10   => '#FFC9C9',
-			// timing
-			3072 => '#98005D',
-			12   => '#FFB8E9',
-			// format
-			3584 => '#003804',
-			14   => '#00FB12',
-			// version
-			4096 => '#650098',
-			16   => '#E0B8FF',
-			// data
-			1024 => '#4A6000',
-			4    => '#ECF9BE',
-			// darkmodule
-			512  => '#080063',
-			// separator
-			8    => '#AFBFBF',
-			// quietzone
-			18   => '#FFFFFF',
-		],
+		'moduleValues' => $moduleColors,
 	]);
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/phpmd.xml (1)

32-34: Reconsider excluding unused parameter detection.

Excluding the UnusedFormalParameter rule can mask code quality issues and dead code, which violates the principle of keeping code clean and maintainable.

Consider removing this exclusion to catch potential code quality issues:

 <rule ref="rulesets/unusedcode.xml">
-	<exclude name="UnusedFormalParameter"/>
 </rule>
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Helpers/BitBufferTest.php (1)

54-54: Add missing line ending.

The file is missing a newline character at the end, which violates PSR-12 coding standards.

 }
+
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Number.php (1)

83-83: Add missing line ending.

The file is missing a newline character at the end, which violates PSR-12 coding standards.

 }
+
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/fpdf.php (1)

48-48: Add missing line ending.

The file is missing a newline character at the end, which violates PSR-12 coding standards.

 echo (new QRCode($options))->render($data);
+
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php (1)

39-39: Add missing line ending.

The file is missing a newline character at the end, which violates PSR-12 coding standards.

 }
+
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/info.xml (1)

38-38: Add missing line ending.

The file is missing a newline character at the end, which violates XML formatting standards.

 </extension>
+
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/composer.json (1)

31-34: Outdated PHPUnit version!

PHPUnit 8.5 is outdated. Consider upgrading to a more recent version for better features and PHP 8+ compatibility.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (2)

45-47: Typo in property comment!

The comment has a semicolon instead of an asterisk.

 /**
- * @var string;
+ * @var string
  */

78-78: Using deprecated get_called_class() function!

The get_called_class() function works but using static::class is more modern and clearer.

-$class = get_called_class();
+$class = static::class;
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php (1)

99-101: Use imagestring() for more efficient text rendering.

The character-by-character approach is unnecessarily complex and less efficient than using the built-in imagestring() function.

-		// loop through the string and draw the letters
-		foreach(str_split($text) as $i => $chr){
-			imagechar($this->image, $textSize, $i * $w + $x, $this->length, $chr, $fontColor);
-		}
+		// Render the entire string at once
+		imagestring($this->image, $textSize, $x, $this->length, $text, $fontColor);
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/README.md (3)

1-3: Fix spelling and grammar issues.

Several spelling and grammar issues need correction:

  1. "scanable" should be "scannable"
  2. Consider consistency in "QR Code" vs "QRCode" terminology
-# QR Code Checkin
+# QR Code Check-in

-QRCode Checkin allows you to send an email that contains a scanable code to the registered participants for your event.
+QR Code Check-in allows you to send an email that contains a scannable code to the registered participants for your event.

28-30: Fix markdown list indentation.

The unordered list items are improperly indented according to markdown standards.

- * is set to active
- * allows online registration
- * has a start date later than "now" (ie. at the time of composing your email)
+* is set to active
+* allows online registration
+* has a start date later than "now" (ie. at the time of composing your email)

79-94: Add language specification to code block.

The code block should specify the language for proper syntax highlighting.

-```
+```php
 function myextension_civicrm_qrcodecheckin_tokenValues(&$values, $contact_id, &$handled) {
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php (1)

68-72: Consider making file comparison test more robust.

The current file comparison using substr() to avoid CreationDate differences is brittle and may miss important validation issues.

Consider using a more robust comparison approach:

-		// substr() to avoid CreationDate
-		$expected = substr(file_get_contents($this::cachefile.$type), 0, 2000);
-		$actual   = substr($this->outputInterface->dump(), 0, 2000);
+		$expected = file_get_contents($this::cachefile.$type);
+		$actual   = $this->outputInterface->dump();
+		
+		// Remove timestamp-specific content for comparison
+		$expected = preg_replace('/\/CreationDate \([^)]+\)/', '/CreationDate (NORMALIZED)', $expected);
+		$actual   = preg_replace('/\/CreationDate \([^)]+\)/', '/CreationDate (NORMALIZED)', $actual);
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php (1)

54-56: Replace magic color values with named constants.

The hardcoded RGB values [0, 0, 0] and [255, 255, 255] are magic numbers that reduce code readability and maintainability.

+	private const BLACK_RGB = [0, 0, 0];
+	private const WHITE_RGB = [255, 255, 255];
+
 	protected function setModuleValues():void{
 
 		foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
 			$v = $this->options->moduleValues[$M_TYPE] ?? null;
 
 			if(!is_array($v) || count($v) < 3){
-				$this->moduleValues[$M_TYPE] = $defaultValue
-					? [0, 0, 0]
-					: [255, 255, 255];
+				$this->moduleValues[$M_TYPE] = $defaultValue
+					? self::BLACK_RGB
+					: self::WHITE_RGB;
 			}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php (2)

32-32: Replace magic number with named constant.

The hardcoded version number 4 reduces code readability and makes it unclear why this specific version is chosen for testing.

+	private const TEST_QR_VERSION = 4;
+
 	protected function setUp():void{
 		parent::setUp();
 
-		$this->dataInterface = $this->reflection->newInstanceArgs([new QROptions(['version' => 4])]);
+		$this->dataInterface = $this->reflection->newInstanceArgs([new QROptions(['version' => self::TEST_QR_VERSION])]);
 	}

61-62: Replace magic number with named constant.

The hardcoded value 13370 appears to be an arbitrary large number for testing data length limits. Consider using a more descriptive constant.

+	private const EXCESSIVE_DATA_LENGTH = 13370;
+
 	public function testGetMinimumVersionException(){
 		$this->expectException(QRCodeDataException::class);
 		$this->expectExceptionMessage('data exceeds');
 
-		$this->getProperty('strlen')->setValue($this->dataInterface, 13370);
+		$this->getProperty('strlen')->setValue($this->dataInterface, self::EXCESSIVE_DATA_LENGTH);
 		$this->getMethod('getMinimumVersion')->invoke($this->dataInterface);
 	}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/index.html (2)

7-16: Move inline CSS to external stylesheet.

Inline styles violate separation of concerns and make the code harder to maintain. Consider extracting CSS to a separate file.

-	<style >
-		body{ font-size: 20px; line-height: 1.4em; font-family: "Trebuchet MS", sans-serif; color: #000;}
-		input, textarea, select{font-family: Consolas, "Liberation Mono", Courier, monospace; font-size: 75%; line-height: 1.25em; border: 1px solid #aaa; }
-		input:focus, textarea:focus, select:focus{ border: 1px solid #ccc; }
-		label{ cursor: pointer; }
-		#qrcode-settings, div#qrcode-output{ text-align: center; }
-		div#qrcode-output > div {margin: 0;padding: 0;height: 3px;}
-		div#qrcode-output > div > span {display: inline-block;width: 3px;height: 3px;}
-		div#qrcode-output > div > span {background-color: lightgrey;}
-	</style >
+	<link rel="stylesheet" href="styles.css">

143-160: Move inline JavaScript to external file.

Inline JavaScript violates separation of concerns and Content Security Policy best practices.

-<script >
-	((form, output, url) => {
-		$(form).observe('submit', ev => {
-			Event.stop(ev);
-			new Ajax.Request(url, {
-				method: 'post',
-				parameters: ev.target.serialize(true),
-				onUninitialized: $(output).update(),
-				onLoading: $(output).update('[portlandia_screaming.gif]'),
-				onFailure: response => $(output).update(response.responseJSON.error),
-				onSuccess: response => $(output).update(response.responseJSON.qrcode),
-			});
-		});
-	})('qrcode-settings', 'qrcode-output', './qrcode.php');
-</script >
+<script src="qrcode-generator.js"></script>
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php (1)

40-40: Replace magic numbers with named constants.

The hardcoded values 45, 11, and 6 are algorithm-specific constants that should be documented and named for better code maintainability.

+	/**
+	 * AlphaNum encoding constants based on QR specification
+	 */
+	private const ALPHANUM_PAIR_MULTIPLIER = 45;
+	private const ALPHANUM_PAIR_BITS = 11;
+	private const ALPHANUM_SINGLE_BITS = 6;
+
 	protected function write(string $data):void{
 
 		for($i = 0; $i + 1 < $this->strlen; $i += 2){
-			$this->bitBuffer->put($this->getCharCode($data[$i]) * 45 + $this->getCharCode($data[$i + 1]), 11);
+			$this->bitBuffer->put(
+				$this->getCharCode($data[$i]) * self::ALPHANUM_PAIR_MULTIPLIER + $this->getCharCode($data[$i + 1]), 
+				self::ALPHANUM_PAIR_BITS
+			);
 		}
 
 		if($i < $this->strlen){
-			$this->bitBuffer->put($this->getCharCode($data[$i]), 6);
+			$this->bitBuffer->put($this->getCharCode($data[$i]), self::ALPHANUM_SINGLE_BITS);
 		}
 
 	}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php (1)

66-66: Replace magic path with named constant.

The hardcoded path /foo should be extracted to a constant for better maintainability and clarity of test intent.

+	private const INVALID_CACHE_PATH = '/foo';
+
 	public function testSaveException(){
 		$this->expectException(QRCodeOutputException::class);
-		$this->expectExceptionMessage('Could not write data to cache file: /foo');
+		$this->expectExceptionMessage('Could not write data to cache file: ' . self::INVALID_CACHE_PATH);
 
-		$this->options->cachefile = '/foo';
+		$this->options->cachefile = self::INVALID_CACHE_PATH;
 		$this->setOutputInterface();
 		$this->outputInterface->dump();
 	}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php (2)

42-42: Add a more descriptive comment for marking JPEG tests as risky.

The comment should explain why JPEG encoding may cause different results (e.g., lossy compression, platform-specific implementations).

-		if($type === QRCode::OUTPUT_IMAGE_JPG){ // jpeg encoding may cause different results
+		if($type === QRCode::OUTPUT_IMAGE_JPG){ // JPEG uses lossy compression which may produce slightly different results across platforms

66-66: Consider updating the deprecated assertion method.

The assertIsResource() method is deprecated in PHPUnit 9.x+. While it still works, consider future compatibility.

-		$this::assertIsResource($this->outputInterface->dump());
+		$resource = $this->outputInterface->dump();
+		$this->assertNotFalse($resource);
+		$this->assertTrue(is_resource($resource) || (is_object($resource) && $resource instanceof \GdImage));
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php (2)

16-17: Remove empty PHPDoc block or add interface documentation.

The empty documentation block serves no purpose. Either remove it or add a meaningful description of the interface's role.

-/**
- *
- */
+/**
+ * Interface for QR code data encoding implementations.
+ * Defines character maps, capacity limits, and error correction parameters.
+ */

34-166: Consider extracting QR specification constants to a configuration file.

The large constant arrays contain QR code specification data that could be maintained more easily in a separate configuration file. This would improve readability and maintainability.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php (1)

34-34: Consider extracting inline SVG styles for better maintainability.

Hardcoded inline styles reduce flexibility. Consider allowing style customization through options.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php (1)

56-56: Use consistent variable naming for module types.

Other files in this codebase use $M_TYPE for module type variables. Consider maintaining consistency.

-		foreach($this::DEFAULT_MODULE_VALUES as $type => $defaultValue){
+		foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){

Also update references on lines 57, 59, 64, and 65.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php (1)

37-38: Document assumption about PNG format.

The comment mentions assuming PNG format but the code should either enforce this or support multiple formats properly.

Either enforce PNG format or add support for other formats:

-// of course you could accept other formats too (such as resource or Imagick)
-// i'm not checking for the file type either for simplicity reasons (assuming PNG)
+// Currently only supports PNG format - could be extended for other formats
+if($imageInfo[2] !== IMAGETYPE_PNG){
+    throw new QRCodeOutputException('only PNG logos are currently supported');
+}
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php (1)

32-39: Add error handling for file operations in test.

The test writes to a cache file and immediately reads it back. Consider adding error handling for file operations to make tests more robust.

 public function testMarkupOutputFile($type){
 	$this->options->outputType = $type;
 	$this->options->cachefile  = $this::cachefile.$type;
 	$this->setOutputInterface();
 	$data = $this->outputInterface->dump();
 
+	if (!file_exists($this->options->cachefile)) {
+		$this->fail('Cache file was not created: ' . $this->options->cachefile);
+	}
 	$this->assertSame($data, file_get_contents($this->options->cachefile));
 }
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php (2)

103-105: Consider caching reflection results for performance.

Creating a new ReflectionProperty instance for every property access check could impact performance in high-throughput scenarios.

Consider implementing a static cache for reflection results to avoid repeated instantiation:

+private static $propertyCache = [];
+
 protected function isPrivate(string $property):bool{
-	return (new ReflectionProperty($this, $property))->isPrivate();
+	$key = static::class . '::' . $property;
+	if (!isset(self::$propertyCache[$key])) {
+		self::$propertyCache[$key] = (new ReflectionProperty($this, $property))->isPrivate();
+	}
+	return self::$propertyCache[$key];
 }

41-52: Unconventional trait constructor pattern.

The construct() method automatically calls methods named after trait short names. This pattern could lead to unexpected behavior and makes the code harder to understand.

Consider documenting this behavior clearly or using a more explicit initialization pattern to improve maintainability.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php (1)

90-95: Add descriptive assertion message for clarity.

The test validates that trailing spaces affect QR matrix generation, but the assertion could be more descriptive.

 public function testTrim() {
 	$m1 = $this->qrcode->getMatrix('hello');
 	$m2 = $this->qrcode->getMatrix('hello '); // added space
 
-	$this->assertNotEquals($m1, $m2);
+	$this->assertNotEquals($m1, $m2, 'QR matrix should differ when input has trailing space');
 }
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (1)

143-157: Potential issue with navigation menu recursion.

The recursive menu insertion could fail silently if the path doesn't exist. Consider adding logging or validation.

 else {
 	// Find an recurse into the next level down
 	$found = FALSE;
 	$path = explode('/', $path);
 	$first = array_shift($path);
 	foreach ($menu as $key => &$entry) {
 		if ($entry['attributes']['name'] == $first) {
 			if (!isset($entry['child'])) {
 				$entry['child'] = [];
 			}
 			$found = _qrcodecheckin_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item);
+			break;
 		}
 	}
+	if (!$found && CRM_Core_Config::singleton()->debug) {
+		Civi::log()->warning('Failed to insert navigation menu item at path: ' . $first);
+	}
 	return $found;
 }
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php (1)

172-182: Consider using modulo arithmetic for clarity.

The current implementation handles wrap-around with conditional logic, but modulo arithmetic would be clearer and more maintainable.

 public function gexp(int $n):int{
-
-    if($n < 0){
-        $n += 255;
-    }
-    elseif($n >= 256){
-        $n -= 255;
-    }
-
+    $n = (($n % 255) + 255) % 255;
     return Polynomial::table[$n][0];
 }
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)

282-297: Add comments to clarify Kanji encoding detection logic.

The bitwise operations for Shift-JIS encoding detection would benefit from explanatory comments.

 public function isKanji(string $string):bool{
     $i   = 0;
     $len = strlen($string);

     while($i + 1 < $len){
+        // Combine two bytes to form a Shift-JIS character code
         $c = ((0xff & ord($string[$i])) << 8) | (0xff & ord($string[$i + 1]));

+        // Check if the character is within the Shift-JIS Kanji ranges
         if(!($c >= 0x8140 && $c <= 0x9FFC) && !($c >= 0xE040 && $c <= 0xEBBF)){
             return false;
         }

         $i += 2;
     }

     return $i >= $len;
 }
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (2)

92-100: Consider improving transparency background handling

The code works around PHP's overloaded property behavior by creating a local variable. While functional, this could be cleaner by refactoring how transparency options are stored.

Consider storing transparency background as a method return value or using a getter method instead of direct property access to avoid this workaround.


187-193: Remove unprofessional comment

The comment "Jiff - like... JitHub!" is unprofessional and doesn't add value to the code documentation.

 /**
- * Jiff - like... JitHub!
  * @return void
  */
 protected function gif():void{
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/README.md (1)

341-341: Fix spelling errors in documentation

Please correct the following spelling errors:

  • Line 341: "absoulute" → "absolute"
  • Line 390: "implemetation" → "implementation"

Also applies to: 390-390

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (1)

303-318: Consider extracting closure to named method

The closure used for data interleaving works correctly but could be clearer as a named method.

Extract the mask closure to a private method for better readability:

+    /**
+     * Interleave data blocks for QR code format
+     */
+    private function interleaveData(array $arr, int $count, array &$data, int &$index, int $rsCount): void {
+        for($x = 0; $x < $count; $x++){
+            for($y = 0; $y < $rsCount; $y++){
+                if($x < count($arr[$y])){
+                    $data[$index] = $arr[$y][$x];
+                    $index++;
+                }
+            }
+        }
+    }

     $data  = array_fill(0, $totalCodeCount, null);
     $index = 0;

-    $mask = function($arr, $count) use (&$data, &$index, $rsCount){
-        for($x = 0; $x < $count; $x++){
-            for($y = 0; $y < $rsCount; $y++){
-                if($x < count($arr[$y])){
-                    $data[$index] = $arr[$y][$x];
-                    $index++;
-                }
-            }
-        }
-    };
-
-    $mask($this->dcdata, $maxDcCount);
-    $mask($this->ecdata, $maxEcCount);
+    $this->interleaveData($this->dcdata, $maxDcCount, $data, $index, $rsCount);
+    $this->interleaveData($this->ecdata, $maxEcCount, $data, $index, $rsCount);
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (1)

621-632: Remove unused variable in foreach loop.

The variable $val is declared but never used in the loop. Since only the coordinates are needed, the loop can be simplified.

-		foreach($this->matrix as $y => $row){
-			foreach($row as $x => $val){
+		foreach($this->matrix as $y => $row){
+			foreach($row as $x => $_){

Alternatively, use array_keys() if you only need the indices:

-		foreach($this->matrix as $y => $row){
-			foreach($row as $x => $val){
+		foreach($this->matrix as $y => $row){
+			foreach(array_keys($row) as $x){
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/phpunit.xml (2)

1-22: Consider excluding vendor-package test artefacts from the extension

The repository now ships the upstream phpunit.xml of a third-party library. Keeping test configs (and the associated /tests tree) inside vendor/:

  • Bloats the extension size shipped to production/CiviCRM sites.
  • Exposes internal paths & tooling that aren’t meant for runtime.
  • Risks CI accidentally running thousands of vendor tests, slowing pipelines.

Unless you actively run this library’s own test suite, treat these files as development-only and exclude them via Composer (--no-dev) or .gitattributes export-ignore.


12-16: Deprecated whitelist element may raise warnings on PHPUnit ≥ 9.3

The <whitelist> node was replaced by <coverage include|exclude> in newer PHPUnit versions. If your CI uses a modern PHPUnit, expect deprecation notices.

Not urgent if you never run the vendor tests, but worth tracking to keep a clean build log when upgrading.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 43bae61 and a21f3f7.

⛔ Files ignored due to path filters (12)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/composer.lock is excluded by !**/*.lock
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-checkin-attended.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-checkin-pending.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-checkin-registered.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-compose-email.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-event-configuration.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-user-follows-link.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/qrcode-view-email.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/images/screenshot.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/example_image.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/example_svg.png is excluded by !**/*.png
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/octocat.png is excluded by !**/*.png
📒 Files selected for processing (107)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Hook.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Upgrader.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/LICENSE.txt (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/README.md (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/api/v3/Qrcodecheckin/Checkin.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/composer.json (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/info.xml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/l10n/net.ourpowerbase.qrcodecheckin.pot (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/phpunit.xml.dist (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.css (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/settings/qrcodecheckin.setting.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/templates/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.tpl (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/templates/qrcode-checkin-event-options.tpl (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/test.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/tests/phpunit/api/v3/Qrcodecheckin/CheckinTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/tests/phpunit/bootstrap.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/autoload.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.github/FUNDING.yml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.gitignore (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.scrutinizer.yml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.travis.yml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/LICENSE (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/README.md (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/composer.json (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/custom_output.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/fpdf.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/html.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/image.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imageWithText.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imagick.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/svg.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/text.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpdoc.xml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpmd.xml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpunit.xml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/index.html (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/qrcode.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Byte.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Kanji.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Number.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRString.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptions.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/MaskPatternTesterTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/QRMatrixTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Helpers/BitBufferTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.gitignore (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.scrutinizer.yml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.travis.yml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/LICENSE (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/README.md (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/composer.json (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/examples/advanced.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/examples/simple.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/phpmd.xml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/phpunit.xml (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/ContainerTest.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestContainer.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestOptionsTrait.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/ClassLoader.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/InstalledVersions.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/LICENSE (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_classmap.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_namespaces.php (1 hunks)
⛔ Files not processed due to max files limit (7)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_psr4.php
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_real.php
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_static.php
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/installed.json
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/installed.php
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/platform_check.php
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/xml/Menu/qrcodecheckin.xml
🧰 Additional context used
🧠 Learnings (58)
📓 Common learnings
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: tarunnjoshi
PR: ColoredCow/goonj#1230
File: wp-content/civi-extensions/civirazorpay/cli/update-recurring-contact-info.php:115-117
Timestamp: 2025-05-27T07:31:44.131Z
Learning: For one-time scripts in the Goonj project, tarunnjoshi prefers to keep hardcoded values rather than creating shared constants or configuration files, prioritizing simplicity over strict adherence to DRY principle to avoid over-engineering temporary code.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.css (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/composer.json (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/test.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.scrutinizer.yml (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/templates/qrcode-checkin-event-options.tpl (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.travis.yml (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/image.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpmd.xml (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imageWithText.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/svg.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/text.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Hook.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.travis.yml (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/custom_output.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/html.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/templates/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.tpl (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/fpdf.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/api/v3/Qrcodecheckin/Checkin.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/index.html (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imagick.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/settings/qrcodecheckin.setting.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Upgrader.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/README.md (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptions.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRString.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/qrcode.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/README.md (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
🧬 Code Graph Analysis (29)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/test.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (2)
  • QRCode (32-310)
  • render (124-126)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Kanji.php (1)
  • Kanji (22-70)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
  • QRCodeDataException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php (1)
  • DatainterfaceTestAbstract (19-65)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imageWithText.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (2)
  • QRCode (32-310)
  • getMatrix (136-155)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptions.php (1)
  • QROptions (59-61)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php (1)
  • QRImageWithText (25-104)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Number.php (1)
  • Number (22-82)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
  • QRCodeDataException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php (1)
  • DatainterfaceTestAbstract (19-65)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestContainer.php (2)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php (1)
  • SettingsContainerAbstract (19-172)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestOptionsTrait.php (1)
  • TestOptionsTrait (29-31)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php (2)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/custom_output.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (3)
  • QRCode (32-310)
  • getMatrix (136-155)
  • render (124-126)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptions.php (1)
  • QROptions (59-61)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php (1)
  • MyCustomOutput (17-36)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php (1)
  • AlphaNum (22-65)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
  • QRCodeDataException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php (1)
  • DatainterfaceTestAbstract (19-65)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/autoload.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_real.php (1)
  • ComposerAutoloaderInitd086978d92d734dbe94c03fa3fbf93ff (5-57)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Kanji.php (4)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (1)
  • QRDataAbstract (24-351)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
  • QRCodeDataException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php (1)
  • put (45-52)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php (3)
  • Polynomial (22-184)
  • gexp (172-182)
  • glog (158-165)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php (1)
  • QRTestAbstract (18-72)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/examples/advanced.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php (1)
  • SettingsContainerAbstract (19-172)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/api/v3/Qrcodecheckin/Checkin.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (1)
  • CRM_Qrcodecheckin_ExtensionUtil (9-78)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php (1)
  • QRCodeTest (22-140)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestOptionsTrait.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/ContainerTest.php (1)
  • testConstruct (20-34)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (1)
  • QRImage (31-208)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php (2)
  • QROutputTestAbstract (22-71)
  • setOutputInterface (53-56)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php (4)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (1)
  • QRDataAbstract (24-351)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php (1)
  • put (45-52)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
  • QRCodeDataException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php (3)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (2)
  • QRMatrix (23-733)
  • matrix (228-245)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (2)
  • QROutputAbstract (23-130)
  • saveToFile (106-113)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/settings/qrcodecheckin.setting.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (1)
  • CRM_Qrcodecheckin_ExtensionUtil (9-78)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php (4)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php (1)
  • QRCodeOutputException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (2)
  • QRImage (31-208)
  • dumpImage (147-172)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (2)
  • matrix (228-245)
  • setLogoSpace (585-635)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (1)
  • saveToFile (106-113)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Upgrader.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (1)
  • CRM_Qrcodecheckin_ExtensionUtil (9-78)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/ContainerTest.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestContainer.php (1)
  • TestContainer (25-29)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRString.php (1)
  • json (72-74)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (6)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php (4)
  • BitBuffer (17-75)
  • clear (32-37)
  • put (45-52)
  • putBit (59-73)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php (6)
  • Polynomial (22-184)
  • setNum (90-105)
  • gexp (172-182)
  • multiply (112-127)
  • getNum (80-82)
  • mod (134-150)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (11)
  • version (250-252)
  • maskPattern (264-266)
  • QRMatrix (23-733)
  • setFinderPattern (345-373)
  • setSeparators (380-402)
  • setAlignmentPattern (410-432)
  • setTimingPattern (440-455)
  • setVersionNumber (464-481)
  • setFormatInfo (491-522)
  • setDarkModule (334-338)
  • mapData (647-698)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)
  • QRCodeDataException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php (1)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (5)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (2)
  • QRMatrix (23-733)
  • matrix (228-245)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (2)
  • QROutputAbstract (23-130)
  • saveToFile (106-113)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php (1)
  • QRCodeOutputException (17-17)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php (2)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCode.php (1)
  • QRCode (32-310)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)
  • QRCodeException (15-15)
🪛 PHPMD (2.15.0)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestContainer.php

28-28: Avoid unused private fields such as '$test3'. (Unused Code Rules)

(UnusedPrivateField)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php

23-23: Avoid unused parameters such as '$file'. (Unused Code Rules)

(UnusedFormalParameter)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php

85-91: Avoid unused private methods such as 'getDisplayName'. (Unused Code Rules)

(UnusedPrivateMethod)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php

87-87: Avoid unused parameters such as '$config'. (Unused Code Rules)

(UnusedFormalParameter)


147-147: Avoid unused local variables such as '$key'. (Unused Code Rules)

(UnusedLocalVariable)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php

192-192: Avoid unused local variables such as '$y'. (Unused Code Rules)

(UnusedLocalVariable)


193-193: Avoid unused local variables such as '$x'. (Unused Code Rules)

(UnusedLocalVariable)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php

253-253: Avoid unused parameters such as '$job'. (Unused Code Rules)

(UnusedFormalParameter)


253-253: Avoid unused parameters such as '$context'. (Unused Code Rules)

(UnusedFormalParameter)


277-277: Avoid unused local variables such as '$query'. (Unused Code Rules)

(UnusedLocalVariable)


278-278: Avoid unused local variables such as '$absolute'. (Unused Code Rules)

(UnusedLocalVariable)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php

622-622: Avoid unused local variables such as '$val'. (Unused Code Rules)

(UnusedLocalVariable)

🪛 LanguageTool
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/LICENSE.txt

[style] ~22-~22: Consider using only “Public” to avoid wordiness.
Context: ...and change the works. By contrast, our General Public Licenses are intended to guarantee your...

(GENERAL_XX)


[style] ~27-~27: Consider using only “Public” to avoid wordiness.
Context: ...e referring to freedom, not price. Our General Public Licenses are designed to make sure that...

(GENERAL_XX)


[style] ~33-~33: Consider using only “Public” to avoid wordiness.
Context: ...hese things. Developers that use our General Public Licenses protect your rights with two s...

(GENERAL_XX)


[style] ~420-~420: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ...ight holder, and you cure the violation prior to 30 days after your receipt of the notic...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[style] ~431-~431: Consider a more concise word here.
Context: ...are not required to accept this License in order to receive or run a copy of the Program. ...

(IN_ORDER_TO_PREMIUM)


[style] ~433-~433: To make your writing clearer, consider a shorter, more direct phrase.
Context: ...tion of a covered work occurring solely as a consequence of using peer-to-peer transmission to rece...

(AS_A_CONSEQUENCE_OF)


[uncategorized] ~522-~522: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...conveying the work, and under which the third party grants, to any of the parties who would...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[style] ~528-~528: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ...nt, or that patent license was granted, prior to 28 March 2007. Nothing in this Licen...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[style] ~539-~539: ‘So as to’ expresses purpose and is used in formal texts. Consider using “to”.
Context: ...e. If you cannot convey a covered work so as to satisfy simultaneously your obligations...

(SO_AS_TO)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/README.md

[grammar] ~1-~1: Ensure spelling is correct
Context: # QR Code Checkin QRCode Checkin allows you to send an em...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~3-~3: Ensure spelling is correct
Context: ...ws you to send an email that contains a scanable code to the registered participants for...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~26-~26: Consider using “email”.
Context: ...event and place them in a group. Then, send an email to the group, that includes the QR Code im...

(SEND_AN_EMAIL)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/README.md

[style] ~122-~122: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...e` held only boolean matrix values that only allowed to determine whether a module w...

(ADVERB_REPETITION_PREMIUM)


[locale-violation] ~190-~190: In American English, “take a look” is more commonly used.
Context: ...erface by extending QROutputAbstract. Have a look at the [built-in output modules](https:...

(HAVE_A_LOOK)


[grammar] ~341-~341: Ensure spelling is correct
Context: ... used mask pattern size() | int | the absoulute size of the matrix, including quiet zon...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~390-~390: Ensure spelling is correct
Context: ...n/php-httpinterface) - a PSR-7/15/17/18 implemetation - [php-database](https://github.com/chi...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🪛 Biome (1.9.4)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js

[error] 17-17: Shouldn't redeclare 'match'. Consider to delete it or rename it.

'match' is defined here:

(lint/suspicious/noRedeclare)

🪛 markdownlint-cli2 (0.17.2)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/README.md

37-37: Hard tabs
Column: 1

(MD010, no-hard-tabs)


38-38: Hard tabs
Column: 1

(MD010, no-hard-tabs)


39-39: Hard tabs
Column: 1

(MD010, no-hard-tabs)


40-40: Hard tabs
Column: 1

(MD010, no-hard-tabs)


60-60: Hard tabs
Column: 1

(MD010, no-hard-tabs)


61-61: Hard tabs
Column: 1

(MD010, no-hard-tabs)


91-91: Hard tabs
Column: 1

(MD010, no-hard-tabs)


92-92: Hard tabs
Column: 1

(MD010, no-hard-tabs)


93-93: Hard tabs
Column: 1

(MD010, no-hard-tabs)


94-94: Hard tabs
Column: 1

(MD010, no-hard-tabs)


95-95: Hard tabs
Column: 1

(MD010, no-hard-tabs)


96-96: Hard tabs
Column: 1

(MD010, no-hard-tabs)


97-97: Hard tabs
Column: 1

(MD010, no-hard-tabs)


98-98: Hard tabs
Column: 1

(MD010, no-hard-tabs)


99-99: Hard tabs
Column: 1

(MD010, no-hard-tabs)


100-100: Hard tabs
Column: 1

(MD010, no-hard-tabs)


101-101: Hard tabs
Column: 1

(MD010, no-hard-tabs)


102-102: Hard tabs
Column: 1

(MD010, no-hard-tabs)


103-103: Hard tabs
Column: 1

(MD010, no-hard-tabs)


104-104: Hard tabs
Column: 1

(MD010, no-hard-tabs)


108-108: Hard tabs
Column: 1

(MD010, no-hard-tabs)


114-114: Hard tabs
Column: 1

(MD010, no-hard-tabs)


115-115: Hard tabs
Column: 1

(MD010, no-hard-tabs)


116-116: Hard tabs
Column: 1

(MD010, no-hard-tabs)


117-117: Hard tabs
Column: 1

(MD010, no-hard-tabs)


122-122: Hard tabs
Column: 1

(MD010, no-hard-tabs)


142-142: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe

(MD055, table-pipe-style)


142-142: Table column count
Expected: 3; Actual: 2; Too few cells, row will be missing data

(MD056, table-column-count)


143-143: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe

(MD055, table-pipe-style)


143-143: Table column count
Expected: 3; Actual: 2; Too few cells, row will be missing data

(MD056, table-column-count)


145-145: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe

(MD055, table-pipe-style)


145-145: Table column count
Expected: 3; Actual: 2; Too few cells, row will be missing data

(MD056, table-column-count)


146-146: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe

(MD055, table-pipe-style)


146-146: Table column count
Expected: 3; Actual: 2; Too few cells, row will be missing data

(MD056, table-column-count)


148-148: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe

(MD055, table-pipe-style)


148-148: Table column count
Expected: 3; Actual: 2; Too few cells, row will be missing data

(MD056, table-column-count)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/README.md

28-28: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


29-29: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


30-30: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


44-44: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


45-45: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


46-46: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


79-79: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/README.md

39-39: Unordered list indentation
Expected: 4; Actual: 5

(MD007, ul-indent)


40-40: Unordered list indentation
Expected: 4; Actual: 5

(MD007, ul-indent)


41-41: Unordered list indentation
Expected: 4; Actual: 5

(MD007, ul-indent)


51-51: Hard tabs
Column: 1

(MD010, no-hard-tabs)


52-52: Hard tabs
Column: 1

(MD010, no-hard-tabs)


53-53: Hard tabs
Column: 1

(MD010, no-hard-tabs)


54-54: Hard tabs
Column: 1

(MD010, no-hard-tabs)


68-68: Hard tabs
Column: 1

(MD010, no-hard-tabs)


69-69: Hard tabs
Column: 1

(MD010, no-hard-tabs)


80-80: Hard tabs
Column: 1

(MD010, no-hard-tabs)


81-81: Hard tabs
Column: 1

(MD010, no-hard-tabs)


82-82: Hard tabs
Column: 1

(MD010, no-hard-tabs)


101-101: Hard tabs
Column: 1

(MD010, no-hard-tabs)


103-103: Hard tabs
Column: 1

(MD010, no-hard-tabs)


104-104: Hard tabs
Column: 1

(MD010, no-hard-tabs)


105-105: Hard tabs
Column: 1

(MD010, no-hard-tabs)


107-107: Hard tabs
Column: 1

(MD010, no-hard-tabs)


108-108: Hard tabs
Column: 1

(MD010, no-hard-tabs)


109-109: Hard tabs
Column: 1

(MD010, no-hard-tabs)


110-110: Hard tabs
Column: 1

(MD010, no-hard-tabs)


111-111: Hard tabs
Column: 1

(MD010, no-hard-tabs)


112-112: Hard tabs
Column: 1

(MD010, no-hard-tabs)


113-113: Hard tabs
Column: 1

(MD010, no-hard-tabs)


115-115: Hard tabs
Column: 1

(MD010, no-hard-tabs)


150-150: Hard tabs
Column: 1

(MD010, no-hard-tabs)


151-151: Hard tabs
Column: 1

(MD010, no-hard-tabs)


152-152: Hard tabs
Column: 1

(MD010, no-hard-tabs)


153-153: Hard tabs
Column: 1

(MD010, no-hard-tabs)


154-154: Hard tabs
Column: 1

(MD010, no-hard-tabs)


155-155: Hard tabs
Column: 1

(MD010, no-hard-tabs)


156-156: Hard tabs
Column: 1

(MD010, no-hard-tabs)


157-157: Hard tabs
Column: 1

(MD010, no-hard-tabs)


158-158: Hard tabs
Column: 1

(MD010, no-hard-tabs)


159-159: Hard tabs
Column: 1

(MD010, no-hard-tabs)


160-160: Hard tabs
Column: 1

(MD010, no-hard-tabs)


161-161: Hard tabs
Column: 1

(MD010, no-hard-tabs)


162-162: Hard tabs
Column: 1

(MD010, no-hard-tabs)


163-163: Hard tabs
Column: 1

(MD010, no-hard-tabs)


164-164: Hard tabs
Column: 1

(MD010, no-hard-tabs)


165-165: Hard tabs
Column: 1

(MD010, no-hard-tabs)


166-166: Hard tabs
Column: 1

(MD010, no-hard-tabs)


167-167: Hard tabs
Column: 1

(MD010, no-hard-tabs)


168-168: Hard tabs
Column: 1

(MD010, no-hard-tabs)


169-169: Hard tabs
Column: 1

(MD010, no-hard-tabs)


170-170: Hard tabs
Column: 1

(MD010, no-hard-tabs)


171-171: Hard tabs
Column: 1

(MD010, no-hard-tabs)


172-172: Hard tabs
Column: 1

(MD010, no-hard-tabs)


173-173: Hard tabs
Column: 1

(MD010, no-hard-tabs)


178-178: Hard tabs
Column: 1

(MD010, no-hard-tabs)


179-179: Hard tabs
Column: 1

(MD010, no-hard-tabs)


184-184: Hard tabs
Column: 1

(MD010, no-hard-tabs)


185-185: Hard tabs
Column: 1

(MD010, no-hard-tabs)


195-195: Hard tabs
Column: 1

(MD010, no-hard-tabs)


196-196: Hard tabs
Column: 1

(MD010, no-hard-tabs)


197-197: Hard tabs
Column: 1

(MD010, no-hard-tabs)


198-198: Hard tabs
Column: 1

(MD010, no-hard-tabs)


199-199: Hard tabs
Column: 1

(MD010, no-hard-tabs)


200-200: Hard tabs
Column: 1

(MD010, no-hard-tabs)


202-202: Hard tabs
Column: 1

(MD010, no-hard-tabs)


203-203: Hard tabs
Column: 1

(MD010, no-hard-tabs)


204-204: Hard tabs
Column: 1

(MD010, no-hard-tabs)


205-205: Hard tabs
Column: 1

(MD010, no-hard-tabs)


207-207: Hard tabs
Column: 1

(MD010, no-hard-tabs)


208-208: Hard tabs
Column: 1

(MD010, no-hard-tabs)


209-209: Hard tabs
Column: 1

(MD010, no-hard-tabs)


211-211: Hard tabs
Column: 1

(MD010, no-hard-tabs)


212-212: Hard tabs
Column: 1

(MD010, no-hard-tabs)


213-213: Hard tabs
Column: 1

(MD010, no-hard-tabs)


214-214: Hard tabs
Column: 1

(MD010, no-hard-tabs)


215-215: Hard tabs
Column: 1

(MD010, no-hard-tabs)


217-217: Hard tabs
Column: 1

(MD010, no-hard-tabs)


218-218: Hard tabs
Column: 1

(MD010, no-hard-tabs)


224-224: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


226-226: Hard tabs
Column: 1

(MD010, no-hard-tabs)


228-228: Hard tabs
Column: 1

(MD010, no-hard-tabs)


235-235: Hard tabs
Column: 1

(MD010, no-hard-tabs)


237-237: Hard tabs
Column: 1

(MD010, no-hard-tabs)


243-243: Hard tabs
Column: 1

(MD010, no-hard-tabs)


244-244: Hard tabs
Column: 1

(MD010, no-hard-tabs)


245-245: Hard tabs
Column: 1

(MD010, no-hard-tabs)


246-246: Hard tabs
Column: 1

(MD010, no-hard-tabs)


247-247: Hard tabs
Column: 1

(MD010, no-hard-tabs)


248-248: Hard tabs
Column: 1

(MD010, no-hard-tabs)


256-256: Hard tabs
Column: 1

(MD010, no-hard-tabs)


275-275: Multiple spaces after hash on atx style heading

(MD019, no-multiple-space-atx)


276-276: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


286-286: Multiple spaces after hash on atx style heading

(MD019, no-multiple-space-atx)


287-287: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


301-301: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


317-317: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe

(MD055, table-pipe-style)


317-317: Table column count
Expected: 5; Actual: 4; Too few cells, row will be missing data

(MD056, table-column-count)


334-334: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


348-348: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


375-375: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (70)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.github/FUNDING.yml (1)

1-2: No functional impact – safe to keep or drop

The funding link is harmless and does not affect runtime behaviour.
Consider stripping misc meta-files from vendor trees when committing to keep the repository lean, but not a blocker.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/LICENSE (1)

1-21: Double-check AGPL-compatibility before shipping

The bundled QR-code library is MIT-licensed, which is generally compatible with your extension’s AGPL-3.0.
Ensure:

  1. Copyright & license notices remain intact in redistributed builds.
  2. Down-stream builds (e.g. WordPress ZIP) still contain this file.

If your CI strips vendor licences, you may inadvertently violate §4 of the AGPL.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/.scrutinizer.yml (1)

1-5: No issues – vendor analysis scope correctly minimized

Excluding examples/, tests/, and vendor/ for Scrutinizer is appropriate and prevents noise in CI reports.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_namespaces.php (1)

1-9: Generated file – no action required

Composer-generated autoload map is as expected (empty PSR-0 set).

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/.gitignore (1)

1-5: Standard ignore rules – looks good

Keeping build artefacts and IDE files out of VCS is sensible.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QRCodeException.php (1)

13-15: Vendor class – nothing to flag

Thin wrapper over \Exception is typical for library-specific errors; vendor code should remain untouched.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/test.php (1)

5-5: Guard against missing vendor dir

require 'vendor/autoload.php' will fatally error if someone installs the extension via CiviCRM’s usual download mechanism (zip).
Add a defensive existence check to avoid WSODs:

-$loader = require 'vendor/autoload.php';
+if(!file_exists(__DIR__.'/vendor/autoload.php')){
+    throw new \RuntimeException('Composer autoloader not found; run `composer install`.');
+}
+$loader = require __DIR__.'/vendor/autoload.php';
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/LICENSE (1)

1-22: License file included – looks good

No action required; keeping upstream licenses in the repo ensures compliance.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php (1)

13-17: Minimal exception class looks good

Straightforward extension of the library’s base exception; no issues spotted.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php (1)

13-17: LGTM – mirrors the pattern used elsewhere in the lib

Nothing to add.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/autoload_classmap.php (1)

1-10: Acceptable – standard Composer artefact

Autoload map is generated code; checksum matches upstream layout. No action required.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/composer.json (1)

22-28: Library still targets PHP 7.2

The min-version "php": "^7.2" is fine, but if the main application is on PHP 8.x and we rely on PHP 8-only features elsewhere, composer will not catch that mismatch.
Consider adding "php": ">=8.0" in the root composer.json to enforce a consistent runtime.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Hook.php (1)

8-25: LGTM! Clean hook implementation.

The hook class follows CiviCRM conventions correctly with proper documentation, parameter handling, and hook invocation pattern.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php (1)

17-44: LGTM! Vendor test file follows proper structure.

This third-party library test correctly extends the abstract base class and properly tests both valid alphanumeric encoding and exception handling for illegal characters.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/imageWithText.php (1)

13-34: LGTM! Well-structured example demonstrating library usage.

This vendor example correctly demonstrates QR code generation with text overlay using proper namespace imports, option configuration, and output handling.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php (1)

17-44: LGTM! Consistent test structure for numeric encoding.

This vendor test file properly follows the established pattern for data interface testing, with appropriate test data, expected output validation, and exception handling.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php (1)

1-50: Well-structured test class following PHPUnit best practices.

This vendor library test file properly validates Kanji character encoding for QR codes, including appropriate exception testing for illegal characters. The test structure follows established patterns and uses proper assertions.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/text.php (1)

19-63: Well-structured QR code demonstration.

The example effectively shows both basic and advanced usage patterns for text-based QR code generation, including comprehensive module value customization options.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/phpunit.xml.dist (1)

2-2: PHPUnit configuration follows best practices.

The configuration properly enables error conversion, sets up test discovery, and integrates with CiviCRM's test framework appropriately.

Also applies to: 13-17

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/examples/simple.php (1)

1-31: Clear and effective settings container demonstration.

This example properly demonstrates the key features of the SettingsContainerAbstract class, including property management, JSON serialization, and handling of undefined properties.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/MaskPatternTesterTest.php (1)

23-27: Focused test providing essential coverage for mask pattern evaluation.

The test properly validates the penalty scoring mechanism used in QR code mask pattern selection, which is critical for generating valid QR codes.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/LICENSE.txt (1)

1-668: License file is appropriate.

This is a standard AGPLv3 license file. No code review required for legal documents.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Byte.php (1)

22-47: LGTM: Well-structured data encoding implementation.

This class demonstrates good adherence to software development best practices:

  • Single responsibility principle (handles only byte data encoding)
  • Clean inheritance from abstract base class
  • Focused write method with clear logic
  • Proper use of class constants and properties

The implementation is readable and maintainable.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php (1)

19-42: LGTM: Well-structured test class following best practices.

This test class demonstrates excellent adherence to testing best practices:

  • Single responsibility (focused on testing Polynomial class only)
  • Clear, descriptive test method names
  • Comprehensive coverage including edge cases and exception scenarios
  • Proper use of PHPUnit assertions and expectation methods
  • Clean setup method with appropriate test fixture initialization

The test coverage for both successful operations and error conditions is particularly good.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Number.php (2)

37-56: Numeric encoding logic follows QR code specification correctly.

The implementation properly handles:

  • Groups of 3 digits encoded in 10 bits
  • Remaining 1 digit encoded in 4 bits
  • Remaining 2 digits encoded in 7 bits

This aligns with the QR code specification for numeric mode encoding.


64-80: Robust input validation with appropriate error handling.

The parseInt method properly validates each character against the numeric character map and throws a descriptive exception for invalid input. The bit manipulation logic correctly converts ASCII digits to numeric values.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/fpdf.php (2)

9-9: Hardcoded URL is appropriate for example script.

Using a fixed YouTube URL as test data is acceptable practice for demonstration purposes in example scripts.


45-47: Direct PDF output approach is suitable for examples.

Setting the content-type header and echoing the rendered output directly is appropriate for a simple example demonstrating FPDF integration.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php (1)

19-35: Good test data selection for byte encoding validation.

Using a Unicode string '[¯\_(ツ)_/¯]' effectively tests the byte encoding functionality with multi-byte characters. The expected byte array provides comprehensive validation of the encoding output.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/info.xml (1)

2-36: Well-structured CiviCRM extension descriptor.

The extension metadata is properly configured with:

  • Appropriate licensing and maintainer information
  • Correct classloader setup for PSR-0 and PSR-4 namespaces
  • Standard CiviCRM mixins for menu, settings, and Smarty integration
  • Proper upgrader class declaration

This follows CiviCRM extension development best practices.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php (3)

24-32: Good extension check in setUp method!

Properly checking for the imagick extension availability before running tests prevents false failures.


34-43: Solid test implementation for image output!

The test appropriately verifies output consistency by comparing the dumped content with the cached file.


58-64: Well-structured resource return test!

Properly verifies that the dump method returns an Imagick instance when returnResource is enabled.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/composer.json (1)

26-30: Outdated PHP version requirement in vendor/chillerlan/php-qrcode/composer.json

The composer.json currently requires PHP ^7.2, which reached end-of-life on November 30, 2020 (current stable is PHP 8.4.10 as of July 3, 2025). Please bump this to a maintained version to keep receiving security updates.

– File:
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/composer.json
Lines: 26-30

Suggested diff:

-   "php": "^7.2",
+   "php": "^7.4 || ^8.0",

Likely an incorrect or invalid review comment.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php (1)

106-113: Good error handling in saveToFile method!

The method properly checks directory writability before attempting to write and throws a descriptive exception on failure.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php (1)

17-56: Well-structured test implementation.

The test class follows PHPUnit best practices with proper data providers, focused test methods, and appropriate assertions for validating QR string output functionality.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRString.php (1)

22-76: Clean implementation following established patterns.

The class properly extends the abstract base, implements required methods, and maintains clear separation between text and JSON output formats. The code follows the library's established patterns and conventions.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/api/v3/Qrcodecheckin/Checkin.php (1)

26-30: Document the security implications of permission bypass.

The comments mention bypassing normal permissions, which is a significant security consideration that should be thoroughly documented and reviewed to ensure it doesn't create unintended access patterns.

Consider documenting this permission model in a security policy or design document to ensure the bypass is intentional and properly scoped.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/examples/advanced.php (1)

1-47: Example code demonstrates good patterns.

This example effectively demonstrates the settings container's trait-based constructor mechanism and shows practical usage patterns. The code is well-documented and follows good practices for an example file.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/ContainerTest.php (1)

1-105: Comprehensive test coverage with good practices.

The test class demonstrates good testing practices:

  • Clear test method names describing what's being tested
  • Proper use of assertions
  • Exception testing with expectException()
  • Testing both positive and negative cases

The tests provide good coverage of the container functionality including construction, property access, serialization, and error conditions.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php (1)

45-52: LGTM! Well-implemented fluent interface method.

The put() method correctly implements bit manipulation logic and maintains the fluent interface pattern for method chaining.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/Kanji.php (2)

22-39: LGTM! Well-structured class with proper inheritance.

The class correctly extends QRDataAbstract, defines appropriate constants for the Kanji data mode, and implements the required abstract methods. The length calculation using mb_strlen with SJIS encoding is appropriate for double-byte Kanji characters.


44-68: LGTM! Robust implementation with proper error handling.

The write() method correctly:

  • Validates Kanji character ranges according to Shift JIS specification
  • Provides clear error messages with character positions
  • Handles the encoding transformation properly
  • Ensures all characters are processed as pairs

The exception handling ensures data integrity and provides debugging information.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php (2)

18-32: LGTM! Well-designed abstract test utility class.

The class provides a clean foundation for reflection-based testing with proper initialization in setUp(). The use of a protected $FQCN property allows subclasses to specify their target class for reflection.


34-69: LGTM! Excellent reflection utilities for internal testing.

The helper methods provide clean access to protected/private members:

  • getMethod() and getProperty() properly set accessibility
  • setProperty() provides convenient property manipulation
  • Type hints improve code clarity and IDE support

This follows testing best practices for accessing internal class behavior.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/index.html (1)

141-142: Consider security implications of external CDN dependencies.

Loading JavaScript libraries from external CDNs introduces potential security risks and availability concerns.

Consider hosting these libraries locally or using Subresource Integrity (SRI) hashes:

-<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.3/prototype.js" ></script >
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.js" ></script >
+<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.3/prototype.js" 
+        integrity="sha384-..." crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.js" 
+        integrity="sha384-..." crossorigin="anonymous"></script>
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php (1)

1-80: Well-structured test coverage!

The test class thoroughly validates QROptions behavior including boundary conditions, clamping logic, and exception handling.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php (1)

67-67: Escape moduleValues before outputting in QRMarkup.php

Even though the library’s public endpoint sanitizes module values to 6-digit hex codes, it’s best practice to always escape dynamic data at the point of output. In vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php, wrap the color value in htmlspecialchars (or a dedicated CSS-escaping function) to guard against any unexpected input.

• File: vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php
– Line 67 and likewise line 131:

-   $html .= '<span style="background: '.$this->moduleValues[$M_TYPE].';"></span>';
+   $color = htmlspecialchars((string)$this->moduleValues[$M_TYPE], ENT_QUOTES, 'UTF-8');
+   $html .= '<span style="background: '.$color.';"></span>';

This ensures that even if moduleValues were ever set from untrusted data, you won’t introduce an XSS vector.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/README.md (1)

1-154: Vendor documentation file - no review needed.

This is documentation for a third-party dependency (chillerlan/php-settings-container) and should not be modified as part of this PR. The static analysis formatting issues are pre-existing in the vendor package.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptions.php (1)

59-61: Clean implementation following established patterns.

The QROptions class properly extends SettingsContainerAbstract and uses the trait pattern for composition. The extensive @property documentation provides excellent IDE support and developer experience.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/public/qrcode.php (1)

46-53: Improve input validation and sanitization.

The current validation only checks hex color format but doesn't sanitize other potential malicious input.

Add comprehensive input validation:

 $moduleValues = array_map(function($v){
+    // Sanitize input first
+    $v = filter_var($v, FILTER_SANITIZE_STRING);
     if(preg_match('/[a-f\d]{6}/i', $v) === 1){
         return in_array($_POST['output_type'], ['png', 'jpg', 'gif'])
             ? array_map('hexdec', str_split($v, 2))
             : '#'.$v ;
     }
     return null;
 }, $moduleValues);

Likely an incorrect or invalid review comment.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/InstalledVersions.php (1)

1-237: Auto-generated Composer file - no review needed.

This file is automatically generated by Composer and should not be manually modified. It contains package version metadata for dependency management.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php (1)

1-104: Clean interface design with proper documentation.

The SettingsContainerInterface follows interface segregation principle well and provides a clear contract for settings containers. Good use of JsonSerializable extension.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php (1)

45-62: Good test coverage for markup output validation.

The test properly validates output by comparing with expected cached content, handles different output types, and correctly strips headers/footers.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php (1)

103-115: Excellent test for custom output interface.

Good coverage of custom output functionality with proper configuration and expected output validation.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.civix.php (2)

3-3: Auto-generated file - modifications may be lost.

This file is auto-generated by Civix. Any manual changes might be overwritten during future code generation.

Ensure any customizations are made in appropriate non-generated files instead.


87-98: Unused parameter is part of hook signature.

The $config parameter appears unused but is required by the CiviCRM hook signature. The static analysis warning can be safely ignored.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Data/QRMatrixTest.php (1)

1-260: Well-structured test coverage!

The test file provides comprehensive coverage for the QRMatrix class with clear test method names and good edge case handling.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/composer/ClassLoader.php (1)

1-445: Vendor file - no review needed.

This is Composer's generated autoloader and should not be modified.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Output/QRImage.php (1)

54-82: Robust validation and error handling

The constructor properly checks for the GD extension, and setModuleValues() validates RGB color arrays with appropriate defaults. Good defensive programming.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php (1)

285-376: Well-implemented validation methods

The setter methods properly validate and clamp values:

  • Version numbers are kept within valid ranges
  • ECC level validation throws descriptive exceptions
  • RGB values are validated and clamped to 0-255

Excellent defensive programming practices.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php (2)

128-138: Secure hash generation implementation

Good use of SHA-256 with multiple entropy sources (participant ID, user hash, and site key) to generate secure, unique codes.


253-255: Hook implementation follows CiviCRM conventions

The function correctly implements the hook_civicrm_tokenValues signature. The unused parameters are required by CiviCRM's hook interface.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php (1)

102-251: Proper QR code data encoding implementation

The data encoding methods correctly implement the QR code specification:

  • Kanji mode data is properly converted to SJIS encoding
  • Bit buffer writing includes proper mode indicators, length bits, and padding patterns (0xEC, 0x11)
  • Buffer overflow protection prevents data corruption

Well-implemented according to QR code standards.

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php (6)

25-172: QR code specification data is correctly implemented.

The class constants and pattern lookup tables properly implement the QR code standard specifications for alignment patterns, version patterns, and format patterns across all supported versions and error correction levels.


207-221: Constructor properly validates inputs and initializes matrix.

The validation logic correctly ensures QR version is within the valid range (1-40) and ECC level is supported. The module count calculation follows the QR code standard formula.


228-326: Matrix manipulation methods are well-implemented.

The bit-shifting approach to store both module type and value in a single integer is an efficient design. The boolean conversion in the matrix() method provides flexibility for different output formats.


334-455: QR code pattern placement methods correctly implement standards.

The finder pattern, separator, alignment pattern, and timing pattern methods properly implement the QR code structural elements according to the specification. The positioning logic and pattern drawing are accurate.


647-698: Data mapping algorithm correctly implements QR code specification.

The complex zigzag data placement pattern and mask application logic properly follows the QR code standard for mapping binary data onto the matrix while avoiding functional patterns.


715-731: Mask pattern implementations correctly follow QR code standards.

The eight mask pattern formulas are accurately implemented using closures, providing both correct functionality and good performance for the data mapping process.

Comment on lines +13 to +18
<rule ref="rulesets/codesize.xml/CyclomaticComplexity">
<priority>1</priority>
<properties>
<property name="maximum" value="200" />
</properties>
</rule>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Cyclomatic-Complexity threshold of 200 neuters the rule

Setting the limit this high effectively turns the rule off. Real-world defaults hover around 10–20; even 50 is generous for generated code. Keeping it at 200 forfeits the early-warning benefit and hides genuine hotspots.

-            <property name="maximum" value="200" />
+            <!-- A more realistic ceiling; raise only when strongly justified -->
+            <property name="maximum" value="20" />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<rule ref="rulesets/codesize.xml/CyclomaticComplexity">
<priority>1</priority>
<properties>
<property name="maximum" value="200" />
</properties>
</rule>
<rule ref="rulesets/codesize.xml/CyclomaticComplexity">
<priority>1</priority>
<properties>
<!-- A more realistic ceiling; raise only when strongly justified -->
<property name="maximum" value="20" />
</properties>
</rule>
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/phpmd.xml
around lines 13 to 18, the CyclomaticComplexity rule's maximum threshold is set
to 200, which effectively disables the rule. Lower this value to a more
reasonable number such as between 10 and 20 to enable meaningful complexity
checks and catch potential hotspots early.

Comment on lines +9 to +10
$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
echo '<img src="'.(new QRCode)->render($data).'" />';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

⚠️ Potential issue

Remove rick-roll demo & keep example code out of distributable source

The file hard-codes a public YouTube URL and produces raw HTML.
Shipping such demo/testing artefacts inside the extension:

  • bloats the production package,
  • exposes an irrelevant external link,
  • risks accidental execution in prod.

Either delete the file altogether or move it under a proper examples/ (or tests/) directory and exclude it from the extension’s release package.

- $data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
- echo '<img src="'.(new QRCode)->render($data).'" />';
+ // Example only – do **NOT** ship in production
+ // $data = 'https://example.com';
+ // echo '<img src="'.(new QRCode)->render($data).'" />';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
echo '<img src="'.(new QRCode)->render($data).'" />';
// Example only – do **NOT** ship in production
// $data = 'https://example.com';
// echo '<img src="'.(new QRCode)->render($data).'" />';
🤖 Prompt for AI Agents
In wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/test.php at
lines 9-10, the code includes a hard-coded YouTube URL used for demo purposes,
which should not be part of the distributable source. To fix this, either delete
this test.php file entirely or move it to a dedicated examples/ or tests/
directory that is excluded from the production release package to avoid bloating
the extension and exposing irrelevant external links.

Comment on lines +13 to +14
CRM.$('tr#qrcode-enabled-event-tr').insertAfter('tr.crm-event-manage-eventinfo-form-block-is_active');
</script>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Wrap DOM manipulation in a ready-handler

If this partial is included in the <head> or anywhere before the target rows are in the DOM, the call will silently fail. Guard with CRM.$(function(){ … }) for robustness across templates and CiviCRM versions.

-CRM.$('tr#qrcode-enabled-event-tr').insertAfter('tr.crm-event-manage-eventinfo-form-block-is_active');
+CRM.$(function () {
+  CRM.$('tr#qrcode-enabled-event-tr')
+    .insertAfter('tr.crm-event-manage-eventinfo-form-block-is_active');
+});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
CRM.$('tr#qrcode-enabled-event-tr').insertAfter('tr.crm-event-manage-eventinfo-form-block-is_active');
</script>
CRM.$(function () {
CRM.$('tr#qrcode-enabled-event-tr')
.insertAfter('tr.crm-event-manage-eventinfo-form-block-is_active');
});
</script>
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/templates/qrcode-checkin-event-options.tpl
around lines 13 to 14, the DOM manipulation call that moves the table row is
executed immediately, which can fail if the target elements are not yet loaded
in the DOM. To fix this, wrap the
CRM.$('tr#qrcode-enabled-event-tr').insertAfter(...) call inside a
CRM.$(function() { ... }) ready-handler to ensure it runs only after the DOM is
fully loaded.

Comment on lines +15 to +16
require_once __DIR__.'/../vendor/autoload.php';

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Autoloader path is wrong once packaged inside our extension

Inside an already-installed vendor tree, __DIR__.'/../vendor/autoload.php' points outside the extension and will fail if somebody accesses the file directly.
At minimum, guard it or remove the example from production builds to reduce attack surface.

-require_once __DIR__.'/../vendor/autoload.php';
+# safeguard: bail out if dependency autoloader is not present
+($loader = @include __DIR__.'/../../autoload.php') || exit('autoload not found');
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/examples/image.php
at lines 15-16, the autoloader path __DIR__.'/../vendor/autoload.php' is
incorrect when the extension is packaged and accessed directly, causing
failures. To fix this, add a conditional check to verify the autoloader file
exists before requiring it, or remove this example file from production builds
entirely to prevent direct access and reduce security risks.

class TestContainer extends SettingsContainerAbstract{
use TestOptionsTrait;

private $test3 = 'what';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Address unused private field flagged by static analysis.

The static analysis tool correctly identifies that $test3 is declared but never used within this class. Since this is a test container, verify if this property should be accessed through the parent class's magic methods or if it's genuinely unused.


🏁 Script executed:

#!/bin/bash
# Check if $test3 is used elsewhere in the test suite or accessed via magic methods
rg -A 5 -B 5 "test3" --type php

Length of output: 12360


Unused Test Property $test3 Should Be Removed
The private $test3 field is never referenced by the container’s magic methods (see ContainerTest::testConstruct and testGet, which both expect ->test3 to stay null), and its default value is ignored. Remove the declaration to satisfy static analysis and eliminate dead code.

• File:
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestContainer.php
• Remove line:

-   private $test3 = 'what';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private $test3 = 'what';
🧰 Tools
🪛 PHPMD (2.15.0)

28-28: Avoid unused private fields such as '$test3'. (Unused Code Rules)

(UnusedPrivateField)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-settings-container/tests/TestContainer.php
at line 28, remove the private property declaration for $test3 since it is
unused, not referenced by any container magic methods, and its default value is
ignored. This will clean up dead code and satisfy static analysis.

Comment on lines +85 to +91
private function getDisplayName() {
$sql = "SELECT display_name FROM civicrm_contact c JOIN civicrm_participant p ON c.id = p.contact_id
WHERE p.id = %0";
$dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($this->participant_id, 'Integer')));
$dao->fetch();
return $dao->display_name;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove unused private method.

Static analysis correctly identifies this method as unused. Dead code should be removed to maintain code quality.

- private function getDisplayName() {
-   $sql = "SELECT display_name FROM civicrm_contact c JOIN civicrm_participant p ON c.id = p.contact_id
-     WHERE p.id = %0";
-   $dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($this->participant_id, 'Integer')));
-   $dao->fetch();
-   return $dao->display_name;
- }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private function getDisplayName() {
$sql = "SELECT display_name FROM civicrm_contact c JOIN civicrm_participant p ON c.id = p.contact_id
WHERE p.id = %0";
$dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($this->participant_id, 'Integer')));
$dao->fetch();
return $dao->display_name;
}
🧰 Tools
🪛 PHPMD (2.15.0)

85-91: Avoid unused private methods such as 'getDisplayName'. (Unused Code Rules)

(UnusedPrivateMethod)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php
around lines 85 to 91, the private method getDisplayName is not used anywhere in
the codebase. To improve code quality and maintainability, remove this entire
private method including its definition and body.

Comment on lines +5 to +6
var $participant_id = NULL;
var $code = NULL;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add proper visibility modifiers and declare missing property.

Class properties are missing visibility modifiers and the $hash property used in the code is not declared.

-  var $participant_id = NULL;
-  var $code = NULL;
+  private $participant_id = NULL;
+  private $code = NULL;
+  private $hash = NULL;
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php
around lines 5 to 6, add explicit visibility modifiers (such as public,
protected, or private) to the class properties $participant_id and $code. Also,
declare the missing $hash property with an appropriate visibility modifier to
ensure all used properties are properly defined.

Comment on lines +58 to +83
$sql = "SELECT title, display_name, st.name as participant_status, fee_level, fee_amount, role_id FROM civicrm_contact c
JOIN civicrm_participant p ON c.id = p.contact_id
JOIN civicrm_event e ON e.id = p.event_id
JOIN civicrm_participant_status_type st ON st.id = p.status_id
WHERE p.id = %0";
$dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($this->participant_id, 'Integer')));
$dao->fetch();
$this->assign('event_title', $dao->title);
$this->assign('display_name', $dao->display_name);
$this->assign('participant_status', $dao->participant_status);
$this->assign('fee_level', $dao->fee_level);
$this->assign('fee_amount', $dao->fee_amount);
$roles = CRM_Core_PseudoConstant::get('CRM_Event_DAO_Participant', 'role_id');
$this->assign('role', $roles[$dao->role_id]);

if ($dao->participant_status == 'Registered') {
$this->assign('update_button', TRUE);
$this->assign('status_class', 'qrcheckin-status-registered');
}
elseif ($dao->participant_status == 'Attended') {
$this->assign('status_class', 'qrcheckin-status-attended');
}
else {
$this->assign('status_class', 'qrcheckin-status-other');
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Refactor setDetails() method to follow single responsibility principle.

This method violates the single responsibility principle by handling SQL queries, data assignment, and UI logic. It also has potential SQL injection vulnerabilities despite using parameterized queries correctly.

Consider breaking this into smaller methods:

 private function setDetails() {
+   $participant_data = $this->getParticipantData();
+   $this->assignParticipantDetails($participant_data);
+   $this->setStatusClass($participant_data['participant_status']);
+ }
+
+ private function getParticipantData() {
   $sql = "SELECT title, display_name, st.name as participant_status, fee_level, fee_amount, role_id FROM civicrm_contact c
       JOIN civicrm_participant p ON c.id = p.contact_id
       JOIN civicrm_event e ON e.id = p.event_id
       JOIN civicrm_participant_status_type st ON st.id = p.status_id
       WHERE p.id = %0";
   $dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($this->participant_id, 'Integer')));
   $dao->fetch();
+   return [
+     'title' => $dao->title,
+     'display_name' => $dao->display_name,
+     'participant_status' => $dao->participant_status,
+     'fee_level' => $dao->fee_level,
+     'fee_amount' => $dao->fee_amount,
+     'role_id' => $dao->role_id
+   ];
+ }
+
+ private function assignParticipantDetails($data) {
-   $dao = CRM_Core_DAO::executeQuery($sql, array(0 => array($this->participant_id, 'Integer')));
-   $dao->fetch();
-   $this->assign('event_title', $dao->title);
-   $this->assign('display_name', $dao->display_name);
-   $this->assign('participant_status', $dao->participant_status);
-   $this->assign('fee_level', $dao->fee_level);
-   $this->assign('fee_amount', $dao->fee_amount);
+   $this->assign('event_title', $data['title']);
+   $this->assign('display_name', $data['display_name']);
+   $this->assign('participant_status', $data['participant_status']);
+   $this->assign('fee_level', $data['fee_level']);
+   $this->assign('fee_amount', $data['fee_amount']);
   $roles = CRM_Core_PseudoConstant::get('CRM_Event_DAO_Participant', 'role_id');
-   $this->assign('role', $roles[$dao->role_id]);
+   $this->assign('role', $roles[$data['role_id']]);
+ }

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php
around lines 58 to 83, the setDetails() method mixes SQL querying, data
assignment, and UI logic, violating the single responsibility principle.
Refactor by extracting the SQL query and data fetching into a separate method
that returns participant data, another method to assign data to the template,
and a third method to handle UI logic like setting status classes and update
button visibility. This separation improves maintainability and clarity while
keeping parameterized queries for security.

Comment on lines +93 to +95
private function refuseAccess() {
CRM_Core_Error::fatal(E::ts("Woops! The link you clicked on appears to be broken. Please check again and ensure it was not split by a line break.") );
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace fatal error with graceful error handling.

Using CRM_Core_Error::fatal() terminates the entire application. Consider more graceful error handling that allows for better user experience and debugging.

 private function refuseAccess() {
-   CRM_Core_Error::fatal(E::ts("Woops! The link you clicked on appears to be broken. Please check again and ensure it was not split by a line break.") );
+   $this->assign('error_message', E::ts("Woops! The link you clicked on appears to be broken. Please check again and ensure it was not split by a line break."));
+   $this->assign('has_error', TRUE);
+   // Log the error for debugging
+   CRM_Core_Error::debug_log_message(E::ts("QR Code checkin: Access refused for participant_id: %1, hash: %2", [
+     1 => $this->participant_id ?? 'unknown',
+     2 => $this->hash ?? 'unknown'
+   ]));
 }
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/CRM/Qrcodecheckin/Page/QrcodecheckinLanding.php
around lines 93 to 95, replace the use of CRM_Core_Error::fatal() in the
refuseAccess() method with a more graceful error handling approach. Instead of
terminating the application, implement a user-friendly error message display or
redirect to an error page, allowing the application to continue running and
improving user experience and debugging.

Comment on lines +19 to +27
/**
* @var int[]
*/
public $buffer = [];

/**
* @var int
*/
public $length = 0;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Encapsulation violation: Public properties expose internal state.

The public $buffer and $length properties break encapsulation by allowing direct external modification of the internal state. This violates the principle of data hiding and could lead to inconsistent object state.

Consider making these properties protected and providing controlled access through getter methods:

-	public $buffer = [];
-	public $length = 0;
+	protected $buffer = [];
+	protected $length = 0;
+
+	public function getBuffer(): array {
+		return $this->buffer;
+	}
+
+	public function getLength(): int {
+		return $this->length;
+	}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
/**
* @var int[]
*/
public $buffer = [];
/**
* @var int
*/
public $length = 0;
/**
* @var int[]
*/
protected $buffer = [];
/**
* @var int
*/
protected $length = 0;
public function getBuffer(): array {
return $this->buffer;
}
public function getLength(): int {
return $this->length;
}
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php
around lines 19 to 27, the public properties $buffer and $length expose internal
state and violate encapsulation. Change these properties from public to
protected and implement getter methods to provide controlled read-only access,
preventing direct external modification and preserving object integrity.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines +53 to +56
$this->outputInterface->dump();

$this::assertTrue(true); // tricking the code coverage
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove artificial code coverage manipulation.

The comment "tricking the code coverage" and the assertTrue(true) statement indicate an attempt to artificially inflate code coverage metrics without meaningful testing.

Replace the artificial assertion with a meaningful test that validates the actual behavior:

-		$this->outputInterface->dump();
-
-		$this::assertTrue(true); // tricking the code coverage
+		$output = $this->outputInterface->dump();
+		
+		// Verify that output was generated successfully
+		$this::assertNotEmpty($output);
+		$this::assertStringContainsString('%PDF', $output); // PDF header
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php
around lines 53 to 56, remove the artificial assertion assertTrue(true) and the
comment about tricking code coverage. Instead, add a meaningful assertion that
verifies the expected outcome of the dump() method, such as checking if the
output was generated correctly or if the outputInterface is in the expected
state after dump() is called.

Comment on lines +61 to +63
CRM.api4('Participant', 'update', {
values: { "status_id": 2 }, // Use status_id instead of status_id.name
where: [["id", "=", participant_id]],
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace magic number with named constant.

The hardcoded status_id: 2 violates the DRY principle and makes the code less maintainable.

Define a named constant for better readability:

+  var PARTICIPANT_STATUS_ATTENDED = 2;
+
   CRM.api4('Participant', 'update', {
-    values: { "status_id": 2 }, // Use status_id instead of status_id.name
+    values: { "status_id": PARTICIPANT_STATUS_ATTENDED },
     where: [["id", "=", participant_id]],
   }).then(function(results) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
CRM.api4('Participant', 'update', {
values: { "status_id": 2 }, // Use status_id instead of status_id.name
where: [["id", "=", participant_id]],
// Define meaningful constant instead of magic number
var PARTICIPANT_STATUS_ATTENDED = 2;
CRM.api4('Participant', 'update', {
values: { "status_id": PARTICIPANT_STATUS_ATTENDED },
where: [["id", "=", participant_id]],
}).then(function(results) {
// …
});
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js
around lines 61 to 63, replace the hardcoded magic number 2 used for status_id
with a named constant. Define a descriptive constant at the top of the file or
in an appropriate constants section, assign it the value 2, and then use this
constant in the CRM.api4 call to improve readability and maintainability.

Comment on lines +15 to +20
var match = sanitized_path_name.match(reg_drupal);

var match = reg_drupal.exec(sanitized_path_name);
if (match) {
participant_id = match[1];
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix variable redeclaration.

The match variable is declared twice on lines 15 and 17, which overwrites the first assignment and could lead to confusion.

Remove the redundant declaration:

-	var match = sanitized_path_name.match(reg_drupal);
-
-	var match = reg_drupal.exec(sanitized_path_name);
+	var match = reg_drupal.exec(sanitized_path_name);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
var match = sanitized_path_name.match(reg_drupal);
var match = reg_drupal.exec(sanitized_path_name);
if (match) {
participant_id = match[1];
}
var match = reg_drupal.exec(sanitized_path_name);
if (match) {
participant_id = match[1];
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 17-17: Shouldn't redeclare 'match'. Consider to delete it or rename it.

'match' is defined here:

(lint/suspicious/noRedeclare)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js
around lines 15 to 20, the variable 'match' is declared twice using 'var',
causing redeclaration and potential confusion. Remove the first declaration on
line 15 and keep a single declaration on line 17 where 'match' is assigned the
result of reg_drupal.exec(sanitized_path_name).

Comment on lines +45 to +60
/*
CRM.api3('Qrcodecheckin', 'Checkin', {
"sequential": 1,
"participant_id": participant_id
}).done(function(result) {
if (result['is_error'] == 0) {
CRM.$('#qrcheckin-status').html('Attended');
CRM.$('#qrcheckin-status-line').removeClass( "qrcheckin-status-registered" ).addClass( "qrcheckin-status-attended" );
CRM.$('#qrcheckin-update-button').hide();
}
else {
console.log(result);
alert(ts("There was an error updating the status. Sorry."));
}
});
*/
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove commented-out legacy code.

Dead code should be removed to improve maintainability and reduce confusion.

Remove the commented-out API v3 code:

-          /*
-    CRM.api3('Qrcodecheckin', 'Checkin', {
-      "sequential": 1,
-      "participant_id": participant_id
-    }).done(function(result) {
-      if (result['is_error'] == 0) {
-        CRM.$('#qrcheckin-status').html('Attended');
-        CRM.$('#qrcheckin-status-line').removeClass( "qrcheckin-status-registered" ).addClass( "qrcheckin-status-attended" );
-        CRM.$('#qrcheckin-update-button').hide();
-      }
-    else {
-      console.log(result);
-      alert(ts("There was an error updating the status. Sorry."));
-    }
-  });
-*/
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
/*
CRM.api3('Qrcodecheckin', 'Checkin', {
"sequential": 1,
"participant_id": participant_id
}).done(function(result) {
if (result['is_error'] == 0) {
CRM.$('#qrcheckin-status').html('Attended');
CRM.$('#qrcheckin-status-line').removeClass( "qrcheckin-status-registered" ).addClass( "qrcheckin-status-attended" );
CRM.$('#qrcheckin-update-button').hide();
}
else {
console.log(result);
alert(ts("There was an error updating the status. Sorry."));
}
});
*/
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js
between lines 45 and 60, remove the entire block of commented-out legacy API v3
code to eliminate dead code and improve maintainability.

Comment on lines +3 to +43
var participant_id;

// Try Drupal first.
// We expect: /civicrm/qrcodecheckin/123/blahblahhash
// We want: 123
var reg_drupal = /\/qrcodecheckin\/([0-9]+)\//;
var path_name = window.location.href;

// Slashes are being converted to %3A in Drupal.
// Replace the %3A back to a slash so we can
// get the participant_id from the path.
var sanitized_path_name = decodeURIComponent(path_name);
var match = sanitized_path_name.match(reg_drupal);

var match = reg_drupal.exec(sanitized_path_name);
if (match) {
participant_id = match[1];
}
else {
// Try wordpress
// We expect: /wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fqrcodecheckin%2F65%2Fa21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
// We want: 65
//var reg_wordpress = /\/wp-admin\/admin\.php/
var reg_wordpress_path = /\/wp-admin\/admin\.php/
var reg_wordpress_extract_q = /[?&]q=([^&]+)(&|$)/
var reg_wordpress_extract_id = /^civicrm\/qrcodecheckin\/([0-9]+)\//
var path_match = reg_wordpress_path.exec(window.location.pathname);
if (path_match) {
// Now we have to extract the query string q.
var q_match = reg_wordpress_extract_q.exec(location.search);
if (q_match) {
// Now URL decode it.
q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
// Now we have: civicrm/qrcodecheckin/65/a21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
participant_match = reg_wordpress_extract_id.exec(q);
if (participant_match) {
participant_id = participant_match[1];
}
}
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Extract URL parsing logic into separate functions.

The current implementation violates the single responsibility principle by mixing participant ID extraction logic for different CMS platforms within the event handler.

Extract the parsing logic into dedicated functions:

+  function extractParticipantIdFromDrupal(url) {
+    var reg_drupal = /\/qrcodecheckin\/([0-9]+)\//;
+    var sanitized_path_name = decodeURIComponent(url);
+    var match = reg_drupal.exec(sanitized_path_name);
+    return match ? match[1] : null;
+  }
+
+  function extractParticipantIdFromWordPress(url) {
+    var reg_wordpress_path = /\/wp-admin\/admin\.php/;
+    var reg_wordpress_extract_q = /[?&]q=([^&]+)(&|$)/;
+    var reg_wordpress_extract_id = /^civicrm\/qrcodecheckin\/([0-9]+)\//;
+    
+    var path_match = reg_wordpress_path.exec(window.location.pathname);
+    if (!path_match) return null;
+    
+    var q_match = reg_wordpress_extract_q.exec(location.search);
+    if (!q_match) return null;
+    
+    var q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
+    var participant_match = reg_wordpress_extract_id.exec(q);
+    return participant_match ? participant_match[1] : null;
+  }
+
   CRM.$('#qrcheckin-update-button').click(function() {
-    var participant_id;
-  
-    // Try Drupal first.
-    // We expect: /civicrm/qrcodecheckin/123/blahblahhash
-    // We want: 123
-    var reg_drupal = /\/qrcodecheckin\/([0-9]+)\//;
-    var path_name = window.location.href;
-  
-    // Slashes are being converted to %3A in Drupal.
-    // Replace the %3A back to a slash so we can
-    // get the participant_id from the path.
-    var sanitized_path_name = decodeURIComponent(path_name);
-    var match = sanitized_path_name.match(reg_drupal);
-  
-    var match = reg_drupal.exec(sanitized_path_name);
-    if (match) {
-      participant_id = match[1];
-    }
-    else {
-      // Try wordpress
-      // We expect: /wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fqrcodecheckin%2F65%2Fa21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
-      // We want: 65
-      //var reg_wordpress = /\/wp-admin\/admin\.php/
-      var reg_wordpress_path = /\/wp-admin\/admin\.php/
-      var reg_wordpress_extract_q = /[?&]q=([^&]+)(&|$)/
-      var reg_wordpress_extract_id = /^civicrm\/qrcodecheckin\/([0-9]+)\//
-      var path_match = reg_wordpress_path.exec(window.location.pathname);
-      if (path_match) {
-        // Now we have to extract the query string q.
-        var q_match = reg_wordpress_extract_q.exec(location.search);
-        if (q_match) {
-          // Now URL decode it.
-          q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
-          // Now we have: civicrm/qrcodecheckin/65/a21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
-          participant_match = reg_wordpress_extract_id.exec(q);
-          if (participant_match) {
-            participant_id = participant_match[1];
-          }
-        }
-      }
-    }
+    var participant_id = extractParticipantIdFromDrupal(window.location.href) || 
+                        extractParticipantIdFromWordPress(window.location.href);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
var participant_id;
// Try Drupal first.
// We expect: /civicrm/qrcodecheckin/123/blahblahhash
// We want: 123
var reg_drupal = /\/qrcodecheckin\/([0-9]+)\//;
var path_name = window.location.href;
// Slashes are being converted to %3A in Drupal.
// Replace the %3A back to a slash so we can
// get the participant_id from the path.
var sanitized_path_name = decodeURIComponent(path_name);
var match = sanitized_path_name.match(reg_drupal);
var match = reg_drupal.exec(sanitized_path_name);
if (match) {
participant_id = match[1];
}
else {
// Try wordpress
// We expect: /wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fqrcodecheckin%2F65%2Fa21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
// We want: 65
//var reg_wordpress = /\/wp-admin\/admin\.php/
var reg_wordpress_path = /\/wp-admin\/admin\.php/
var reg_wordpress_extract_q = /[?&]q=([^&]+)(&|$)/
var reg_wordpress_extract_id = /^civicrm\/qrcodecheckin\/([0-9]+)\//
var path_match = reg_wordpress_path.exec(window.location.pathname);
if (path_match) {
// Now we have to extract the query string q.
var q_match = reg_wordpress_extract_q.exec(location.search);
if (q_match) {
// Now URL decode it.
q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
// Now we have: civicrm/qrcodecheckin/65/a21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
participant_match = reg_wordpress_extract_id.exec(q);
if (participant_match) {
participant_id = participant_match[1];
}
}
}
}
// Extractors for CMS-specific QR code paths
function extractParticipantIdFromDrupal(url) {
var reg_drupal = /\/qrcodecheckin\/([0-9]+)\//;
var sanitized_path_name = decodeURIComponent(url);
var match = reg_drupal.exec(sanitized_path_name);
return match ? match[1] : null;
}
function extractParticipantIdFromWordPress(url) {
var reg_wordpress_path = /\/wp-admin\/admin\.php/;
var reg_wordpress_extract_q = /[?&]q=([^&]+)(&|$)/;
var reg_wordpress_extract_id = /^civicrm\/qrcodecheckin\/([0-9]+)\//;
if (!reg_wordpress_path.test(window.location.pathname)) {
return null;
}
var q_match = reg_wordpress_extract_q.exec(location.search);
if (!q_match) {
return null;
}
var decoded_q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
var participant_match = reg_wordpress_extract_id.exec(decoded_q);
return participant_match ? participant_match[1] : null;
}
CRM.$('#qrcheckin-update-button').click(function() {
var participant_id = extractParticipantIdFromDrupal(window.location.href)
|| extractParticipantIdFromWordPress(window.location.href);
// …rest of handler using participant_id…
🧰 Tools
🪛 Biome (1.9.4)

[error] 17-17: Shouldn't redeclare 'match'. Consider to delete it or rename it.

'match' is defined here:

(lint/suspicious/noRedeclare)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js
from lines 3 to 43, the URL parsing logic for extracting participant_id from
Drupal and WordPress URLs is mixed together, violating the single responsibility
principle. Refactor by creating separate functions for each CMS platform's
parsing logic: one function to extract the participant_id from the Drupal URL
pattern and another to handle the WordPress URL pattern extraction. Then call
these functions in the main flow to assign participant_id, improving code
clarity and maintainability.

Comment on lines +192 to +198
foreach($m as $y => $row){
foreach($row as $x => $val){
if($val){
$count++;
}
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remove unused loop variables.

The loop variables $y and $x are not used within the loop body.

-foreach($m as $y => $row){
-    foreach($row as $x => $val){
+foreach($m as $row){
+    foreach($row as $val){
         if($val){
             $count++;
         }
     }
 }
🧰 Tools
🪛 PHPMD (2.15.0)

192-192: Avoid unused local variables such as '$y'. (Unused Code Rules)

(UnusedLocalVariable)


193-193: Avoid unused local variables such as '$x'. (Unused Code Rules)

(UnusedLocalVariable)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
between lines 192 and 198, the foreach loops declare variables $y and $x which
are not used inside the loop body. Remove these unused variables by replacing
the loops with ones that only declare the used variables, such as using
foreach($m as $row) and foreach($row as $val), to clean up the code.

Comment on lines +72 to +106
protected function testLevel1(array $m):int{
$penalty = 0;

foreach($m as $y => $row){
foreach($row as $x => $val){
$count = 0;

for($ry = -1; $ry <= 1; $ry++){

if($y + $ry < 0 || $this->moduleCount <= $y + $ry){
continue;
}

for($rx = -1; $rx <= 1; $rx++){

if(($ry === 0 && $rx === 0) || (($x + $rx) < 0 || $this->moduleCount <= ($x + $rx))){
continue;
}

if($m[$y + $ry][$x + $rx] === $val){
$count++;
}

}
}

if($count > 5){
$penalty += (3 + $count - 5);
}

}
}

return $penalty;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Logic mismatch: Method checks 3x3 grid instead of consecutive modules.

The documentation states this method checks for "five or more same-colored modules in a row (or column)", but the implementation checks all 8 adjacent cells in a 3x3 grid. This doesn't match the QR code specification for penalty rule 1, which should check for consecutive modules horizontally and vertically.


🏁 Script executed:

#!/bin/bash
# Search for QR code mask pattern test implementations to verify the correct algorithm
rg -A 10 "testLevel1|penalty.*rule.*1|consecutive.*module" --type php

Length of output: 4547


Fix penalty rule 1 implementation in testLevel1

The code in Data/MaskPatternTester::testLevel1 (lines 72–106) walks the 3×3 neighborhood around each module and counts same-color neighbors, but per ISO/IEC 18004 penalty rule 1 you must scan entire rows and columns for runs of five or more same-color modules. The current approach will calculate incorrect penalties.

Suggestions:

  • Replace the 3×3 neighbor scan with a consecutive-module scan across each row and column (for each sequence of ≥5 add 3, then +1 for each additional module).
  • You can reference the correct logic in Common/MaskPattern::applyRule1 (used by testRule1) as a model.
  • Alternatively, upgrade the bundled php-qrcode library to a version where this is already fixed.

• File needing a fix:
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php (lines 72–106)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
lines 72 to 106, the testLevel1 method incorrectly calculates penalty rule 1 by
scanning a 3x3 neighborhood around each module instead of scanning entire rows
and columns for runs of five or more consecutive same-color modules. To fix
this, replace the nested loops that check neighbors with logic that iterates
through each row and column, counting consecutive modules of the same color, and
for each run of five or more, add a penalty of 3 plus 1 for each additional
module beyond five. You can model this logic after the applyRule1 method in
Common/MaskPattern or consider upgrading the php-qrcode library to a version
where this rule is correctly implemented.

Comment on lines +398 to +406
protected function set_fpdfMeasureUnit(string $unit):void{
$unit = strtolower($unit);

if(in_array($unit, ['cm', 'in', 'mm', 'pt'], true)){
$this->fpdfMeasureUnit = $unit;
}

// @todo throw or ignore silently?
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Address TODO: Complete error handling implementation

The method silently ignores invalid units, but the TODO suggests this behavior is undecided.

Would you like me to implement proper error handling that throws an exception for invalid units, similar to other validation methods in this trait?

 protected function set_fpdfMeasureUnit(string $unit):void{
     $unit = strtolower($unit);
 
     if(in_array($unit, ['cm', 'in', 'mm', 'pt'], true)){
         $this->fpdfMeasureUnit = $unit;
+        return;
     }
 
-    // @todo throw or ignore silently?
+    throw new QRCodeException(sprintf('Invalid FPDF measurement unit: %s', $unit));
 }
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php
around lines 398 to 406, the set_fpdfMeasureUnit method currently ignores
invalid units silently. To fix this, implement proper error handling by throwing
an exception when the provided unit is not one of the allowed values ('cm',
'in', 'mm', 'pt'), consistent with other validation methods in this trait. This
will ensure invalid inputs are explicitly handled and improve code robustness.

Comment on lines 276 to 280
// Get the absolute link to the image that will display the QR code.
$query = NULL;
$absolute = TRUE;
$link = qrcodecheckin_get_image_url($code);

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remove unused variables

The variables $query and $absolute are defined but never used.

-          // Get the absolute link to the image that will display the QR code.
-          $query = NULL;
-          $absolute = TRUE;
           $link = qrcodecheckin_get_image_url($code);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Get the absolute link to the image that will display the QR code.
$query = NULL;
$absolute = TRUE;
$link = qrcodecheckin_get_image_url($code);
$link = qrcodecheckin_get_image_url($code);
🧰 Tools
🪛 PHPMD (2.15.0)

277-277: Avoid unused local variables such as '$query'. (Unused Code Rules)

(UnusedLocalVariable)


278-278: Avoid unused local variables such as '$absolute'. (Unused Code Rules)

(UnusedLocalVariable)

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php
around lines 276 to 280, the variables $query and $absolute are declared but
never used. Remove these two variable declarations to clean up the code and
avoid unused variable warnings.

Comment on lines +30 to +49
function qrcodecheckin_civicrm_uninstall() {
// Ensure directory for qr codes is cleaned up.
$civiConfig = CRM_Core_Config::singleton();
$dir = $civiConfig->imageUploadDir . '/qrcodecheckin/';
if (!file_exists($dir)) {
$files = array_diff(scandir($dir), ['.','..']);
foreach ($files as $file) {
if (is_dir("$dir/$file")) {
// This is an error, but don't let it gum up the removal of the extension.
$msg = E::ts("Found directory in qrcodecheckin folder, I expected only QR code image files. I'm not deleting the folder. I am proceeding with uninstalling the extension.");
CRM_Core_Error::debug_log_message($msg);
$session = CRM_Core_Session::singleton();
$session->setStatus($msg);
return;
}
unlink("$dir/$file");
}
mkdir($civiConfig->imageUploadDir . '/qrcodecheckin/');
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Critical: Fix inverted logic in uninstall hook

The uninstall function has inverted logic - it tries to process files when the directory doesn't exist and creates a directory instead of removing it.

 function qrcodecheckin_civicrm_uninstall() {
   // Ensure directory for qr codes is cleaned up.
   $civiConfig = CRM_Core_Config::singleton();
   $dir = $civiConfig->imageUploadDir . '/qrcodecheckin/';
-  if (!file_exists($dir)) {
+  if (file_exists($dir)) {
     $files = array_diff(scandir($dir), ['.','..']);
     foreach ($files as $file) {
       if (is_dir("$dir/$file")) {
         // This is an error, but don't let it gum up the removal of the extension.
         $msg = E::ts("Found directory in qrcodecheckin folder, I expected only QR code image files. I'm not deleting the folder. I am proceeding with uninstalling the extension.");
         CRM_Core_Error::debug_log_message($msg);
         $session = CRM_Core_Session::singleton();
         $session->setStatus($msg);
         return;
       }
       unlink("$dir/$file");
     }
-    mkdir($civiConfig->imageUploadDir . '/qrcodecheckin/');
+    rmdir($dir);
   }
 }
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php
lines 30 to 49, the uninstall function incorrectly processes files when the
directory does not exist and creates the directory instead of removing it. Fix
this by reversing the condition to check if the directory exists before
processing files. Then, after deleting files, remove the directory instead of
creating it.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (4)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js (4)

15-17: Fix variable redeclaration.

The match variable is declared twice, which overwrites the first assignment and violates best practices.


3-43: Extract URL parsing logic into separate functions.

The current implementation violates the single responsibility principle by mixing participant ID extraction logic for different CMS platforms within the event handler.


45-60: Remove commented-out legacy code.

Dead code should be removed to improve maintainability and reduce confusion.


61-63: Replace magic number with named constant.

The hardcoded status_id: 2 violates the DRY principle and makes the code less maintainable.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a21f3f7 and c6dd921.

📒 Files selected for processing (1)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: tarunnjoshi
PR: ColoredCow/goonj#1230
File: wp-content/civi-extensions/civirazorpay/cli/update-recurring-contact-info.php:115-117
Timestamp: 2025-05-27T07:31:44.131Z
Learning: For one-time scripts in the Goonj project, tarunnjoshi prefers to keep hardcoded values rather than creating shared constants or configuration files, prioritizing simplicity over strict adherence to DRY principle to avoid over-engineering temporary code.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
🪛 Biome (1.9.4)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js

[error] 17-17: Shouldn't redeclare 'match'. Consider to delete it or rename it.

'match' is defined here:

(lint/suspicious/noRedeclare)

// Now URL decode it.
q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
// Now we have: civicrm/qrcodecheckin/65/a21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
participant_match = reg_wordpress_extract_id.exec(q);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Declare the participant_match variable to avoid global scope pollution.

The variable participant_match is used without declaration, which creates an implicit global variable and violates best practices.

-          participant_match = reg_wordpress_extract_id.exec(q);
+          var participant_match = reg_wordpress_extract_id.exec(q);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
participant_match = reg_wordpress_extract_id.exec(q);
// Now URL decode it.
q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
// Now we have: civicrm/qrcodecheckin/65/a21855da08cb102d1d217c53dc5824a3a795c1c1a44e971bf01ab9da3a2acbbf
- participant_match = reg_wordpress_extract_id.exec(q);
+ var participant_match = reg_wordpress_extract_id.exec(q);
if (participant_match) {
participant_id = participant_match[1];
}
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js
at line 37, the variable participant_match is assigned without declaration,
causing it to become a global variable. Fix this by declaring participant_match
with let or const before its first use to limit its scope and avoid polluting
the global namespace.

var q_match = reg_wordpress_extract_q.exec(location.search);
if (q_match) {
// Now URL decode it.
q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Declare the q variable to avoid global scope pollution.

The variable q is used without declaration, which creates an implicit global variable and violates best practices.

-          q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
+          var q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
var q_match = reg_wordpress_extract_q.exec(location.search);
if (q_match) {
// Now URL decode it.
var q = decodeURIComponent(q_match[1].replace(/\+/g, " "));
participant_match = reg_wordpress_extract_id.exec(q);
if (participant_match) {
participant_id = participant_match[1];
}
}
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.js
at line 35, the variable q is assigned without declaration, causing it to become
a global variable. Fix this by declaring q with let or const before assigning
the value to ensure it has proper local scope and avoid polluting the global
namespace.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

♻️ Duplicate comments (1)
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php (1)

51-53: Remove unused variables

The variables $query and $absolute are defined but never used.

-        // Get the absolute link to the image that will display the QR code.
-        $query = NULL;
-        $absolute = TRUE;
         $link = qrcodecheckin_get_image_url($code);
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c6dd921 and b839965.

📒 Files selected for processing (2)
  • wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php (1 hunks)
  • wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: tarunnjoshi
PR: ColoredCow/goonj#1230
File: wp-content/civi-extensions/civirazorpay/cli/update-recurring-contact-info.php:115-117
Timestamp: 2025-05-27T07:31:44.131Z
Learning: For one-time scripts in the Goonj project, tarunnjoshi prefers to keep hardcoded values rather than creating shared constants or configuration files, prioritizing simplicity over strict adherence to DRY principle to avoid over-engineering temporary code.
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php (1)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php (2)
Learnt from: belwalshubham
PR: ColoredCow/goonj#284
File: wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php:520-520
Timestamp: 2024-10-11T09:53:14.458Z
Learning: In `wp-content/civi-extensions/goonjcustom/Civi/CollectionCampService.php`, it's acceptable that the `reGenerateCollectionCampQr` method calls `generateQrCode` with only the `$collectionCampId` parameter, as QR codes are generated when the Dropping Center is authorized. We'll implement changes if any issues arise in the future.
Learnt from: belwalshubham
PR: ColoredCow/goonj#352
File: wp-content/civi-extensions/goonjcustom/Civi/QrCodeService.php:51-53
Timestamp: 2024-10-09T15:24:42.859Z
Learning: In `QrCodeService::generateQrCode`, when using `QRCode::OUTPUT_IMAGE_PNG`, the `render` method returns a data URI with base64-encoded image data. Therefore, it's necessary to remove the `data:image/png;base64,` prefix and base64-decode the data to obtain the raw binary image.
🧬 Code Graph Analysis (1)
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php (2)
wp-content/civi-extensions/civiglific/CRM/Civiglific/GlificClient.php (3)
  • GlificClient (12-259)
  • query (27-46)
  • getContactIdByPhone (175-190)
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php (4)
  • qrcodecheckin_participant_id_for_contact_id (303-317)
  • qrcodecheckin_get_code (128-138)
  • qrcodecheckin_create_image (194-203)
  • qrcodecheckin_get_image_url (176-179)
🪛 PHPMD (2.15.0)
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php

16-16: Avoid unused parameters such as '$spec'. (Unused Code Rules)

(UnusedFormalParameter)


51-51: Avoid unused local variables such as '$query'. (Unused Code Rules)

(UnusedLocalVariable)


52-52: Avoid unused local variables such as '$absolute'. (Unused Code Rules)

(UnusedLocalVariable)

wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php

253-253: Avoid unused parameters such as '$job'. (Unused Code Rules)

(UnusedFormalParameter)


253-253: Avoid unused parameters such as '$context'. (Unused Code Rules)

(UnusedFormalParameter)


284-284: Avoid unused local variables such as '$query'. (Unused Code Rules)

(UnusedLocalVariable)


285-285: Avoid unused local variables such as '$absolute'. (Unused Code Rules)

(UnusedLocalVariable)

Comment on lines +270 to +271
error_log('event id: ' . print_r($event_id, TRUE));
error_log('contact_id: ' . print_r($contact_id, TRUE));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remove debug error_log statements

These error logging statements appear to be debugging code that should be removed before production deployment. They expose internal implementation details and can clutter log files.

-        error_log('event id: ' . print_r($event_id, TRUE));
-        error_log('contact_id: ' . print_r($contact_id, TRUE));

         $participant_id = qrcodecheckin_participant_id_for_contact_id($contact_id, $event_id);
-        error_log('participant_id: ' . print_r($participant_id, TRUE));

         if ($participant_id) {
           $code = qrcodecheckin_get_code($participant_id);
-        error_log('code: ' . print_r($code, TRUE));

           // First ensure the image file is created.
           qrcodecheckin_create_image($code, $participant_id);

           // Get the absolute link to the image that will display the QR code.
           $query = NULL;
           $absolute = TRUE;
           $link = qrcodecheckin_get_image_url($code);
-        error_log('link: ' . print_r($link, TRUE));

Also applies to: 275-275, 278-278, 287-287

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php
around lines 270-271, 275, 278, and 287, remove the error_log statements used
for debugging as they expose internal details and clutter logs. Delete these
lines entirely to clean up the code before production deployment.

Comment on lines +98 to +198
// /**
// * Fetch participant_id from contact_id.
// */
// function qrcodecheckin_participant_id_for_contact_id($contact_id, $event_id) {

// $sql = "SELECT p.id FROM civicrm_contact c JOIN civicrm_participant p
// ON c.id = p.contact_id WHERE c.is_deleted = 0 AND c.id = %0 AND p.event_id = %1";
// $params = [
// 0 => [$contact_id, 'Integer'],
// 1 => [$event_id, 'Integer'],
// ];
// $dao = CRM_Core_DAO::executeQuery($sql, $params);
// if ($dao->N == 0) {
// return NULL;
// }
// $dao->fetch();
// return $dao->id;
// }

/**
* Create a hash based on the participant id.
*/
// function qrcodecheckin_get_code($participant_id) {
// $sql = "SELECT hash FROM civicrm_contact c JOIN civicrm_participant p ON c.id = p.contact_id
// WHERE p.id = %0";
// $dao = CRM_Core_DAO::executeQuery($sql, [0 => [$participant_id, 'Integer']]);
// if ($dao->N == 0) {
// return FALSE;
// }
// $dao->fetch();
// $user_hash = $dao->hash;
// return hash('sha256', $participant_id . $user_hash . CIVICRM_SITE_KEY);
// }

/**
* Create the qr image file
*/
// function qrcodecheckin_create_image($code, $participant_id) {
// $path = qrcodecheckin_get_path($code);
// if (!file_exists($path)) {
// // Since we are saving a file, we don't want base64 data.
// $url = qrcodecheckin_get_url($code, $participant_id);
// $base64 = FALSE;
// $data = qrcodecheckin_get_image_data($url, $base64);
// file_put_contents($path, $data);
// }
// }

/**
* Helper to return absolute URL to qrcode image file.
*
* This is the URL to the image file containing the QR code.
*/
// function qrcodecheckin_get_image_url($code) {
// $civiConfig = CRM_Core_Config::singleton();
// return $civiConfig->imageUploadURL . '/qrcodecheckin/' . $code . '.png';
// }


/**
* Get QRCode image data.
*/
// function qrcodecheckin_get_image_data($url, $base64 = TRUE) {
// require_once __DIR__ . '/vendor/autoload.php';
// $options = new chillerlan\QRCode\QROptions(
// [
// 'outputType' => chillerlan\QRCode\QRCode::OUTPUT_IMAGE_PNG,
// 'imageBase64' => $base64,
// 'imageTransparent' => FALSE,
// ]
// );
// return (new chillerlan\QRCode\QRCode($options))->render($url);
// }

/**
* Get URL for checkin.
*
* This is the URL that the QR Code points to when it is
* read. See qrcodecheckin_get_image_url for the URL of the image
* file that displays the QR Code.
*/
// function qrcodecheckin_get_url($code, $participant_id) {
// $query = NULL;
// $absolute = TRUE;
// $fragment = NULL;
// $htmlize = FALSE;
// $frontend = TRUE;
// return CRM_Utils_System::url('civicrm/qrcodecheckin/' . $participant_id . '/' . $code, $query, $absolute, $fragment, $htmlize, $frontend);
// }


/**
* Helper to return absolute file system path to qrcode image file.
*
* This is the path to the image file containing the QR code.
*/
// function qrcodecheckin_get_path($code) {
// $civiConfig = CRM_Core_Config::singleton();
// return $civiConfig->imageUploadDir . '/qrcodecheckin/' . $code . '.png';
// }

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove commented-out code blocks

Large sections of commented-out code should be removed. These functions appear to be duplicates of the qrcodecheckin extension functions and serve no purpose here.

Delete all the commented-out function implementations from lines 98-198. Version control preserves the history if needed.

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php
from lines 98 to 198, remove all the commented-out function implementations as
they are redundant duplicates of the qrcodecheckin extension functions and serve
no purpose here. Since version control retains history, deleting these commented
blocks will clean up the code without losing information.

* Cron job to trigger a WhatsApp Flow for Bangalore Chaupal.
*/
function civicrm_api3_civiglific_civicrm_glific_send_whatsapp_qr_cron($params) {
error_log('testing: Entered civicrm_api3_civiglific_civicrm_glific_send_whatsapp_qr_cron');
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remove extensive debug logging statements

The function contains numerous error_log statements that appear to be for debugging purposes. These should be removed or replaced with proper logging mechanisms before production deployment.

Consider using CiviCRM's built-in logging system (CRM_Core_Error::debug_log_message()) for important operational messages and removing verbose debug output.

Also applies to: 27-28, 36-37, 45-46, 54-55, 62-63, 65-66, 69-70, 77-78, 84-85, 88-89, 93-93

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php
around lines 22, 27-28, 36-37, 45-46, 54-55, 62-63, 65-66, 69-70, 77-78, 84-85,
88-89, and 93, remove all error_log debug statements used for verbose debugging.
Replace any important operational messages with calls to CiviCRM's logging
system using CRM_Core_Error::debug_log_message() to ensure proper logging
practices before production deployment.

Comment on lines +56 to +60
$values[$contact_id]['qrcodecheckin.qrcode_url_' . $event_id] = $link;
$values[$contact_id]['qrcodecheckin.qrcode_html_' . $event_id] = E::ts('<div><img alt="QR Code with link to checkin page" src="%1"></div><div>You should see a QR code above which will be used to quickly check you into the event. If you do not see a code display above, please enable the display of images in your email program or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code in case you need to display it when you do not have Internet access.</div>', [
1 => $link,
]);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove unused token value assignments

The code populates $values array with QR code URLs and HTML, but these values are never used in the function. This appears to be copy-pasted from the token generation code without purpose.

If the QR code URL needs to be sent via WhatsApp, pass it as a parameter to the flow. Otherwise, remove these unused assignments:

-        $values[$contactId]['qrcodecheckin.qrcode_url_' . $eventId] = $link;
-        $values[$contactId]['qrcodecheckin.qrcode_html_' . $eventId] = E::ts('<div><img alt="QR Code with link to checkin page" src="%1"></div><div>You should see a QR code above which will be used to quickly check you into the event. If you do not see a code display above, please enable the display of images in your email program or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code in case you need to display it when you do not have Internet access.</div>', [
-          1 => $link,
-        ]);
+        // Store the QR code link if needed for the WhatsApp flow
+        $qrCodeLink = $link;

Then pass the QR code link to the flow if needed:

         // Trigger the Flow instead of sending a direct message.
         // Replace with your Flow name.
         $flowName = "TestFlow";
-        $result = triggerFlow($glificClient, $glificContactId, $flowName);
+        // Pass QR code link as flow parameter if needed
+        $result = triggerFlow($glificClient, $glificContactId, $flowName, ['qrCodeUrl' => $qrCodeLink]);

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php
around lines 56 to 60, the $values array is assigned QR code URLs and HTML that
are never used in the function. Remove these unused assignments to clean up the
code. If the QR code URL is required for sending via WhatsApp, instead pass it
explicitly as a parameter to the flow where it is needed.

Comment on lines +56 to +59
$values[$contact_id]['qrcodecheckin.qrcode_url_' . $event_id] = $link;
$values[$contact_id]['qrcodecheckin.qrcode_html_' . $event_id] = E::ts('<div><img alt="QR Code with link to checkin page" src="%1"></div><div>You should see a QR code above which will be used to quickly check you into the event. If you do not see a code display above, please enable the display of images in your email program or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code in case you need to display it when you do not have Internet access.</div>', [
1 => $link,
]);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix undefined variable $contact_id

The code uses $contact_id which is undefined. The correct variable name is $contactId as defined on line 39.

-        $values[$contact_id]['qrcodecheckin.qrcode_url_' . $event_id] = $link;
-        $values[$contact_id]['qrcodecheckin.qrcode_html_' . $event_id] = E::ts('<div><img alt="QR Code with link to checkin page" src="%1"></div><div>You should see a QR code above which will be used to quickly check you into the event. If you do not see a code display above, please enable the display of images in your email program or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code in case you need to display it when you do not have Internet access.</div>', [
+        $values[$contactId]['qrcodecheckin.qrcode_url_' . $eventId] = $link;
+        $values[$contactId]['qrcodecheckin.qrcode_html_' . $eventId] = E::ts('<div><img alt="QR Code with link to checkin page" src="%1"></div><div>You should see a QR code above which will be used to quickly check you into the event. If you do not see a code display above, please enable the display of images in your email program or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code in case you need to display it when you do not have Internet access.</div>', [
           1 => $link,
         ]);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
$values[$contact_id]['qrcodecheckin.qrcode_url_' . $event_id] = $link;
$values[$contact_id]['qrcodecheckin.qrcode_html_' . $event_id] = E::ts('<div><img alt="QR Code with link to checkin page" src="%1"></div><div>You should see a QR code above which will be used to quickly check you into the event. If you do not see a code display above, please enable the display of images in your email program or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code in case you need to display it when you do not have Internet access.</div>', [
1 => $link,
]);
$values[$contactId]['qrcodecheckin.qrcode_url_' . $eventId] = $link;
$values[$contactId]['qrcodecheckin.qrcode_html_' . $eventId] = E::ts(
'<div><img alt="QR Code with link to checkin page" src="%1"></div>'
. '<div>You should see a QR code above which will be used to quickly check you into the event. '
. 'If you do not see a code display above, please enable the display of images in your email program '
. 'or try accessing it <a href="%1">directly</a>. You may want to take a screen grab of your QR Code '
. 'in case you need to display it when you do not have Internet access.</div>',
[
1 => $link,
]
);
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php
around lines 56 to 59, the variable $contact_id is used but not defined; replace
all instances of $contact_id with the correctly defined variable $contactId from
line 39 to fix the undefined variable error.

foreach ($participants as $participant) {
$contactId = $participant['contact_id'];

$participant_id = qrcodecheckin_participant_id_for_contact_id($contactId, $eventId);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Add missing dependency includes

The file uses functions from the qrcodecheckin extension (qrcodecheckin_participant_id_for_contact_id, qrcodecheckin_get_code, qrcodecheckin_create_image, qrcodecheckin_get_image_url) without including the required files. This could cause fatal errors if the extension isn't properly loaded.

Add the necessary require/include statement at the beginning of the file:

 // Include CRM_Core_Error directly for API v3.
 require_once 'CRM/Core/Error.php';
+// Include qrcodecheckin functions
+require_once __DIR__ . '/../../net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php';
 use Civi\Api4\Phone;

Verify the correct path to the qrcodecheckin extension:

Also applies to: 44-44, 48-48, 53-53


🏁 Script executed:

#!/bin/bash
# Description: Find the correct relative path to qrcodecheckin.php from the current file location

# Search for qrcodecheckin.php file
fd -t f "qrcodecheckin.php" | grep -v "/vendor/" | head -10

# Check if the extensions are in the same parent directory
fd -t d "net.ourpowerbase.qrcodecheckin" wp-content/civi-extensions/
fd -t d "civiglific" wp-content/civi-extensions/

Length of output: 536


Add missing qrcodecheckin include to avoid fatal errors

The cron class calls several qrcodecheckin_* functions without loading the extension, which will trigger undefined‐function errors if the extension isn’t already autoloaded. Add the require once at the top of the file, before the first qrcodecheckin_* call.

• File: wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php
• Insert before line 41 (and ahead of any qrcodecheckin_* invocation)

 require_once 'CRM/Core/Error.php';
+// Include qrcodecheckin functions
+require_once __DIR__ . '/../../../../net.ourpowerbase.qrcodecheckin-2.1.2/qrcodecheckin.php';
 use Civi\Api4\Phone;

This makes the following functions available and prevents fatal errors:

  • qrcodecheckin_participant_id_for_contact_id
  • qrcodecheckin_get_code
  • qrcodecheckin_create_image
  • qrcodecheckin_get_image_url
🤖 Prompt for AI Agents
In
wp-content/civi-extensions/civiglific/api/v3/Civiglific/CivicrmGlificSendWhatsappQrCron.php
before line 41, add a require_once statement to include the qrcodecheckin
extension file. This will ensure that all qrcodecheckin_* functions used in the
file are defined and prevent fatal undefined-function errors during execution.

Base automatically changed from develop to dev July 25, 2025 11:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant