204 lines
3.7 KiB
PHP
204 lines
3.7 KiB
PHP
<?php
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Survey class.
|
|
*
|
|
* @see UserFeedback_DB
|
|
* @since 1.0.0
|
|
*
|
|
* @package UserFeedback
|
|
* @subpackage DB
|
|
* @author David Paternina
|
|
*/
|
|
class UserFeedback_Survey extends UserFeedback_DB {
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected $table_name = 'userfeedback_surveys';
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected $casts = array(
|
|
'questions' => 'array',
|
|
'settings' => 'object',
|
|
'notifications' => 'object',
|
|
);
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public static function find( $id ) {
|
|
return self::where(
|
|
array(
|
|
'id' => $id,
|
|
)
|
|
)->with_count( array( 'responses' ) )->single();
|
|
}
|
|
|
|
/**
|
|
* Add survey impression
|
|
*
|
|
* @param $id
|
|
* @return void
|
|
*/
|
|
public static function record_impression( $id ) {
|
|
$instance = new static();
|
|
|
|
global $wpdb;
|
|
$wpdb->query(
|
|
$wpdb->prepare(
|
|
"
|
|
UPDATE {$instance->get_table()}
|
|
SET impressions = impressions + 1
|
|
WHERE %1s = %s
|
|
",
|
|
strval( $instance->primary_key ),
|
|
strval( $id )
|
|
)
|
|
);
|
|
|
|
do_action( 'userfeedback_after_db_impression', $id );
|
|
}
|
|
|
|
/**
|
|
* Change Surveys status to draft
|
|
*
|
|
* @param $survey_ids
|
|
* @return bool|int
|
|
*/
|
|
public static function draft( $survey_ids ) {
|
|
return self::update_many(
|
|
$survey_ids,
|
|
array(
|
|
'status' => 'draft',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Change Surveys status to publish
|
|
*
|
|
* @param $survey_ids
|
|
* @return bool|int
|
|
*/
|
|
public static function publish( $survey_ids ) {
|
|
return self::update_many(
|
|
$survey_ids,
|
|
array(
|
|
'status' => 'publish',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Change Surveys status to trash
|
|
*
|
|
* @param $survey_ids
|
|
* @return bool|int
|
|
*/
|
|
public static function trash( $survey_ids ) {
|
|
return self::update_many(
|
|
$survey_ids,
|
|
array(
|
|
'status' => 'trash',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Change Surveys status to draft
|
|
*
|
|
* @param $survey_ids
|
|
* @return bool|int
|
|
*/
|
|
public static function restore( $survey_ids ) {
|
|
return self::update_many(
|
|
$survey_ids,
|
|
array(
|
|
'status' => 'draft',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Search Survey question by id
|
|
*
|
|
* @param $survey
|
|
* @param $question_id
|
|
* @return false|mixed
|
|
*/
|
|
public static function search_question( $survey, $question_id ) {
|
|
|
|
if ( is_numeric( $survey ) ) {
|
|
$survey = self::find( $survey );
|
|
}
|
|
|
|
$questions = $survey->questions;
|
|
|
|
foreach ( $questions as $question ) {
|
|
if ( $question->id === $question_id ) {
|
|
return $question;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function get_columns() {
|
|
return array( 'id', 'title', 'status', 'type', 'questions', 'settings', 'notifications', 'impressions', 'publish_at', 'created_at' );
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function create_table() {
|
|
global $wpdb;
|
|
|
|
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
|
|
|
$charset_collate = $wpdb->get_charset_collate();
|
|
$table_name = self::get_table();
|
|
|
|
$sql = "CREATE TABLE $table_name (
|
|
id bigint(20) NOT NULL AUTO_INCREMENT,
|
|
title varchar(128),
|
|
status enum('publish', 'draft', 'trash') DEFAULT 'draft',
|
|
type varchar(100),
|
|
questions longtext,
|
|
impressions bigint(20) default 0 NOT NULL,
|
|
settings text,
|
|
notifications text,
|
|
publish_at timestamp NULL,
|
|
created_at timestamp NOT NULL,
|
|
PRIMARY KEY (id)
|
|
) $charset_collate;";
|
|
|
|
dbDelta( $sql );
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function get_relationship_config( $name ) {
|
|
switch ( $name ) {
|
|
case 'responses':
|
|
return array(
|
|
'type' => 'many',
|
|
'class' => UserFeedback_Response::class,
|
|
'key' => 'survey_id',
|
|
);
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
}
|