PDA

View Full Version : Giving permission to another usergroup for removing Polls


manutdir
10-29-2014, 08:43 AM
Dear all friends

i want to know how can i give permission to my moderators to give them ability for removing polls from threads ?

i am administrator and just i can do this .

kh99
10-29-2014, 03:55 PM
I'm afraid I have to ask, how do you remove a poll from a thread? I went to look at the code to see if there is any way to do what you want, but I couldn't figure out how to remove a poll.

Edit: OK, I see now that it can only be done from the admincp. So that means that it can only be done by admins with the "can admin threads" permission, unless someone writes a plugin to do it, or somehow modifies code. I haven't looked into it in detail, but if I were going to do it I'd probably look at copying the relevant code from admincp/thread.php to modcp/thread.php.

manutdir
11-02-2014, 06:25 AM
thanks for your reply

i copied this part from admincp/thread.php

// ************************************************** ********************
// *** POLL STRIPPING SYSTEM - removes a poll from a thread *************
// ************************************************** ********************

// ###################### Start confirm kill poll #######################
if ($_POST['do'] == 'removepoll')
{

$vbulletin->input->clean_array_gpc('p', array(
'threadid' => TYPE_UINT,
));

if (empty($vbulletin->GPC['threadid']))
{
print_stop_message('invalid_x_specified', 'threadid');
}
else
{
$thread = $db->query_first("
SELECT thread.threadid, thread.title, thread.postusername, thread.pollid, poll.question
FROM " . TABLE_PREFIX . "thread AS thread
LEFT JOIN " . TABLE_PREFIX . "poll AS poll USING (pollid)
WHERE threadid = " . $vbulletin->GPC['threadid'] . "
AND open <> 10
");
if (!$thread['threadid'])
{
print_stop_message('invalid_x_specified', 'threadid');
}
else if (!$thread['pollid'])
{
print_stop_message('invalid_x_specified', 'pollid');
}
else
{
print_form_header('thread', 'doremovepoll');
construct_hidden_code('threadid', $thread['threadid']);
construct_hidden_code('pollid', $thread['pollid']);
print_table_header($vbphrase['delete_poll']);
print_label_row($vbphrase['posted_by'], "<i>$thread[postusername]</i>");
print_label_row($vbphrase['title'], "<i>$thread[title]</i>");
print_label_row($vbphrase['question'], "<i>$thread[question]</i>");
print_submit_row($vbphrase['delete'], 0);
}
}
}

// ###################### Start do kill poll #######################
if ($_POST['do'] == 'doremovepoll')
{
$vbulletin->input->clean_array_gpc('r', array(
'threadid' => TYPE_UINT,
'pollid' => TYPE_UINT
));

// check valid thread + poll
$thread = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "thread WHERE threadid = " . $vbulletin->GPC['threadid'] . " AND pollid = " . $vbulletin->GPC['pollid']);
if ($thread)
{
$pollman =& datamanager_init('Poll', $vbulletin, ERRTYPE_CP);
$pollman->set_existing($thread);
$pollman->delete();

$threadman =& datamanager_init('Thread', $vbulletin, ERRTYPE_CP, 'threadpost');
$threadman->set_existing($thread);
$threadman->set('pollid', 0);
$threadman->save();

require_once(DIR . '/includes/functions_databuild.php');
build_thread_counters($thread['threadid']);
build_forum_counters($thread['forumid']);

define('CP_REDIRECT', 'thread.php?do=killpoll');
print_stop_message('deleted_poll_successfully');
}
else
{
print_stop_message('invalid_poll_specified');
}

}

// ###################### Start kill poll #######################
if ($_REQUEST['do'] == 'killpoll')
{

print_form_header('thread', 'removepoll');
print_table_header($vbphrase['delete_poll']);
print_input_row($vbphrase['enter_the_threadid_of_the_thread'], 'threadid', '', 0, 10);
print_submit_row($vbphrase['continue'], 0);

echo "\n\n<!-- the pun is intended ;o) -->\n\n";
}


in to modcp/thread.php

but nothing happens

and also this address wont work : /modcp/thread.php?do=killpoll

kh99
11-02-2014, 10:58 AM
Well, I found that it basically works. I copied the section you posted above and pasted it in modcp/thread.php just above the print_cp_footer() line at the end. But one issue with doing that that I hadn't considered is that all the other functions in modcp/thread.php require the "can mass move" or "can mass prune" permission, so if the moderator doesn't have that permission they won't be able to remove polls either, unless you change the permission checking at the top of the file.

But what might be easier would be to just create another file for it, like killpoll.php. I've done that, and I'm attaching it here. The issue with that one is that any moderator will be able to delete polls. I'm not sure if it's possible or practical to add a moderator permission, so I'm not sure what you want to do. You could edit the code to check for certain userids, for example.

The other thing is that no option shows up on the index page. You can edit the code in modcp/index.php to add it, but it looks like it's also possible to use a plugin at hook mod_index_navigation to add it.

