PHPackages                             oat-sa/extension-tao-itemqti - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. oat-sa/extension-tao-itemqti

ActiveTao-extension

oat-sa/extension-tao-itemqti
============================

extension to create QTI items

v32.3.0(1mo ago)7117.4k↓38.1%14[19 PRs](https://github.com/oat-sa/extension-tao-itemqti/pulls)15GPL-2.0-onlyJavaScriptCI failing

Since Oct 8Pushed 1mo ago41 watchersCompare

[ Source](https://github.com/oat-sa/extension-tao-itemqti)[ Packagist](https://packagist.org/packages/oat-sa/extension-tao-itemqti)[ Docs](http://www.taotesting.com)[ RSS](/packages/oat-sa-extension-tao-itemqti/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (16)Versions (1493)Used By (15)

extension-tao-itemqti
=====================

[](#extension-tao-itemqti)

[![codecov](https://camo.githubusercontent.com/09927ee9bbd7bd8adf92a6747fb4ecb4dffd01eb622bbcd48edc2823711ccc99/68747470733a2f2f636f6465636f762e696f2f67682f6f61742d73612f657874656e73696f6e2d74616f2d6974656d7174692f6272616e63682f6d61737465722f67726170682f62616467652e7376673f746f6b656e3d5a455059724f35703772)](https://codecov.io/gh/oat-sa/extension-tao-itemqti)

extension to create QTI items for TAO

How to import items
-------------------

[](#how-to-import-items)

- [Importing items](./model/import/README.md)

Environment Variables
---------------------

[](#environment-variables)

### QTI Identifier Validator Pattern - `ENV_QTI_IDENTIFIER_VALIDATOR_PATTERN`

[](#qti-identifier-validator-pattern---env_qti_identifier_validator_pattern)

QTI Item identifiers by default are normalized strings that accepts everything in the pattern `/^[a-zA-Z_]{1}[a-zA-Z0-9_\.-]*$/u`. If for some reason you want to change this behavior, it's possible by using the environment variable `ENV_QTI_IDENTIFIER_VALIDATOR_PATTERN`with a different pattern. Example:

```
# Do not accept dots on the QTI Item identifier
ENV_QTI_IDENTIFIER_VALIDATOR_PATTERN='/^[a-zA-Z_]{1}[a-zA-Z0-9_-]*$/u'
```

This would mean that case the user tries to save or import an item with an identifier with dots, this would return an error:

[![Error Provided by ENV_QTI_IDENTIFIER_VALIDATOR_PATTERN environment variable](https://user-images.githubusercontent.com/11900046/151952020-e6ed4ff3-a499-4aa9-bd3e-d2bc81a83bd8.jpg)](https://user-images.githubusercontent.com/11900046/151952020-e6ed4ff3-a499-4aa9-bd3e-d2bc81a83bd8.jpg)

After that, please always run `taoUpdate` to make sure that all the configurations were successfully applied.

```
cd /path/to/tao/app

php tao/scripts/taoUpdate.php
```

### REMOTE\_LIST\_SCALE

[](#remote_list_scale)

This environment variable is used to enable the Remote List Scale feature. It allows you to define a remote list scale for items. Definition should be a link to a json file with correct structure.

```
[
    {
      "uri": "http://www.tao.lu/Ontologies/TAO.rdf#CERF-A1-A2",
      "label": "CEFR SCALE A1-A2",
      "values": {
        "1": "Under A1",
        "2": "A1",
        "3": "A2"
      }
    },
    {
      "uri": "http://www.tao.lu/Ontologies/TAO.rdf#CERF-A2-B1",
      "label": "CEFR SCALE A2-B1",
      "values": {
        "1": "Under A1",
        "2": "A1",
        "3": "A2",
        "4": "B1"
      }
    },
    {
      "uri": "http://www.tao.lu/Ontologies/TAO.rdf#CERF-B1-B2",
      "label": "CEFR SCALE B1-B2",
      "values": {
        "1": "Under A1",
        "2": "A1",
        "3": "A2",
        "4": "B1",
        "5": "B2"
      }
    },
    {
      "uri": "http://www.tao.lu/Ontologies/TAO.rdf#CERF",
      "label": "CEFR SCALE C1",
      "values": {
        "1": "Under C1",
        "2": "C1"
      }
    }
  ]
```

```
REMOTE_LIST_SCALE='https://gist.githubusercontent.com/bartlomiejmarszal/7bac38b07c965b75f6e4a5f19c0e6445/raw/e7c200c7333c895724dde757e1c8ce271eef7be1/scales.json'

```

### Feature Flags

[](#feature-flags)

VariableDescriptionDefault valueFEATURE\_FLAG\_UNIQUE\_NUMERIC\_QTI\_IDENTIFIERThis will replace Item Qti Identifier to 9 digits non editable field-REMOTE\_LIST\_SCALEDefine and enable Remote List Scale feature-FEATURE\_FLAG\_WIRIS\_MATH\_PATHToggles Wiris MathPath Editor for MathJax flowtrue

###  Health Score

66

—

FairBetter than 99% of packages

Maintenance90

Actively maintained with recent releases

Popularity39

Limited adoption so far

Community43

Growing community involvement

Maturity83

Battle-tested with a long release history

 Bus Factor5

5 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

949

Last Release

53d ago

Major Versions

v31.0.8 → v32.0.02026-02-20

30.54.4.4 → v32.0.12026-03-05

v31.6.4 → v32.1.12026-03-12

v31.6.5 → v32.1.22026-03-16

v31.6.6 → v32.3.02026-03-27

### Community

Maintainers

![](https://www.gravatar.com/avatar/98ddc6f1b615b1fac2d59f1e72d5dc6056cf6650414271da90cb3f0e203516fe?d=identicon)[bugalood](/maintainers/bugalood)

![](https://www.gravatar.com/avatar/c0ec704e0a8abaf0c27b227ad05d7aca23bc8f83d195229d94d4508cddc0fd24?d=identicon)[oat-lionel](/maintainers/oat-lionel)

![](https://www.gravatar.com/avatar/344a3314abc4364575e3ae1190a818e92411c2062f57ab77df9dabdd6572a7bc?d=identicon)[Wazelin](/maintainers/Wazelin)

---

Top Contributors

[![ssipasseuth](https://avatars.githubusercontent.com/u/8425344?v=4)](https://github.com/ssipasseuth "ssipasseuth (1903 commits)")[![krampstudio](https://avatars.githubusercontent.com/u/468620?v=4)](https://github.com/krampstudio "krampstudio (977 commits)")[![no-chris](https://avatars.githubusercontent.com/u/11467480?v=4)](https://github.com/no-chris "no-chris (572 commits)")[![jsconan](https://avatars.githubusercontent.com/u/1500098?v=4)](https://github.com/jsconan "jsconan (541 commits)")[![bziondik](https://avatars.githubusercontent.com/u/25976342?v=4)](https://github.com/bziondik "bziondik (520 commits)")[![bugalot](https://avatars.githubusercontent.com/u/4217431?v=4)](https://github.com/bugalot "bugalot (353 commits)")[![siwane](https://avatars.githubusercontent.com/u/8009602?v=4)](https://github.com/siwane "siwane (347 commits)")[![mike-ionut-mihai-sandu-tao](https://avatars.githubusercontent.com/u/50211080?v=4)](https://github.com/mike-ionut-mihai-sandu-tao "mike-ionut-mihai-sandu-tao (318 commits)")[![bartlomiejmarszal](https://avatars.githubusercontent.com/u/16231681?v=4)](https://github.com/bartlomiejmarszal "bartlomiejmarszal (280 commits)")[![llecaque](https://avatars.githubusercontent.com/u/5645487?v=4)](https://github.com/llecaque "llecaque (227 commits)")[![tikhanovichA](https://avatars.githubusercontent.com/u/1053022?v=4)](https://github.com/tikhanovichA "tikhanovichA (217 commits)")[![jbout](https://avatars.githubusercontent.com/u/5815304?v=4)](https://github.com/jbout "jbout (201 commits)")[![marpesia](https://avatars.githubusercontent.com/u/11692751?v=4)](https://github.com/marpesia "marpesia (196 commits)")[![zagovorichev](https://avatars.githubusercontent.com/u/1445911?v=4)](https://github.com/zagovorichev "zagovorichev (173 commits)")[![shaveko](https://avatars.githubusercontent.com/u/10635482?v=4)](https://github.com/shaveko "shaveko (162 commits)")[![oatymart](https://avatars.githubusercontent.com/u/43652944?v=4)](https://github.com/oatymart "oatymart (140 commits)")[![Karol-Stelmaczonek](https://avatars.githubusercontent.com/u/118974926?v=4)](https://github.com/Karol-Stelmaczonek "Karol-Stelmaczonek (126 commits)")[![AnastasiaArcadia](https://avatars.githubusercontent.com/u/60703274?v=4)](https://github.com/AnastasiaArcadia "AnastasiaArcadia (126 commits)")[![Silvia-loza](https://avatars.githubusercontent.com/u/60346520?v=4)](https://github.com/Silvia-loza "Silvia-loza (110 commits)")[![antoinerobin](https://avatars.githubusercontent.com/u/5881795?v=4)](https://github.com/antoinerobin "antoinerobin (100 commits)")

---

Tags

TAOcomputer-based-assessmentOATQTI

### Embed Badge

![Health badge](/badges/oat-sa-extension-tao-itemqti/health.svg)

```
[![Health](https://phpackages.com/badges/oat-sa-extension-tao-itemqti/health.svg)](https://phpackages.com/packages/oat-sa-extension-tao-itemqti)
```

###  Alternatives

[oat-sa/tao-core

TAO core extension

66136.7k74](/packages/oat-sa-tao-core)[oat-sa/extension-tao-itemqti-pci

1085.9k6](/packages/oat-sa-extension-tao-itemqti-pci)[oat-sa/tao-community

TAO is an Open Source e-Testing platform that empowers you to build, deliver, and share innovative and engaging assessments online – in any language or subject matter.

104.9k1](/packages/oat-sa-tao-community)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
