SproutCMS

This is the code documentation for the SproutCMS project

Page options:

Inherited members

class WordCategoryAdminController

Handles most processing for Word categories

Variables

NameVisibilityDescription
$action_log
Should this controller log add/edit/delete actions?
$add_defaults 
$add_view_name
The view to use for adding new category records. Loaded in a popup
$controller_name 
$duplicate_defaults
Default values used for duplicating a record.
$duplicate_enabled
Flag to turn duplication on or off
$edit_view_name
The view to use for editing existing category records
$export_modifiers
Modifiers applied to data prior to export
Should be a class which extends ColModifier
Can be an object instance or string of a class name
$friendly_name 
$import_columns
The columns to allow import for
$import_duplicates
The default selection for the "duplicates" option
Values are "new", "merge", "merge_blank" and "skip".
$import_headings
If a client is providing CSVs which don't have headings
You'll need to provide them in this array
$import_id_column
Typically, we don't want to import the ID, and just let autoinc do it's thing
$main_actions
Actions for the itemlist
$main_add
Should a link be shown above the list for adding records? (default yes)
$main_columns 
$main_delete
Is deletion allowed, with an option shown in the UI? (default: no)
$main_modes
Different modes available for the main view
By default, there is only one mode: list
$main_order
Order of main view records
$main_where
An additional where clause for the main view
$navigation_name 
$parent_inst
Instance of the parent controller
$per_subsite
Should a UI for editing the "subsite_id" field on a record be shown?
If enabled by extending classes, then the table should contain a 'subsite_id' INT UNSIGNED column
$records_per_page
The default number of records to show per page
$refine_bar
Defines the widgets for the refine bar
$table_name
This is the name of the table to get data from. Will be automatically deducted from the controller name if not specified

Functions