Sorry, I guess this is turning out to be a bit more difficult than I thought.

ozzy47
11-02-2014, 11:19 AM
How about this way, https://vborg.vbsupport.ru/showthread.php?t=257121

kh99
11-02-2014, 12:00 PM
How about this way, https://vborg.vbsupport.ru/showthread.php?t=257121

Oh, yeah, I suppose I could have searched before figuring it out myself, but that's exactly what we were talking about, and the same piece of code that manutdir posted above. And the file I posted is just that piece of code in it's own file with the relevant stuff at the top copied from thread.php, which would avoid modifying an existing script. The only thing is that I still believe it would only work for moderators with "can mass prune" or "can mass move" permission, because that's checked at the top of thread.php. But maybe that's not a problem if it's normal for moderators to have one of those permissions by default.

squidsk
11-02-2014, 12:02 PM
The url you're entering doesn't match the code. Use do=removepoll in you url.

kh99
11-02-2014, 12:06 PM
The url you're entering doesn't match the code. Use do=removepoll in you url.

The first page with "enter the thread id" is do=killpoll. removepoll is a confirmation page.

squidsk
11-02-2014, 05:45 PM
The first page with "enter the thread id" is do=killpoll. removepoll is a confirmation page.

You're correct, I'm not sure how I missed that.

thanks for your reply

i copied this part from admincp/thread.php

// ************************************************** ********************
// *** POLL STRIPPING SYSTEM - removes a poll from a thread *************
// ************************************************** ********************

// ###################### Start confirm kill poll #######################
if ($_POST['do'] == 'removepoll')
{

$vbulletin->input->clean_array_gpc('p', array(
'threadid' => TYPE_UINT,
));

if (empty($vbulletin->GPC['threadid']))
{
print_stop_message('invalid_x_specified', 'threadid');
}
else
{
$thread = $db->query_first("
SELECT thread.threadid, thread.title, thread.postusername, thread.pollid, poll.question
FROM " . TABLE_PREFIX . "thread AS thread
LEFT JOIN " . TABLE_PREFIX . "poll AS poll USING (pollid)
WHERE threadid = " . $vbulletin->GPC['threadid'] . "
AND open <> 10
");
if (!$thread['threadid'])
{
print_stop_message('invalid_x_specified', 'threadid');
}
else if (!$thread['pollid'])
{
print_stop_message('invalid_x_specified', 'pollid');
}
else
{
print_form_header('thread', 'doremovepoll');
construct_hidden_code('threadid', $thread['threadid']);
construct_hidden_code('pollid', $thread['pollid']);
print_table_header($vbphrase['delete_poll']);
print_label_row($vbphrase['posted_by'], "<i>$thread[postusername]</i>");
print_label_row($vbphrase['title'], "<i>$thread[title]</i>");
print_label_row($vbphrase['question'], "<i>$thread[question]</i>");
print_submit_row($vbphrase['delete'], 0);
}
}
}

// ###################### Start do kill poll #######################
if ($_POST['do'] == 'doremovepoll')
{
$vbulletin->input->clean_array_gpc('r', array(
'threadid' => TYPE_UINT,
'pollid' => TYPE_UINT
));

// check valid thread + poll
$thread = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "thread WHERE threadid = " . $vbulletin->GPC['threadid'] . " AND pollid = " . $vbulletin->GPC['pollid']);
if ($thread)
{
$pollman =& datamanager_init('Poll', $vbulletin, ERRTYPE_CP);
$pollman->set_existing($thread);
$pollman->delete();

$threadman =& datamanager_init('Thread', $vbulletin, ERRTYPE_CP, 'threadpost');
$threadman->set_existing($thread);
$threadman->set('pollid', 0);
$threadman->save();

require_once(DIR . '/includes/functions_databuild.php');
build_thread_counters($thread['threadid']);
build_forum_counters($thread['forumid']);

define('CP_REDIRECT', 'thread.php?do=killpoll');
print_stop_message('deleted_poll_successfully');
}
else
{
print_stop_message('invalid_poll_specified');
}

}

// ###################### Start kill poll #######################
if ($_REQUEST['do'] == 'killpoll')
{

print_form_header('thread', 'removepoll');
print_table_header($vbphrase['delete_poll']);
print_input_row($vbphrase['enter_the_threadid_of_the_thread'], 'threadid', '', 0, 10);
print_submit_row($vbphrase['continue'], 0);

echo "\n\n<!-- the pun is intended ;o) -->\n\n";
}


in to modcp/thread.php

but nothing happens

and also this address wont work : /modcp/thread.php?do=killpoll

Is that the only part you copied because if so you're missing a lot of key items to make the script work. Can you post the entire contents of your modcp/thread.php? If you're just getting a white screen you have errors in your script.

manutdir
11-05-2014, 07:29 AM
How about this way, https://vborg.vbsupport.ru/showthread.php?t=257121

thank you and kh99

my problem solved

:up: