jBackend for Joomla 3.0

jBackend for Joomla 3.0 (24)

jBackend for Joomla 3.0

The K2 Module is implemented with the plg_jbackend_k2 plugin. It provides functions related to K2 content construction kit for Joomla (items and categories). Here is the list of supported methods.

Get the list of categories

Request parameters

action=get
module=k2
resource=categories
rootid=<R> (optional)
endlevel=<E> (optional)

Example

<end-point>?action=get&module=k2&resource=categories&rootid=<R>&endlevel=<E>

Example (REST format)

<end-point>/get/k2/categories?rootid=<R>

Response

{
    "status": "ok",
    "total": <T>,
    "categories": [
        {
            "id": "<category id>",
            "name": "<category name>",
            "alias": "<category alias>",
            "description": "<category description>",
            "parent": "<parent category id>"
        },
        ...
        {
            "id": "<category id>",
            "name": "<category name>",
            "alias": "<category alias>",
            "description": "<category description>",
            "parent": "<parent category id>"
        }
    ]
}

Notes

If rootid is specified, starts to get subcategories from the specified category id instead of the root category. If endlevel is specified, get categories and all subcategories up to the specified number of level, otherwise get all levels (default).

 

Get a category

Request parameters

action=get
module=k2
resource=categories
id=<N>

Example

<end-point>?action=get&module=k2&resource=categories&id=<N>

Example (REST format)

<end-point>/get/k2/categories/<N>

Response

{
    "status": "ok",
    "id": "<category id>",
    "name": "<category name>",
    "alias": "<category alias>",
    "description": "<category description>",
    "robots": "<meta robots>",
    "author": "<meta author>",
    "language": "<language code>",
    "parent": "<category id>"
}

Notes

Language can be "*" if any.

 

Get the list of items

Request parameters

action=get
module=k2
resource=items
cats=<C1,C2,...,CN> (optional)
subs=<0|1> (optional)
featured=<0|1|2> (optional)
limit=<L> (optional)
page=<P> (optional)
ordering=<field> (optional)

Example

<end-point>?action=get&module=k2&resource=items&cats=<C>&subs=1

Example (REST format)

<end-point>/get/k2/items?cats=<C>&limit=<L>&page=<P>

Response

{
    "status": "ok",
    "total": "<total items>",
    "limit": <pagination limit>,
    "offset": <pagination offset>,
    items: [
        {
            "id": "<item id>",
            "title": "<item title>",
            "alias": "<item alias>",
            "content": "<item content>",
            "featured": "<featured>",
            "images": {
                "image": "<image URL>",
                "imageWidth": "<image width>",
                "image_caption": "<image caption>",
                "image_credits": "<image credits>",
                "imageXSmall": "<image extra small URL>",
                "imageSmall": "<image small URL>",
                "imageMedium": "<image medium URL>",
                "imageLarge": "<image large URL>",
                "imageXLarge": "<image extra large URL>"
            },
            "video": {
                "video": "<video URL>",
                "video_caption": "<video caption>",
                "video_credits": "<video credits>"
            },
        "language": "<item language>",
        "category_id": "<category id>",
        "category_name": "<category name>",
        "author": "<item author>",
        "created": "<item creation date>",
        "modified": "<item modification date>"
        },
        ...
        {
            ...
        }
    ]
}

Notes

Cats:
List of categories id to include

Subs:
0=Do not include sub categories (default), 1=Include sub categories

Featured:
0=Hide, 1=Show (default), 2=Show only featured items

Ordering:
date, rdate, alpha, ralpha, order, rorder, featured, hits, rand, best, modified, publishUp, id (default)

Created and modified date format is YYYY-MM-DD HH:MM:SS

 

Get an item

Request parameters

action=get
module=k2
resource=items
id=<N>

Example

<end-point>?action=get&module=k2&resource=items&id=<N>

Example (REST format)

<end-point>/get/k2/items/<N>

Response

{
    "status": "ok",
    "id": "<item id>",
    "title": "<item title>",
    "alias": "<item alias>",
    "content": "<item content>",
    "featured": "<featured>",
    "images": {
        "image": "<image URL>",
        "imageWidth": "<image width>",
        "image_caption": "<image caption>",
        "image_credits": "<image credits>",
        "imageXSmall": "<image extra small URL>",
        "imageSmall": "<image small URL>",
        "imageMedium": "<image medium URL>",
        "imageLarge": "<image large URL>",
        "imageXLarge": "<image extra large URL>"
    },
    "video": {
        "video": "<video URL>",
        "video_caption": "<video caption>",
        "video_credits": "<video credits>"
    },
    "metadesc": "<meta description>",
    "metakey": "<meta keywords>",
    "metadata": {
        "robots": "<meta robots>",
        "author": "<meta author>",
        "rights": "<meta content rights>",
        "xreference": "<meta external reference>"
    },
    "language": "<language code>",
    "category_id": "<category id>",
    "category_name": "<category name>",
    "author": "<item author>",
    "created": "<item creation date>",
    "modified": "<item modification date>"
}

Notes

Created and modified date format is YYYY-MM-DD HH:MM:SS

Language can be "*" if any.

 

Plugin Settings

jBackend K2 Plugin Settings

The following options are available for user plugin:

Option Description
Full image URL Generate absolute URL (i.e. with domain) for images fields.
Full video URL Generate absolute URL (i.e. with domain) for video fields.
Full img tag URL Force absolute URL (i.e. with domain) in any HTML img tag.
Content in items Include or exclude full content in the items response.

The SobiPro Module is implemented with the plg_jbackend_sobipro plugin. It provides functions related to SobiPro directory extension (sections, categories and entries). Here is the list of supported methods.

Get the list of sections

Request parameters

action=get
module=sobipro
resource=sections

Example

<end-point>?action=get&module=sobipro&resource=sections

Example (REST format)

<end-point>/get/sobipro/sections

Response

{
    "status": "ok",
    "total": <T>,
    "sections": [
        {
            "id": "<section id>",
            "nid": "<section nid>",
            "name": "<section name>"
        },
        ...
        {
            "id": "<section id>",
            "nid": "<section nid>",
            "name": "<section name>"
        }
]}

 

Get a section

Request parameters

action=get
module=sobipro
resource=sections
id=<N>

Example

<end-point>?action=get&module=sobipro&resource=sections&id=<N>

Example (REST format)

<end-point>/get/sobipro/sections/<N>

Response

{
    "status": "ok",
    "id": "<section id>",
    "nid": "<section nid>",
    "name": "<section name>",
    "description": "<section description>",
    "owner": "<section owner id>",
    "counter": "<counter>",
    "createdTime": "<created time>",
    "updatedTime": "<updated time>",
    "metaDesc": "<meta description>",
    "metaKeys": "<meta keywords>",
    "metaAuthor": "<meta author>",
    "metaRobots": "<meta robots>",
    "version": "<version number>"
}