NameVisibilityDescription
__callpublicHandles methods that do not exist.
__constructpublic 
_actionLogpublic 
_addPreRenderprotectedHook called by _getAddForm() just before the view is rendered
_addSavepublicSaves the provided POST data into a new record in the database
_deletePostSavepublicDoes custom actions after the _deleteSave method is called, e.g. clearing cache data
_deletePreSavepublicDoes custom actions before _deleteSave method is called, e.g. extra security checks
_deleteSavepublicDeletes a category
_duplicatePreRenderprotectedHook called by _getDuplicateForm() just before the view is rendered
_duplicateSavepublicProcess the saving of a duplication. Basic version just calls _editSave
_editPreRenderprotectedHook called by _getEditForm() just before the view is rendered
_editSavepublicSaves the provided POST data the specified record
_exportDatapublicDoes the actual export. Return false on error.
_extraMultiDeletepublicForm to delete multiple records
_extraReorderpublicShows the reorder page for re-ordering the items for this category
_extraReorderCategoriespublicShows the reorder page for re-ordering the categories.
_getAddFormpublicReturns the add form for adding a record
_getAddSubActionspublicReturn the sub-actions for adding a record (e.g. preview)
_getContentspublicReturn HTML which represents a list of records for this controller
_getContentsQueryprotectedReturns the SQL query for use by the contents list.
_getContentsViewpublicReturn HTML for a resultset of items
_getContentsViewListpublicFormats a resultset of items into an Itemlist
_getCustomAddSaveHTMLpublicOptional custom HTML for the save box
_getCustomDuplicateSaveHTMLpublicOptional custom HTML for the save box
_getCustomEditSaveHTMLpublicOptional custom HTML for the save box
_getDeleteFormpublicShows delete form for deleting this category
_getDeleteSubActionspublicReturn the sub-actions for deleting a record (e.g. cancel)
_getDuplicateFormpublicReturn HTML which represents the form for duplicating a record
_getDuplicateSubActionspublicReturn the sub-actions for duplicating a record
_getEditFormpublicReturn HTML which represents the form for editing a record
_getEditLiveUrlpublicReturn the URL to use for the 'view live site' button, when editing a given record
_getEditSubActionspublicReturn the sub-actions for editing a record (e.g. deleting)
_getExportpublicReturns form for doing exports
_getExportQueryprotectedReturns the SQL query for use by the export tools.
_getImportpublicReturns a form which contains options for doing an export
_getNavigationpublicProxy for navigation => the main controller class
_getRecordprotectedFetch the record with a given id
_getRefineClauseprotectedReturn the WHERE clause to use for a given key which is provided by the RefineBar
_getSearchFormpublicReturn HTML for a search form
_getToolspublicProxy for tools => the main controller class
_getVisibilityFieldspublicReturn the fields to show in the sidebar when adding or editing a record.
_identifierpublicCreates the identifier used in the heading, and for reordering.
_importColGuessprotectedTry to guess the database name for a given CSV heading.
_importDatapublicDoes the actual import
_importExtraOptionsprotectedCalled when the import form is being built.
_importPostprotectedCalled at the end of the the import process, after everything has been done.
_importPostRecordprotectedCalled after a record has been inserted or updated.
_importPreprotectedCalled at the beginning of the the import process.
_importPreRecordprotectedCalled after the field data has been determined, but before the insert or update is run.
_intropublicReturns the intro HTML for this controller.
_invalidateCachespublicThis is called after every add, edit and delete, as well as other (i.e. bulk) actions.
_isAddSavedpublicIs the "add" action saved?
_isDeleteSavedpublicCheck if deletion of a particular record is allowed
_isEditSavedpublicIs the "edit" action saved?
_modeSelectorprotectedReturns HTML for a ui component to update the current main view mode
_paginationBarprotectedBuilds the HTML for showing the navigation through pages in the admin.
_preSaveprotected 
_runpublicThe router/kohana will invoke this method to invoke an action.
ajaxArchiveActionpublicArchive a category
ajaxLookuppublicReturn list of records for given search term
ajaxLookupListpublicReturn list of records for given search term
ajaxUnarchiveActionpublicUnarchive a category
applyRefineFilterprotectedApplies filters defined in the query string using a LIKE contains
autoSetEmptyParamprotectedAuto-set the "empty" param for fields with foreign keys to be NULL
deleteRecordprotectedDeletes a record, and logs the deletion
generateFormViewprotectedGenerates a form view from a JSON config file
getControllerNamepublicReturns the defined controller name.
getCssClassNamepublicReturn the class name for this controller, expressed in CSS style, i.e. with dashes
getDuplicateEnabledpublicReturns the duplication enabling flag
getFriendlyNamepublicReturns the defined controller friendly name
getModulePathpublicGets the relative path to the module the controller lives in, or sprout itself
getNavigationNamepublicReturns the defined controller navigation name
getParentInstpublicReturn the instance of the parent controller
getTableNamepublicReturns the defined table name
getTopnavNamepublicProxy for top nav name => the main controller class
initRefineBarprotectedInitialises the refine bar if it isn't already set, with a search widget for the 'name' field if it exists
initTableNameprotectedInitialises the table name if it isn't already set, using the plural of the shorthand controller name
injectVisiblityFieldsprotectedInject the visiblity fields into a loaded json configuration, so they actually save
isPerSubsitepublicIf true, then a UI for editing the "subsite_id" for a record should be shown
jsonExtraValidateprotectedDo any additional validation prior to saving the record
loadEditJsonprotectedLoads a JSON config file for an automated edit-type form for this controller
loadFormJsonprotectedLoads a config file for a JsonForm associated with this controller
loadRecordprotectedFetches the pre-update record from the database.
logActionprotectedStores a history item in the database, recording an add (i.e. insert), edit, or delete.
logAddprotectedLogs an add action. This is a wrapper for Controller::logAction
logAddCategoryprotectedLogs the adding of a record to a category. This is a wrapper for Controller::logAction
logDeleteprotectedLogs a delete action. This is a wrapper for Controller::logAction
logDeleteCategoryprotectedLogs the removal of a record from a category. This is a wrapper for Controller::logAction
logEditprotectedLogs an edit action. This is a wrapper for Controller::logAction
postJsonMultiTagpublicMulti-tag some items. Uses AJAX. Returns JSON.
postMultiDeletepublicDelete multiple records
reorderCategoriesSavepublicSaves a item reorder
reorderSavepublicSaves a item reorder
replaceSetprotectedInserts records which are in $new_records, but are not in the specified table
saveJsonDataprotectedAutomatically saves the data associated with a submission on a JSON-generated form

public __call (from BaseController)

void $BaseController->__call ( string $method , array $args );

Handles methods that do not exist.

public __construct (from CategoryAdminController)

void $CategoryAdminController->__construct ( );

This function does not have a description

public _actionLog (from ManagedAdminController)

