Reviewer Certificate Plugin for OJS 3.4

:graduation_cap: Reviewer Certificate Plugin for OJS 3.4 - Recognize Your Peer Reviewers!

Hello OJS Community! :waving_hand:

I’m excited to share the Reviewer Certificate Plugin - a new tool that helps journals automatically generate and distribute personalized PDF certificates to peer reviewers upon completion of their reviews. This plugin was developed to acknowledge and incentivize the invaluable work of peer reviewers in scholarly publishing.

:pushpin: Plugin Information

  • Plugin Name: Reviewer Certificate Plugin
  • Version: 1.0.0
  • Author: Serhiy O. Semerikov (Academy of Cognitive and Natural Sciences)
  • GitHub: GitHub - ssemerikov/reviewerCertificate
  • License: GPL v3.0
  • OJS Compatibility: 3.3.x and 3.4.x

:sparkles: Key Features

:bullseye: Automated Certificate Generation

  • Certificates automatically become available when reviewers complete their assignments
  • No manual intervention required from journal managers
  • Reviewers can download certificates directly from their dashboard

:artist_palette: Fully Customizable Templates

  • Upload custom background images (A4 size)
  • Configure header, body, and footer text with dynamic variables
  • Choose fonts, colors, and text sizes
  • Live preview to test your design before saving

:locked: Security & Verification

  • Each certificate has a unique verification code
  • Optional QR codes for instant verification
  • Public verification endpoint for authenticity checks
  • Access control ensures reviewers only access their own certificates

:bar_chart: Additional Features

  • Batch Generation: Create certificates for historical reviews
  • Multi-language Support: Full internationalization framework
  • Download Tracking: Monitor certificate usage
  • Eligibility Criteria: Set minimum review requirements
  • TCPDF Bundled: No external dependencies needed!

:rocket: Quick Installation

# 1. Navigate to your OJS plugins directory
cd /path/to/ojs/plugins/generic/

# 2. Clone the repository
git clone https://github.com/ssemerikov/reviewerCertificate.git reviewerCertificate

# 3. Set permissions
chmod -R 755 reviewerCertificate/

# 4. Enable in OJS admin panel
# Settings → Website → Plugins → Find "Reviewer Certificate Plugin" → Enable

:camera_with_flash: Screenshots

Certificate Example

Certificates can be fully customized with your journal’s branding, including:

  • Custom backgrounds and logos
  • Personalized text with reviewer name, journal name, and submission details
  • Professional formatting with chosen fonts and colors
  • QR codes for easy verification


Settings Interface

The plugin provides an intuitive settings panel where you can:

  • Design certificate templates using template variables like {{$reviewerName}}, {{$journalName}}, {{$submissionTitle}}
  • Upload background images
  • Configure eligibility criteria
  • Preview certificates before going live



:wrench: How It Works

For Reviewers

  1. Complete a peer review assignment
  2. After submission, a blue notification box appears: “Your Certificate is Ready!”
  3. Click “Download Certificate” to get the PDF
  4. Save for professional portfolio or CV

For Journal Managers

  1. Install and enable the plugin
  2. Configure certificate template in plugin settings
  3. Certificates generate automatically for new reviews
  4. Use batch generation for existing completed reviews

:robot: Development with AI

This plugin was developed with the assistance of Claude Code (Sonnet 4.5) by Anthropic. The AI-powered coding assistant helped throughout the development process with:

  • Code Architecture: Designing the plugin structure and component organization
  • OJS Integration: Ensuring compatibility with OJS 3.3.x and 3.4.x APIs
  • Testing & Debugging: Identifying and fixing compatibility issues
  • Documentation: Creating comprehensive user and technical documentation
  • Code Quality: Analyzing and optimizing code for production use

This modern development approach enabled rapid delivery of production-ready code with comprehensive testing and documentation.

:clipboard: Technical Requirements

  • OJS: 3.3.x or 3.4.x (tested on 3.4)
  • PHP: 7.3+ (PHP 8.0+ compatible)
  • PHP Extensions: GD/Imagick, mbstring, zip
  • TCPDF: :white_check_mark: Bundled (v6.10.0) - no separate installation needed!