Notes

Created and updated date format is YYYY-MM-DD HH:MM:SS

 

Get the list of categories

Request parameters

action=get
module=sobipro
resource=categories
parent=<N>

Example

<end-point>?action=get&module=sobipro&resource=categories&parent=<N>

Example (REST format)

<end-point>/get/sobipro/categories?parent=<N>

Response

{
    "status": "ok",
    "total": <T>,
    "categories": [
        {
            "id": "<category id>",
            "nid": "<category nid>",
            "name": "<category name>",
            "owner": "<owner id>",
            "counter": "<counter>",
            "createdTime": "<created time>",
            "updatedTime": "<updated time>",
            "metaDesc": "<meta description>",
            "metaKeys": "<meta keywords>",
            "metaAuthor": "<meta author>",
            "metaRobots": "<meta robots>",
            "version": "<version number>"
        },
        ...
        {
            "id": "<category id>",
            "nid": "<category nid>",
            "name": "<category name>",
            "owner": "<owner id>",
            "counter": "<counter>",
            "createdTime": "<created time>",
            "updatedTime": "<updated time>",
            "metaDesc": "<meta description>",
            "metaKeys": "<meta keywords>",
            "metaAuthor": "<meta author>",
            "metaRobots": "<meta robots>",
            "version": "<version number>"
        }
]}

Notes

Created and updated date format is YYYY-MM-DD HH:MM:SS

 

Get a category

Request parameters

action=get
module=sobipro
resource=categories
id=<N>

Example

<end-point>?action=get&module=sobipro&resource=categories&id=<N>

Example (REST format)

<end-point>/get/sobipro/categories/<N>

Response

{
    "status": "ok",
    "id": "<category id>",
    "nid": "<category nid>",
    "name": "<category name>",
    "description": "<category description>",
    "owner": "<category owner id>",
    "counter": "<counter>",
    "createdTime": "<created time>",
    "updatedTime": "<updated time>",
    "metaDesc": "<meta description>",
    "metaKeys": "<meta keywords>",
    "metaAuthor": "<meta author>",
    "metaRobots": "<meta robots>",
    "version": "<version number>",
    "parent": "<parent id>"
}

Notes

Created and updated date format is YYYY-MM-DD HH:MM:SS

 

Get the list of entries

Request parameters

action=get
module=sobipro
resource=entries
category=<C>

Example

<end-point>?action=get&module=sobipro&resource=entries&category=<C>

Example (REST format)

<end-point>/get/sobipro/entries?category=<C>

Response

{
    "status": "ok",
    "total": <T>,
    "entries": [
        {
            "id": "<entry id>",
            "nid": "<entry nid>",
            "name": "<entry name>",
            "owner": "<owner id>",
            "counter": "<counter>",
            "createdTime": "<created time>",
            "updatedTime": "<updated time>",
            "metaDesc": "<meta description>",
            "metaKeys": "<meta keywords>",
            "metaAuthor": "<meta author>",
            "metaRobots": "<meta robots>",
            "version": "<version number>"
        },
        ...
        {
            "id": "<entry id>",
            "nid": "<entry nid>",
            "name": "<entry name>",
            "owner": "<owner id>",
            "counter": "<counter>",
            "createdTime": "<created time>",
            "updatedTime": "<updated time>",
            "metaDesc": "<meta description>",
            "metaKeys": "<meta keywords>",
            "metaAuthor": "<meta author>",
            "metaRobots": "<meta robots>",
            "version": "<version number>"
        }
]}

Notes

Created and updated date format is YYYY-MM-DD HH:MM:SS

 

Get an entry

Request parameters

action=get
module=sobipro
resource=entries
id=<N>

Example

<end-point>?action=get&module=sobipro&resource=entries&id=<N>

Example (REST format)

<end-point>/get/sobipro/entries/<N>

Response

{
    "status": "ok",
    "id": "<entry id>",
    "nid": "<entry nid>",
    "name": "<entry name>",
    "owner": "<entry owner id>",
    "section": "<entry section id>",
    "counter": "<counter>",
    "createdTime": "<created time>",
    "updatedTime": "<updated time>",
    "metaDesc": "<meta description>",
    "metaKeys": "<meta keywords>",
    "metaAuthor": "<meta author>",
    "metaRobots": "<meta robots>",
    "version": "<version number>",
    "fields": [
        {
            "name": "<field name>",
            "fid": "<field id>",
            "nid": "<field nid>",
            "sid": "<field sid>",
            "section": "<section id>",
            "lang": "<language code>",
            "_data": "<field data>",
            "_rawData": "<field raw data>",
            "fieldType": "<field type>",
            "isFree": "<is free>",
            "position": "<position>"
        },
        ...
        {
            "name": "<field name>",
            "fid": "<field id>",
            "nid": "<field nid>",
            "sid": "<field sid>",
            "section": "<section id>",
            "lang": "<language code>",
            "_data": "<field data>",
            "_rawData": "<field raw data>",
            "fieldType": "<field type>",
            "isFree": "<is free>",
            "position": "<position>"
        }
]}

Notes

Created and updated date format is YYYY-MM-DD HH:MM:SS

 

Plugin Settings

jBackend SobiPro Plugin Settings

The following options are available for user plugin:

Option Description
JSON Entries Enable JSON payload on entries action.

The ZOO Module is implemented with the plg_jbackend_zoo plugin. It provides functions related to ZOO extension (applications, categories and items). Here is the list of supported methods.

Get the list of categories

Request parameters

action=get
module=zoo
resource=categories
app=<app id>

Example

<end-point>?action=get&module=zoo&resource=categories&app=<A>

Example (REST format)

<end-point>/get/zoo/categories?app=<A>

Response

{
    "status": "ok",
    "total": <T>,
    "categories": [
        {
            "id": "<category id>",
            "name": "<category name>",
            "alias": "<category alias>",
            "description": "<description>",
            "parent": "<parent id>"
        },
        ...
        {
            "id": "<category id>",
            "name": "<category name>",
            "alias": "<category alias>",
            "description": "<description>",
            "parent": "<parent id>"
        }
]}

 

Get a category

Request parameters

action=get
module=zoo
resource=categories
id=<N>
app=<app id>

Example

<end-point>?action=get&module=zoo&resource=categories&id=<N>&app=<A>

Example (REST format)

<end-point>/get/zoo/categories/<N>?app=<A>

Response

{
    "status": "ok",
    "id": "<category id>",
    "name": "<category name>",
    "alias": "<category alias>",
    "description": "<category description>",
    "application_id": "<application id>",
    "parent": "<parent id>",
    "ordering": "<ordering>",
    "content_subtitle": "<content subtitle>",
    "content_image": "<content image>",
    "content_image_width": "<content image width>",
    "content_image_height": "<content image height>",
    "metadata_title": "<meta title>",
    "metadata_description": "<meta description>",
    "metadata_keywords": "<meta keywords>",
    "metadata_robots": "<meta robots>",
    "metadata_author": "<meta author>"
}

 

