wp-polls.php
106 lines
| 1 | <?php |
| 2 | /** |
| 3 | * WP-Polls core integrations file |
| 4 | * |
| 5 | * @since 1.0.0 |
| 6 | * @package SureTrigger |
| 7 | */ |
| 8 | |
| 9 | namespace SureTriggers\Integrations\WpPolls; |
| 10 | |
| 11 | use SureTriggers\Controllers\IntegrationsController; |
| 12 | use SureTriggers\Integrations\Integrations; |
| 13 | use SureTriggers\Traits\SingletonLoader; |
| 14 | |
| 15 | /** |
| 16 | * Class SureTrigger |
| 17 | * |
| 18 | * @package SureTriggers\Integrations\WpPolls |
| 19 | */ |
| 20 | class WpPolls extends Integrations { |
| 21 | |
| 22 | use SingletonLoader; |
| 23 | |
| 24 | /** |
| 25 | * ID |
| 26 | * |
| 27 | * @var string |
| 28 | */ |
| 29 | protected $id = 'WpPolls'; |
| 30 | |
| 31 | /** |
| 32 | * SureTrigger constructor. |
| 33 | */ |
| 34 | public function __construct() { |
| 35 | $this->name = __( 'WP-Polls', 'suretriggers' ); |
| 36 | $this->description = __( 'WP-Polls is a WordPress polls plugin.', 'suretriggers' ); |
| 37 | $this->icon_url = SURE_TRIGGERS_URL . 'assets/icons/wppolls.svg'; |
| 38 | |
| 39 | parent::__construct(); |
| 40 | } |
| 41 | |
| 42 | /** |
| 43 | * Get Poll context data. |
| 44 | * |
| 45 | * @param string $selected_answers_ids Selected Answers IDs. |
| 46 | * @param int $poll_id Poll ID. |
| 47 | * |
| 48 | * @return array |
| 49 | */ |
| 50 | public static function get_poll_context( $selected_answers_ids, $poll_id ) { |
| 51 | $context = []; |
| 52 | $context['poll_id'] = $poll_id; |
| 53 | |
| 54 | // Sanitize answer IDs — cast each to integer to prevent SQL injection. |
| 55 | $selected_answers_ids = implode( ',', array_map( 'intval', explode( ',', $selected_answers_ids ) ) ); |
| 56 | |
| 57 | global $wpdb; |
| 58 | $poll_data = $wpdb->get_row( |
| 59 | // phpcs:disable |
| 60 | $wpdb->prepare( |
| 61 | " |
| 62 | SELECT |
| 63 | p.pollq_question AS question, |
| 64 | GROUP_CONCAT(a.polla_answers SEPARATOR ', ') AS answers, |
| 65 | p.pollq_timestamp AS start_date, |
| 66 | p.pollq_expiry AS end_date, |
| 67 | sa.selected_answers |
| 68 | FROM {$wpdb->prefix}pollsq p |
| 69 | LEFT JOIN {$wpdb->prefix}pollsa a ON p.pollq_id = a.polla_qid |
| 70 | LEFT JOIN ( |
| 71 | SELECT polla_qid, GROUP_CONCAT(polla_answers SEPARATOR ', ') AS selected_answers |
| 72 | FROM {$wpdb->prefix}pollsa |
| 73 | WHERE polla_aid IN ($selected_answers_ids) |
| 74 | GROUP BY polla_qid -- Group by polla_qid to avoid duplicate rows |
| 75 | ) AS sa ON p.pollq_id = sa.polla_qid |
| 76 | WHERE p.pollq_id = %d |
| 77 | GROUP BY p.pollq_question, p.pollq_timestamp, p.pollq_expiry |
| 78 | ", |
| 79 | $poll_id |
| 80 | ) |
| 81 | // phpcs:enable |
| 82 | ); |
| 83 | |
| 84 | if ( ! empty( $poll_data ) ) { |
| 85 | $context['question'] = $poll_data->question; |
| 86 | $context['answers'] = $poll_data->answers; |
| 87 | $context['start_date'] = gmdate( 'Y-m-d H:i:s', $poll_data->start_date ); |
| 88 | $context['end_date'] = 0 == $poll_data->end_date ? 'Not set' : gmdate( 'Y-m-d H:i:s', $poll_data->end_date ); |
| 89 | $context['selected_answers'] = $poll_data->selected_answers; |
| 90 | } |
| 91 | |
| 92 | return $context; |
| 93 | } |
| 94 | |
| 95 | /** |
| 96 | * Is Plugin depended on plugin is installed or not. |
| 97 | * |
| 98 | * @return bool |
| 99 | */ |
| 100 | public function is_plugin_installed() { |
| 101 | return defined( 'WP_POLLS_VERSION' ); |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | IntegrationsController::register( WpPolls::class ); |
| 106 |