<?php
/**
* Post storage model for editability
*
* @since 1.0
*/
class CACIE_Editable_Model_Comment extends CACIE_Editable_Model {
/**
* @since 3.5
*/
protected function get_list_selector() {
return '#the-comment-list';
}
/**
* @see CACIE_Editable_Model::is_editable()
* @since 1.0
*/
public function is_editable( $column ) {
// By default, inherit editability from parent
$is_editable = parent::is_editable( $column );
switch ( $column->properties->type ) {
// Default columns
//case 'name':
// Custom columns
case 'column-approved':
case 'column-author_url':
case 'column-author_email':
case 'column-author_name':
case 'column-excerpt':
case 'column-type':
case 'column-user':
$is_editable = true;
break;
}
/**
* Filter the editability of a column
*
* @since 3.4
*
* @param bool $is_editable Whether the column is editable
* @param CPAC_Column $column Column object
* @param CACIE_Editable_Model $model Editability storage model
*/
$is_editable = apply_filters( 'cac/editable/is_column_editable', $is_editable, $column, $this );
$is_editable = apply_filters( 'cac/editable/is_column_editable/column=' . $column->get_type(), $is_editable, $column, $this );
return $is_editable;
}
/**
* @see CACIE_Editable_Model::get_column_options()
* @since 1.0
*/
public function get_column_options( $column ) {
$options = parent::get_column_options( $column );
return $options;
}
/**
* @see CACIE_Editable_Model::get_editables_data()
* @since 1.0
*/
public function get_editables_data() {
$data = array(
// WP Default columns
// Custom columns
'column-approved' => array(
'type' => 'togglable',
'property' => 'comment_approved',
'options' => array( 0, 1 )
),
'column-author_url' => array(
'type' => 'text',
'property' => 'comment_author_url',
'js' => array(
'selector' => 'a'
),
),
'column-author_email' => array(
'type' => 'text',
'property' => 'comment_author_email',
),
'column-author_name' => array(
'type' => 'text',
'property' => 'comment_author',
),
'column-excerpt' => array(
'type' => 'textarea',
'property' => 'comment_content',
),
'column-type' => array(
'type' => 'text',
'property' => 'comment_type',
),
'column-user' => array(
'type' => 'select2_dropdown',
'property' => 'user_id',
'ajax_populate' => true
),
'column-meta' => array(
// settings are set in CACIE_Editable_Model::get_columns()
)
);
// @todo
//if ( ! current_user_can( 'edit-comments' ) ) {
// unset( $data['column-status'] );
//}
/**
* Filter the editability settings for a column
*
* @since 3.4
*
* @param array $data {
* Editability settings.
*
* @type string $type Editability type. Accepts 'text', 'select', 'textarea', etc.
* @type array $options Optional. Options for dropdown ([value] => [label]), only used when $type is "select"
* }
* @param CACIE_Editable_Model $model Editability storage model
*/
$data = apply_filters( 'cac/editable/editables_data', $data, $this );
$data = apply_filters( 'cac/editable/editables_data/type=' . $this->storage_model->get_type(), $data, $this );
return $data;
}
/**
* @see CACIE_Editable_Model::get_items()
* @since 1.0
*/
public function get_items() {
global $wp_list_table;
$comments = $wp_list_table->items;
if ( ! $comments ) {
return array();
}
$items = array();
foreach ( $comments as $comment ) {
if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) {
continue;
}
$columndata = array();
foreach ( $this->storage_model->columns as $column_name => $column ) {
if ( ! $this->is_edit_enabled( $column ) ) {
continue;
}
$value = '';
// WP Default column
if ( $column->properties->default ) {
switch ( $column_name ) {
//case 'name':
//$value = $post->post_author;
//break;
}
}
// Custom column
else {
$raw_value = $this->get_column_editability_value( $column, $comment->comment_ID );
if ( $raw_value === NULL ) {
continue;
}
$value = $raw_value;
}
/**
* Filter the raw value, used for editability, for a column
*
* @since 3.4
*
* @param mixed $value Column value used for editability
* @param CPAC_Column $column Colum object
* @param int $id Post ID to get the column editability for
* @param CACIE_Editable_Model $model Editability storage model
*/
$value = apply_filters( 'cac/editable/column_value', $value, $column, $comment->comment_ID, $this );
$value = apply_filters( 'cac/editable/column_value/column=' . $column->get_type(), $value, $column, $comment->comment_ID, $this );
// Get item data
$itemdata = array();
if ( method_exists( $column, 'get_item_data' ) ) {
$itemdata = $column->get_item_data( $comment->comment_ID );
}
// Add data
$columndata[ $column_name ] = array(
'revisions' => array( $value ),
'current_revision' => 0,
'itemdata' => $itemdata,
'editable' => array(
'formattedvalue' => $this->get_formatted_value( $column, $value )
)
);
}
// Add comment to items list
$items[ $comment->comment_ID ] = array(
'ID' => $comment->comment_ID,
'columndata' => $columndata
);
}
return $items;
}
/**
* Get editability value for a column
*
* @since 3.4
*
* @param CPAC_Column $column Column
* @param integer $id Item ID
* @return mixed Raw value
*/
public function get_column_editability_value( $column, $id ) {
return $column->get_raw_value( $id );
}
/**
* @see CACIE_Editable_Model::manage_value()
* @since 1.0
*/
public function manage_value( $column, $id ){
}
/**
* @see CACIE_Editable_Model::column_save()
* @since 1.0
*/
public function column_save( $id, $column, $value ) {
if ( ! ( $comment = get_comment( $id ) ) ) {
exit;
}
if ( ! current_user_can( 'edit_comment', $id ) ) {
exit;
}
// Third party columns can use the save() method as a callback for inline-editing
// If a column features a saving method itself, the "return" statement makes sure default behaviour is prevented
if ( method_exists( $column, 'save' ) ) {
$result = $column->save( $id, $value );
// Return a possible WP_Error yielded by the column save method
if ( is_wp_error( $result ) ) {
return $result;
}
return;
}
$editable = $this->get_editable( $column->properties->name );
switch ( $column->properties->type ) {
// Default
// Custom columns
case 'column-meta':
$this->update_meta( $id, $column->get_field_key(), $value );
break;
// Save basic property such as title or description (data that is available in WP_Post)
default:
if ( ! empty( $editable['property'] ) ) {
$property = $editable['property'];
if ( isset( $comment->{$property} ) ) {
wp_update_comment( array(
'comment_ID' => $id,
$property => $value
) );
}
}
else {
$result = null;
/**
* Called when a column is saved, but the saving is not handled by Admin Columns core
* This should be used for saving columns that are editable but do not have their own CPAC_Column class
* The first parameter, $result, should only be used if an error occurs
*
* @since 3.4
*
* @param WP_Error $result Result of saving
* @param CPAC_Column $column Column object
* @param int $id ID of item to be saved
* @param mixed $value Value to be saved
* @param CACIE_Editable_Model $model Editability storage model
*/
$result = apply_filters( 'cac/editable/column_save', $result, $column, $id, $value, $this );
$result = apply_filters( 'cac/editable/column_save/column=' . $column->get_type(), $result, $column, $id, $value, $this );
if ( is_wp_error( $result ) ) {
return $result;
}
}
}
}
}