<?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; } } } } }