## Namespace content

> Procedures for generating and processing content content creation and editing forms..

### Method Summary

Listing of public methods:

> content::add_attribute_element
> content::add_attribute_elements
> content::add_basic_revision
> content::add_child_relation_element
> content::add_content
> content::add_content_element
> content::add_revision
> content::add_revision_form
> content::copy_content
> content::get_attribute_enum_values
> content::get_latest_revision
> content::get_object_id
> content::new_item
> content::new_item_form
> content::validate_name

### Method Detail

* indicates required

Public Methods:

content::add_attribute_element
Add a form element (possibly a compound widget) to an ATS form object. for entering or editing an attribute value. Parameters:
`form_name` * | The name of the ATS form object to which the element should be added.
`content_type` * | The content type keyword to which this attribute belongs.
`attribute` * | The name of the attribute, as represented in the attribute_name column of the acs_attributes table.
`attribute_data` * | Optional nested list of parameter data for the the attribute (generated by get_attribute_params).

content::add_attribute_elements
Add form elements to an ATS form object for all attributes of a content type. Parameters:
`form_name` * | The name of the ATS form object to which objects should be added.
`content_type` * | The content type keyword for which attribute widgets should be added.
`revision_id` * | The revision from which default values should be queried
Returns: The list of attributes that were added.

content::add_basic_revision
Create a basic new revision using the content_revision PL/SQL API. Parameters:
`item_id` * |
`revision_id` * |
`title` * |
Options:
`description` |
`mime_type` |
`text` |
`tmpfile` |

content::add_child_relation_element
Add a select box listing all valid child relation tags. The form must contain a parent_id element and a content_type element. If the elements do not exist, or if there are no valid relation tags, this proc does nothing. Parameters:
`form_name` * | The name of the form
Options:
`section` | none If present, creates a new form section for the element.
`label` | {Child relation tag} The label for the element

content::add_content
Update the BLOB column of a revision with content submitted in a form Parameters:
`revision_id` * | The object ID of the revision to be updated.

content::add_content_element
Adds a content input element to an ATS form object. Parameters:
`form_name` * | The name of the form to which the object should be added.
`content_method` * | One of no_content, text_entry or file_upload

content::add_revision
Create a new revision for an existing item based on a valid form submission. Queries for attribute names and inserts a row into the attribute input view for the appropriate content type. Inserts the contents of a file into the content column of the cr_revisions table for the revision as well. Parameters:
`form_name` * | Name of the form from which to obtain attribute values. The form should include an item_id and revision_id.
`tmpfile` * | Name of the temporary file containing the content to upload.

content::add_revision_form
Adds elements to an ATS form object for adding a revision to an existing item. If the item already exists, element values default a previous revision (the latest one by default). If the form does not already exist, creates the form object and sets its enctype to multipart/form-data to allow for text entries greater than 4000 characters. Options:
`form_name` | The name of the ATS form object. Defaults to { new_item} .
`content_type` | The content_type of the item. Defaults to { content_revision} .
`content_method` | The method to use for uploading the content body. If the content type is text, defaults to text entry, otherwise defaults to file upload.
`item_id` | The item ID of the revision. Defaults to null (item_id must be set by the calling code).
`revision_id` | The revision ID from which to draw default values. Defaults to the latest revision
`attributes` | A list of attribute names for which to create form elements.
`action` | The URL to which the form should redirect following a successful form submission.

content::copy_content
Update the BLOB column of one revision with the content of another revision Parameters:
`revision_id_src` * | The object ID of the revision with the content to be copied.
`revision_id_dest` * | The object ID of the revision to be updated. copied.

content::get_attribute_enum_values
Returns a list of { pretty_name enum_value } for an attribute of datatype enumeration. Parameters:
`attribute_id` * | The primary key of the attribute as in the attribute_id column of the acs_attributes table.

content::get_latest_revision
Get the ID of the latest revision for the specified content item. Parameters:
`item_id` * | The ID of the content item.

content::get_object_id
Grab an object ID for creating a new ACS object.

content::new_item
Create a new item, including the initial revision, based on a valid form submission. Parameters:
`form_name` * | Name of the form from which to obtain item attributes, as well as attributes of the initial revision. The form should include an item_id, name and revision_id.
`tmpfile` * | Name of the temporary file containing the content to upload for the initial revision.
See Also: add_revision -

content::new_item_form
Adds elements to an ATS form object for creating an item and its initial revision. If the form does not already exist, creates the form object and sets its enctype to multipart/form-data to allow for text entries greater than 4000 characters. Options:
`form_name` | The name of the ATS form object. Defaults to { new_item} .
`content_type` | The content_type of the item. Defaults to { content_revision} .
`content_method` | The method to use for uploading the content body. Valid values are { no_content} , { text_entry} , and { file_upload} . If the content type allows text, defaults to text entry, otherwise defaults to file upload.
`parent_id` | The item ID of the parent. Defaults to null (Parent is the root folder).
`name` | The default name of the item. Default is an empty string (User must supply name).
`attributes` | A list of attribute names for which to create form elements.
`action` | The URL to which the form should redirect following a successful form submission.