Get the list of items

Request parameters

action=get
module=zoo
resource=items
category=<C>
limit=<L> (optional)
page=<P> (optional)
app=<app id>

Example

<end-point>?action=get&module=zoo&resource=items&category=<C>&app=<A>

Example (REST format)

<end-point>/get/zoo/items?category=<C>&app=<A>

Response

{
    "status": "ok",
    "total": <T>,
    "limit": <L>,
    "page": <P>,
    "items": [
        {
            "id": "<item id>",
            "name": "<item name>",
            "alias": "<item alias>",
            "created": "<created date>",
            "created_by": "<created by id>",
            "modified": "<modified date>",
            "modified_by": "<modified by id>",
            "publish_up": "<publish up date>",
            "publish_down": "<publish down date>"
        },
        ...
        {
            "id": "<item id>",
            "name": "<item name>",
            "alias": "<item alias>",
            "created": "<created date>",
            "created_by": "<created by id>",
            "modified": "<modified date>",
            "modified_by": "<modified by id>",
            "publish_up": "<publish up date>",
            "publish_down": "<publish down date>"
        }
]
}

Notes

Created and modified date format is YYYY-MM-DD HH:MM:SS

 

Get an item

Request parameters

action=get
module=zoo
resource=items
id=<N>
app=<app id>

Example

<end-point>?action=get&module=zoo&resource=items&id=<N>&app=<A>

Example (REST format)

<end-point>/get/zoo/items/<N>=?app=<A>

Response

{
    "status": "ok",
    "id": "<item id>",
    "name": "<item name>",
    "alias": "<item alias>",
    "application_id": "<application id>",
    "type": "<item type>",
    "created": "<created date>",
    "created_by": "<created by id>",
    "modified": "<modified date>",
    "modified_by": "<modified by id>",
    "publish_up": "<publish up date>",
    "publish_down": "<publish down date>",
    "priority": "<item priority>",
    "state": "<item state>",
    "searchable": "<is searchable>",
    "access": "<item access>",
    "hits": <item hits>,
    "metadata_title": "<meta title>",
    "metadata_description": "<meta description>",
    "metadata_keywords": "<meta keywords>",
    "metadata_robots": "<meta robots>",
    "metadata_author": "<meta author>",
    "enable_comments": "<enable comments>",
    "primary_category": "<primary category id>",
    "elements": {
        "<element 1 id>": {
            "identifier": "<element 1 id>",
            "type": "<element type>",
            "data": {
                "<field 1 name>": "<field 1 value>",
                ...
                "<field M name>": "<field M value>"
            }
        },
        ...
        "<element N id>": {
            "identifier": "<element N id>",
            "type": "<element type>",
            "data": {
                "<field 1 name>": "<field 1 value>",
                ...
                "<field L name>": "<field L value>"
            }
        },
    }
}

Notes

Created and modified date format is YYYY-MM-DD HH:MM:SS

When option Identify elements is set to No, the elements structure is different:

    "elements": [
        {
            "identifier": "<element 1 id>",
            "type": "image",
            "data": {
                "<field 1 name>": "<field 1 value>",
                ...
                "<field M name>": "<field M value>"
            }
        },
        {
            "identifier": "<element N id>",
            "type": "textarea",
            "data": {
                "<field 1 name>": "<field 1 value>",
                ...
                "<field L name>": "<field L value>"
            }
        }
    ]

 

Plugin Settings

jBackend ZOO Plugin Settings

The following options are available for user plugin:

Option Description
Update hits Update hits counter for each request.
Identify elements Use field identifier as key to build the elements in the response.
Include elements Include elements data in the list of items.
Name elements Use a slug name for elements (in lowercase without blanks).

The Kunena Module is implemented with the plg_jbackend_kunena plugin. It provides functions related to Kunena forum for Joomla (topics and categories). Here is the list of supported methods.

Get the list of categories

Request parameters

action=get
module=kunena
resource=categories
parentid=<P> (optional) default to the root
levels=<L> (optional) 0=all levels, default is 1
unpublished=<0|1> (optional) 0=Hide (default), 1=Show

Example

<end-point>?action=get&module=kunena&resource=categories&parentid=<P>&levels=<L>

Example (REST format)

<end-point>/get/kunena/categories?parentid=<P>

Response

{
    "status": "ok",
    "categories": [
        {
            "id": "<category id>",
            "name": "<category name>",
            "alias": "<category alias>",
            "description": "<category description>",
            "parent_id": "<parent category id>",
            "level": "<category level>",
            "numTopics": "<number of category topics>",
            "numPosts": "<number of category posts>",
            "hits": "<number of hits>"
        }
    ]
}

 

Get a category

Request parameters

action=get
module=kunena
resource=categories
id=<N>

Example

<end-point>?action=get&module=kunena&resource=categories&id=<N>

Example (REST format)

<end-point>/get/kunena/categories/<N>

Response

{
    "status": "ok",
    "id": "<category id>",
    "name": "<category name>",
    "alias": "<category alias>",
    "description": "<category description>",
    "parent_id": "<category parent id>",
    "level": "<category language>",
    "numTopics": "<number of category topics>",
    "numPosts": "<number of category posts>",
    "hits": "<number of hits>",
    "icon": "<category icon>",
    "icon_id": "<category icon id>",
    "locked": "<locked status>",
    "pub_access": "<public access>",
    "pub_recurse": "<public recurse>",
    "review": "<review>",
    "allow_anonymous": "<allow anonymous>",
    "post_anonymous": "<post anonymous>",
    "allow_polls": "<allow polls>",
    "topic_ordering": "<topic ordering>",
    "last_topic_id": "<last topic id>",
    "last_post_id": "<last post id>",
    "last_post_time": "<last post time>"
}

 

Get the list of topics

Request parameters

action=get
module=kunena
resource=topics
catid=<C>
limit=<L> (optional)
offset=<O> (optional)
orderdir=<dir> (optional) asc, desc

Example

<end-point>?action=get&module=kunena&resource=topics&catid=<C>

Example (REST format)

<end-point>/get/kunena/topics?catid=<C>

Response

{
    "status": "ok",
    "total": "<total items>",
    "limit": <pagination limit>,
    "offset": <pagination offset>,
    "topics": [
        {
          "id": "<topic id>",
          "category_id": "<category id>",
          "subject": "<topic subject>",
          "locked": "<locked>",
          "hold": "<hold>",
          "posts": "<posts>",
          "hits": "<number of hits>",
          "attachments": "<attachments>",
          "first_post_id": "<first post id>",
          "first_post_time": "<first post time>",
          "first_post_userid": "<first post user id>",
          "first_post_message": "<first post message text>",
          "first_post_guest_name": "<first post guest name>",
          "last_post_id": "<last post id>",
          "last_post_time": "<last post time>",
          "last_post_userid": "<last post user id>",
          "last_post_message": "<last post message text>",
          "last_post_guest_name": "<last post guest name>"
        },
        ...
        {
        }
    ]
}

 