unknown $ManagedAdminController->_actionLog ( );

This function does not have a description

protected _addPreRender (from ManagedAdminController)

void $ManagedAdminController->_addPreRender ( mixed $view );

Hook called by _getAddForm() just before the view is rendered

public _addSave (from CategoryAdminController)

unknown $CategoryAdminController->_addSave ( int &$item_id );

Saves the provided POST data into a new record in the database

public _deletePostSave (from ManagedAdminController)

void $ManagedAdminController->_deletePostSave ( int $item_id );

Does custom actions after the _deleteSave method is called, e.g. clearing cache data

public _deletePreSave (from ManagedAdminController)

void $ManagedAdminController->_deletePreSave ( int $item_id );

Does custom actions before _deleteSave method is called, e.g. extra security checks

public _deleteSave (from CategoryAdminController)

unknown $CategoryAdminController->_deleteSave ( int $id );

Deletes a category

protected _duplicatePreRender (from ManagedAdminController)

void $ManagedAdminController->_duplicatePreRender ( mixed $view , mixed $item_id );

Hook called by _getDuplicateForm() just before the view is rendered

public _duplicateSave (from ManagedAdminController)

boolean $ManagedAdminController->_duplicateSave ( int $id );

Process the saving of a duplication. Basic version just calls _editSave

protected _editPreRender (from ManagedAdminController)

void $ManagedAdminController->_editPreRender ( mixed $view , mixed $item_id );

Hook called by _getEditForm() just before the view is rendered

public _editSave (from CategoryAdminController)

unknown $CategoryAdminController->_editSave ( int $item_id );

Saves the provided POST data the specified record

public _exportData (from ManagedAdminController)

array $ManagedAdminController->_exportData ( );

Does the actual export. Return false on error.

public _extraMultiDelete (from ManagedAdminController)

unknown $ManagedAdminController->_extraMultiDelete ( );

Form to delete multiple records

public _extraReorder (from CategoryAdminController)

unknown $CategoryAdminController->_extraReorder ( mixed $category_id );

Shows the reorder page for re-ordering the items for this category

public _extraReorderCategories (from CategoryAdminController)

unknown $CategoryAdminController->_extraReorderCategories ( );

Shows the reorder page for re-ordering the categories.

public _getAddForm (from CategoryAdminController)

string $CategoryAdminController->_getAddForm ( );

Returns the add form for adding a record

public _getAddSubActions (from ManagedAdminController)

array $ManagedAdminController->_getAddSubActions ( );

Return the sub-actions for adding a record (e.g. preview)
These are rendered into HTML using AdminController::renderSubActions

public _getContents (from ManagedAdminController)

unknown $ManagedAdminController->_getContents ( );

Return HTML which represents a list of records for this controller

protected _getContentsQuery (from ManagedAdminController)

string $ManagedAdminController->_getContentsQuery ( string $where , string $order , array &$params );

Returns the SQL query for use by the contents list.

The query MUST NOT include a LIMIT clause.
The query MUST include a SQL_CALC_FOUND_ROWS clause.
The main table SHOULD be aliased to 'item'.

public _getContentsView (from ManagedAdminController)

unknown $ManagedAdminController->_getContentsView ( Traversable $items , string $mode , anything $unused );

Return HTML for a resultset of items
The returned HTML will be sandwiched between the refinebar and the pagination bar.

public _getContentsViewList (from ManagedAdminController)

unknown $ManagedAdminController->_getContentsViewList ( Traversable $items , anything $unused );

Formats a resultset of items into an Itemlist

public _getCustomAddSaveHTML (from ManagedAdminController)

unknown $ManagedAdminController->_getCustomAddSaveHTML ( );

Optional custom HTML for the save box
Return NULL to use the default HTML

public _getCustomDuplicateSaveHTML (from ManagedAdminController)

unknown $ManagedAdminController->_getCustomDuplicateSaveHTML ( return $item_id );

Optional custom HTML for the save box
Return NULL to use the default HTML

public _getCustomEditSaveHTML (from ManagedAdminController)

unknown $ManagedAdminController->_getCustomEditSaveHTML ( return $item_id );

Optional custom HTML for the save box
Return NULL to use the default HTML

public _getDeleteForm (from CategoryAdminController)

unknown $CategoryAdminController->_getDeleteForm ( int $id );

Shows delete form for deleting this category

