# ikhwan-arief/doajpreassessment architecture

> Architecture diagram of the GitHub repository ikhwan-arief/doajpreassessment, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ikhwan-arief/doajpreassessment
- Repository: https://github.com/ikhwan-arief/doajpreassessment

## Overview

DOAJ Pre-Assessment is an OJS 3.3 plugin that gathers public-site and OJS-published-content evidence, evaluates it with deterministic rules, and presents findings and corrective actions. Users enter through the OJS backend, pass access and English-only acknowledgement gates, then run an assessment; they can review history, manage corrective actions, and export reports. The README documents major capabilities, while sampled excerpts show only portions of the handler, crawl, assessment, and reporting paths; edges based on product-level behavior cite the README.

Main entry points: [`pages/DoajPreAssessmentHandler.inc.php`](https://github.com/ikhwan-arief/doajpreassessment/blob/main/pages/DoajPreAssessmentHandler.inc.php) (Backend handler), [`classes/services/DoajPaCrawlService.inc.php`](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaCrawlService.inc.php) (Website crawl), [`classes/persistence/DoajPaDb.inc.php`](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/persistence/DoajPaDb.inc.php) (Plugin database), [`classes/framework/DoajPaAssessmentOrchestrator.inc.php`](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/framework/DoajPaAssessmentOrchestrator.inc.php) (Assessment orchestrator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["OJS access"]
  node_plugin["Plugin entry"]
  node_handler["Backend handler"]
  node_access["Access policy"]
  node_role_query["Role lookup"]
  node_language_gate["English acknowledgement"]
end

subgraph group_evidence["Evidence collection"]
  node_crawl_service["Website crawl"]
  node_crawler["HTTP crawl controls"]
  node_backend_source["OJS content source"]
  node_extractors["HTML and PDF extraction"]
end

subgraph group_assessment["Assessment engine"]
  node_run_service["Assessment runs"]
  node_orchestrator["Assessment orchestrator"]
  node_evaluation_context["Evidence context"]
  node_checks["Deterministic checks"]
  node_rule_data["Criteria datasets"]
end

subgraph group_records["History and actions"]
  node_database[("Plugin database<br/>[DoajPaDb.inc.php]")]
  node_history["Run history and diffs"]
  node_actions["Corrective actions"]
end

subgraph group_outputs["Review and reports"]
  node_read_service["Read views"]
  node_report_model["Report model and plan"]
  node_report_export["Report export"]
  node_renderers["HTML PDF DOCX"]
end

node_journal_user(("Journal user"))
node_ojs_database[("OJS database")]
node_journal_site["Journal website"]
node_poppler["Poppler optional"]

node_journal_user -->|"opens in OJS"| node_plugin
node_plugin -->|"routes requests"| node_handler
node_handler -->|"checks authorization"| node_access
node_access -->|"looks up roles"| node_role_query
node_handler -->|"requires acknowledgement"| node_language_gate
node_handler -->|"starts crawl"| node_crawl_service
node_crawl_service -->|"fetches scoped pages"| node_crawler
node_crawler -->|"reads public pages"| node_journal_site
node_crawl_service -->|"collects published content"| node_backend_source
node_backend_source -->|"reads journal content"| node_ojs_database
node_crawl_service -->|"extracts page and PDF text"| node_extractors
node_extractors -.->|"may use"| node_poppler
node_handler -->|"starts assessment run"| node_run_service
node_handler -->|"requests assessment"| node_orchestrator
node_orchestrator -->|"prepares evidence context"| node_evaluation_context
node_orchestrator -->|"evaluates criteria"| node_checks
node_checks -->|"applies criteria"| node_rule_data
node_run_service -->|"stores run evidence"| node_database
node_history -->|"tracks run lifecycle"| node_database
node_actions -->|"stores action register"| node_database
node_handler -->|"loads form guide"| node_read_service
node_read_service -->|"reads assessment history"| node_database
node_handler -->|"manages corrections"| node_actions
node_handler -->|"requests report export"| node_report_export
node_report_export -->|"builds report content"| node_report_model
node_report_model -->|"renders common model"| node_renderers

click node_plugin "https://github.com/ikhwan-arief/doajpreassessment/blob/main/DoajPreAssessmentPlugin.inc.php"
click node_handler "https://github.com/ikhwan-arief/doajpreassessment/blob/main/pages/DoajPreAssessmentHandler.inc.php"
click node_access "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/auth/DoajPaAccessPolicy.inc.php"
click node_role_query "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/auth/DoajPaRoleQuery.inc.php"
click node_language_gate "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/gate/DoajPaEnglishGate.inc.php"
click node_crawl_service "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaCrawlService.inc.php"
click node_crawler "https://github.com/ikhwan-arief/doajpreassessment/tree/main/classes/crawler"
click node_backend_source "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/crawler/DoajPaBackendSource.inc.php"
click node_extractors "https://github.com/ikhwan-arief/doajpreassessment/tree/main/classes/extract"
click node_run_service "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaAssessmentRunService.inc.php"
click node_orchestrator "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/framework/DoajPaAssessmentOrchestrator.inc.php"
click node_evaluation_context "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/framework/DoajPaEvaluationContext.inc.php"
click node_checks "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/rules/DoajPaChecks.inc.php"
click node_rule_data "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/rules/data/DoajPaApprovedDataset.inc.php"
click node_database "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/persistence/DoajPaDb.inc.php"
click node_history "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/history/DoajPaLifecycle.inc.php"
click node_actions "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaCorrectiveActionService.inc.php"
click node_read_service "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaReadService.inc.php"
click node_report_model "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/reports/DoajPaReportModel.inc.php"
click node_report_export "https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaReportExportService.inc.php"
click node_renderers "https://github.com/ikhwan-arief/doajpreassessment/tree/main/classes/reports"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plugin,node_handler,node_access,node_role_query,node_language_gate,node_journal_user toneBlue
class node_crawl_service,node_crawler,node_backend_source,node_extractors,node_ojs_database toneAmber
class node_run_service,node_orchestrator,node_evaluation_context,node_checks,node_rule_data toneMint
class node_database,node_history,node_actions toneRose
class node_read_service,node_report_model,node_report_export,node_renderers,node_journal_site,node_poppler toneIndigo
```

## Components

### OJS access

- [Plugin entry](https://github.com/ikhwan-arief/doajpreassessment/blob/main/DoajPreAssessmentPlugin.inc.php): `DoajPreAssessmentPlugin.inc.php`
- [Backend handler](https://github.com/ikhwan-arief/doajpreassessment/blob/main/pages/DoajPreAssessmentHandler.inc.php): `pages/DoajPreAssessmentHandler.inc.php`
- [Access policy](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/auth/DoajPaAccessPolicy.inc.php): `classes/auth/DoajPaAccessPolicy.inc.php`
- [Role lookup](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/auth/DoajPaRoleQuery.inc.php): `classes/auth/DoajPaRoleQuery.inc.php`
- [English acknowledgement](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/gate/DoajPaEnglishGate.inc.php): `classes/gate/DoajPaEnglishGate.inc.php`

### Evidence collection

- [Website crawl](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaCrawlService.inc.php): `classes/services/DoajPaCrawlService.inc.php`
- [HTTP crawl controls](https://github.com/ikhwan-arief/doajpreassessment/tree/main/classes/crawler): `classes/crawler`
- [OJS content source](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/crawler/DoajPaBackendSource.inc.php): `classes/crawler/DoajPaBackendSource.inc.php`
- [HTML and PDF extraction](https://github.com/ikhwan-arief/doajpreassessment/tree/main/classes/extract): `classes/extract`

### Assessment engine

- [Assessment runs](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaAssessmentRunService.inc.php): `classes/services/DoajPaAssessmentRunService.inc.php`
- [Assessment orchestrator](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/framework/DoajPaAssessmentOrchestrator.inc.php): `classes/framework/DoajPaAssessmentOrchestrator.inc.php`
- [Evidence context](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/framework/DoajPaEvaluationContext.inc.php): `classes/framework/DoajPaEvaluationContext.inc.php`
- [Deterministic checks](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/rules/DoajPaChecks.inc.php): `classes/rules/DoajPaChecks.inc.php`
- [Criteria datasets](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/rules/data/DoajPaApprovedDataset.inc.php): `classes/rules/data/DoajPaApprovedDataset.inc.php`

### History and actions

- [Plugin database](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/persistence/DoajPaDb.inc.php): `classes/persistence/DoajPaDb.inc.php`
- [Run history and diffs](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/history/DoajPaLifecycle.inc.php): `classes/history/DoajPaLifecycle.inc.php`
- [Corrective actions](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaCorrectiveActionService.inc.php): `classes/services/DoajPaCorrectiveActionService.inc.php`

### Review and reports

- [Read views](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaReadService.inc.php): `classes/services/DoajPaReadService.inc.php`
- [Report model and plan](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/reports/DoajPaReportModel.inc.php): `classes/reports/DoajPaReportModel.inc.php`
- [Report export](https://github.com/ikhwan-arief/doajpreassessment/blob/main/classes/services/DoajPaReportExportService.inc.php): `classes/services/DoajPaReportExportService.inc.php`
- [HTML PDF DOCX](https://github.com/ikhwan-arief/doajpreassessment/tree/main/classes/reports): `classes/reports`

### Other components

- **Journal user**
- **OJS database**
- **Journal website**
- **Poppler optional**

## Connections

- Journal user → Plugin entry: opens in OJS (evidence: `README.md`)
- Plugin entry → Backend handler: routes requests (evidence: `README.md`)
- Backend handler → Access policy: checks authorization (evidence: `pages/DoajPreAssessmentHandler.inc.php`)
- Access policy → Role lookup: looks up roles (evidence: `classes/auth/DoajPaRoleQuery.inc.php`)
- Backend handler → English acknowledgement: requires acknowledgement (evidence: `pages/DoajPreAssessmentHandler.inc.php`)
- Backend handler → Website crawl: starts crawl (evidence: `README.md`)
- Website crawl → HTTP crawl controls: fetches scoped pages (evidence: `README.md`)
- HTTP crawl controls → Journal website: reads public pages (evidence: `README.md`)
- Website crawl → OJS content source: collects published content (evidence: `README.md`)
- OJS content source → OJS database: reads journal content (evidence: `README.md`)
- Website crawl → HTML and PDF extraction: extracts page and PDF text (evidence: `README.md`)
- HTML and PDF extraction → Poppler optional: may use (evidence: `README.md`)
- Backend handler → Assessment runs: starts assessment run (evidence: `README.md`)
- Backend handler → Assessment orchestrator: requests assessment (evidence: `README.md`)
- Assessment orchestrator → Evidence context: prepares evidence context (evidence: `classes/framework/DoajPaAssessmentOrchestrator.inc.php`)
- Assessment orchestrator → Deterministic checks: evaluates criteria (evidence: `README.md`)
- Deterministic checks → Criteria datasets: applies criteria (evidence: `README.md`)
- Assessment runs → Plugin database: stores run evidence (evidence: `classes/services/DoajPaAssessmentRunService.inc.php`)
- Run history and diffs → Plugin database: tracks run lifecycle (evidence: `README.md`)
- Corrective actions → Plugin database: stores action register (evidence: `README.md`)
- Backend handler → Read views: loads form guide (evidence: `pages/DoajPreAssessmentHandler.inc.php`)
- Read views → Plugin database: reads assessment history (evidence: `README.md`)
- Backend handler → Corrective actions: manages corrections (evidence: `README.md`)
- Backend handler → Report export: requests report export (evidence: `README.md`)
- Report export → Report model and plan: builds report content (evidence: `README.md`)
- Report model and plan → HTML PDF DOCX: renders common model (evidence: `classes/reports/DoajPaReportModel.inc.php`)