Get a topic

Request parameters

action=get
module=kunena
resource=topics
id=<N>

Example

<end-point>?action=get&module=kunena&resource=topics&id=<N>

Example (REST format)

<end-point>/get/kunena/topics/<N>

Response

{
  "status": "ok",
  "id": <topic id>,
  "category_id": "<category id>",
  "subject": "<subject>",
  "locked": "<locked>",
  "hold": "<hold>",
  "posts": "<posts>",
  "hits": "<number of hits>",
  "attachments": "<attachments>",
  "first_post_id": "<first post id>",
  "first_post_time": "<first post time>",
  "first_post_userid": "<first post user id>",
  "first_post_message": "<first post text message>",
  "first_post_guest_name": "<first post guest name>",
  "last_post_id": "<last post id>",
  "last_post_time": "<last post time>",
  "last_post_userid": "<last post user id>",
  "last_post_message": "<last post text message>",
  "last_post_guest_name": "<last post guest name>",
  "messages": [
    {
      "id": "<message id>",
      "parent": "<parent id>",
      "thread": "<thread id>",
      "catid": "<category id>",
      "name": "<user name>",
      "userid": "<user id>",
      "email": "<email>",
      "subject": "<message subject>",
      "time": "<message time>",
      "ip": "<ip address>",
      "topic_emoticon": "<topic emoticon>",
      "locked": "<locked>",
      "hold": "<hold>",
      "hits": "<number of hits>",
      "message": "<message>",
      "replynum": <number of replies>,
      "thankyou": [
        ...
      ]
    },
    ...
    {
        ...
    }
  ]
}
This module is only available with the Premium Subscription.

The Search Module is implemented with the plg_jbackend_search plugin. It provides functions related to Joomla search module. Here is the list of supported methods.

Search site

Request parameters

action=get
module=search
resource=site
searchword=<term>
searchphrase=<all> (optional)
limitstart=<offset> (optional)
limit=<limit> (optional)
ordering=<orderby> (optional)
areas[]=<area> (optional)

Example

<end-point>?action=get&module=search&resource=site?searchword=joomla&searchphrase=all&limitstart=10&limit=10&ordering=newest&areas[]=content

Example (REST format)

<end-point>/get/search/site?searchword=<term>

Response

{
    "status": "ok",
    "total": <T>,
    "limit": <L>,
    "offset": <O>,
    "pages_current": <C>,
    "pages_total": <P>,
    "results": [
        {
            "title": "<title>",
            "metadesc": "<metadesc>",
            "metakey": "<metakey>",
            "created": "<date created>",
            "language": "<language>",
            "catid": "<cid>",
            "text": "<text>",
            "section": "<section>",
            "slug": "<id:slug>",
            "catslug": "<id:slug>",
            "browsernav": "<browsernav>",
            "href": "<href>",
            "jcfields": "<jcfields>"
        },
        ...
    ]
}

Notes

searchphrase:
any, exact, all (default)

ordering:
newest (default), oldest, popular, alpha, category

areas:
an array of search areas (e.g. content)

Created date format is YYYY-MM-DD HH:MM:SS

Language can be "*" if any.

 

This module is only available with the Premium Subscription.
This module is intended for B2B integration. It exposes data that should not be made available on a public endpoint, so it must be used only on a private endpoint and somehow protected (e.g. through an API key).

The Community Builder Module is implemented with the plg_jbackend_comprofiler plugin. It provides functions related to Community Builder extension. Here is the list of supported methods.

List users

Request parameters

action=get
module=comprofiler
resource=users
limit=<L> (optional)
offset=<O> (optional)

Example

<end-point>?action=get&module=comprofiler&resource=users

Example (REST format)

<end-point>/get/comprofiler/users?limit=10&offset=2

Response

{
    "status": "ok",
    "total": <total>,
    "limit": <limit>,
    "offset": <offset>,
    "users": [
        {
            "id": "<userid>",
            ...
        },
        ...
        {
            "id": "<userid>",
            ...
        }
    ]
}

Notes

limit is the number of entries to return.

offset is the cursor starting point (0 based, start on record 16 means offset = 15).

If limit is not specified, offset is ignored.

Properties limit and offset in the response are present only when specified in the request.

 

Get user profile

Request parameters

action=get
module=comprofiler
resource=profile
id=<id>

Example

<end-point>?action=get&module=comprofiler&resource=profile&id=482

Example (REST format)

<end-point>/get/comprofiler/profile/482

Response

{
    "status": "ok",
    ...
}

 

Update user profile

Request parameters

action=put
module=comprofiler
resource=profile

 

JSON payload data

{
    "id": "<userid>",
    "name": "<name>",
    "username": "<username>",
    "email": "<email>",
    "password": "<password>",
    ...
}

Example

<end-point>?action=put&module=comprofiler&resource=profile

Example (REST format)

<end-point>/put/comprofiler/profile

Response

{
    "status": "ok"
}

Notes

The id parameter in the request payload is mandatory to identify the user profile to update.

Other mandatory fields are username, email, and name.

It is possible to specify any supported field in the payload.

 

The Release System Module is implemented with the plg_jbackend_release plugin. It provides functions to implement a full Joomla Update Server and/or a generic Package Distribution System based on Joomla. It supports both free and paid packages, and it is seamlessly integrated with Joomla user's groups for authorization and license key generation. Here is the list of supported methods.

Generate key by email

Sends an email to the user with the license key for the specified package group.

Request parameters

action=post
module=release
resource=keybyemail
id=<package group>
email=<user email>

Example

<end-point>?action=post&module=release&resource=keybyemail&id=redj_ent&email=This email address is being protected from spambots. You need JavaScript enabled to view it.

Example (REST format)

<end-point>/post/release/keybyemail/redj_ent?email=This email address is being protected from spambots. You need JavaScript enabled to view it.

Response

{
    "status": "ok"
}

Notes

email is the user's account email on Joomla.

 

Generate key by authentication

Returns the license key for the specified package group.

Request parameters

action=post
module=release
resource=keybyauth
id=<package group>
username=<username>
password=<password>

Example

<end-point>?action=post&module=release&resource=keybyauth&id=redj_ent&username=user123&password=pass123

Example (REST format)

<end-point>/post/release/keybyauth/redj_ent?username=user123&password=pass123

Response

{
    "status": "ok",
    "email": "user email",
    "key": "license key"
}

Notes

username and password are the credentials used for the user's account on Joomla.

 

Validate key

Checks if a license key is valid for the specified package group.

Request parameters

action=post
module=release
resource=validate
id=<package group>
email=<user email>
key=<license key>

Example

