<?php
/**
* Suppress "error - 0 - No summary was found for this file" on phpdoc generation
*
* @package WPDataProjects\List_Table
*/
namespace WPDataProjects\List_Table {
use WPDataAccess\List_Table\WPDA_List_View;
use WPDataAccess\Utilities\WPDA_Repository;
use WPDataProjects\Project\WPDP_Project;
use WPDataProjects\Data_Dictionary\WPDP_List_Columns_Cache;
/**
* Class WPDP_List_View extends WPDA_List_View
*
* Data Projects uses WPDP_List_View instead of WPDA_List_View to handle column labels correctly.
*
* @see WPDA_List_View
*
* @author Peter Schulz
* @since 2.0.0
*/
class WPDP_List_View extends WPDA_List_View {
/**
* Project ID
*
* @var null|string
*/
protected $project_id = null;
/**
* Page ID
*
* @var null
*/
protected $page_id = null;
/**
* Page title
*
* @var null
*/
protected $title;
/**
* Page subtitle
*
* @var null
*/
protected $subtitle;
/**
* Possible values for mode are: view and edit
*
* @var
*/
protected $mode;
/**
* SQL where clause
*
* @var null
*/
protected $where_clause = null;
/**
* Order by
*
* @var null
*/
protected $orderby_clause = null;
/**
* Possible values for label type are: listtable and tableform
*
* @var string
*/
protected $label_type = 'listtable';
/**
* Allow insert?
*
* @var string|null
*/
protected $allow_insert = null;
/**
* Allow delete?
*
* @var string|null
*/
protected $allow_delete = null;
/**
* Allow import?
*
* @var string|null
*/
protected $allow_import = null;
/**
* Project info
*
* @var WPDP_Project
*/
protected $project = null;
/**
* Options set name
*
* @var string
*/
protected $setname = 'default';
/**
* Overwrite constructor
*
* @param array $args
*/
public function __construct( array $args = array() ) {
if ( isset( $args['project_id'] ) ) {
$this->project_id = sanitize_text_field( wp_unslash( $args['project_id'] ) );
} elseif ( isset( $_REQUEST['tab'] ) && 'tables' === $_REQUEST['tab'] ) {
$this->project_id = 'wpda_sys_tables';
}
if ( isset( $args['page_id'] ) ) {
$this->page_id = sanitize_text_field( wp_unslash( $args['page_id'] ) );
}
$this->project = new WPDP_Project( $this->project_id, $this->page_id );
if ( null === $this->project->get_project() ) {
wp_die( __( 'Data Project page not found [need a valid project_id and page_id]', 'wp-data-access' ) );
}
$this->title = $this->project->get_title();
$this->subtitle = $this->project->get_subtitle();
$this->mode = $this->project->get_mode();
$this->setname = null === $this->project->get_setname() ? 'default' : $this->project->get_setname();
if ( null !== $this->title && '' !== $this->title ) {
$args['title'] = $this->title;
}
$args['subtitle'] = $this->subtitle;
parent::__construct( $args );
if (
'edit' === $this->action ||
'new' === $this->action ||
'view' === $this->action
) {
$this->label_type = 'tableform';
}
// Overwrite column header text.
$this->column_headers = isset( $args['column_headers'] ) ? $args['column_headers'] : '';
if ( isset( $args['where_clause'] ) && '' !== $args['where_clause'] ) {
$this->where_clause = $args['where_clause'];
}
if ( isset( $args['orderby_clause'] ) && '' !== $args['orderby_clause'] ) {
$this->orderby_clause = $args['orderby_clause'];
}
if ( isset( $args['allow_insert'] ) ) {
$this->allow_insert = sanitize_text_field( wp_unslash( $args['allow_insert'] ) );
}
if ( isset( $args['allow_delete'] ) ) {
$this->allow_delete = sanitize_text_field( wp_unslash( $args['allow_delete'] ) );
}
if ( isset( $args['allow_import'] ) ) {
$this->allow_import = sanitize_text_field( wp_unslash( $args['allow_import'] ) );
}
if ( isset( $args['bulk_actions_enabled'] ) ) {
$this->bulk_actions_enabled = $args['bulk_actions_enabled'];
}
global $wpda_project_mode;
$wpda_project_mode = array(
'project_id' => $this->project_id,
'page_id' => $this->page_id,
'setname' => $this->setname,
'mode' => $this->mode,
'page_allow_full_export' => $this->project->get_page_allow_full_export(),
'allow_insert' => $this->allow_insert,
);
}
/**
* Overwrite show method
*
* @see WPDA_List_View::show()
*/
public function show() {
// Add datetimepicker
wp_enqueue_style( 'datetimepicker' );
wp_enqueue_script( 'datetimepicker' );
// Prepare columns for list table. Needed in get_column_headers() and handed over to list table to prevent
// processing the same queries multiple times.
if ( null === $this->wpda_list_columns ) {
$this->wpda_list_columns =
WPDP_List_Columns_Cache::get_list_columns( $this->schema_name, $this->table_name, $this->label_type, $this->setname );
}
$wpda_repository = new WPDA_Repository();
$wpda_repository->inform_user();
if ( 'only' === $this->allow_insert && 'new' !== $this->action ) {
wp_die( __( 'ERROR: Action not allowed', 'wp-data-access' ) );
}
if (
'view' === $this->mode &&
(
'new' === $this->action || 'edit' === $this->action
)
) {
if ( ( 'only' === $this->allow_insert || null === $this->allow_insert ) && 'new' === $this->action ) {
// Allow these actions (exceptions)
} else {
wp_die( __( 'ERROR: Action not allowed', 'wp-data-access' ) );
}
}
switch ( $this->action ) {
case 'new': // Show edit form in editing mode to create new records.
case 'edit': // Show edit form in editing mode to update records.
case 'view': // Show edit form in view mode to view records.
$this->display_edit_form();
break;
case 'create_table': // Show form to create new table.
$this->display_design_menu();
break;
default: // Show list (default).
$this->display_list_table();
}
}
/**
* Overwrite display_edit_form method
*
* @see WPDA_List_View::display_edit_form()
*/
protected function display_edit_form() {
$args = array(
'title' => $this->title,
'add_action_to_title' => 'FALSE',
'hide_add_new' => 'off' === $this->allow_insert,
);
if ( 'only' === $this->allow_insert ) {
$args['show_back_button'] = false;
$args['show_back_icon'] = false;
$args['action'] = 'new';
}
$form = new $this->edit_form_class(
$this->schema_name,
$this->table_name,
$this->wpda_list_columns,
$args
);
$form->prepare_form();
if ( isset( $_POST['postaction'] ) && 'list' === $_POST['postaction'] ) {
// Jump back to list after pressing SUBMIT > LIST
// Change column list from edit to list mode
$this->wpda_list_columns =
WPDP_List_Columns_Cache::get_list_columns( $this->schema_name, $this->table_name, 'listtable', $this->setname );
$this->display_list_table();
} else {
$form->show();
}
}
/**
* Overwrite display_list_table method
*
* @see WPDA_List_View::display_list_table()
*/
protected function display_list_table() {
$args = array(
'wpdaschema_name' => $this->schema_name,
'table_name' => $this->table_name,
'wpda_list_columns' => $this->wpda_list_columns,
'column_headers' => $this->column_headers,
'title' => $this->title,
'subtitle' => $this->subtitle,
'mode' => $this->mode,
'where_clause' => $this->where_clause,
'orderby_clause' => $this->orderby_clause,
'pid' => $this->page_id,
);
if ( null !== $this->allow_insert ) {
$args['allow_insert'] = $this->allow_insert;
}
if ( null !== $this->allow_update ) {
$args['allow_update'] = $this->allow_update;
}
if ( null !== $this->allow_delete ) {
$args['allow_delete'] = $this->allow_delete;
}
if ( null !== $this->allow_import ) {
$args['allow_import'] = $this->allow_import;
}
if ( false === $this->bulk_actions_enabled ) {
$args['bulk_actions_enabled'] = $this->bulk_actions_enabled;
}
$this->wpda_list_table = new WPDP_List_Table( $args );
$this->wpda_list_table->show();
}
/**
* Overwrite get_column_headers method
*
* @see WPDA_List_View::get_column_headers()
*/
public function get_column_headers() {
if ( null === $this->wpda_list_columns ) {
$this->wpda_list_columns = WPDP_List_Columns_Cache::get_list_columns( $this->schema_name, $this->table_name, $this->label_type, $this->setname );
}
return $this->wpda_list_columns->get_table_column_headers();
}
}
}