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;
}
?>