<end-point>?action=post&module=release&resource=validate&id=redj_ent&email=This email address is being protected from spambots. You need JavaScript enabled to view it.&key=fd8s809f89ds8f90sd81231sdsds323

Example (REST format)

<end-point>/post/release/validate/redj_ent?email=This email address is being protected from spambots. You need JavaScript enabled to view it.&key=fd8s809f89ds8f90sd81231sdsds323

Response

{
    "status": "ok"
}

 

Verify key

Checks if a license key is valid for the specified package id.

Request parameters

action=post
module=release
resource=verify
id=<package id>
email=<user email>
key=<license key>

Example

<end-point>?action=post&module=release&resource=verify&id=redj_ent_190&email=This email address is being protected from spambots. You need JavaScript enabled to view it.&key=fd8s809f89ds8f90sd81231sdsds323

Example (REST format)

<end-point>/post/release/verify/redj_ent_190?email=This email address is being protected from spambots. You need JavaScript enabled to view it.&key=fd8s809f89ds8f90sd81231sdsds323

Response

{
    "status": "ok"
}

Notes

This method is intended to verify a license key over a specific package id before to download it.

 

Download package

Download the package for the specified package id.

Request parameters

action=post
module=release
resource=download
id=<package id>
email=<user email>
key=<license key>

Example

<end-point>?action=post&module=release&resource=download&id=redj_ent_190&email=This email address is being protected from spambots. You need JavaScript enabled to view it.&key=fd8s809f89ds8f90sd81231sdsds323

Example (REST format)

<end-point>/post/release/verify/redj_ent_190?email=This email address is being protected from spambots. You need JavaScript enabled to view it.&key=fd8s809f89ds8f90sd81231sdsds323

Response

The binary package (as application/octet-stream)

 

Plugin Settings

jBackend Release System Plugin Settings

The following options are available for release system plugin:

Option Description
Folder Packages distribution folder path relative to Joomla root folder (JPATH_ROOT).
Package groups List of package groups. Packages in the same group share the same license key. Format is 'package group;groups[;hash;package name]' where package group is an unique identifier (e.g. redj_enterprise), groups is a list of user groups allowed to download packages in this group separated by commas (e.g. 1,3,5), hash is an optional random string used as seed for the generation of group's license keys, and package name is the human readable name of the package (e.g. ReDJ Enterprise).
Packages List of packages to distribute. Format is 'package id;package path[;package group]' where package id is an unique identifier (e.g. redj_ent_190), package path is the path of the package file relative to the packages distribution folder (e.g. private/joomla/redj/ReDJ1.9.0.zip), and package group is the group identifier (optional, not required for free downloads).

The general format for any error response is the following:

{
    "status": "ko",
    "error_code": "<code>",
    "error_description": "<description>"
}

 

The following table includes all error codes with description, grouped by "realm".

KNN_KNIKunena not installed{"status":"ko","error_code":"KNN_KNI","error_description":"Kunena not installed"}

