";
/*
-----------------------------------------------------------
WIKI MENU
-----------------------------------------------------------
*/
echo "';
/*
-----------------------------------------------------------
MAIN WIKI AREA
-----------------------------------------------------------
*/
echo "
";
/////////////////////// more options /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='more')
{
echo '
';
echo '
'.get_lang('More').'';
echo '
';
if(api_is_allowed_to_edit() || api_is_platform_admin())
{
//TODO: config area and private stats
}
echo '
';
echo '';
echo '';
echo '';
echo ' | ';
echo '';
echo '';
echo' | ';
echo '
';
echo '
';
//Submenu Most linked pages
//echo '
'.get_lang('MostLinkedPages').'';//TODO
//Submenu Dead end pages
//echo '
'.get_lang('DeadEndPages').'';//TODO
//Submenu Most new pages (not versions)
//echo '
'.get_lang('MostNewPages').'';//TODO
//Submenu Most long pages
//echo '
'.get_lang('MostLongPages').'';//TODO
//Submenu Protected pages
//echo '
'.get_lang('ProtectedPages').'';//TODO
//Submenu Hidden pages
//echo '
'.get_lang('HiddenPages').'';//TODO
//Submenu Most discuss pages
//echo '
'.get_lang('MostDiscussPages').'';//TODO
//Submenu Best scored pages
//echo '
'.get_lang('BestScoredPages').'';//TODO
//Submenu Pages with more progress
//echo '
'.get_lang('MProgressPages').'';//TODO
//Submenu Most active users in discuss
//echo '
'.get_lang('MostDiscussUsers').'';//TODO
//Submenu Individual assignments
//echo '
'.get_lang('Assignments').'';//TODO
//Submenu Delayed assignments
//echo '
'.get_lang('DelayedAssignments').'';//TODO
//Submenu Random page
//echo '
'.get_lang('RandomPage').'';//TODO
}
/////////////////////// Most active users /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='mactiveusers')
{
echo '
';
echo '
'.get_lang('MostActiveUsers').'';
echo '
';
$sql='SELECT *, COUNT(*) AS NUM_EDIT FROM '.$tbl_wiki.' WHERE '.$groupfilter.' GROUP BY user_id';
$allpages=api_sql_query($sql,__FILE__,__LINE__);
//show table
if (mysql_num_rows($allpages) > 0)
{
$row = array ();
while ($obj = mysql_fetch_object($allpages))
{
$userinfo=Database::get_user_info_from_id($obj->user_id);
$row = array ();
$row[] = $obj->user_id <>0 ? '
'.$userinfo['lastname'].', '.$userinfo['firstname'].'' : get_lang('Anonymous').' ('.$obj->user_ip.')';
$row[] ='
'.$obj->NUM_EDIT.'';
$rows[] = $row;
}
$table = new SortableTableFromArrayConfig($rows,1,10,'MostActiveUsersA_table','','','DESC');
$table->set_additional_parameters(array('cidReq' =>Security::remove_XSS($_GET['cidReq']),'action'=>Security::remove_XSS($_GET['action']),'group_id'=>Security::remove_XSS($_GET['group_id'])));
$table->set_header(0,get_lang('Author'), true, array ('style' => 'width:30px;'));
$table->set_header(1,get_lang('Contributions'), true);
$table->display();
}
}
/////////////////////// User contributions /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='usercontrib')
{
$userinfo=Database::get_user_info_from_id(Security::remove_XSS($_GET['user_id']));
echo '
';
echo '
'.get_lang('UserContributions').': '.$userinfo['lastname'].', '.$userinfo['firstname'].'';
echo '
';
if(api_is_allowed_to_edit() || api_is_platform_admin()) //only by professors if page is hidden
{
$sql='SELECT * FROM '.$tbl_wiki.' WHERE '.$groupfilter.' AND user_id="'.Security::remove_XSS($_GET['user_id']).'"';
}
else
{
$sql='SELECT * FROM '.$tbl_wiki.' WHERE '.$groupfilter.' AND user_id="'.Security::remove_XSS($_GET['user_id']).'" AND visibility=1';
}
$allpages=api_sql_query($sql,__FILE__,__LINE__);
//show table
if (mysql_num_rows($allpages) > 0)
{
$row = array ();
while ($obj = mysql_fetch_object($allpages))
{
//get author
$userinfo=Database::get_user_info_from_id($obj->user_id);
//get time
$year = substr($obj->dtime, 0, 4);
$month = substr($obj->dtime, 5, 2);
$day = substr($obj->dtime, 8, 2);
$hours = substr($obj->dtime, 11,2);
$minutes = substr($obj->dtime, 14,2);
$seconds = substr($obj->dtime, 17,2);
//get type assignment icon
if($obj->assignment==1)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==2)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==0)
{
$ShowAssignment='

';
}
$row = array ();
$row[] = $day.' '.$MonthsLong[$month-1].' '.$year.' '.$hours.":".$minutes.":".$seconds;
$row[] =$ShowAssignment;
$row[] = '
'.$obj->title.'';
$row[] =$obj->version;
$row[] =$obj->comment;
//$row[] =strlen($obj->comment)>30 ? substr($obj->comment,0,30).'...' : $obj->comment;
$row[] =$obj->progress.' %';
$row[] =$obj->score;
//if(api_is_allowed_to_edit() || api_is_platform_admin())
//{
//$row[] =$obj->user_ip;
//}
$rows[] = $row;
}
$table = new SortableTableFromArrayConfig($rows,2,10,'UsersContributions_table','','','ASC');
$table->set_additional_parameters(array('cidReq' =>Security::remove_XSS($_GET['cidReq']),'action'=>Security::remove_XSS($_GET['action']),'user_id'=>Security::remove_XSS($_GET['user_id']),'group_id'=>Security::remove_XSS($_GET['group_id'])));
$table->set_header(0,get_lang('Date'), true, array ('style' => 'width:200px;'));
$table->set_header(1,get_lang('Type'), true, array ('style' => 'width:30px;'));
$table->set_header(2,get_lang('Title'), true, array ('style' => 'width:200px;'));
$table->set_header(3,get_lang('Version'), true, array ('style' => 'width:30px;'));
$table->set_header(4,get_lang('Comment'), true, array ('style' => 'width:200px;'));
$table->set_header(5,get_lang('Progress'), true, array ('style' => 'width:30px;'));
$table->set_header(6,get_lang('Rating'), true, array ('style' => 'width:30px;'));
//if(api_is_allowed_to_edit() || api_is_platform_admin())
//{
//$table->set_header(7,get_lang('IP'), true, array ('style' => 'width:30px;'));
//}
$table->display();
}
}
/////////////////////// Most changed pages /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='mostchanged')
{
echo '
';
echo '
'.get_lang('MostChangesPages').'';
echo '
';
if(api_is_allowed_to_edit() || api_is_platform_admin()) //only by professors if page is hidden
{
$sql='SELECT *, MAX(version) AS MAX FROM '.$tbl_wiki.' WHERE '.$groupfilter.' GROUP BY reflink';
}
else
{
$sql='SELECT *, MAX(version) AS MAX FROM '.$tbl_wiki.' WHERE '.$groupfilter.' AND visibility=1 GROUP BY reflink';
}
$allpages=api_sql_query($sql,__FILE__,__LINE__);
//show table
if (mysql_num_rows($allpages) > 0)
{
$row = array ();
while ($obj = mysql_fetch_object($allpages))
{
//get type assignment icon
if($obj->assignment==1)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==2)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==0)
{
$ShowAssignment='

';
}
$row = array ();
$row[] =$ShowAssignment;
$row[] = '
'.$obj->title.'';
$row[] = $obj->MAX;
$rows[] = $row;
}
$table = new SortableTableFromArrayConfig($rows,2,10,'MostChangedPages_table','','','DESC');
$table->set_additional_parameters(array('cidReq' =>Security::remove_XSS($_GET['cidReq']),'action'=>Security::remove_XSS($_GET['action']),'group_id'=>Security::remove_XSS($_GET['group_id'])));
$table->set_header(0,get_lang('Type'), true, array ('style' => 'width:30px;'));
$table->set_header(1,get_lang('Title'), true);
$table->set_header(2,get_lang('Changes'), true);
$table->display();
}
}
/////////////////////// Most visited pages /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='mvisited')
{
echo '
';
echo '
'.get_lang('MostVisitedPages').'';
echo '
';
if(api_is_allowed_to_edit() || api_is_platform_admin()) //only by professors if page is hidden
{
$sql='SELECT *, SUM(hits) AS tsum FROM '.$tbl_wiki.' WHERE '.$groupfilter.' GROUP BY reflink';
}
else
{
$sql='SELECT *, SUM(hits) AS tsum FROM '.$tbl_wiki.' WHERE '.$groupfilter.' AND visibility=1 GROUP BY reflink';
}
$allpages=api_sql_query($sql,__FILE__,__LINE__);
//show table
if (mysql_num_rows($allpages) > 0)
{
$row = array ();
while ($obj = mysql_fetch_object($allpages))
{
//get type assignment icon
if($obj->assignment==1)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==2)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==0)
{
$ShowAssignment='

';
}
$row = array ();
$row[] =$ShowAssignment;
$row[] = '
'.$obj->title.'';
$row[] = $obj->tsum;
$rows[] = $row;
}
$table = new SortableTableFromArrayConfig($rows,2,10,'MostVisitedPages_table','','','DESC');
$table->set_additional_parameters(array('cidReq' =>Security::remove_XSS($_GET['cidReq']),'action'=>Security::remove_XSS($_GET['action']),'group_id'=>Security::remove_XSS($_GET['group_id'])));
$table->set_header(0,get_lang('Type'), true, array ('style' => 'width:30px;'));
$table->set_header(1,get_lang('Title'), true);
$table->set_header(2,get_lang('Visits'), true);
$table->display();
}
}
/////////////////////// Wanted pages /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='wanted')
{
echo '
';
echo '
'.get_lang('WantedPages').'';
echo '
';
$pages = array();
$refs = array();
$sort_wanted=array();
//get name pages
$sql='SELECT * FROM '.$tbl_wiki.' WHERE '.$groupfilter.' GROUP BY reflink ORDER BY reflink ASC';
$allpages=api_sql_query($sql,__FILE__,__LINE__);
while ($row=Database::fetch_array($allpages))
{
$pages[] = $row['reflink'];
}
//get name refs in last pages and make a unique list
$sql='SELECT * FROM '.$tbl_wiki.' s1 WHERE '.$groupfilter.' AND id=(SELECT MAX(s2.id) FROM '.$tbl_wiki.' s2 WHERE s1.reflink = s2.reflink)';
$allpages=api_sql_query($sql,__FILE__,__LINE__);
while ($row=Database::fetch_array($allpages))
{
//$row['linksto']= str_replace("\n".$row["reflink"]."\n", "\n", $row["linksto"]); //remove self reference. TODO check
$rf = explode(" ", trim($row["linksto"]));//wanted pages without /n only blank " "
$refs = array_merge($refs, $rf);
if ($n++ > 299)
{
$refs = array_unique($refs);
$n=0;
} // (clean-up only every 300th loop). Thanks to Erfurt Wiki
}
//sort linksto. Find linksto into reflink. If not found ->page is wanted
natcasesort($refs);
echo '
';
}
/////////////////////// Orphaned pages /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='orphaned')
{
echo '
';
echo '
'.get_lang('OrphanedPages').'';
echo '
';
$pages = array();
$refs = array();
$orphaned = array();
//get name pages
$sql='SELECT * FROM '.$tbl_wiki.' WHERE '.$groupfilter.' GROUP BY reflink ORDER BY reflink ASC';
$allpages=api_sql_query($sql,__FILE__,__LINE__);
while ($row=Database::fetch_array($allpages))
{
$pages[] = $row['reflink'];
}
//get name refs in last pages and make a unique list
$sql='SELECT * FROM '.$tbl_wiki.' s1 WHERE '.$groupfilter.' AND id=(SELECT MAX(s2.id) FROM '.$tbl_wiki.' s2 WHERE s1.reflink = s2.reflink)';
$allpages=api_sql_query($sql,__FILE__,__LINE__);
while ($row=Database::fetch_array($allpages))
{
//$row['linksto']= str_replace("\n".$row["reflink"]."\n", "\n", $row["linksto"]); //remove self reference. TODO check
$rf = explode(" ", trim($row["linksto"])); //fix replace explode("\n", trim($row["linksto"])) with explode(" ", trim($row["linksto"]))
$refs = array_merge($refs, $rf);
if ($n++ > 299)
{
$refs = array_unique($refs);
$n=0;
} // (clean-up only every 300th loop). Thanks to Erfurt Wiki
}
//search each name of list linksto into list reflink
foreach($pages as $v)
{
if(!in_array($v, $refs))
{
$orphaned[] = $v;
}
}
//change reflink by title
foreach($orphaned as $vshow)
{
if(api_is_allowed_to_edit() || api_is_platform_admin()) //only by professors if page is hidden
{
$sql='SELECT * FROM '.$tbl_wiki.' WHERE '.$groupfilter.' AND reflink="'.$vshow.'" GROUP BY reflink';
}
else
{
$sql='SELECT * FROM '.$tbl_wiki.' WHERE '.$groupfilter.' AND reflink="'.$vshow.'" AND visibility=1 GROUP BY reflink';
}
$allpages=api_sql_query($sql,__FILE__,__LINE__);
echo '
';
while ($row=Database::fetch_array($allpages))
{
//fix assignment icon
if($row['assignment']==1)
{
$ShowAssignment='
';
}
elseif ($row['assignment']==2)
{
$ShowAssignment='
';
}
elseif ($row['assignment']==0)
{
$ShowAssignment='
';
}
echo '- '.$ShowAssignment.''.$row['title'].'
';
}
echo '
';
}
}
/////////////////////// delete current page /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='delete')
{
if(api_is_allowed_to_edit() || api_is_platform_admin())
{
echo '
';
echo '
'.get_lang('DeletePageHistory').'';
echo '
';
if($page=="index")
{
Display::display_warning_message(get_lang('WarningDeleteMainPage'),false);
}
$message = get_lang('ConfirmDeletePage').""."
"."".get_lang("No").""." | "."".get_lang("Yes").""."
";
if (!isset ($_GET['delete']))
{
Display::display_warning_message($message,false);
}
if ($_GET['delete'] == 'yes')
{
$sql='DELETE '.$tbl_wiki_discuss.' FROM '.$tbl_wiki.', '.$tbl_wiki_discuss.' WHERE '.$tbl_wiki.'.reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$tbl_wiki.'.'.$groupfilter.' AND '.$tbl_wiki_discuss.'.publication_id='.$tbl_wiki.'.id';
api_sql_query($sql,__FILE__,__LINE__);
$sql='DELETE '.$tbl_wiki_mailcue.' FROM '.$tbl_wiki.', '.$tbl_wiki_mailcue.' WHERE '.$tbl_wiki.'.reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$tbl_wiki.'.'.$groupfilter.' AND '.$tbl_wiki_mailcue.'.id='.$tbl_wiki.'.id';
api_sql_query($sql,__FILE__,__LINE__);
$sql='DELETE FROM '.$tbl_wiki.' WHERE reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$groupfilter.'';
api_sql_query($sql,__FILE__,__LINE__);
check_emailcue(0, 'E');
Display::display_confirmation_message(get_lang('WikiPageDeleted'));
}
}
else
{
Display::display_normal_message(get_lang("OnlyAdminDeletePageWiki"));
}
}
/////////////////////// delete all wiki /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='deletewiki')
{
echo '
';
echo '
'.get_lang('DeleteWiki').'';
echo '
';
}
/////////////////////// search pages /////////////////////// Juan Carlos Raña Trabado
//// 1 Searchpages: input search
if ($_GET['action']=='searchpages')
{
echo '
';
echo '
'.$SearchPages.'';
echo '
';
if (!$_POST['Skeyword'])
{
echo '
';
}
}
//// 2 SearchPages: find and show pages
if ($_GET['action']=='showsearchpages')
{
echo '
';
echo '
'.$Search.': '.$_POST['Skeyword']; //TODO: post is lost when a table has some pages
echo '
';
$_clean['group_id']=(int)$_SESSION['_gid'];
if(api_is_allowed_to_edit() || api_is_platform_admin()) //only by professors if page is hidden
{
if($_POST['Scontent']=="1")
{
$sql="SELECT * FROM ".$tbl_wiki." s1 WHERE ".$groupfilter." AND title LIKE '%".$_POST['Skeyword']."%' OR content LIKE '%".$_POST['Skeyword']."%' AND id=(SELECT MAX(s2.id) FROM ".$tbl_wiki." s2 WHERE s1.reflink = s2.reflink)";// warning don't use group by reflink because don't return the last version
}
else
{
$sql="SELECT * FROM ".$tbl_wiki." s1 WHERE ".$groupfilter." AND title LIKE '%".$_POST['Skeyword']."%' AND id=(SELECT MAX(s2.id) FROM ".$tbl_wiki." s2 WHERE s1.reflink = s2.reflink)";// warning don't use group by reflink because don't return the last version
}
}
else
{
if($_POST['Scontent']=="1")
{
$sql="SELECT * FROM ".$tbl_wiki." s1 WHERE ".$groupfilter." AND visibility=1 AND title LIKE '%".$_POST['Skeyword']."%' OR content LIKE '%".$_POST['Skeyword']."%' AND id=(SELECT MAX(s2.id) FROM ".$tbl_wiki." s2 WHERE s1.reflink = s2.reflink)";// warning don't use group by reflink because don't return the last version
}
else
{
$sql="SELECT * FROM ".$tbl_wiki." s1 WHERE ".$groupfilter." AND visibility=1 AND title LIKE '%".$_POST['Skeyword']."%' AND id=(SELECT MAX(s2.id) FROM ".$tbl_wiki." s2 WHERE s1.reflink = s2.reflink)";// warning don't use group by reflink because don't return the last version
}
}
$result=api_sql_query($sql,__LINE__,__FILE__);
//show table
if (mysql_num_rows($result) > 0)
{
$row = array ();
while ($obj = mysql_fetch_object($result))
{
//get author
$userinfo=Database::get_user_info_from_id($obj->user_id);
//get time
$year = substr($obj->dtime, 0, 4);
$month = substr($obj->dtime, 5, 2);
$day = substr($obj->dtime, 8, 2);
$hours = substr($obj->dtime, 11,2);
$minutes = substr($obj->dtime, 14,2);
$seconds = substr($obj->dtime, 17,2);
//get type assignment icon
if($obj->assignment==1)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==2)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==0)
{
$ShowAssignment='

';
}
$row = array ();
$row[] =$ShowAssignment;
$row[] = '
'.$obj->title.'';
$row[] = $obj->user_id <>0 ? '
'.$userinfo['lastname'].', '.$userinfo['firstname'].'' : get_lang('Anonymous').' ('.$obj->user_ip.')';
$row[] = $day.' '.$MonthsLong[$month-1].' '.$year.' '.$hours.":".$minutes.":".$seconds;
$rows[] = $row;
}
$table = new SortableTableFromArrayConfig($rows,1,10,'SearchPages_table','','','ASC');
$table->set_additional_parameters(array('cidReq' =>$_GET['cidReq'],'action'=>$_GET['action'],'group_id'=>Security::remove_XSS($_GET['group_id'])));
$table->set_header(0,get_lang('Type'), true, array ('style' => 'width:30px;'));
$table->set_header(1,get_lang('Title'), true);
$table->set_header(2,get_lang('Author'), true);
$table->set_header(3,get_lang('Date'), true);
$table->display();
}
}
/////////////////////// What links here. Show pages that have linked this page /////////////////////// Juan Carlos Raña Trabado
if ($_GET['action']=='links')
{
echo '
';
echo '
'.$LinksPages.'';
echo '
';
if (!$_GET['title'])
{
Display::display_normal_message(get_lang("MustSelectPage"));
}
else
{
$sql='SELECT * FROM '.$tbl_wiki.' WHERE reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$groupfilter.'';
$result=api_sql_query($sql,__FILE__,__LINE__);
$row=Database::fetch_array($result);
//get type assignment icon
if($row['assignment']==1)
{
$ShowAssignment='

';
}
elseif ($row['assignment']==2)
{
$ShowAssignment='

';
}
elseif ($row['assignment']==0)
{
$ShowAssignment='

';
}
//fix Title to reflink (link Main Page)
if ($page==get_lang('DefaultTitle'))
{
$page='index';
}
echo $LinksPagesFrom.': '.$ShowAssignment.'
'.$row['title'].'';
//fix index to title Main page into linksto
if ($page=='index')
{
$page=str_replace(' ','_',get_lang('DefaultTitle'));
}
//table
if(api_is_allowed_to_edit() || api_is_platform_admin()) //only by professors if page is hidden
{
$sql="SELECT * FROM ".$tbl_wiki." s1 WHERE ".$groupfilter." AND linksto LIKE '%".html_entity_decode(Database::escape_string(stripslashes(urldecode($page))))." %' AND id=(SELECT MAX(s2.id) FROM ".$tbl_wiki." s2 WHERE s1.reflink = s2.reflink)"; //add blank space after like '%" " %' to identify each word.
}
else
{
$sql="SELECT * FROM ".$tbl_wiki." s1 WHERE ".$groupfilter." AND visibility=1 AND linksto LIKE '%".html_entity_decode(Database::escape_string(stripslashes(urldecode($page))))." %' AND id=(SELECT MAX(s2.id) FROM ".$tbl_wiki." s2 WHERE s1.reflink = s2.reflink)"; //add blank space after like '%" " %' to identify each word
}
$allpages=api_sql_query($sql,__LINE__,__FILE__);
//show table
if (mysql_num_rows($allpages) > 0)
{
$row = array ();
while ($obj = mysql_fetch_object($allpages))
{
//get author
$userinfo=Database::get_user_info_from_id($obj->user_id);
//get time
$year = substr($obj->dtime, 0, 4);
$month = substr($obj->dtime, 5, 2);
$day = substr($obj->dtime, 8, 2);
$hours = substr($obj->dtime, 11,2);
$minutes = substr($obj->dtime, 14,2);
$seconds = substr($obj->dtime, 17,2);
//get type assignment icon
if($obj->assignment==1)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==2)
{
$ShowAssignment='

';
}
elseif ($obj->assignment==0)
{
$ShowAssignment='

';
}
$row = array ();
$row[] =$ShowAssignment;
$row[] = '
'.$obj->title.'';
$row[] = $obj->user_id <>0 ? '
'.$userinfo['lastname'].', '.$userinfo['firstname'].'' : get_lang('Anonymous').' ('.$obj->user_ip.')';
$row[] = $day.' '.$MonthsLong[$month-1].' '.$year.' '.$hours.":".$minutes.":".$seconds;
$rows[] = $row;
}
$table = new SortableTableFromArrayConfig($rows,1,10,'AllPages_table','','','ASC');
$table->set_additional_parameters(array('cidReq' =>Security::remove_XSS($_GET['cidReq']),'action'=>Security::remove_XSS($_GET['action']),'group_id'=>Security::remove_XSS($_GET['group_id'])));
$table->set_header(0,get_lang('Type'), true, array ('style' => 'width:30px;'));
$table->set_header(1,get_lang('Title'), true);
$table->set_header(2,get_lang('Author'), true);
$table->set_header(3,get_lang('Date'), true);
$table->display();
}
}
}
/////////////////////// adding a new page ///////////////////////
// Display the form for adding a new wiki page
if ($_GET['action']=='addnew')
{
//first, check if page index was created. chektitle=false
if (checktitle('index'))
{
if(api_is_allowed_to_edit() || api_is_platform_admin())
{
Display::display_normal_message(get_lang('GoAndEditMainPage'));
}
else
{
return Display::display_normal_message(get_lang('WikiStandBy'));
}
}
elseif (check_addnewpagelock() && (api_is_allowed_to_edit()==false || api_is_platform_admin()==false))
{
Display::display_normal_message(get_lang('AddPagesLocked'));
}
else
{
if(api_is_allowed_to_edit() || api_is_platform_admin() || GroupManager :: is_user_in_group($_user['user_id'],$_SESSION['_gid']) || Security::remove_XSS($_GET['group_id'])==0)
{
echo '
';
echo '
'.get_lang('AddNew').'';
echo '
';
display_new_wiki_form();
}
else
{
Display::display_normal_message(get_lang('OnlyAddPagesGroupMembers'));
}
}
}
/////////////////////// show home page ///////////////////////
if (!$_GET['action'] OR $_GET['action']=='show' AND !$_POST['SaveWikiNew'])
{
display_wiki_entry();
}
/////////////////////// show current page ///////////////////////
if ($_GET['action']=='showpage' AND !$_POST['SaveWikiNew'])
{
display_wiki_entry();
}
/////////////////////// edit current page ///////////////////////
if ($_GET['action']=='edit')
{
$_clean['group_id']=(int)$_SESSION['_gid'];
$sql='SELECT * FROM '.$tbl_wiki.'WHERE reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$groupfilter.' ORDER BY id DESC';
$result=api_sql_query($sql,__LINE__,__FILE__);
$row=Database::fetch_array($result); // we do not need a while loop since we are always displaying the last version
//Only teachers and platform admin can edit the index page. Only teachers and platform admin can edit an assignment teacher
if(($row['reflink']=='index' || $row['reflink']=='' || $row['assignment']==1) && (!api_is_allowed_to_edit()))
{
Display::display_normal_message(get_lang('OnlyEditPagesCourseManager'));
}
else
{
$PassEdit=false;
//check if is a wiki group
if($_clean['group_id']!==0)
{
//Only teacher, platform admin and group members can edit a wiki group
if(api_is_allowed_to_edit() || api_is_platform_admin() || GroupManager :: is_user_in_group($_user['user_id'],$_SESSION['_gid']))
{
$PassEdit=true;
}
else
{
Display::display_normal_message(get_lang('OnlyEditPagesGroupMembers'));
}
}
else
{
$PassEdit=true;
}
// check if is a assignment
if(stripslashes($row['assignment'])==1)
{
Display::display_normal_message(get_lang('EditAssignmentWarning'));
$icon_assignment='

';
}
elseif(stripslashes($row['assignment'])==2)
{
$icon_assignment='

';
if((api_get_user_id()==$row['user_id'])==false)
{
if(api_is_allowed_to_edit() || api_is_platform_admin())
{
$PassEdit=true;
}
else
{
Display::display_warning_message(get_lang('LockByTeacher'));
$PassEdit=false;
}
}
else
{
$PassEdit=true;
}
}
if($PassEdit) //show editor if edit is allowed
{
if (check_protect_page() && (api_is_allowed_to_edit()==false || api_is_platform_admin()==false))
{
Display::display_normal_message(get_lang('PageLockedExtra'));
}
else
{
if ($row['content']=='' AND $row['title']=='' AND $page='index')
{
$content=sprintf(get_lang('DefaultContent'),api_get_path(WEB_IMG_PATH));
$title=get_lang('DefaultTitle');
}
else
{
$content=$row['content'];
$title=$row['title'];
}
echo '
';
echo $icon_assignment.' '.$title.'
';
echo '
';
echo '';
echo '
';
}
}
}
}
/////////////////////// page history ///////////////////////
if ($_GET['action']=='history' or Security::remove_XSS($_POST['HistoryDifferences']))
{
$_clean['group_id']=(int)$_SESSION['_gid'];
//First, see the property visibility that is at the last register and therefore we should select descending order. But to give ownership to each record, this is no longer necessary except for the title. TODO: check this
$sql='SELECT * FROM '.$tbl_wiki.'WHERE reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$groupfilter.' ORDER BY id DESC';
$result=api_sql_query($sql,__LINE__,__FILE__);
while ($row=Database::fetch_array($result))
{
$KeyVisibility=$row['visibility'];
$KeyAssignment=$row['assignment'];
$KeyTitle=$row['title'];
$KeyUserId=$row['user_id'];
}
if($KeyAssignment==1)
{
$icon_assignment='

';
}
elseif($KeyAssignment==2)
{
$icon_assignment='

';
}
//Second, show
//if the page is hidden and is a job only sees its author and professor
if($KeyVisibility==1 || api_is_allowed_to_edit() || api_is_platform_admin() || ($KeyAssignment==2 && $KeyVisibility==0 && (api_get_user_id()==$KeyUserId)))
{
// We show the complete history
if (!$_POST['HistoryDifferences'] && !$_POST['HistoryDifferences2'] )
{
$sql='SELECT * FROM '.$tbl_wiki.'WHERE reflink="'.html_entity_decode(Database::escape_string(stripslashes(urldecode($page)))).'" AND '.$groupfilter.' ORDER BY id DESC';
$result=api_sql_query($sql,__LINE__,__FILE__);
$title=Security::remove_XSS($_GET['title']);
$group_id=Security::remove_XSS($_GET['group_id']);
echo '
';
echo $icon_assignment.' '.$KeyTitle;
echo '
';
echo '
';
}
// We show the differences between two versions
else
{
$sql_old="SELECT * FROM $tbl_wiki WHERE id='".Database::escape_string($_POST['old'])."'";
$result_old=api_sql_query($sql_old,__LINE__,__FILE__);
$version_old=Database::fetch_array($result_old);
$sql_new="SELECT * FROM $tbl_wiki WHERE id='".Database::escape_string($_POST['new'])."'";
$result_new=api_sql_query($sql_new,__LINE__,__FILE__);
$version_new=Database::fetch_array($result_new);
if($_POST['HistoryDifferences'])
{
include('diff.inc.php');
//title
echo '
'.stripslashes($version_new['title']).' ('.get_lang('DifferencesNew').' '.stripslashes($version_new['dtime']).' '.get_lang('DifferencesOld').' '.stripslashes($version_old['dtime']).') '.get_lang('Legend').': '.get_lang(WikiDiffAddedLine).' '.get_lang(WikiDiffDeletedLine).' '.get_lang(WikiDiffMovedLine).'
';
}
if($_POST['HistoryDifferences2'])
{
require_once 'Text/Diff.php';
require_once 'Text/Diff/Renderer/inline.php';
//title
echo '
'.stripslashes($version_new['title']).' ('.get_lang('DifferencesNew').' '.stripslashes($version_new['dtime']).' '.get_lang('DifferencesOld').' '.stripslashes($version_old['dtime']).') '.get_lang('Legend').': '.get_lang(WikiDiffAddedTex).' '.get_lang(WikiDiffDeletedTex).'
';
}
echo '
';
if($_POST['HistoryDifferences'])
{
echo '
'.diff( stripslashes($version_old['content']), stripslashes($version_new['content']), true, 'format_table_line' ).'
'; // format_line mode is better for words
echo '
';
echo '