public _getDeleteSubActions (from ManagedAdminController)

array $ManagedAdminController->_getDeleteSubActions ( mixed $item_id );

Return the sub-actions for deleting a record (e.g. cancel)
These are rendered into HTML using AdminController::renderSubActions

public _getDuplicateForm (from ManagedAdminController)

unknown $ManagedAdminController->_getDuplicateForm ( int $id );

Return HTML which represents the form for duplicating a record

public _getDuplicateSubActions (from ManagedAdminController)

array $ManagedAdminController->_getDuplicateSubActions ( mixed $item_id );

Return the sub-actions for duplicating a record
These are rendered into HTML using AdminController::renderSubActions

public _getEditForm (from CategoryAdminController)

unknown $CategoryAdminController->_getEditForm ( int $id );

Return HTML which represents the form for editing a record

public _getEditLiveUrl (from ManagedAdminController)

string|null $ManagedAdminController->_getEditLiveUrl ( int $item_id );

Return the URL to use for the 'view live site' button, when editing a given record

public _getEditSubActions (from ManagedAdminController)

array $ManagedAdminController->_getEditSubActions ( mixed $item_id );

Return the sub-actions for editing a record (e.g. deleting)
These are rendered into HTML using AdminController::renderSubActions

public _getExport (from ManagedAdminController)

unknown $ManagedAdminController->_getExport ( );

Returns form for doing exports

protected _getExportQuery (from ManagedAdminController)

unknown $ManagedAdminController->_getExportQuery ( [ string $where ] );

Returns the SQL query for use by the export tools.
The query does MUST NOT include a LIMIT clause.

public _getImport (from ManagedAdminController)

unknown $ManagedAdminController->_getImport ( mixed $filename );

Returns a form which contains options for doing an export

public _getNavigation (from CategoryAdminController)

unknown $CategoryAdminController->_getNavigation ( );

Proxy for navigation => the main controller class

protected _getRecord (from ManagedAdminController)

array $ManagedAdminController->_getRecord ( int $id );

Fetch the record with a given id

protected _getRefineClause (from ManagedAdminController)

string $ManagedAdminController->_getRefineClause ( string $key , string $val , array &$query_params );

Return the WHERE clause to use for a given key which is provided by the RefineBar
This must be called in the extending class if no clause can be determined,
i.e. return parent::_getRefineClause()

Allows custom non-table clauses to be added.
Is only called for key names which begin with an underscore.
The base table is aliased to 'item'.

public _getSearchForm (from ManagedAdminController)

unknown $ManagedAdminController->_getSearchForm ( );

Return HTML for a search form

public _getTools (from CategoryAdminController)

unknown $CategoryAdminController->_getTools ( );

Proxy for tools => the main controller class

public _getVisibilityFields (from CategoryAdminController)

array $CategoryAdminController->_getVisibilityFields ( );

Return the fields to show in the sidebar when adding or editing a record.
These fields are shown under a heading of "Visibility"

Key is the field name, value is the field label

public _identifier (from ManagedAdminController)

string $ManagedAdminController->_identifier ( array $item );

Creates the identifier used in the heading, and for reordering.

protected _importColGuess (from ManagedAdminController)

string $ManagedAdminController->_importColGuess ( string $csv_heading );

Try to guess the database name for a given CSV heading.
If you can't figure it out, return NULL.
If NULL is returned, the rudimentry almost-exact guesser will be run.

public _importData (from ManagedAdminController)

unknown $ManagedAdminController->_importData ( string $filename );

Does the actual import

protected _importExtraOptions (from ManagedAdminController)

unknown $ManagedAdminController->_importExtraOptions ( );

Called when the import form is being built.

Returns HTML of extra options to display, or null if no extra options.

protected _importPost (from ManagedAdminController)

unknown $ManagedAdminController->_importPost ( );

Called at the end of the the import process, after everything has been done.
Is called from within a transaction.
Return FALSE to abort the import.

protected _importPostRecord (from ManagedAdminController)

boolean $ManagedAdminController->_importPostRecord ( int $record_id , array $new_data , array $existing_record , string $type , array $raw_data );

Called after a record has been inserted or updated.

protected _importPre (from ManagedAdminController)

unknown $ManagedAdminController->_importPre ( );

Called at the beginning of the the import process.
Is called from within a transaction.
Return FALSE to abort the import.