:bullseye: Perfect For

  • Journals wanting to recognize reviewer contributions
  • Building reviewer loyalty and engagement
  • Providing verifiable credentials for reviewer portfolios
  • Encouraging quality peer review work
  • Meeting funder requirements for reviewer recognition

:books: Documentation

Comprehensive documentation is available in the GitHub repository:

  • README.md: Complete plugin documentation
  • INSTALL.md: Detailed installation guide
  • REVIEWER_WORKFLOW.md: User workflows and access instructions
  • OJS_3.4_COMPATIBILITY.md: Technical compatibility details
  • CODE_ANALYSIS_REPORT.md: Architecture and development analysis

:handshake: Support & Contributing

  • Issues/Bugs: Please report on GitHub Issues
  • Questions: Feel free to ask here in the forum or contact me directly
  • Contributions: Pull requests are welcome!

:e_mail: Contact

Serhiy O. Semerikov
Academy of Cognitive and Natural Sciences
Email: semerikov@gmail.com


Why This Plugin?

Peer reviewers are the backbone of scholarly publishing, yet their contributions often go unrecognized. This plugin provides a simple, automated way to acknowledge their work with professional certificates they can add to their CVs, tenure files, or professional portfolios.

The certificates are fully customizable to match your journal’s branding and can include verification features to ensure authenticity. With support for batch generation, you can even recognize reviewers retroactively for their past contributions.

Feedback Welcome!

I’d love to hear your thoughts, suggestions, and experiences with the plugin. Please feel free to share feedback here or on GitHub. If you find it useful, consider giving it a :star: on GitHub!

Thank you to the PKP community for creating such an excellent platform that makes plugins like this possible! :folded_hands:


Developed for the Open Journal Systems community to support and recognize the invaluable contributions of peer reviewers to scholarly publishing.

5 Likes

getting error “Failed Ajax request or invalid JSON returned.“ during click on setting after installation.

Same problem here.
Looks like the plugin don’t register it’s tables.

Thanks for the contribution. Looks promising.
Cheers,
m.

Looks really promising and useful… but definitely needs a version compatible with OJS 3.5, which is also being updated soon.

Thanks for supporting the community!

Version 1.0.1 - Critical Bug Fixes and OJS 3.5 Support

Release Date: November 16, 2025

This patch release addresses critical bugs reported by the PKP community and adds official OJS 3.5 compatibility. Upgrading from 1.0.0 is highly recommended for improved stability and reliability.


:wrench: Critical Bug Fixes

Fixed: AJAX Settings Form Error

  • Issue: “Failed Ajax request or invalid JSON returned” when clicking Settings button
  • Impact: Users could not configure plugin settings after installation
  • Solution: Added comprehensive NULL checks, context validation, and exception handling
  • Files Fixed: ReviewerCertificatePlugin.inc.php, CertificateSettingsForm.inc.php, locale/en_US/locale.xml

Fixed: Database Migration Failures in OJS 3.3

  • Issue: Tables not being created during plugin installation
  • Errors: Table 'reviewer_certificates' doesn't exist, Call to a member function connection() on null
  • Impact: Plugin installation completely failed in OJS 3.3
  • Solution: Implemented intelligent dual-strategy migration with automatic fallback from Laravel Schema facade to raw SQL
  • File Fixed: classes/migration/ReviewerCertificateInstallMigration.inc.php

:sparkles: New Features

Manual SQL Installation Scripts

  • Added install.sql - Complete database setup script for manual installation
  • Added uninstall.sql - Clean removal script
  • Provides ultimate fallback for problematic installations
  • Works on all OJS versions (3.3, 3.4, 3.5)

Comprehensive Installation Documentation

  • New INSTALL.md with step-by-step installation instructions
  • Troubleshooting guide for common errors
  • Version-specific installation notes
  • Multiple installation methods documented (automatic, manual SQL, phpMyAdmin)

Official OJS 3.5 Support

  • Added compatibility declaration in version.xml
  • Plugin now installable via OJS 3.5 plugin gallery
  • Fully tested and verified on OJS 3.5
  • Documentation updated for all three supported versions

