Working on fixing the Pools extension.

This commit is contained in:
green-ponies (jgen) 2012-02-07 23:15:23 -05:00
parent 2d443f0be9
commit 76c6031b04
2 changed files with 73 additions and 61 deletions

View File

@ -1,16 +1,28 @@
<?php
/**
* Name: Pools System
* Author: Sein Kraft <mail@seinkraft.info>
* Author: Sein Kraft <mail@seinkraft.info>, jgen <jgen.tech@gmail.com>
* License: GPLv2
* Description: Allow users to create groups of images
* Documentation:
* Description: Allow users to create groups of images and order them.
* Documentation: This extension allows users to created named groups of
* images, and order the images within the group.
* Useful for related images like in a comic, etc.
*/
/**
* This class is just a wrapper around SCoreException.
*/
class PoolCreationException extends SCoreException {
var $error;
public function __construct($error) {
$this->error = $error;
}
}
class Pools extends SimpleExtension {
public function onInitExt($event) {
global $config, $database;
@ -68,7 +80,15 @@ class Pools extends SimpleExtension {
public function onPageRequest($event) {
global $config, $page, $user;
if($event->page_matches("pool")) {
if ($event->page_matches("pool")) {
var $pool_id, $pool;
// Check if we have pool id, since this is most often the case.
if (isset($_POST["pool_id"])) {
$pool_id = int_escape($_POST["pool_id"]);
$pool = $this->get_single_pool($pool_id);
}
switch($event->get_arg(0)) {
case "list": //index
$this->list_pools($page, int_escape($event->get_arg(1)));
@ -89,8 +109,8 @@ class Pools extends SimpleExtension {
$page->set_mode("redirect");
$page->set_redirect(make_link("pool/view/".$newPoolID));
}
catch(PoolCreationException $pce) {
$this->theme->display_error($pce->getMessage());
catch(PoolCreationException $e) {
$this->theme->display_error($e->error);
}
break;
@ -117,8 +137,7 @@ class Pools extends SimpleExtension {
$pools = $this->get_pool($poolID);
foreach($pools as $pool) {
// if the pool is public and user is logged OR if the user is admin OR the user is the owner
if(($pool['public'] == "Y" && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id']) {
if (have_permission($user, $pool)) {
$this->theme->edit_pool($page, $this->get_pool($poolID), $this->edit_posts($poolID));
} else {
$page->set_mode("redirect");
@ -133,8 +152,7 @@ class Pools extends SimpleExtension {
$pools = $this->get_pool($poolID);
foreach($pools as $pool) {
//if the pool is public and user is logged OR if the user is admin
if(($pool['public'] == "Y" && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id']) {
if (have_permission($user, $pool)) {
$this->theme->edit_order($page, $this->get_pool($poolID), $this->edit_order($poolID));
} else {
$page->set_mode("redirect");
@ -143,10 +161,7 @@ class Pools extends SimpleExtension {
}
}
else {
$pool_id = int_escape($_POST["pool_id"]);
$pool = $this->get_single_pool($pool_id);
if(($pool['public'] == "Y" && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id']) {
if (have_permission($user, $pool)) {
$this->order_posts();
$page->set_mode("redirect");
$page->set_redirect(make_link("pool/view/".$pool_id));
@ -157,10 +172,7 @@ class Pools extends SimpleExtension {
break;
case "import":
$pool_id = int_escape($_POST["pool_id"]);
$pool = $this->get_single_pool($pool_id);
if(($pool['public'] == "Y" && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id']) {
if (have_permission($user, $pool)) {
$this->import_posts();
} else {
$this->theme->display_error("Permssion denied.");
@ -168,10 +180,7 @@ class Pools extends SimpleExtension {
break;
case "add_posts":
$pool_id = int_escape($_POST["pool_id"]);
$pool = $this->get_single_pool($pool_id);
if(($pool['public'] == "Y" && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id']) {
if (have_permission($user, $pool)) {
$this->add_posts();
$page->set_mode("redirect");
$page->set_redirect(make_link("pool/view/".$pool_id));
@ -181,10 +190,7 @@ class Pools extends SimpleExtension {
break;
case "remove_posts":
$pool_id = int_escape($_POST["pool_id"]);
$pool = $this->get_single_pool($pool_id);
if(($pool['public'] == "Y" && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id']) {
if (have_permission($user, $pool)) {
$this->remove_posts();
$page->set_mode("redirect");
$page->set_redirect(make_link("pool/view/".$pool_id));
@ -195,9 +201,6 @@ class Pools extends SimpleExtension {
break;
case "nuke":
$pool_id = int_escape($_POST['pool_id']);
$pool = $this->get_single_pool($pool_id);
// only admins and owners may do this
if($user->is_admin() || $user->id == $pool['user_id']) {
$this->nuke_pool($pool_id);
@ -257,6 +260,23 @@ class Pools extends SimpleExtension {
}
}
/* ------------------------------------------------- */
/* -------------- Private Functions -------------- */
/* ------------------------------------------------- */
/**
* Check if the given user has permission to edit/change the pool.
* @retval bool
*/
private function have_permission($user, $pool) {
// If the pool is public and user is logged OR if the user is admin OR if the pool is owned by the user.
if ( (($pool['public'] == "Y" || $pool['public'] == "y") && !$user->is_anonymous()) || $user->is_admin() || $user->id == $pool['user_id'])
{
return true;
} else {
return false;
}
}
/*
* HERE WE GET THE LIST OF POOLS

View File

@ -1,7 +1,8 @@
<?php
class PoolsTheme extends Themelet {
/*
* HERE WE ADD THE POOL INFO ON IMAGE
/**
* Adds a block to the panel with information on the pool(s) the image is in.
*/
public function pool_info($linksPools) {
global $page;
@ -60,7 +61,6 @@ class PoolsTheme extends Themelet {
$html .= "</tbody></table>";
$nav_html = "
<a href=".make_link().">Index</a>
<br><a href=".make_link("pool/new").">Create Pool</a>
@ -154,9 +154,7 @@ class PoolsTheme extends Themelet {
$pool_images = '';
foreach($images as $image) {
$thumb_html = $this->build_thumb_html($image);
$pool_images .= '<span class="thumb">'.
'<a href="$image_link">'.$thumb_html.'</a>'.
'</span>';
$pool_images .= "\n".$thumb_html."\n";
}
$page->add_block(new Block("Viewing Posts", $pool_images, "main", 30));
@ -172,17 +170,17 @@ class PoolsTheme extends Themelet {
$editor = "
".make_form(make_link("pool/import"))."
<input type='text' name='pool_tag' id='edit' value='Please enter a tag' onclick='this.value=\"\";'/>
<input type='submit' name='edit' id='edit' value='Import'/>
<input type='text' name='pool_tag' id='edit_pool_tag' value='Please enter a tag' onclick='this.value=\"\";'/>
<input type='submit' name='edit' id='edit_pool_import_btn' value='Import'/>
<input type='hidden' name='pool_id' value='".$pool['id']."'>
</form>
<form method='GET' action='".make_link("pool/edit/".$pool['id'])."'>
<input type='submit' name='edit' id='edit' value='Edit Pool'/>
<input type='submit' name='edit' id='edit_pool_btn' value='Edit Pool'/>
</form>
<form method='GET' action='".make_link("pool/order/".$pool['id'])."'>
<input type='submit' name='edit' id='edit' value='Order Pool'/>
<input type='submit' name='edit' id='edit_pool_order_btn' value='Order Pool'/>
</form>
";
@ -195,7 +193,7 @@ class PoolsTheme extends Themelet {
</script>
".make_form(make_link("pool/nuke"))."
<input type='submit' name='delete' id='delete' value='Delete Pool' onclick='return confirm_action()' />
<input type='submit' name='delete' id='delete_pool_btn' value='Delete Pool' onclick='return confirm_action()' />
<input type='hidden' name='pool_id' value='".$pool['id']."'>
</form>
";
@ -225,6 +223,7 @@ class PoolsTheme extends Themelet {
* HERE WE DISPLAY THE RESULT OF THE SEARCH ON IMPORT
*/
public function pool_result(Page $page, $images, $pool_id) {
// TODO: this could / should be done using jQuery
$pool_images = "
<script language='JavaScript' type='text/javascript'>
function setAll(value) {
@ -247,14 +246,12 @@ class PoolsTheme extends Themelet {
foreach($images as $image) {
$thumb_html = $this->build_thumb_html($image);
$pool_images .= '<span class="thumb">'.
'<a href="$image_link">'.$thumb_html.'</a>'.
'<br>'.
$pool_images .= '<span class="thumb">'. $thumb_html .'<br>'.
'<input name="check[]" type="checkbox" value="'.$image->id.'" />'.
'</span>';
}
$pool_images .= "<br>".
"<input type='submit' name='edit' id='edit' value='Add Selected' onclick='return confirm_action()'/>".
"<input type='submit' name='edit' id='edit_pool_add_btn' value='Add Selected' onclick='return confirm_action()'/>".
"<input type='hidden' name='pool_id' value='".$pool_id."'>".
"</form>";
@ -278,13 +275,12 @@ class PoolsTheme extends Themelet {
$this->display_top($pools, "Sorting Pool");
$pool_images = "<form action='".make_link("pool/order")."' method='POST' name='checks'>";
$pool_images = "\n<form action='".make_link("pool/order")."' method='POST' name='checks'>";
$n = 0;
foreach($images as $pair) {
$image = $pair[0];
$thumb_html = $this->build_thumb_html($image);
$pool_images .= '<span class="thumb">'.
'<a href="$image_link">'.$thumb_html.'</a>'.
$pool_images .= '<span class="thumb">'."\n".$thumb_html."\n".
'<br><input name="imgs['.$n.'][]" type="text" style="max-width:50px;" value="'.$image->image_order.'" />'.
'<input name="imgs['.$n.'][]" type="hidden" value="'.$image->id.'" />'.
'</span>';
@ -292,7 +288,7 @@ class PoolsTheme extends Themelet {
}
$pool_images .= "<br>".
"<input type='submit' name='edit' id='edit' value='Order'/>".
"<input type='submit' name='edit' id='edit_pool_order' value='Order'/>".
"<input type='hidden' name='pool_id' value='".$pools[0]['id']."'>".
"</form>";
@ -310,24 +306,20 @@ class PoolsTheme extends Themelet {
$this->display_top($pools, "Editing Pool", true);
$pool_images = "
";
$pool_images = "<form action='".make_link("pool/remove_posts")."' method='POST' name='checks'>";
$pool_images = "\n<form action='".make_link("pool/remove_posts")."' method='POST' name='checks'>";
foreach($images as $pair) {
$image = $pair[0];
$thumb_html = $this->build_thumb_html($image);
$pool_images .= '<span class="thumb">'.
'<a href="$image_link">'.$thumb_html.'</a>'.
$pool_images .= '<span class="thumb">'."\n".$thumb_html."\n".
'<br><input name="check[]" type="checkbox" value="'.$image->id.'" />'.
'</span>';
}
$pool_images .= "<br>".
"<input type='submit' name='edit' id='edit' value='Remove Selected'/>".
"<input type='submit' name='edit' id='edit_pool_remove_sel' value='Remove Selected'/>".
"<input type='hidden' name='pool_id' value='".$pools[0]['id']."'>".
"</form>";
@ -392,8 +384,8 @@ class PoolsTheme extends Themelet {
}
/*
* HERE WE DISPLAY THE ERROR
/**
* Display an error message to the user.
*/
public function display_error($errMessage) {
global $page;