protected _importPreRecord (from ManagedAdminController)

unknown $ManagedAdminController->_importPreRecord ( array &$new_data , array $raw_data );

Called after the field data has been determined, but before the insert or update is run.

Return FALSE to skip the record.

public _intro (from ManagedAdminController)

void $ManagedAdminController->_intro ( );

Returns the intro HTML for this controller.

public _invalidateCaches (from ManagedAdminController)

void $ManagedAdminController->_invalidateCaches ( string $action [, int $item_id ] );

This is called after every add, edit and delete, as well as other (i.e. bulk) actions.
Use it to clear any frontend caches. The default is an empty method.

public _isAddSaved (from ManagedAdminController)

bool $ManagedAdminController->_isAddSaved ( );

Is the "add" action saved?
These may be false if the UI provides its own save mechanism (e.g. multi-add)

public _isDeleteSaved (from ManagedAdminController)

bool $ManagedAdminController->_isDeleteSaved ( int $item_id );

Check if deletion of a particular record is allowed
This method may be overridden if ignoring the $main_delete property is desired

public _isEditSaved (from ManagedAdminController)

bool $ManagedAdminController->_isEditSaved ( mixed $item_id );

Is the "edit" action saved?
These may be false if the UI provides its own save mechanism

protected _modeSelector (from ManagedAdminController)

unknown $ManagedAdminController->_modeSelector ( mixed $current_mode );

Returns HTML for a ui component to update the current main view mode

protected _paginationBar (from ManagedAdminController)

HTML $ManagedAdminController->_paginationBar ( The $current_page , The $total_row_count );

Builds the HTML for showing the navigation through pages in the admin.
This method is FINAL to help keep the user interface consistent.

protected _preSave (from ManagedAdminController)

void $ManagedAdminController->_preSave ( mixed $id , mixed &$data );

This function does not have a description

public _run (from BaseController)

void $BaseController->_run ( mixed $method , mixed $args );

The router/kohana will invoke this method to invoke an action.

If you please, you may wrap this method to create before/after hooks.

public ajaxArchiveAction (from CategoryAdminController)

void $CategoryAdminController->ajaxArchiveAction ( mixed $category_id );

Archive a category

public ajaxLookup (from ManagedAdminController)

void $ManagedAdminController->ajaxLookup ( );

Return list of records for given search term
Used for Fb::autocomplete

public ajaxLookupList (from ManagedAdminController)

void $ManagedAdminController->ajaxLookupList ( );

Return list of records for given search term
Used for Fb::autocompleteList

public ajaxUnarchiveAction (from CategoryAdminController)

void $CategoryAdminController->ajaxUnarchiveAction ( mixed $category_id );

Unarchive a category

protected applyRefineFilter (from ManagedAdminController)

array $ManagedAdminController->applyRefineFilter ( [ array $source_data ] );

Applies filters defined in the query string using a LIKE contains
Only fields which exist in the RefineBar will be filtered

protected autoSetEmptyParam (from Controller)

null $Controller->autoSetEmptyParam ( array &$conf );

Auto-set the "empty" param for fields with foreign keys to be NULL

This greatly reduces the number of foreign-key constraints hit in day-to-day use,
especially with file fields.

protected deleteRecord (from Controller)

int $Controller->deleteRecord ( string $table , int $record_id [, int $parent_log_id ] );

Deletes a record, and logs the deletion
This should be used by all _deleteSave methods
Starts a transaction and commits it if not already in a transaction when called

protected generateFormView (from Controller)

array $Controller->generateFormView ( mixed $file_name );

Generates a form view from a JSON config file

public getControllerName (from ManagedAdminController)

unknown $ManagedAdminController->getControllerName ( );

Returns the defined controller name.

public getCssClassName (from BaseController)

string $BaseController->getCssClassName ( );

Return the class name for this controller, expressed in CSS style, i.e. with dashes

Example: When called from BlogPostController --> 'blog-post-controller'

public getDuplicateEnabled (from ManagedAdminController)

unknown $ManagedAdminController->getDuplicateEnabled ( );

Returns the duplication enabling flag

public getFriendlyName (from ManagedAdminController)

unknown $ManagedAdminController->getFriendlyName ( );

Returns the defined controller friendly name

public getModulePath (from BaseController)

string $BaseController->getModulePath ( );

Gets the relative path to the module the controller lives in, or sprout itself

