Patched by Jean-Marc Liotier to provide post restriction by user level and IRC notification.
<?php
// The source code packaged with this file is Free Software, Copyright (C) 2005 by
// Ricardo Galli <gallir at uib dot es>.
// It's licensed under the AFFERO GENERAL PUBLIC LICENSE unless stated otherwise.
// You can get copies of the licenses here:
// http://www.affero.org/oagpl.html
// AFFERO GENERAL PUBLIC LICENSE is also included in the file called "COPYING".
include_once('Smarty.class.php');
$main_smarty = new Smarty;
include('config.php');
include(mnminclude.'html1.php');
include(mnminclude.'ts.php');
include(mnminclude.'link.php');
include(mnminclude.'tags.php');
include(mnminclude.'smartyvariables.php');
// html tags allowed during submit
$main_smarty->assign('Story_Content_Tags_To_Allow', htmlspecialchars(Story_Content_Tags_To_Allow));
// breadcrumbs and page titles
$navwhere['text1'] = $main_smarty->get_config_vars('PLIGG_Visual_Breadcrumb_Submit');
$navwhere['link1'] = getmyurl('submit', '');
$main_smarty->assign('navbar_where', $navwhere);
$main_smarty->assign('posttitle', " / " . $main_smarty->get_config_vars('PLIGG_Visual_Breadcrumb_Submit'));
$main_smarty = do_sidebar($main_smarty);
// make sure user is logged in
force_authentication();
// module system hook
check_actions('submit_post_authentication');
// this is for direct links from weblogs
if(empty($_POST['phase']) && !empty($_GET['url'])) {
$_POST['phase'] = 1;
$_POST['url'] = $_GET['url'];
$_POST['randkey'] = rand(10000,10000000);
if(!empty($_GET['trackback']))
$_POST['trackback'] = $_GET['trackback'];
}
// determine which step of the submit process we are on
if(isset($_POST["phase"])) {
$phase = $_POST["phase"];
}
else {
$phase = 0;
}
// --------------------------------------------------------
// Begin IRC notification preliminary declarations
// --------------------------------------------------------
include_once('/usr/share/php/Net/SmartIRC.php');
// FIXME The notification channel should of course be set by the user.
$IRC_notification_channel = '#b^2';
class myIRCnotifier
{
function IRC_notification(&$irc)
{
global $IRC_notify_once_id;
global $IRC_notification_channel;
global $db;
global $URLMethod;
$linkres=new Link;
$linkres->id=$link_id = strip_tags($_POST['id']);
$linkres->read();
$IRC_notification_pligg_username = $db->get_var("SELECT user_login FROM " . table_users . " WHERE user_id = $linkres->author");
if ($URLMethod == 1) {
$IRC_link_url=my_base_url.my_pligg_base."/story.php?id=".$link_id;
}
if ($URLMethod == 2) {
$IRC_link_url=my_base_url.my_pligg_base."/story/".$link_id;
}
$IRC_notification_message = $IRC_notification_pligg_username. ' posted "' .$linkres->title. '" at ' .$IRC_link_url;
$irc->message(SMARTIRC_TYPE_CHANNEL, $IRC_notification_channel, $IRC_notification_message);
$irc->unregisterTimeid($IRC_notify_once_id);
}
function IRC_termination(&$irc)
{
global $IRC_termination_id;
$irc->quit();
$irc->unregisterTimeid($IRC_termination_id);
}
}
$IRCnotifier = &new myIRCnotifier();
$irc = &new Net_SmartIRC();
$irc->setUseSockets(TRUE);
$IRC_notify_once_id = $irc->registerTimehandler(0, $IRCnotifier, 'IRC_notification');
$IRC_termination_id = $irc->registerTimehandler(1, $IRCnotifier, 'IRC_termination');
// --------------------------------------------------------
// End IRC notification preliminary declarations
// --------------------------------------------------------
// If show URL input box is disabled, go straight to step 2
if($phase == 0 && Submit_Show_URL_Input == false) {
$phase = 1;
}
switch ($phase) {
case 0:
$canIhaveAccess = 0;
$canIhaveAccess = $canIhaveAccess + checklevel('god');
$canIhaveAccess = $canIhaveAccess + checklevel('admin');
if($canIhaveAccess == 1)
{
do_submit0();
}
else
{
echo 'Only admins can post. I you are a #b^2 member or friend thereof you may request admin status so that you can post';
}
break;
case 1:
do_submit1();
break;
case 2:
do_submit2();
break;
case 3:
// Begin IRC notification
// FIXME The connect and login parameters should of course be set by the user.
$irc->connect('irc.eu.freenode.net', 6667);
$irc->login('PliggNotifier', 'Pligg PHP IRC notification service', '0', 'PliggNotifier');
$irc->join(array($IRC_notification_channel));
$irc->listen();
$irc->disconnect();
// End IRC notification
do_submit3();
break;
}
exit;
// enter URL before submit process
function do_submit0() {
global $main_smarty, $the_template;
$main_smarty->assign('submit_rand', rand(10000,10000000));
$main_smarty->assign('Submit_Show_URL_Input', Submit_Show_URL_Input);
$main_smarty->assign('Submit_Require_A_URL', Submit_Require_A_URL);
define('pagename', 'submit');
$main_smarty->assign('pagename', pagename);
$main_smarty->assign('tpl_center', $the_template . '/submit_step_1');
check_actions('do_submit0');
$main_smarty->display($the_template . '/pligg.tpl');
}
// submit step 1
function do_submit1() {
global $main_smarty, $db, $dblang, $current_user, $the_template;
$url = htmlspecialchars(strip_tags(trim($_POST['url'])));
$url = html_entity_decode($url);
$linkres=new Link;
$linkres->randkey = strip_tags($_POST['randkey']);
if(Submit_Show_URL_Input == false) {
$url = "http://";
$linkres->randkey = rand(10000,10000000);
}
$Submit_Show_URL_Input = Submit_Show_URL_Input;
if($url == "http://" || $url == ""){
$Submit_Show_URL_Input = false;
}
$main_smarty->assign('randkey', $linkres->randkey);
$main_smarty->assign('submit_url', $url);
$main_smarty->assign('Submit_Show_URL_Input', $Submit_Show_URL_Input);
$main_smarty->assign('Submit_Require_A_URL', Submit_Require_A_URL);
$edit = false;
$linkres->get($url);
$trackback=$linkres->trackback;
if($url == "http://" || $url == ""){
if(Submit_Require_A_URL == false){
$linkres->valid = true;}
else{
$linkres->valid = false;
}
$linkres->url_title = "";
}
check_actions('submit_validating_url',array("url" => $url,'linkres'=>&$linkres));
if(!$linkres->valid) {
$main_smarty->assign('submit_error', 'invalidurl');
$main_smarty->assign('tpl_center', $the_template . '/submit_errors');
$main_smarty->display($the_template . '/pligg.tpl');
return;
}
if(Submit_Require_A_URL == true || ($url != "http://" && $url != "")){
if($linkres->duplicates($url) > 0) {
$main_smarty->assign('submit_search', getmyurl("search_url", htmlentities($url)));
$main_smarty->assign('submit_error', 'dupeurl');
$main_smarty->assign('tpl_center', $the_template . '/submit_errors');
define('pagename', 'submit');
$main_smarty->assign('pagename', pagename);
$main_smarty->display($the_template . '/pligg.tpl');
return;
}
}
check_actions('submit_validating_url', array("url" => $url));
totals_adjust_count('discard', 1);
$linkres->status='discard';
$linkres->author=$current_user->user_id;
$linkres->store();
$main_smarty->assign('StorySummary_ContentTruncate', StorySummary_ContentTruncate);
$main_smarty->assign('SubmitSummary_Allow_Edit', SubmitSummary_Allow_Edit);
$main_smarty->assign('enable_tags', Enable_Tags);
$main_smarty->assign('submit_url_title', $linkres->url_title);
$main_smarty->assign('submit_id', $linkres->id);
$main_smarty->assign('submit_type', $linkres->type());
if(isset($link_title)){$main_smarty->assign('submit_title', $link_title);}
if(isset($link_content)){$main_smarty->assign('submit_content', $link_content);}
$main_smarty->assign('submit_trackback', $trackback);
$main_smarty->assign('submit_link_field1', $linkres->link_field1);
$main_smarty->assign('submit_link_field2', $linkres->link_field2);
$main_smarty->assign('submit_link_field3', $linkres->link_field3);
$main_smarty->assign('submit_link_field4', $linkres->link_field4);
$main_smarty->assign('submit_link_field5', $linkres->link_field5);
$main_smarty->assign('submit_link_field6', $linkres->link_field6);
$main_smarty->assign('submit_link_field7', $linkres->link_field7);
$main_smarty->assign('submit_link_field8', $linkres->link_field8);
$main_smarty->assign('submit_link_field9', $linkres->link_field9);
$main_smarty->assign('submit_link_field10', $linkres->link_field10);
$main_smarty->assign('submit_link_field11', $linkres->link_field11);
$main_smarty->assign('submit_link_field12', $linkres->link_field12);
$main_smarty->assign('submit_link_field13', $linkres->link_field13);
$main_smarty->assign('submit_link_field14', $linkres->link_field14);
$main_smarty->assign('submit_link_field15', $linkres->link_field15);
$catsql = mysql_query("SELECT category_id, category_name FROM " . table_categories . " WHERE category_lang='$dblang' ORDER BY category_name ASC");
$categories = array();
while ($rows = mysql_fetch_array ($catsql, MYSQL_ASSOC)) array_push ($categories, $rows);
$main_smarty->assign('categories', $categories);
include_once(mnminclude.'dbtree.php');
$array = tree_to_array(0, table_categories, FALSE);
$main_smarty->assign('lastspacer', 0);
$main_smarty->assign('cat_array', $array);
$main_smarty->assign('Spell_Checker', Spell_Checker);
$main_smarty->assign('tpl_extra_fields', $the_template . '/submit_extra_fields');
$main_smarty->assign('tpl_center', $the_template . '/submit_step_2');
define('pagename', 'submit');
$main_smarty->assign('pagename', pagename);
check_actions('do_submit1');
$main_smarty->display($the_template . '/pligg.tpl');
}
// submit step 2
function do_submit2() {
global $db, $main_smarty, $dblang, $the_template;
$main_smarty->assign('auto_vote', auto_vote);
$main_smarty->assign('Submit_Show_URL_Input', Submit_Show_URL_Input);
$main_smarty->assign('Submit_Require_A_URL', Submit_Require_A_URL);
$main_smarty->assign('tpl_extra_fields', $the_template . '/submit_extra_fields');
$main_smarty->assign('tpl_center', $the_template . '/submit_step_3');
define('pagename', 'submit');
$main_smarty->assign('pagename', pagename);
check_actions('do_submit2');
$main_smarty->display($the_template . '/pligg.tpl');
}
// submit step 3
function do_submit3() {
global $db;
$linkres=new Link;
$linkres->id=$link_id = strip_tags($_POST['id']);
$linkres->read();
totals_adjust_count($linkres->status, -1);
totals_adjust_count('queued', 1);
$linkres->status='queued';
$linkres->store_basic();
$linkres->check_should_publish();
check_actions('do_submit3',array('linkres'=>&$linkres));
if(!empty($_POST['trackback'])) {
require_once(mnminclude.'trackback.php');
$trackres = new Trackback;
$trackres->url=trim($_POST['trackback']);
$trackres->link=$linkres->id;
$trackres->title=$linkres->title;
$trackres->author=$linkres->author;
$trackres->content=$linkres->content;
$res = $trackres->send();
}
header("Location: " . getmyurl('upcoming'));
die;
}
// assign any errors found during submit
function link_errors($linkres)
{
global $main_smarty, $the_template;
$error = false;
if($_POST['randkey'] !== $linkres->randkey) { // random key error
$main_smarty->assign('submit_error', 'badkey');
$main_smarty->display($the_template . '/submit_errors.tpl');
$error = true;
}
if($linkres->status != 'discard') { // if link has already been submitted
$main_smarty->assign('submit_error', 'hashistory');
$main_smarty->assign('submit_error_history', $linkres->status);
$main_smarty->display($the_template . '/submit_errors.tpl');
$error = true;
}
if(strlen($linkres->title) < minTitleLength || strlen($linkres->content) < minStoryLength ) { // if link title or descrition is too short
$main_smarty->assign('submit_error', 'incomplete');
$main_smarty->display($the_template . '/submit_errors.tpl');
$error = true;
}
if(preg_match('/.*http:\//', $linkres->title)) { // if URL is found in link title
$main_smarty->assign('submit_error', 'urlintitle');
$main_smarty->display($the_template . '/submit_errors.tpl');
$error = true;
}
if(!$linkres->category > 0) { // if no category is selected
$main_smarty->assign('submit_error', 'nocategory');
$main_smarty->display($the_template . '/submit_errors.tpl');
$error = true;
}
return $error;
}
?>