dgUpload(); break; case "batchimport": showBatchImport(); break; case "batchimporthandler": batchImportHandler(); break; case "wmupload": wmUpload(); break; case "resetvotes": showVotes(); break; case "reset": resetVotes(); break; case "blacklist": showBlacklist(); break; case "publishbl": publishBlacklist($id, 1); break; case "unpublishbl": publishBlacklist($id, 0); break; case "removebl": removeBlacklist(); break; case "settings": require_once JPATH_COMPONENT . DS . 'includes' . DS . 'settings.php';
/** * Update the settings for a poll, or add a new one. * Must be called with a topic specified in the URL. * The user must have poll_edit_any/poll_add_any permission * for the relevant action. Otherwise they must be poll starter * with poll_edit_own permission for editing, or be topic starter * with poll_add_any permission for adding. * In the case of an error, this function will redirect back to * action_editpoll and display the relevant error message. * Upon successful completion of action will direct user back to topic. * Accessed via ?action=editpoll2. */ public function action_editpoll2() { global $topic, $board, $user_info; // Sneaking off, are we? if (empty($_POST)) { redirectexit('action=editpoll;topic=' . $topic . '.0'); } $poll_errors = Error_Context::context('poll'); if (checkSession('post', '', false) != '') { $poll_errors->addError('session_timeout'); } if (isset($_POST['preview'])) { return $this->action_editpoll(); } // HACKERS (!!) can't edit :P. if (empty($topic)) { fatal_lang_error('no_access', false); } // Is this a new poll, or editing an existing? $isEdit = isset($_REQUEST['add']) ? 0 : 1; // Make sure we have our stuff. require_once SUBSDIR . '/Poll.subs.php'; // Get the starter and the poll's ID - if it's an edit. $bcinfo = getPollStarter($topic); // Check their adding/editing is valid. if (!$isEdit && !empty($bcinfo['id_poll'])) { fatal_lang_error('poll_already_exists'); } elseif ($isEdit && empty($bcinfo['id_poll'])) { fatal_lang_error('poll_not_found'); } // Check if they have the power to add or edit the poll. if ($isEdit && !allowedTo('poll_edit_any')) { isAllowedTo('poll_edit_' . ($user_info['id'] == $bcinfo['id_member_started'] || $bcinfo['poll_starter'] != 0 && $user_info['id'] == $bcinfo['poll_starter'] ? 'own' : 'any')); } elseif (!$isEdit && !allowedTo('poll_add_any')) { isAllowedTo('poll_add_' . ($user_info['id'] == $bcinfo['id_member_started'] ? 'own' : 'any')); } $optionCount = 0; $idCount = 0; // Ensure the user is leaving a valid amount of options - there must be at least two. foreach ($_POST['options'] as $k => $option) { if (trim($option) != '') { $optionCount++; $idCount = max($idCount, $k); } } if ($optionCount < 2) { $poll_errors->addError('poll_few'); } elseif ($optionCount > 256 || $idCount > 255) { $poll_errors->addError('poll_many'); } // Also - ensure they are not removing the question. if (trim($_POST['question']) == '') { $poll_errors->addError('no_question'); } // Got any errors to report? if ($poll_errors->hasErrors()) { return $this->action_editpoll(); } // Prevent double submission of this form. checkSubmitOnce('check'); // Now we've done all our error checking, let's get the core poll information cleaned... question first. $_POST['question'] = Util::htmlspecialchars($_POST['question']); $_POST['question'] = Util::substr($_POST['question'], 0, 255); $_POST['poll_hide'] = (int) $_POST['poll_hide']; $_POST['poll_expire'] = isset($_POST['poll_expire']) ? (int) $_POST['poll_expire'] : 0; $_POST['poll_change_vote'] = isset($_POST['poll_change_vote']) ? 1 : 0; $_POST['poll_guest_vote'] = isset($_POST['poll_guest_vote']) ? 1 : 0; // Make sure guests are actually allowed to vote generally. if ($_POST['poll_guest_vote']) { require_once SUBSDIR . '/Members.subs.php'; $allowedGroups = groupsAllowedTo('poll_vote', $board); if (!in_array(-1, $allowedGroups['allowed'])) { $_POST['poll_guest_vote'] = 0; } } // Ensure that the number options allowed makes sense, and the expiration date is valid. if (!$isEdit || allowedTo('moderate_board')) { $_POST['poll_expire'] = $_POST['poll_expire'] > 9999 ? 9999 : ($_POST['poll_expire'] < 0 ? 0 : $_POST['poll_expire']); if (empty($_POST['poll_expire']) && $_POST['poll_hide'] == 2) { $_POST['poll_hide'] = 1; } elseif (!$isEdit || $_POST['poll_expire'] != ceil($bcinfo['expire_time'] <= time() ? -1 : ($bcinfo['expire_time'] - time()) / (3600 * 24))) { $_POST['poll_expire'] = empty($_POST['poll_expire']) ? '0' : time() + $_POST['poll_expire'] * 3600 * 24; } else { $_POST['poll_expire'] = $bcinfo['expire_time']; } if (empty($_POST['poll_max_votes']) || $_POST['poll_max_votes'] <= 0) { $_POST['poll_max_votes'] = 1; } else { $_POST['poll_max_votes'] = (int) $_POST['poll_max_votes']; } } // If we're editing, let's commit the changes. if ($isEdit) { modifyPoll($bcinfo['id_poll'], $_POST['question'], !empty($_POST['poll_max_votes']) ? $_POST['poll_max_votes'] : 0, $_POST['poll_hide'], !empty($_POST['poll_expire']) ? $_POST['poll_expire'] : 0, $_POST['poll_change_vote'], $_POST['poll_guest_vote']); } else { // Create the poll. $bcinfo['id_poll'] = createPoll($_POST['question'], $user_info['id'], $user_info['username'], $_POST['poll_max_votes'], $_POST['poll_hide'], $_POST['poll_expire'], $_POST['poll_change_vote'], $_POST['poll_guest_vote']); // Link the poll to the topic. associatedPoll($topic, $bcinfo['id_poll']); } // Get all the choices. (no better way to remove all emptied and add previously non-existent ones.) $choices = array_keys(pollOptions($bcinfo['id_poll'])); $add_options = array(); $update_options = array(); $delete_options = array(); foreach ($_POST['options'] as $k => $option) { // Make sure the key is numeric for sanity's sake. $k = (int) $k; // They've cleared the box. Either they want it deleted, or it never existed. if (trim($option) == '') { // They want it deleted. Bye. if (in_array($k, $choices)) { $delete_options[] = $k; } // Skip the rest... continue; } // Dress the option up for its big date with the database. $option = Util::htmlspecialchars($option); // If it's already there, update it. If it's not... add it. if (in_array($k, $choices)) { $update_options[] = array($bcinfo['id_poll'], $k, $option); } else { $add_options[] = array($bcinfo['id_poll'], $k, $option, 0); } } if (!empty($update_options)) { modifyPollOption($update_options); } if (!empty($add_options)) { insertPollOptions($add_options); } // I'm sorry, but... well, no one was choosing you. Poor options, I'll put you out of your misery. if (!empty($delete_options)) { deletePollOptions($bcinfo['id_poll'], $delete_options); } // Shall I reset the vote count, sir? if (isset($_POST['resetVoteCount'])) { resetVotes($bcinfo['id_poll']); } call_integration_hook('integrate_poll_add_edit', array($bcinfo['id_poll'], $isEdit)); // Off we go. redirectexit('topic=' . $topic . '.' . $_REQUEST['start']); }