public getNavigationName (from ManagedAdminController)

unknown $ManagedAdminController->getNavigationName ( );

Returns the defined controller navigation name

public getParentInst (from CategoryAdminController)

unknown $CategoryAdminController->getParentInst ( );

Return the instance of the parent controller

public getTableName (from ManagedAdminController)

unknown $ManagedAdminController->getTableName ( );

Returns the defined table name

public getTopnavName (from CategoryAdminController)

unknown $CategoryAdminController->getTopnavName ( );

Proxy for top nav name => the main controller class

protected initRefineBar (from ManagedAdminController)

void $ManagedAdminController->initRefineBar ( );

Initialises the refine bar if it isn't already set, with a search widget for the 'name' field if it exists
Most controllers which need a custom refine bar should call this before adding their own search widgets

protected initTableName (from ManagedAdminController)

void $ManagedAdminController->initTableName ( );

Initialises the table name if it isn't already set, using the plural of the shorthand controller name

protected injectVisiblityFields (from ManagedAdminController)

void $ManagedAdminController->injectVisiblityFields ( array &$conf );

Inject the visiblity fields into a loaded json configuration, so they actually save

public isPerSubsite (from ManagedAdminController)

unknown $ManagedAdminController->isPerSubsite ( );

If true, then a UI for editing the "subsite_id" for a record should be shown

protected jsonExtraValidate (from Controller)

void $Controller->jsonExtraValidate ( int $id , Validator $validator );

Do any additional validation prior to saving the record

protected loadEditJson (from Controller)

array $Controller->loadEditJson ( );

Loads a JSON config file for an automated edit-type form for this controller

protected loadFormJson (from Controller)

array $Controller->loadFormJson ( string $file_name );

Loads a config file for a JsonForm associated with this controller

protected loadRecord (from Controller)

bool|array $Controller->loadRecord ( string $table , int $record_id );

Fetches the pre-update record from the database.
Used by the action log system, and disabled if the action log system has been turned off

protected logAction (from Controller)

int $Controller->logAction ( string $table , int $record_id , int $type , array $data [, int $parent_log_id ] );

Stores a history item in the database, recording an add (i.e. insert), edit, or delete.
Should be called AFTER the action has been made.
N.B. This is a low-level method; the friendlier wrapper methods are preferred;
e.g. Controller::logAdd, Controller::logEdit

protected logAdd (from Controller)

int $Controller->logAdd ( string $table , int $record_id );

Logs an add action. This is a wrapper for Controller::logAction

protected logAddCategory (from Controller)

int $Controller->logAddCategory ( string $table , int $record_id , int $cat_id );

Logs the adding of a record to a category. This is a wrapper for Controller::logAction

protected logDelete (from Controller)

int $Controller->logDelete ( string $table , int $record_id , array $data [, int $parent_log_id ] );

Logs a delete action. This is a wrapper for Controller::logAction

protected logDeleteCategory (from Controller)

int $Controller->logDeleteCategory ( string $table , int $record_id , int $cat_id );

Logs the removal of a record from a category. This is a wrapper for Controller::logAction

protected logEdit (from Controller)

int $Controller->logEdit ( string $table , int $record_id , array $data );

Logs an edit action. This is a wrapper for Controller::logAction

public postJsonMultiTag (from ManagedAdminController)

void $ManagedAdminController->postJsonMultiTag ( );

Multi-tag some items. Uses AJAX. Returns JSON.

public postMultiDelete (from ManagedAdminController)

void $ManagedAdminController->postMultiDelete ( );

Delete multiple records

public reorderCategoriesSave (from CategoryAdminController)

void $CategoryAdminController->reorderCategoriesSave ( );

Saves a item reorder

public reorderSave (from CategoryAdminController)

void $CategoryAdminController->reorderSave ( mixed $category_id );

Saves a item reorder

protected replaceSet (from Controller)

void $Controller->replaceSet ( string $table , array $new_records , array $conditions );

Inserts records which are in $new_records, but are not in the specified table
Deletes records which are in the specified table, but not in $new_records
Updates records which are in both

Matching is done on the 'id' field, as a result the $new_records arrays MUST contain an id field.

protected saveJsonData (from Controller)

bool $Controller->saveJsonData ( array $conf , int &$item_id [, string $mode ] );

Automatically saves the data associated with a submission on a JSON-generated form