Exemplo n.º 1
0
 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();
     }
 }
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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();
}
Exemplo n.º 5
0
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 
}