function get_options() { if (empty(self::$opt)) { self::$opt = get_option(self::OPT_NAME); } if (empty(self::$opt)) { $this->update_options('default'); } return self::$opt; }
function __construct() { parent::__construct(); // add the management page to the admin nav bar if ($this->user_access) { add_action('admin_menu', array($this, 'register_option_page')); } // ссылка на настойки add_filter('plugin_action_links', array($this, 'setting_page_link'), 10, 2); // TinyMCE кнопка WP2.5+ if (self::$opt['tinymce_button']) { $this->tinymce_button(); } }
function dem_last_version_up() { $dem_ver = get_option('democracy_version'); if ($dem_ver == DEM_VER) { return; } global $wpdb, $table_prefix; ### ### переименование таблиц // version 2+ if ($wpdb->get_results("SHOW TABLES LIKE '{$table_prefix}democracyQ'")) { $wpdb->query("ALTER TABLE {$table_prefix}democracyQ RENAME {$wpdb->democracy_q}"); $wpdb->query("ALTER TABLE {$table_prefix}democracyA RENAME {$wpdb->democracy_a}"); $wpdb->query("ALTER TABLE {$table_prefix}democracyIP RENAME {$wpdb->democracy_log}"); } // 4.0 (раньше была таблица democracy_ip ) if ($wpdb->get_results("SHOW TABLES LIKE '{$table_prefix}democracy_ip'")) { $wpdb->query("ALTER TABLE {$table_prefix}democracy_ip RENAME {$wpdb->democracy_log}"); } ### ### изменение данных таблиц $fields = $wpdb->get_results("SHOW COLUMNS FROM {$wpdb->democracy_q}"); $fields_q = wp_list_pluck($fields, 'Field'); $fields = $wpdb->get_results("SHOW COLUMNS FROM {$wpdb->democracy_a}"); $fields_a = wp_list_pluck($fields, 'Field'); $fields = $wpdb->get_results("SHOW COLUMNS FROM {$wpdb->democracy_log}"); $fields_log = wp_list_pluck($fields, 'Field'); // 3.1.3 if (!in_array('end', $fields_q)) { $wpdb->query("ALTER TABLE {$wpdb->democracy_q} ADD `end` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `added`;"); } if (!in_array('note', $fields_q)) { $wpdb->query("ALTER TABLE {$wpdb->democracy_q} ADD `note` text NOT NULL;"); } if (in_array('current', $fields_q)) { $wpdb->query("ALTER TABLE {$wpdb->democracy_q} CHANGE `current` `active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0;"); $wpdb->query("ALTER TABLE {$wpdb->democracy_q} CHANGE `active` `open` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0;"); } // 4.1 if (!in_array('aids', $fields_log)) { // если нет поля aids, создаем 2 поля и индексы $wpdb->query("ALTER TABLE {$wpdb->democracy_log} ADD `aids` text NOT NULL;"); $wpdb->query("ALTER TABLE {$wpdb->democracy_log} ADD `userid` bigint(20) UNSIGNED NOT NULL DEFAULT 0;"); $wpdb->query("ALTER TABLE {$wpdb->democracy_log} ADD KEY userid (userid)"); $wpdb->query("ALTER TABLE {$wpdb->democracy_log} ADD KEY qid (qid)"); } // 4.2 if (in_array('allowusers', $fields_q)) { $wpdb->query("ALTER TABLE {$wpdb->democracy_q} CHANGE `allowusers` `democratic` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0';"); } if (!in_array('forusers', $fields_q)) { $wpdb->query("ALTER TABLE {$wpdb->democracy_q} ADD `forusers` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `multiple`;"); $wpdb->query("ALTER TABLE {$wpdb->democracy_q} ADD `revote` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `multiple`;"); } // 4.5.6 if (!in_array('expire', $fields_log)) { $wpdb->query("ALTER TABLE {$wpdb->democracy_log} ADD `expire` bigint(20) UNSIGNED NOT NULL default 0 AFTER `userid`;"); } // 4.7.5 // конвертируем в кодировку utf8 if ($wpdb->charset === 'utf8') { foreach (array($wpdb->democracy_q, $wpdb->democracy_a, $wpdb->democracy_log) as $table) { $alter = false; if (!($results = $wpdb->get_results("SHOW FULL COLUMNS FROM `{$table}`"))) { continue; } foreach ($results as $column) { if (!$column->Collation) { continue; } list($charset) = explode('_', $column->Collation); if (strtolower($charset) != 'utf8') { $alter = true; break; } } if ($alter) { $wpdb->query("ALTER TABLE {$table} CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci"); } } } // 4.9 if (!in_array('date', $fields_log)) { $wpdb->query("ALTER TABLE `{$wpdb->democracy_log}` ADD `date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `userid`;"); } // 4.9.3 if (version_compare($dem_ver, '4.9.3', '<')) { $wpdb->query("ALTER TABLE `{$wpdb->democracy_log}` CHANGE `date` `date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';"); $wpdb->query("ALTER TABLE `{$wpdb->democracy_q}` CHANGE `multiple` `multiple` tinyint(5) UNSIGNED NOT NULL DEFAULT 0;"); $wpdb->query("ALTER TABLE `{$wpdb->democracy_a}` CHANGE `added_by` `added_by` varchar(100) NOT NULL default '';"); $wpdb->query("UPDATE `{$wpdb->democracy_a}` SET added_by = '' WHERE added_by = '0'"); } if (!in_array('added_user', $fields_q)) { $wpdb->query("ALTER TABLE `{$wpdb->democracy_q}` ADD `added_user` bigint(20) UNSIGNED NOT NULL DEFAULT 0 AFTER `added`;"); } if (!in_array('show_results', $fields_q)) { $wpdb->query("ALTER TABLE `{$wpdb->democracy_q}` ADD `show_results` tinyint(1) UNSIGNED NOT NULL default 1 AFTER `revote`;"); } // обновим css Dem::init()->regenerate_democracy_css(); update_option('democracy_version', DEM_VER); }
function democracy_activate() { global $wpdb; Dem::init()->load_textdomain(); // create tables require_once ABSPATH . 'wp-admin/includes/upgrade.php'; $collate = !empty($wpdb->charset) && !empty($wpdb->collate) ? "DEFAULT CHARSET={$wpdb->charset} COLLATE {$wpdb->collate}" : "DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci"; if (!$wpdb->get_var("SHOW TABLES LIKE '{$wpdb->democracy_q}'")) { dbDelta("\n\t\tCREATE TABLE {$wpdb->democracy_q} (\n\t\t\tid bigint(20) UNSIGNED NOT NULL auto_increment,\n\t\t\tquestion text NOT NULL default '',\n\t\t\tadded int(10) UNSIGNED NOT NULL default 0,\n\t\t\tadded_user bigint(20) UNSIGNED NOT NULL default 0,\n\t\t\tend int(10) UNSIGNED NOT NULL default 0,\n\t\t\tdemocratic tinyint(1) UNSIGNED NOT NULL default 0,\n\t\t\tactive tinyint(1) UNSIGNED NOT NULL default 0,\n\t\t\topen tinyint(1) UNSIGNED NOT NULL default 0,\n\t\t\tmultiple tinyint(5) UNSIGNED NOT NULL default 0,\n\t\t\tforusers tinyint(1) UNSIGNED NOT NULL default 0,\n\t\t\trevote tinyint(1) UNSIGNED NOT NULL default 0,\n\t\t\tshow_results tinyint(1) UNSIGNED NOT NULL default 0,\n\t\t\tnote text NOT NULL default '',\n\n\t\t\tPRIMARY KEY (id),\n\t\t\tKEY active (active)\n\t\t) {$collate}; \n\t\t"); } if (!$wpdb->get_var("SHOW TABLES LIKE '{$wpdb->democracy_a}'")) { dbDelta("\n\t\tCREATE TABLE {$wpdb->democracy_a} (\n\t\t\taid BIGINT(20) UNSIGNED NOT NULL auto_increment,\n\t\t\tqid BIGINT(20) UNSIGNED NOT NULL default 0,\n\t\t\tanswer text NOT NULL default '',\n\t\t\tvotes int(10) UNSIGNED NOT NULL default 0,\n\t\t\tadded_by varchar(100) NOT NULL default '',\n\n\t\t\tPRIMARY KEY (aid),\n\t\t\tKEY qid (qid)\n\t\t) {$collate};\n\t\t"); } if (!$wpdb->get_var("SHOW TABLES LIKE '{$wpdb->democracy_log}'")) { dbDelta("\n\t\tCREATE TABLE {$wpdb->democracy_log} (\n\t\t\tip BIGINT(11) UNSIGNED NOT NULL default 0,\n\t\t\tqid BIGINT(20) UNSIGNED NOT NULL default 0,\n\t\t\taids TEXT NOT NULL default '',\n\t\t\tuserid BIGINT(20) UNSIGNED NOT NULL default 0,\n\t\t\tdate DATETIME NOT NULL default '0000-00-00 00:00:00',\n\t\t\texpire BIGINT(20) UNSIGNED NOT NULL default 0,\n\n\t\t\tKEY ip (ip,qid),\n\t\t\tKEY qid (qid),\n\t\t\tKEY userid (userid)\n\t\t) {$collate};\n\t\t"); } // Poll example if (!$wpdb->get_row("SELECT * FROM {$wpdb->democracy_q} LIMIT 1")) { $wpdb->insert($wpdb->democracy_q, array('question' => __('Что для вас деньги?', 'dem'), 'added' => current_time('timestamp'), 'added_user' => get_current_user_id(), 'democratic' => 1, 'active' => 1, 'open' => 1, 'revote' => 1)); $qid = $wpdb->insert_id; $answers = array(__('Деньги - это универсальный продукт для обмена.', 'dem'), __('Деньги - это бумага... Не в деньгах счастье...', 'dem'), __('Средство достижения цели.', 'dem'), __('Кусочки дьявола :)', 'dem'), __('Это власть, - это "Сила", - это счастье...', 'dem')); // create votes foreach ($answers as $answr) { $wpdb->insert($wpdb->democracy_a, array('votes' => rand(0, 100), 'qid' => $qid, 'answer' => $answr)); } } // add options, if needed if (!get_option(Dem::OPT_NAME)) { Dem::init()->update_options('default'); } // upgrade dem_last_version_up(); }
function poll_edit_form($poll_id = false) { global $wpdb; if (!$poll_id && isset($_GET['edit_poll'])) { $poll_id = (int) $_GET['edit_poll']; } $edit = !!$poll_id; $answers = false; $title = $poll = $shortcode = ''; if ($edit) { $title = __('Редактировать опрос', 'dem'); $shortcode = DemPoll::shortcode_html($poll_id) . ' - ' . __('шоткод для использования в записи', 'dem'); $poll = $wpdb->get_row("SELECT * FROM {$wpdb->democracy_q} WHERE id = {$poll_id} LIMIT 1"); $answers = $wpdb->get_results("SELECT * FROM {$wpdb->democracy_a} WHERE qid = {$poll_id}"); $hidden_inputs = "<input type='hidden' name='dmc_update_poll' value='{$poll_id}'>"; } else { //$title = __('Добавить новый опрос','dem'); $hidden_inputs = "<input type='hidden' name='dmc_create_poll' value='1'>"; } $poll = $poll ? wp_unslash($poll) : false; echo demenu() . ($title ? "<h2>{$title}</h2>{$shortcode}" : '') . '<form action="" method="POST" class="dem-new-poll"> <input type="hidden" name="dmc_qid" value="' . $poll_id . '"> ' . wp_nonce_field('dem_insert_poll', '_demnonce', $referer = 0, $echo = 0) . ' <label> ' . __('Вопрос:', 'dem') . ' <input type="text" id="the-question" name="dmc_question" value="' . esc_attr(@$poll->question) . '"> </label> ' . __('Варианты ответов:', 'dem') . ' '; ?> <ol class="new-poll-answers"> <?php if ($answers) { $_answers = Dem::objects_array_sort($answers, array('votes' => 'desc')); foreach ($_answers as $answer) { $by_user = $answer->added_by ? '<i>*</i>' : ''; echo ' <li class="answ"> <input class="answ-text" type="text" name="dmc_old_answers[' . $answer->aid . '][answer]" value="' . esc_attr($answer->answer) . '"> <input type="text" name="dmc_old_answers[' . $answer->aid . '][votes]" value="' . $answer->votes . '" style="width:50px;min-width:50px;"> ' . $by_user . ' </li>'; } } else { for ($i = 0; $i < 2; $i++) { echo '<li class="answ"><input type="text" name="dmc_new_answers[]" value=""></li>'; } } ?> <?php if (!Dem::$opt['democracy_off']) { ?> <li> <label> <input type="hidden" name='dmc_democratic' value=''> <input type="checkbox" name="dmc_democratic" value="1" <?php checked(!isset($poll->democratic) || $poll->democratic, 1); ?> > <?php _e('Разрешить пользователям добавлять свои ответы (democracy).', 'dem'); ?> </label> </li> <?php } ?> </ol> <ol class="poll-options"> <li> <label> <input type="hidden" name='dmc_active' value=''> <input type="checkbox" name='dmc_active' value='1' <?php $edit ? checked(@$poll->active, 1) : 'checked="true"'; ?> > <?php _e('Сделать этот опрос активным.', 'dem'); ?> </label> </li> <li> <label> <?php $ml = (int) @$poll->multiple; ?> <input type="hidden" name='dmc_multiple' value=''> <input type="checkbox" name="dmc_multiple" value="<?php echo $ml; ?> " <?php echo $ml ? 'checked="checked"' : ''; ?> > <input type="number" min=0 value="<?php echo $ml == 1 || $ml == 0 ? '' : $ml; ?> " style="width:50px; <?php echo !$ml ? 'display:none;' : ''; ?> "> <?php _e('Разрешить выбирать несколько ответов (множественный).', 'dem'); ?> </label> </li> <li> <label> <input type="text" name="dmc_end" value="<?php echo @$poll->end ? date('d-m-Y', $poll->end) : ''; ?> " style="width:120px;min-width:120px;" > <?php _e('Дата, когда опрос был/будет закрыт. Формат: dd-mm-yyyy.', 'dem'); ?> </label> </li> <?php if (!Dem::$opt['revote_off']) { ?> <li> <label> <input type="hidden" name='dmc_revote' value=''> <input type="checkbox" name="dmc_revote" value="1" <?php checked(!isset($poll->revote) || $poll->revote, 1); ?> > <?php _e('Разрешить изменять мнение (переголосование).', 'dem'); ?> </label> </li> <?php } ?> <?php if (!Dem::$opt['only_for_users']) { ?> <li> <label> <input type="hidden" name='dmc_forusers' value=''> <input type="checkbox" name="dmc_forusers" value="1" <?php checked(@$poll->forusers, 1); ?> > <?php _e('Голосовать могут только зарегистрированные пользователи.', 'dem'); ?> </label> </li> <?php } ?> <?php if (!Dem::$opt['dont_show_results']) { ?> <li> <label> <input type="hidden" name='dmc_show_results' value=''> <input type="checkbox" name="dmc_show_results" value="1" <?php checked(!isset($poll->show_results) || @$poll->show_results, 1); ?> > <?php _e('Показывать результаты опроса.', 'dem'); ?> </label> </li> <?php } ?> <li><label> <?php _e('Заметка: текст будет добавлен под опросом.', 'dem'); ?> <br> <textarea name="dmc_note" style="height:3.5em;" ><?php echo esc_textarea(@$poll->note); ?> </textarea> </label> </li> </ol> <?php echo $hidden_inputs; ?> <input type="submit" class="button-primary" value="<?php echo $edit ? __('Внести изменения', 'dem') : __('Добавить опрос', 'dem'); ?> "> <?php // если редактируем if ($edit) { // открыть echo dem_opening_buttons($poll); // активировать echo dem_activatation_buttons($poll); echo '<a href="' . add_query_arg(array('delete_poll' => $poll->id), Dem::$i->admin_page_url()) . '" class="button" onclick="return confirm(\'' . __('Точно удалить?', 'dem') . '\');" title="' . __('Удалить', 'dem') . '"><span class="dashicons dashicons-trash"></span></a>'; } ?> </form> <?php }