content::validate_name
Make sure that name is unique for the folder Parameters:
`form_name` * | The name of the form (containing name and parent_id)
Returns: 0 if there are items with the same name, 1 otherwise

Private Methods:

content::add_revision_dml
Perform the DML to insert a revision into the appropriate input view. Parameters:
`statement` * | The DML for the insert statement, specifying a bind variable for each column value.
`bind_vars` * | An ns_set containing the values for all bind variables.
`tmpfile` * | The server-side name of the file containing the body of the revision to upload into the content BLOB column of cr_revisions.
`filename` * | The client-side name of the file containing the body of the revision to upload into the content BLOB column of cr_revisions
See Also: add_revision -

content::attribute_insert_statement
Prepare the insert statement into the attribute input view for a new revision (see the content repository documentation for details about the view). Parameters:
`content_type` * | The content type of the item for which a new revision is being prepared.
`table_name` * | The storage table of the content type.
`bind_vars` * | The name of an ns_set in which to store the attribute values for the revision. (Typically duplicates the contents of {[ns_getform].}
`form_name` * | The name of the ATS form object used to process the submission.

content::get_attribute_params
Query for parameters associated with a particular attribute Parameters:
`content_type` * | The content type keyword to which this attribute belongs.
`attribute_name` * | The name of the attribute, as represented in the attribute_name column of the acs_attributes table.

content::get_attributes
Returns columns from the acs_attributes table for all attributes associated with a content type. Parameters:
`content_type` * | The name of the content type (ACS Object Type) for which to obtain the list of attributes.
`args` * | Names of columns to query. If no columns are specified, returns a simple list of attribute names.

content::get_default_content_method
Gets the content input method most appropriate for an content type, based on the MIME types that are registered for that content type. Parameters:
`content_type` * | The content type for which an input method is needed.

content::get_sql_value
Return the sql statement for a column value in an insert or update statement, using a bind variable for the actual value and wrapping it in a conversion function where appropriate. Parameters:
`name` * | The name of the column and bind variable (they should be the same).
`datatype` * | The datatype of the column.

content::get_type_attribute_params
Query for attribute form metadata Parameters:
`args` * | Any number of object types
Returns: A list of attribute parameters nested by object_type, attribute_name and the is_html flag. For attributes with no parameters, there is a single entry with is_html as null.

content::get_type_info
Return specified columns from the acs_object_types table. Parameters:
`object_type` * | Object type key for which info is required.
`ref` * | If no further arguments, name of the column value to return. If further arguments are specified, name of the array in which to store info in the calling
`args` * | Column names to query.

content::get_widget_param_value
Utility procedure to return the value of a widget parameter Parameters:
`array_ref` * | The name of an array in the calling frame containing parameter data selected from the form metadata.
`content_type` * | The current content {type;} defaults to content_revision

content::prepare_content_file
Looks for an element named { content} in a form and prepares a temporarily file in UTF-8 for uploading to the content repository. Checks for a query variable named { content.tmpfile} to distinguish between file uploads and text entry. If the type of the file is text, then ensures that is in UTF-8. Does nothing if the uploaded file is in binary format. Parameters:
`form_name` * | The name of the form object in which content was submitted.
Returns: The path of the temporary file containing the content, or an empty string if the form does not include a content element or the value of the element is null.

content::set_attribute_values
Set the default values for attribute elements in ATS form object based on a previous revision Parameters:
`form_name` * | The name of the ATS form object containing the attribute elements.
`content_type` * | The type of item being revised in the form.
`revision_id` * | The revision ID from where to get the default values
`attributes` * | The list of attributes whose values should be set.

content::set_content_value
Set the default value for the content text area in an ATS form object based on a previous revision Parameters:
`form_name` * | The name of the ATS form object containing the content element.
`revision_id` * | The revision ID of the content to revise

content::string_to_file
Write a string in UTF-8 encoding to of temp file so it can be uploaded into a BLOB (which is blind to character encodings). Returns the name of the temp file. Parameters:
`s` * | The string to write to the file.

content::update_content_from_file
Update the BLOB column of a revision with the contents of a file Parameters:
`revision_id` * | The object ID of the revision to update.
`tmpfile` * | The name of a temporary file containing the content. The file is deleted following the update.

content::upload_content
Inserts content into the database from an uploaded file. Does automatic mime_type updating Parses text/html content and removes tags Parameters:
`db` * | A db handle
`revision_id` * | The revision to which the content belongs
`tmpfile` * | The server-side name of the file containing the body of the revision to upload into the content BLOB column of cr_revisions.
`filename` * | The client-side name of the file containing the body of the revision to upload into the content BLOB column of cr_revisions

* indicates required