Realm Error code Error description JSON format
Module related error codes REQ_ANS Action not specified {"status":"ko","error_code":"REQ_ANS","error_description":"Action not specified"}
REQ_MNS Module not specified {"status":"ko","error_code":"REQ_MNS","error_description":"Module not specified"}
REQ_MNF Module not found {"status":"ko","error_code":"REQ_MNF","error_description":"Module not found"}
REQ_RUN Request unknown {"status":"ko","error_code":"REQ_RNS","error_description":"Request unknown"}
API key related error codes REQ_AKR API key required {"status":"ko","error_code":"REQ_AKR","error_description":"API key required"}
REQ_AKL API key limit exceeded {"status":"ko","error_code":"REQ_AKL","error_description":"API key limit exceeded"}
REQ_AKE API key expired {"status":"ko","error_code":"REQ_AKE","error_description":"API key expired"}
REQ_AKI API key invalid {"status":"ko","error_code":"REQ_AKI","error_description":"API key invalid"}
REQ_AKG API key generic error {"status":"ko","error_code":"REQ_AKG","error_description":"API key generic error"}
User authentication related error codes REQ_UCA Unable to check authentication {"status":"ko","error_code":"REQ_UCA","error_description":"Unable to check authentication"}
REQ_AUR Authentication required {"status":"ko","error_code":"REQ_AUR","error_description":"Authentication required"}
User module USR_LIF Login failed {"status":"ko","error_code":"USR_LIF","error_description":"Login failed"}
USR_LOF Logout failed {"status":"ko","error_code":"USR_LOF","error_description":"Logout failed"}
USR_UNR Username required {"status":"ko","error_code":"USR_UNR","error_description":"Username required"}
USR_PWR Password required {"status":"ko","error_code":"USR_PWR","error_description":"Password required"}
USR_EMR Email required {"status":"ko","error_code":"USR_EMR","error_description":"Email required"}
USR_NMR Name required {"status":"ko","error_code":"USR_NMR","error_description":"Name required"}
USR_ALI Already logged in {"status":"ko","error_code":"USR_NMR","error_description":"Already logged in"}
USR_UNE User not enabled {"status":"ko","error_code":"USR_UNE","error_description":"User not enabled"}
USR_RNA Registration not allowed {"status":"ko","error_code":"USR_RNA","error_description":"Registration not allowed"}
USR_IRF Invalid registration field {"status":"ko","error_code":"USR_IRF","error_description":"Invalid registration field"}
USR_UNL User not logged in {"status":"ko","error_code":"USR_UNL","error_description":"User not logged in"}
USR_UNE User not enabled {"status":"ko","error_code":"USR_UNE","error_description":"User not enabled"}
USR_EDR Error during registration {"status":"ko","error_code":"USR_EDR","error_description":"Error during registration"}
USR_UAX Username already exists {"status":"ko","error_code":"USR_UAX","error_description":"Username already exists"}
USR_EAX Email already exists {"status":"ko","error_code":"USR_EAX","error_description":"Email already exists"}
USR_RRE Reset request error {"status":"ko","error_code":"USR_RRE","error_description":"Reset request error"}
USR_RRF Reset request failed {"status":"ko","error_code":"USR_RRF","error_description":"Reset request failed"}
Content module CNT_ANF Article not found {"status":"ko","error_code":"CNT_ANF","error_description":"Article not found"}
CNT_AGE Article generic error {"status":"ko","error_code":"CNT_AGE","error_description":"Article generic error"}
CNT_ANA Access not authorized {"status":"ko","error_code":"CNT_ANA","error_description":"Access not authorized"}
CNT_CNF Category not found {"status":"ko","error_code":"CNT_CNF","error_description":"Category not found"}
CNT_NCF No categories found {"status":"ko","error_code":"CNT_NCF","error_description":"No categories found"}
CNT_TNS Tag not specified {"status":"ko","error_code":"CNT_TNS","error_description":"Tag not specified"}
CNT_TGE Tag generic error {"status":"ko","error_code":"CNT_TGE","error_description":"Tag generic error"}
CNT_ANS Alias not specified {"status":"ko","error_code":"CNT_ANS","error_description":"Alias not specified"}
Push module PSH_TNS Token not specified {"status":"ko","error_code":"PSH_TNS","error_description":"Token not specified"}
PSH_ANS App code not specified {"status":"ko","error_code":"PSH_ANS","error_description":"App code not specified"}
PSH_PNS Platform not specified {"status":"ko","error_code":"PSH_PNS","error_description":"Platform not specified"}
PSH_PUN Platform unknown {"status":"ko","error_code":"PSH_PUN","error_description":"Platform unknown"}
PSH_ESA Error saving app code {"status":"ko","error_code":"PSH_ESA","error_description":"Error saving app code"}
PSH_AUN Application unknown {"status":"ko","error_code":"PSH_AUN","error_description":"Application unknown"}
PSH_ESD Error saving device {"status":"ko","error_code":"PSH_ESD","error_description":"Error saving device"}
PSH_ECN Error creating notification {"status":"ko","error_code":"PSH_ECN","error_description":"Error creating notification"}
PSH_IAT Invalid authorization token {"status":"ko","error_code":"PSH_IAT","error_description":"Invalid authorization token"}
Menu module MNU_MNS Menu not specified {"status":"ko","error_code":"MNU_MNS","error_description":"Menu not specified"}
MNU_INF Item not found {"status":"ko","error_code":"MNU_INF","error_description":"Item not found"}
MNU_NIF No items found {"status":"ko","error_code":"MNU_NIF","error_description":"No items found"}
SobiPro module SP_SNI SobiPro not installed {"status":"ko","error_code":"SP_SNI","error_description":"SobiPro not installed"}
SP_SNS Section not specified {"status":"ko","error_code":"SP_SNS","error_description":"Section not specified"}
SP_CNS Category not specified {"status":"ko","error_code":"SP_CNS","error_description":"Category not specified"}
SP_PNS Parent not specified {"status":"ko","error_code":"SP_PNS","error_description":"Parent not specified"}
SP_SGE Section generic error {"status":"ko","error_code":"SP_SGE","error_description":"Section generic error"}
SP_NSF No sections found {"status":"ko","error_code":"SP_NSF","error_description":"No sections found"}
SP_SNF Section not found {"status":"ko","error_code":"SP_SNF","error_description":"Section not found"}
SP_CGE Category generic error {"status":"ko","error_code":"SP_CGE","error_description":"Category generic error"}
SP_NCF No categories found {"status":"ko","error_code":"SP_NCF","error_description":"No categories found"}
SP_CNF Category not found {"status":"ko","error_code":"SP_CNF","error_description":"Category not found"}
SP_EGE Entry generic error {"status":"ko","error_code":"SP_EGE","error_description":"Entry generic error"}
SP_NEF No entries found {"status":"ko","error_code":"SP_NEF","error_description":"No entries found"}
SP_ENF Entry not found {"status":"ko","error_code":"SP_ENF","error_description":"Entry not found"}
ZOO module ZOO_ZNI ZOO not installed {"status":"ko","error_code":"ZOO_ZNI","error_description":"ZOO not installed"}
ZOO_ZNS ZOO app not specified {"status":"ko","error_code":"ZOO_ZNS","error_description":"ZOO app not specified"}
ZOO_INF Item not found {"status":"ko","error_code":"ZOO_INF","error_description":"Item not found"}
ZOO_ANA Access not authorized {"status":"ko","error_code":"ZOO_ANA","error_description":"Access not authorized"}
ZOO_CNS Category not specified {"status":"ko","error_code":"ZOO_CNS","error_description":"Category not specified"}
ZOO_CNF Category not found {"status":"ko","error_code":"ZOO_CNF","error_description":"Category not found"}
ZOO_NCF No categories found {"status":"ko","error_code":"ZOO_NCF","error_description":"No categories found"}
Kunena module KNN_KNI Kunena not installed {"status":"ko","error_code":"KNN_KNI","error_description":"Kunena not installed"}
KNN_NTF No topic found {"status":"ko","error_code":"KNN_NTF","error_description":"No topic found"}
K2 module K2_KNI K2 not installed {"status":"ko","error_code":"K2_KNI","error_description":"K2 not installed"}
K2_NUF No users found {"status":"ko","error_code":"K2_NUF","error_description":"No users found"}
K2_INF Item not found {"status":"ko","error_code":"K2_INF","error_description":"Item not found"}
K2_IGE Item generic error {"status":"ko","error_code":"K2_IGE","error_description":"Item generic error"}
K2_ANA Access not authorized {"status":"ko","error_code":"K2_ANA","error_description":"Access not authorized"}
K2_CNF Category not found {"status":"ko","error_code":"K2_CNF","error_description":"Category not found"}
K2_NCF No categories found {"status":"ko","error_code":"K2_NCF","error_description":"No categories found"}
K2_CGE Category generic error {"status":"ko","error_code":"K2_CGE","error_description":"Category generic error"}
Search module - - -
Community Builder module CB_CNI Community Builder not installed {"status":"ko","error_code":"CB_CNI","error_description":"Community Builder not installed"}
CB_EAD Error accessing database {"status":"ko","error_code":"CB_EAD","error_description":"Error accessing database"}
CB_UNS User not specified {"status":"ko","error_code":"CB_UNS","error_description":"User not specified"}
CB_UNF User not found {"status":"ko","error_code":"CB_UNF","error_description":"User not found"}
CB_MFM Mandatory field missing {"status":"ko","error_code":"CB_MFM","error_description":"Mandatory field missing"}
CB_PUF Profile update failed {"status":"ko","error_code":"CB_PUF","error_description":"Profile update failed"}
Release System module REL_PNS Package not specified {"status":"ko","error_code":"REL_PNS","error_description":"Package not specified"}
REL_ENS Email not specified {"status":"ko","error_code":"REL_ENS","error_description":"Email not specified"}
REL_UNS Username not specified {"status":"ko","error_code":"REL_UNS","error_description":"Username not specified"}
REL_PWD Password not specified {"status":"ko","error_code":"REL_PWD","error_description":"Password not specified"}
REL_KNS Key not specified {"status":"ko","error_code":"CB_MFM","error_description":"Key not specified"}
REL_KNR Key not required {"status":"ko","error_code":"REL_KNR","error_description":"Key not required"}
REL_PNF Package not found {"status":"ko","error_code":"REL_PNF","error_description":"Package not found"}
REL_PNE Package not exists {"status":"ko","error_code":"REL_PNE","error_description":"Package not exists"}
REL_GNS Group not specified {"status":"ko","error_code":"REL_GNS","error_description":"Group not specified"}
REL_GNF Group not found {"status":"ko","error_code":"REL_GNF","error_description":"Group not found"}
REL_UNF User not found {"status":"ko","error_code":"REL_UNF","error_description":"User not found"}
REL_UNA User not authorized {"status":"ko","error_code":"REL_UNA","error_description":"User not authorized"}
REL_INK Invalid key {"status":"ko","error_code":"REL_INK","error_description":"Invalid key"}
REL_ESK Error sending key {"status":"ko","error_code":"REL_ESK","error_description":"Error sending key"}
REL_LIF Login failed {"status":"ko","error_code":"REL_LIF","error_description":"Login failed"}
REL_UNE User not enabled {"status":"ko","error_code":"REL_UNE","error_description":"User not enabled"}

