From 3f49076a2b31421e5f17dcefa82103b50d9bc53f Mon Sep 17 00:00:00 2001 From: Cameron <e107inc@gmail.com> Date: Sat, 9 May 2015 13:22:27 -0700 Subject: [PATCH] Fixes #1001 - forum thread editing. Also pagination and redirection fixes. "Move Thread" reworked and integrated into forum_post.php --- e107_plugins/forum/e_url.php | 22 +- e107_plugins/forum/forum_class.php | 7 +- e107_plugins/forum/forum_conf.php | 27 +- e107_plugins/forum/forum_post.php | 255 ++++++++++++++++-- e107_plugins/forum/forum_viewtopic.php | 8 +- .../forum/languages/English/English_front.php | 2 +- .../shortcodes/batch/post_shortcodes.php | 6 +- .../shortcodes/batch/view_shortcodes.php | 24 +- 8 files changed, 298 insertions(+), 53 deletions(-) diff --git a/e107_plugins/forum/e_url.php b/e107_plugins/forum/e_url.php index 8501b94ea..99c1222cb 100644 --- a/e107_plugins/forum/e_url.php +++ b/e107_plugins/forum/e_url.php @@ -24,17 +24,16 @@ class forum_url // plugin-folder + '_url' function config() { $config = array(); - - $config['index'] = array( - 'regex' => '^forum/?$', // matched against url, and if true, redirected to 'redirect' below. - 'sef' => 'forum', // used by e107::url(); to create a url from the db table. - 'redirect' => '{e_PLUGIN}forum/forum.php', // file-path of what to load when the regex returns true. - + + $config['post'] = array( + 'regex' => '^forum/post/?', + 'sef' => 'forum/post/', + 'redirect' => '{e_PLUGIN}forum/forum_post.php', ); $config['topic'] = array( 'regex' => '^forum/(.*)/(\d*)-([\w-]*)/?\??(.*)', - 'sef' => 'forum/{forum_sef}/{thread_id}-{thread_sef}', + 'sef' => 'forum/{forum_sef}/{thread_id}-{thread_sef}/', 'redirect' => '{e_PLUGIN}forum/forum_viewtopic.php?id=$2&$4' ); @@ -46,6 +45,15 @@ class forum_url // plugin-folder + '_url' 'legacy' => '{e_PLUGIN}forum/forum_viewforum.php?id={forum_id}' ); + $config['index'] = array( + 'regex' => '^forum/?$', // matched against url, and if true, redirected to 'redirect' below. + 'sef' => 'forum', // used by e107::url(); to create a url from the db table. + 'redirect' => '{e_PLUGIN}forum/forum.php', // file-path of what to load when the regex returns true. + + ); + + + return $config; } diff --git a/e107_plugins/forum/forum_class.php b/e107_plugins/forum/forum_class.php index 7ecc7a16a..aa21013dd 100644 --- a/e107_plugins/forum/forum_class.php +++ b/e107_plugins/forum/forum_class.php @@ -767,7 +767,7 @@ class e107forum $oldForumId = $threadInfo['thread_forum_id']; //Move thread to new forum, changing thread title if needed - if($threadTitle) + if(!empty($threadTitle)) { if($titleType == 0) @@ -778,9 +778,10 @@ class e107forum else { //Replace title - $threadTitle = ", thread_name = '{$threadTitle}'"; + $threadTitle = ", thread_name = '{$threadTitle}', thread_sef='".eHelper::title2sef($threadTitle,'dashl')."' "; } } + $sql->update('forum_thread', "thread_forum_id={$newForumId} {$threadTitle} WHERE thread_id={$threadId}"); //Move all posts to new forum @@ -892,7 +893,7 @@ class e107forum if('post' === $start) { $qry = ' - SELECT u.user_name, t.thread_active, t.thread_datestamp, t.thread_name, t.thread_user, t.thread_id, p.* FROM `#forum_post` AS p + SELECT u.user_name, t.thread_active, t.thread_datestamp, t.thread_name, t.thread_sef, t.thread_user, t.thread_id, p.* FROM `#forum_post` AS p LEFT JOIN `#forum_thread` AS t ON t.thread_id = p.post_thread LEFT JOIN `#user` AS u ON u.user_id = p.post_user WHERE p.post_id = '.$id; diff --git a/e107_plugins/forum/forum_conf.php b/e107_plugins/forum/forum_conf.php index bc767a7bc..d66be660d 100644 --- a/e107_plugins/forum/forum_conf.php +++ b/e107_plugins/forum/forum_conf.php @@ -69,6 +69,10 @@ if (isset($_POST['deletepollconfirm'])) $url = e_PLUGIN."forum/forum_viewtopic.php?".$thread_id; } + + +// Moved to forum_post.php +/* if (isset($_POST['move'])) { // print_a($_POST); @@ -107,6 +111,12 @@ if (isset($_POST['movecancel'])) $url = $e107::getUrl()->create('forum/forum/view', 'id='.$postInfo[0]['post_forum']);// XXX _URL_ thread name } + + +*/ + + + if ($message) { $text = "<div style='text-align:center'>".$message." @@ -132,21 +142,11 @@ if ($action == "delete_poll") require_once(FOOTERF); exit; } - +/* if ($action == 'move') { $postInfo = $forum->postGet($id, 0, 1); - /* - * <form class="form-horizontal"> -<div class="control-group"> -<label class="control-label" for="inputEmail">Email</label> -<div class="controls"> -<input type="text" id="inputEmail" placeholder="Email"> -</div> -</div> - */ - $frm = e107::getForm(); $qry = " @@ -213,5 +213,10 @@ if ($action == 'move') $ns->tablerender(LAN_FORUM_5019, $text); } +*/ + + + + require_once(FOOTERF); ?> \ No newline at end of file diff --git a/e107_plugins/forum/forum_post.php b/e107_plugins/forum/forum_post.php index 9e721890e..a34d0108d 100644 --- a/e107_plugins/forum/forum_post.php +++ b/e107_plugins/forum/forum_post.php @@ -10,7 +10,14 @@ * */ -require_once('../../class2.php'); + +if(!defined('e107_INIT')) +{ + require_once('../../class2.php'); +} + + + define('NAVIGATION_ACTIVE','forum'); // ?? $e107 = e107::getInstance(); @@ -39,6 +46,9 @@ class forum_post_handler function __construct() { + + + $this->checkForumJump(); require_once(e_PLUGIN.'forum/forum_class.php'); // includes LAN file. @@ -52,10 +62,25 @@ class forum_post_handler define('MODERATOR', USER && $this->forumObj->isModerator(USERID)); + $this->data = $this->processGet(); $this->checkPerms($this->data['forum_id']); $this->processPosted(); - $this->renderForm(); + + if($this->action == 'move') + { + $this->renderFormMove(); + } + else + { + $this->renderForm(); + } + + if(E107_DEBUG_LEVEL > 0) + { + e107::getMessage()->addInfo(print_a($this->data,true)); + echo e107::getMessage()->render(); + } } @@ -70,7 +95,9 @@ class forum_post_handler if (!e_QUERY || empty($_GET['id'])) { - header('Location:'.e107::getUrl()->create('forum/forum/main', array(), 'full=1&encode=0')); + $url = e107::url('forum','index',null,'full'); + e107::getRedirect()->go($url); + // header('Location:'.e107::getUrl()->create('forum/forum/main', array(), 'full=1&encode=0')); exit; } @@ -101,6 +128,7 @@ class forum_post_handler break; case 'edit': + case 'move': case 'quote': $postInfo = $this->forumObj->postGet($this->post, 'post'); $forumInfo = $this->forumObj->forumGet($postInfo['post_forum']); @@ -111,7 +139,9 @@ class forum_post_handler break; default: - header("Location:".e107::getUrl()->create('forum/forum/main', array(), 'full=1&encode=0')); + $url = e107::url('forum','index',null,'full'); + e107::getRedirect()->go($url); + // header("Location:".e107::getUrl()->create('forum/forum/main', array(), 'full=1&encode=0')); exit; } } @@ -138,6 +168,11 @@ class forum_post_handler $this->updateThread(); } + if(!empty($_POST['move_thread'])) + { + $this->moveThread($_POST); + } + if(isset($_POST['update_reply'])) { $this->updateReply(); @@ -148,12 +183,14 @@ class forum_post_handler $this->renderPreview(); } - if (isset($_POST['submitpoll'])) + if(isset($_POST['submitpoll'])) { $this->submitPoll(); } + + } @@ -285,6 +322,110 @@ class forum_post_handler } + function renderFormMove() + { + if(!deftrue('MODERATOR')) + { + return; + } + + + $frm = e107::getForm(); + $sql = e107::getDb(); + $tp = e107::getParser(); + $ns = e107::getRender(); + + $qry = " + SELECT f.forum_id, f.forum_name, fp.forum_name AS forum_parent, sp.forum_name AS sub_parent + FROM `#forum` AS f + LEFT JOIN `#forum` AS fp ON f.forum_parent = fp.forum_id + LEFT JOIN `#forum` AS sp ON f.forum_sub = sp.forum_id + WHERE f.forum_parent != 0 + ORDER BY f.forum_parent ASC, f.forum_sub, f.forum_order ASC + "; + + $fList = $sql->retrieve($qry,true); + + + $opts = array(); + $currentName = ""; + + foreach($fList as $f) + { + if(substr($f['forum_name'], 0, 1) != '*') + { + $f['sub_parent'] = ltrim($f['sub_parent'], '*'); + $for_name = $f['forum_parent'].' ≫ '; + $for_name .= ($f['sub_parent'] ? $f['sub_parent'].' ≫ ' : ''); + $for_name .= $f['forum_name']; + + if($this->data['forum_id'] == $f['forum_id']) + { + $for_name .= " (Current)"; + $currentName = $for_name; + continue; + } + + $id = $f['forum_id']; + $opts[$id] = $for_name; + } + } + + + $text = " + <form class='forum-horizontal' method='post' action='".e_REQUEST_URI."'> + <div> + <table class='table table-striped' style='".ADMIN_WIDTH."'> + <tr> + <td>".LAN_FORUM_3011.": </td> + <td> + ".$tp->toHTML($this->data['thread_name'],true)." + </td> + </tr> + <tr><td></td> + <td><div class='alert alert-warning'>".$tp->toHTML($this->data['post_entry'], true)."</div></td></tr> + + <tr> + <td>".LAN_FORUM_5019.": </td> + <td>".$frm->select('forum_move', $opts, $this->data['forum_id'], 'required=1', $currentName)." + + </td> + </tr> + <tr> + <td >".LAN_FORUM_5026."</td> + <td><div class='radio'> + ".$frm->radio('rename_thread','none',true, 'label='.LAN_FORUM_5022)." + </div> + <div class='radio'> + ".$frm->radio('rename_thread', 'add', false, array('label'=> $tp->lanVars(LAN_FORUM_5024,'<b> ['.LAN_FORUM_5021.']</b> '))). " + </div> + <div class='radio'>".$frm->radio('rename_thread','rename', false, array('label'=>LAN_FORUM_5025))." + ".$frm->text('newtitle', $tp->toForm($this->data['thread_name'], 250))." + </div> + </div></td> + </tr> + </table> + <div class='center'> + <input class='btn btn-primary button' type='submit' name='move_thread' value='".LAN_FORUM_5019."' /> + <a class='btn btn-default button' href='".e_REFERER_SELF."' >".LAN_CANCEL."</a> + </div> + + </div> + </form>"; + + + // $threadName = $tp->toHTML($this->data['thread_name'], true); + // $threadText = ; + + // $text .= "<h3>".$threadName."</h3><div>".$threadText."</div>"; // $e107->ns->tablerender(, ), '', true).$ns->tablerender('', $text, '', true); + $ns->tablerender(LAN_FORUM_5019, $text); + + + + } + + + function renderForm() { @@ -301,15 +442,6 @@ class forum_post_handler } - if(E107_DEBUG_LEVEL > 0) - { - e107::getMessage()->addInfo(print_a($data,true)); - echo e107::getMessage()->render(); - } - - require_once(FOOTERF); - exit; - } @@ -403,7 +535,7 @@ class forum_post_handler $ns->tablerender(LAN_FORUM_3005, $text); - +/* if ($this->action == 'edit') { if ($_POST['subject']) @@ -420,7 +552,7 @@ class forum_post_handler { $action = 'rp'; $eaction = false; - } + }*/ } @@ -582,13 +714,16 @@ class forum_post_handler - $threadLink = e107::getUrl()->create('forum/thread/last', $postInfo); - $forumLink = e107::getUrl()->create('forum/forum/view', $forumInfo); + // $threadLink = e107::getUrl()->create('forum/thread/last', $postInfo); + // $forumLink = e107::getUrl()->create('forum/forum/view', $forumInfo); + $threadLink = e107::url('forum','topic',$this->data,'full')."&last=1"; + $forumLink = e107::url('forum', 'forum', $this->data); if ($this->forumObj->prefs->get('redirect')) { - header('location:'.e107::getUrl()->create('forum/thread/last', $postInfo, array('encode' => false, 'full' => true))); + e107::getRedirect()->go($threadLink); + // header('location:'.e107::getUrl()->create('forum/thread/last', $postInfo, array('encode' => false, 'full' => true))); exit; } else @@ -618,6 +753,50 @@ class forum_post_handler } + function moveThread($posted) + { + + if(!deftrue('MODERATOR')) + { + return; + } + + $tp = e107::getParser(); + $mes = e107::getMessage(); + + $newThreadTitle = ''; + $newThreadTitleType = 0; + + if($posted['rename_thread'] == 'add') + { + $newThreadTitle = '['.LAN_FORUM_5021.']'; + } + elseif($posted['rename_thread'] == 'rename' && trim($posted['newtitle']) != '') + { + $newThreadTitle = $tp->toDB($posted['newtitle']); + $newThreadTitleType = 1; + } + + $threadId = intval($_GET['id']); + $toForum = $posted['forum_move']; + + $this->forumObj->threadMove($threadId, $toForum, $newThreadTitle, $newThreadTitleType); + + $message = LAN_FORUM_5005."<br />";// XXX _URL_ thread name + + $url = e107::url('forum','topic', $this->data); + $text = "<a class='btn btn-primary' href='".$url."'>".LAN_FORUM_5007."</a>"; + + $mes->addSuccess($message.$text); + echo $mes->render(); + +// $ns->tablerender(LAN_FORUM_5008, $text); + + + } + + + function updateThread() { @@ -664,10 +843,15 @@ class forum_post_handler e107::getCache()->clear('newforumposts'); - $url = e107::getUrl()->create('forum/thread/post', array('name'=>$threadVals['thread_name'], 'id' => $this->data['post_id'], 'thread' => $this->data['post_thread']), array('encode'=>false)); + $url = e107::url('forum','topic',$this->data); - header('location:'.$url); + e107::getRedirect()->go($url); exit; + + // $url = e107::getUrl()->create('forum/thread/post', array('name'=>$threadVals['thread_name'], 'id' => $this->data['post_id'], 'thread' => $this->data['post_thread']), array('encode'=>false)); + + // header('location:'.$url); + // exit; } @@ -701,8 +885,12 @@ class forum_post_handler $this->forumObj->postUpdate($this->data['post_id'], $postVals); e107::getCache()->clear('newforumposts'); + + $url = e107::getUrl()->create('forum/thread/post', "id={$this->data['post_id']}", 'encode=0&full=1'); // XXX what data is available, find thread name + // $url = e107::url('forum','topic',$this->data,true)."&f=post"; //FIXME + header('location:'.$url); exit; @@ -833,8 +1021,33 @@ class forum_post_handler require_once(HEADERF); new forum_post_handler; +require_once(FOOTERF); exit; + + + + + + + + + + + + + + + + + + + + + + + + require_once(e_PLUGIN.'forum/forum_class.php'); $forum = new e107forum(); diff --git a/e107_plugins/forum/forum_viewtopic.php b/e107_plugins/forum/forum_viewtopic.php index 9c5f2b42f..93850bd03 100644 --- a/e107_plugins/forum/forum_viewtopic.php +++ b/e107_plugins/forum/forum_viewtopic.php @@ -247,8 +247,10 @@ if ($thread->pages > 1) if(!$thread->page) $thread->page = 1; // $url = rawurlencode(e107::getUrl()->create('forum/thread/view', array('name' => $thread->threadInfo['thread_name'], 'id' => $thread->threadId, 'page' => '[FROM]'))); - $url = e_REQUEST_SELF."?p=[FROM]"; // SEF URL Friendly. - $parms = "total={$thread->pages}&type=page¤t={$thread->page}&url=".$url."&caption=off&tmpl=default&navcount=4&glyphs=1"; +// $url = e_REQUEST_SELF."?p=[FROM]"; // SEF URL Friendly. + $url = e107::url('forum','topic', $thread->threadInfo)."&p=[FROM]"; + + $parms = "total={$thread->pages}&type=page¤t={$thread->page}&url=".urlencode($url)."&caption=off&tmpl=default&navcount=4&glyphs=1"; //XXX FIXME - pull-down template not practical here. Can we force another? @@ -758,6 +760,8 @@ class e107ForumThread $this->message = LAN_FORUM_2012; break; + + // TODO Move to form_post.php case 'report': $threadId = (int)$_GET['id']; $postId = (int)$_GET['post']; diff --git a/e107_plugins/forum/languages/English/English_front.php b/e107_plugins/forum/languages/English/English_front.php index 9231210f9..794c129e8 100644 --- a/e107_plugins/forum/languages/English/English_front.php +++ b/e107_plugins/forum/languages/English/English_front.php @@ -265,7 +265,7 @@ define("LAN_FORUM_5010", "Confirm Delete Forum Post"); // LAN_FORUM_5010 define("LAN_FORUM_5019", "Move Thread"); // LAN_FORUM_5019 define("LAN_FORUM_5021", "moved"); // LAN_FORUM_5021 define("LAN_FORUM_5022", "Do not rename thread title"); // LAN_FORUM_5022 -define("LAN_FORUM_5024", "to title"); // LAN_FORUM_5024 +define("LAN_FORUM_5024", "Add [x] prefix to the subject/title"); // LAN_FORUM_5024 define("LAN_FORUM_5025", "Rename to:"); // LAN_FORUM_5025 define("LAN_FORUM_5026", "Rename thread options:"); // LAN_FORUM_5026 diff --git a/e107_plugins/forum/shortcodes/batch/post_shortcodes.php b/e107_plugins/forum/shortcodes/batch/post_shortcodes.php index b9a6c78ee..168b9119b 100644 --- a/e107_plugins/forum/shortcodes/batch/post_shortcodes.php +++ b/e107_plugins/forum/shortcodes/batch/post_shortcodes.php @@ -111,7 +111,7 @@ class plugin_forum_post_shortcodes extends e_shortcode elseif($this->var['action'] == 'edit') { $_POST['subject'] = $this->var['thread_name']; - if($this->var['thread_user'] != USERID) + if($this->var['thread_user'] != USERID && !deftrue('MODERATOR')) { $opts['disabled'] = 1; } @@ -152,7 +152,9 @@ class plugin_forum_post_shortcodes extends e_shortcode $post = preg_replace('#\[hide].*?\[/hide]#s', '', trim($this->var['post_entry'])); $quoteName = ($this->var['user_name'] ? $this->var['user_name'] : $this->var['post_user_anon']); $text = $tp->toText("[quote={$quoteName}]\n".$post."\n[/quote]\n",true); - $text .= "<br /><br />"; + $text .= "\n\n"; + + // $text = $tp->toForm($text); $this->var['action'] = 'rp'; } elseif($this->var['action'] == 'edit') diff --git a/e107_plugins/forum/shortcodes/batch/view_shortcodes.php b/e107_plugins/forum/shortcodes/batch/view_shortcodes.php index 59271d659..c65939a61 100644 --- a/e107_plugins/forum/shortcodes/batch/view_shortcodes.php +++ b/e107_plugins/forum/shortcodes/batch/view_shortcodes.php @@ -517,13 +517,19 @@ class plugin_forum_view_shortcodes extends e_shortcode // Edit if ( (USER && $this->postInfo['post_user'] == USERID && $this->thread->threadInfo['thread_active'])) { - $text .= "<li class='text-right'><a href='".e107::getUrl()->create('forum/thread/edit', array('id' => $this->postInfo['post_thread'], 'post'=>$this->postInfo['post_id']))."'>".LAN_EDIT." ".$tp->toGlyph('edit')."</a></li>"; + + + $url = e107::url('forum','post')."?f=edit&id=".$this->postInfo['post_thread']."&post=".$this->postInfo['post_id']; + //$url = e107::getUrl()->create('forum/thread/edit', array('id' => $this->postInfo['post_thread'], 'post'=>$this->postInfo['post_id'])); + $text .= "<li class='text-right'><a href='".$url."'>".LAN_EDIT." ".$tp->toGlyph('edit')."</a></li>"; } if($this->forum->checkperm($this->postInfo['post_forum'], 'post')) { - $text .= "<li class='text-right'><a href='".e107::getUrl()->create('forum/thread/quote', array('id' => $this->postInfo['post_thread'], 'post'=>$this->postInfo['post_id']))."'>".LAN_FORUM_2041." ".$tp->toGlyph('share-alt')."</a></li>"; + $url = e107::url('forum','post')."?f=quote&id=".$this->postInfo['post_thread']."&post=".$this->postInfo['post_id']; + //$url = e107::getUrl()->create('forum/thread/quote', array('id' => $this->postInfo['post_thread'], 'post'=>$this->postInfo['post_id'])); + $text .= "<li class='text-right'><a href='".$url."'>".LAN_FORUM_2041." ".$tp->toGlyph('share-alt')."</a></li>"; // $text .= "<li class='text-right'><a href='".e107::getUrl()->create('forum/thread/quote', array('id' => $this->postInfo['post_id']))."'>".LAN_FORUM_2041." ".$tp->toGlyph('share-alt')."</a></li>"; } @@ -536,7 +542,11 @@ class plugin_forum_view_shortcodes extends e_shortcode if ((USER && $this->postInfo['post_user'] != USERID && $this->thread->threadInfo['thread_active'])) { - $text .= "<li class='text-right'><a href='".e107::getUrl()->create('forum/thread/edit', array('id' => $this->postInfo['post_thread'], 'post'=>$this->postInfo['post_id']))."'>".LAN_EDIT." ".$tp->toGlyph('edit')."</a></li>"; + + $url = e107::url('forum','post')."?f=edit&id=".$this->postInfo['post_thread']."&post=".$this->postInfo['post_id']; + // $url = e107::getUrl()->create('forum/thread/edit', array('id' => $this->postInfo['post_thread'], 'post'=>$this->postInfo['post_id'])); + + $text .= "<li class='text-right'><a href='".$url."'>".LAN_EDIT." ".$tp->toGlyph('edit')."</a></li>"; } // only show delete button when post is not the initial post of the topic @@ -547,11 +557,13 @@ class plugin_forum_view_shortcodes extends e_shortcode if ($type == 'thread') { - $text .= "<li class='text-right'><a href='" . e107::getUrl()->create('forum/thread/move', array('id' => $this->postInfo['post_id']))."'>".LAN_FORUM_2042." ".$tp->toGlyph('move')."</a></a></li>"; + $url = e107::url('forum','post')."?f=move&id=".$this->postInfo['post_thread']."&post=".$this->postInfo['post_id']; + // $url = e107::getUrl()->create('forum/thread/move', array('id' => $this->postInfo['post_id'], 'post'=>$this->postInfo['post_id'])); + $text .= "<li class='text-right'><a href='" . $url."'>".LAN_FORUM_2042." ".$tp->toGlyph('move')."</a></a></li>"; } - else + else //TODO { - $text .= "<li class='text-right'><a href='" . e107::getUrl()->create('forum/thread/split', array('id' => $this->postInfo['post_id']))."'>".LAN_FORUM_2043." ".$tp->toGlyph('cut')."</a></li>"; + // $text .= "<li class='text-right'><a href='" . e107::getUrl()->create('forum/thread/split', array('id' => $this->postInfo['post_id'], 'post'=>$this->postInfo['post_id']))."'>".LAN_FORUM_2043." ".$tp->toGlyph('cut')."</a></li>"; } }