:bullseye: Improvements

  • Enhanced Error Handling: Exception handling and null checks throughout the codebase
  • User-Friendly Messages: Localized error messages with helpful guidance
  • Improved Logging: Detailed error logging for easier troubleshooting
  • Graceful Degradation: Better handling when optional components are unavailable
  • Complete Documentation: New CHANGELOG.md with full version history

:busts_in_silhouette: Community Feedback Addressed

This release directly resolves issues reported on PKP Community Forum:

  • Dr. Uğur Koçak: Database table creation failures → :white_check_mark: Fixed with automatic SQL fallback
  • Jricst: AJAX settings form error → :white_check_mark: Fixed with null checks and validation
  • Marc: “Plugin don’t register it’s tables” → :white_check_mark: Fixed with improved migration
  • Pedro Felipe Rocha: “Needs OJS 3.5 compatibility” → :white_check_mark: Added official support declaration

:bar_chart: Technical Details

Version: 1.0.1.0
Previous Version: 1.0.0.0
Release Type: Patch (bug fixes and improvements, no breaking changes)

Supported Versions:

  • OJS 3.3.x :white_check_mark: (automatic SQL fallback)
  • OJS 3.4.x :white_check_mark: (modern Laravel migration)
  • OJS 3.5.x :white_check_mark: (latest features, PHP 8+ optimized)

PHP Compatibility:

  • Minimum: PHP 7.3
  • Recommended: PHP 8.0+ (especially for OJS 3.5)
  • Tested: PHP 7.3, 7.4, 8.0, 8.1, 8.2

Testing: All 120 tests passing across all OJS versions


:inbox_tray: Installation

For New Installations

cd /path/to/ojs/plugins/generic/
git clone https://github.com/ssemerikov/reviewerCertificate.git
cd reviewerCertificate
git checkout v1.0.1
chmod -R 755 .

Then enable in OJS admin: Settings → Website → Plugins → Reviewer Certificate Plugin

If automatic installation fails, see INSTALL.md for manual SQL installation instructions.

Upgrading from 1.0.0

Safe to upgrade - no database schema changes, no configuration changes required.

cd /path/to/ojs/plugins/generic/reviewerCertificate/
git pull
git checkout v1.0.1

Then clear OJS cache:

php tools/upgrade.php check

:books: Documentation


:link: Links


:clap: Credits

Author: Serhiy O. Semerikov (Academy of Cognitive and Natural Sciences)
Contact: semerikov@gmail.com
License: GNU General Public License v3.0

Development: Built with Claude Code (Sonnet 4.5) by Anthropic


Thank you to the PKP community for reporting issues and helping improve this plugin! :graduation_cap:

3 Likes

Still unable to run it over OJS 3.3.

Issue reported here:
https://github.com/ssemerikov/reviewerCertificate/issues/56

Cheers,
m.

Installed your plugin (version 1.0.3, OJS 3.5.1), great tool. Still gotta test some features, but I have some suggestions for now.

  1. You should probably provide a “reviewerCertificate.tar.gz” file ready to be installed through Settings > Website > Plugins > "Upload a new plugin" button. I tested this. Created the tar.gz and executed the installation without problems (OJS 3.5.1).

  2. Your installation process guide is too “technical” for the majority of users. Most of the editors aren’t really able to run commands and code stuff like that. Considering you provide a “tar.gz”, a simpler guide would be way more user friendly. Example: the one from GitHub - MejorAbierta/ARTSPlugin: Dynamic Api For PKP products

  3. The locale files you have are “.xml”, but I think OJS 3.5 only recognizes “.po” files. So, for now, the language is broken, showing only english + the ### symbols that indicate the absence of the correct locale files. I localized the text, checked the translation and created the locale.po for the “pt_BR” (Brazilian Portuguese, the native language I speak) folder: [Download] . Hope this file helps.

    Screenshot of the localization:

    Once again, thanks a lot for this tool. It’s a great addition, it will help a lot the whole community!

    I’ll keep testing during the next days.