jBackend provides a robust and extensible solution to expose content and services through a Joomla website. The component provides the basic structure that has in charge of managing requests, controlling accesses, and dispatching incoming requests to the corresponding module. The jBackend architecture is extensible because its service modules are implemented as Joomla plugins, so adding new plugins allows to add new services and expose the contents of new extensions.

In this section we will describe how to create custom modules, and what is the structure of a jBackend plugin. For this purpose it was created an "Hello World" plugin available for download here:

http://www.selfget.com/downloads/file/31-plg-jbackend-helloworld-j30.html

Structure of supported requests

Each HTTP request to an jBackend endpoint MUST include at least three parameters:

action=<action_type>
module=<module_name>
resource=<service_request>

The action would specify one of the HTTP methods used in a RESTful service (e.g. GET, PUT, POST, or DELETE). This is because all Joomla requests are made using GET, so this FIRST parameter introduces the missing information.

The module parameter indicates the name of the module that has in charge of managing this request (e.g. content). This can be implemented as a single jBackend plugin, or even a pool of plugins where each one implements a subset of module services. As example, for com_content core extension a content plugin already exists, which provides read-only access to content and categories. It could be possible to create a new plugin (e.g. plg_jbackend_content_admin) registered also as content module, which takes in charge editor functions like create content and categories.

The resource parameter specifies the service we are requesting to the module (e.g. articles of the content module, login service of the user module, etc.). This parameter must be validated and managed by the plugin itself, no checks will be made on this by jBackend (it cannot know about services provided by each plugin).

Considering all the required parameters (action, module, and resource), each request has this structure:

<end-point>?action=<action_type>&module=<module_name>&resource=<service_request>

If Joomla SEF is enabled, the request can assume this REST-like structure:

<end-point>/<action_type>/<module_name>/<service_request>

A request can also take additional parameters needed by the resource itself for the required service (e.g. the id of the article). This parameters can be added as a standard URL query string, so the request structure assumes this aspect:

<end-point>?action=<action_type>&module=<module_name>&resource=<service_request>&var1=<value1>&...&varN=<valueN>

Or can be (when SEF is enabled):

<end-point>/<action_type>/<module_name>/<service_request>?var1=<value1>&...&varN=<valueN>

An event onBeforeCheckModule is triggered just before to check the module name to dispatch. This permits to override the module variable (as well as action and resource variables) before the request dispatching process and can be useful, as example, when a plugin must deal with existing client requests that cannot be customized as required by jBackend.

Using onBeforeCheckModule it is possible, as example, to match a request like the following:

<endpoint>?var=catchme

This request doesn't include any of the required variables (action, module, resource), but we can "catch" the var and set the required variables:

  public function onBeforeCheckModule()
  {
    $app = JFactory::getApplication();
    $var = $app->input->getString('var');
    if ($var === 'catchme') {
      $app->input->set('action', 'get');
      $app->input->set('module', 'content');
      $app->input->set('resource', 'articles');
      $app->input->set('catid', '64');
      $app->input->set('id', '71');
    }
  }

Basic elements of a jBackend plugin

As a standard Joomla plugin, any jBackend plugin needs an XML installation file with the following structure:

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.0" type="plugin" group="jbackend" method="upgrade">
    <name>plg_jbackend_helloworld</name>
...
</extension>

The plugin group must be "jbackend". All other XML elements are the same of a standard Joomla plugin. The PHP plugin code should have a generateError() function which builds and return all plugin specific errors:

  /**
   * This is the function to generate plugin specific errors
   * The error response is an array with the following structure:
   *    array(
   *     'status' => 'ko',
   *     'error_code' => $errorCode,
   *     'error_description' => <short error description>
   *    )
   *
   * @param  string  $errorCode  The error code to generate
   *
   * @return  array  The response of type error to return
   */
  public static function generateError($errorCode)
  {
    $error = array();
    $error['status'] = 'ko';
    switch($errorCode) {
      case 'REQ_ANS':
        $error['error_code'] = 'REQ_ANS';
        $error['error_description'] = 'Action not specified';
        break;
      case 'HWD_GEN':
        $error['error_code'] = 'HWD_GEN';
        $error['error_description'] = 'Generic hello world error';
        break;
    }
    return $error;
  }

It is not mandatory, but a good practice for the format of the error code is to use a pattern like XXX_YYY, where XXX is a code associated to the plugin (e.g. HWD for the helloworld plugin), and YYY for the specific error (e.g. GEN for generic error).

The other function that any jBackend plugin should have is the onRequest<Module>() function. This is called by jBackend during requests dispatching process. It has three parameters, an input parameter $module that is the module name and is used by the plugin to understand if it should handle the request, an output parameter $response that is the response object, and a $status parameter that can return additional information. The function returns true if there are no problems (status = ok), false in case of errors (status = ko):

public function onRequestHelloWorld($module, &$response, &$status = null)

The first thing the onRequest function should do is to check if it must handle the request or not. If not, it should return to improve the performance of the dispatching process:

if ($module !== 'helloworld') return true; // Check if this is the triggered module or exit

The second thing is to add the plugin to the module call stack:

// Add to module call stack
jBackendHelper::moduleStack($status, 'helloworld'); // Add this request to the module stack register

After these tasks, it is possible to get request vars and process the response:

$app = JFactory::getApplication();
$action = $app->input->getString('action');
$resource = $app->input->getString('resource');

// Check if the action is specified
if (is_null($action)) {
  $response = plgJBackendHelloWorld::generateError('REQ_ANS'); // Action not specified
  return false;
}

switch ($resource)
{
  case 'greeting':
    if ($action == 'get')
    {
      return $this->actionGreeting($response, $status);
    }
    break;
  case 'about':
    if ($action == 'get')
    {
      return $this->actionAbout($response, $status);
    }
    break;
}

return true;

Each function like actionGreeting() and actionAbout() is specific to manage the resource requested by the action. To maintain the code clean it is a good practice to create a different function for each action.

The following is an example of an action() function that shows the code structure and how to manage the errors:

  public function actionGreeting(&$response, &$status = null)
  {
    $app = JFactory::getApplication();

    // Get additional request parameters
    $id = $app->input->getInt('id');
    if (!is_null($id))
    {
      // Example of how to generate and return an error inside an action function
      if ($id == '101')
      {
        $response = plgJBackendHelloWorld::generateError('HWD_GEN'); // Generic hello world error
        return false;
      }
    }

    // Get plugin params
    $option_name = $this->params->get('option_name', 0);

    $response['status'] = 'ok';
    $response['message'] = $this->_greeting_msg;
    if ($option_name)
    {
      $response['option'] = 'true';
    }
    return true;
  }

Version 3.8.0:

  • Fixed an issue with create notifications for devices;
  • [plg_jbackend_content] added function to get an article by alias;
  • [plg_jbackend_content] dropped unpublished articles in get articles by tag;
  • [plg_jbackend_user] fixed an issue with FieldsHelper;
  • [plg_jbackend_push] replaced GCM with FCM.

Version 3.7.0:

  • Added license integration with jBackend Release System.

Version 3.6.0:

  • Fixed an issue with API key usage;
  • Fixed an issue with session_id;
  • Now all dates in DATETIME format are UTC-based;
  • [plg_jbackend_content] output date format changed to ISO 8601;
  • [plg_jbackend_content] added max limit option;
  • [plg_jbackend_user] fixed profile extra fields.

Version 3.5.0:

  • [plg_jbackend_content] extended support for joomla custom fields to the article list.

Version 3.4.0:

  • Added the list of endpoints on the dashboard;
  • [plg_jbackend_content] added support for joomla custom fields.

Version 3.3.0:

  • Added a log of all notifications sent;
  • Added target devices to push notifications;
  • [plg_jbackend_push] fixed an issue with NOW;
  • [plg_jbackend_content] fixed an issue with function to get articles by tags.

Version 3.2.0:

  • Improved CORS support;
  • Added delete all logs button;
  • Added endpoint filtering to logs;
  • Added target endpoints feature for API keys;
  • Added the user information to a registered device;
  • Added support for api_key passed as Authorization header (Authorization: api_key );
  • Added support for api_key passed as JSON parameter;
  • Added target users and groups to push notifications;
  • [plg_jbackend_user] fixed an issue with registration, remind and reset when captcha is enabled;
  • [plg_jbackend_user] added an option to process register, remind and reset as an authentication request;
  • [plg_jbackend_content] added an option to return also raw content (no content plugin);
  • [plg_jbackend_push] added an API function to create a push notification.

Version 3.1.0:

  • Added support for session_id passed as GET/POST/JSON parameter;
  • Added support for custom payload in push notifications;
  • Fixed an issue with log search.

Version 3.0.0:

  • Added support for push notifications for iOS and Android;
  • Added user information to logs;
  • Improved logs filtering;
  • Added CSV export to logs;
  • [plg_jbackend_content] added hits to single article response;
  • [plg_jbackend_content] added an option to exclude content from article list;
  • [plg_jbackend_content] added an option to include support for SEBLOD CCK custom fields;
  • [plg_jbackend_user] added profile request;
  • [plg_jbackend_user] added profile update request;
  • [plg_jbackend_user] added status request.

Version 2.1.3:

  • [plg_jbackend_user] fixed a PHP 5.3 compatibility issue (array initialization).

Version 2.1.2:

  • Added basic CORS feature;
  • [plg_jbackend_user] added username remind request;
  • [plg_jbackend_user] added password reset request.

Version 2.1.1 (only for J3):

  • Added the force SSL option.

Version 2.1.0:

  • Fixed an issue with delete log entry;
  • Fixed an issue with installer script;
  • Added the ability to select which modules to enable for each endpoint.

Version 2.0.2:

  • Fixed an issue with API key expiration check related to never expiring keys;
  • [plg_jbackend_content] added filter by featured in the list of articles;
  • [plg_jbackend_content] added featured field in the response for the list of articles;
  • [plg_jbackend_content] added tags to response for articles (only for J3);
  • [plg_jbackend_content] added tagarticles resource to get articles by tag (only for J3).

Version 2.0.1:

  • Added onBeforeCheckModule event.

Version 2.0.0:

  • Added a trace function for logs and statistics;
  • Added a new dashboard as a better landing page;
  • [plg_jbackend_content] fixed an issue with generateImagesFields() function;
  • [plg_jbackend_content] added a plugin option to force full image URLs in content.

Version 1.0.3:

  • [plg_jbackend_user] fixed an issue with com_users language costants.

Version 1.0.2:

  • [plg_jbackend_content] fixed an issue with orderby and orderdir parameters;
  • [plg_jbackend_content] added images fields for a single article and the list of articles;
  • [plg_jbackend_content] added a plugin option to return relative or full URLs for images fields;
  • [plg_jbackend_content] changed the date format of published date to YYYY-MM-DD HH:MM:SS.

Version 1.0.1:

  • Completed porting to J2
  • Some minor fixes and little improvements

Version 1.0.0:

  • Initial J3 version

Menu module

Version 1.0.1:

  • Fixed an issue with get menu items due to a new ACL check.

Version 1.0.0:

  • Initial version.

K2 module

Version 1.3.1:

  • Fixed an issue with ordering parameter in items.

Version 1.3.0:

  • Added support for language filter on categories and items;
  • Added an option to force full url for all img tags;
  • Improved support for K2 plugins in the list of items.

Version 1.2.0:

  • Added an option to include or exclude full content from items response;
  • Added introtext to item and items response;
  • Added extra_fields and extra_fields_search to item and items response;
  • Added image field to category and categories response;
  • Fixed an issue with items ordering.

Version 1.1.1:

  • Fixed an issue with path of images.

Version 1.1.0 (only for J3):

  • Fixed an issue with list of items.

Version 1.0.4 (only for J2):

  • Fixed an issue with path of images.

Version 1.0.3:

  • Some code optimization.

Version 1.0.2:

  • Fixed name of plugin options constants;
  • Changed error code K2_KGE to K2_CGE.

Version 1.0.1:

  • Completed porting to J2;
  • Some minor fixes and little improvements.

Version 1.0.0:

  • Initial J3 version.

SobiPro module

Version 1.2.0:

  • Added category_name filter field for entries;
  • Added an option to enable JSON payload on entries action.

Version 1.1.0:

  • Changed entries function to support multiple categories.

Version 1.0.1:

  • Some code optimization.

Version 1.0.0:

  • Initial version.

ZOO module

Version 1.1.1:

  • Extended named elements also for a single item (thanks to Ray Lawlor).

Version 1.1.0:

  • Added an option to include elements in the list of items (thanks to Ray Lawlor);
  • Added an option to use slug (friendly) names for elements (thanks to Ray Lawlor).

Version 1.0.0:

  • Initial version.

Kunena module

Version 1.0.0:

  • Initial version.

Community Builder module

Version 1.0.1:

  • Added full URL for avatar field in the get user profile.

Version 1.0.0:

  • Initial version.
Page 2 of 2