<?php

/**
* Copyright 2009, 2010 AEGEE-Europe
*
* This file is part of AEGEE-Europe Online Membership System.
*
* AEGEE-Europe Online Membership System is free software: you can
* redistribute it and/or modify it under the terms of the GNU General
* Public License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* AEGEE-Europe Online Membership System is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE.  See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AEGEE-Europe Online Membership System.  If not, see
* <http://www.gnu.org/licenses/>.
*/

include("./include/include.php");
require_once(FILESYSTEMROOTPATH."jc/include/classes/DefaultLayout.php");
require_once(FILESYSTEMROOTPATH."include/form/AbstractForm.php");


/**
* Helper classes
*/
class Proposals_sentencesForm extends AbstractForm {
	private $proposals_sentencesService;
	private $lines;

	public function __construct(Layout $layout, IModel $model, Proposals_sentencesService $proposals_sentencesService, $lines) {
		parent::__construct($layout, $model);
		$this->proposals_sentencesService = $proposals_sentencesService;
		$this->lines = $lines;
	}

	public function save(IModel $model) {
		if($_POST['form'] != $this->lines){
			return;
		}

		if( $this->proposals_sentencesService->saveOrUpdate($model) ) {
			//redirect here!
			$url='review_proposal3.php?proposal_id='.$model->getProposal_id().'&order='.$model->getOrder();
			$this->layout->redirect($url);
		}else {
			$this->layout->echoln('DB Error!!!');
		}
	}
}
/**
 * End of helper classes
 */


function headers($current, $previous, $lines, $layout, $original){
	$diff = false;
	if($current->getId() != ''){
		$diff = true;
	}

	if ( $current->getOrder2() != $previous->getOrder2() || $current->getTitle2_status()!= $previous->getTitle2_status())
	{
		//we have moved to next 'title2' section
		$layout->echoln('<tr><br /><td><h3>'.$original['title2'].'</h3></td><td>');
		if ($diff) {
			$layout->echoln('<br /><h3><script>document.write(diffStringColour(\''.$current->getTitle2().'\', \''.$original['title2'].'\'));</h3></script>');
		}
		$layout->echoln('</td></tr>');
		$lines++;
		$layout->echoln('<tr><td><br /><b>Article '.$original['article'].': '.$original['article_title'].'</b></td><td>');
		if ($diff) {
			$layout->echoln('<b>Article <script>document.write(diffStringColour(\''.$original['article'].'\', \''.$current->getArticle().'\'));</script>: ');
			$layout->echoln('<script>document.write(diffStringColour(\''.$original['article_title'].'\', \''.$current->getArticle_title().'\'));</script></b>');
		}
		$layout->echoln('</td></tr>');
		$lines++;
		$layout->echoln('<tr><td><br />('.$original['paragraph'].')</td><td>');
		if ($diff) {
			$layout->echoln('(<script>document.write(diffStringColour(\''.$original['paragraph'].'\', \''.$current->getParagraph().'\'));</script>)');
		}
		$layout->echoln('</td></tr>');
		$lines++;
	}
	elseif ( $current->getArticle() != $previous->getArticle() || $current->getArticle_Title_status()!= $previous->getArticle_Title_status())
	{
		//we have moved to next article
		$layout->echoln('<tr><td><br /><b>Article '.$original['article'].': '.$original['article_title'].'</b></td><td>');
		if ($diff) {
			$layout->echoln('<b>Article <script>document.write(diffStringColour(\''.$original['article'].'\', \''.$current->getArticle().'\'));</script>: ');
			$layout->echoln('<script>document.write(diffStringColour(\''.$original['article_title'].'\', \''.$current->getArticle_title().'\'));</script></b>');
		}
		$layout->echoln('</td></tr>');
		$lines++;
		$layout->echoln('<tr><td><br />('.$original['paragraph'].')</td><td>');
		if ($diff) {
			$layout->echoln('(<script>document.write(diffStringColour(\''.$original['paragraph'].'\', \''.$current->getParagraph().'\'));</script>)');
		}
		$layout->echoln('</td></tr>');
		$lines++;
	}
	elseif ($current->getParagraph() != $previous->getParagraph() || $current->getParagraph_status()!= $previous->getParagraph_status())
	{
		//we have moved to next paragraph
		$layout->echoln('<tr><td><br />('.$original['paragraph'].')</td><td>');
		if ($diff) {
			$layout->echoln('(<script>document.write(diffStringColour(\''.$original['paragraph'].'\', \''.$current->getParagraph().'\'));</script>)');
		}
		$layout->echoln('</td></tr>');
		$lines++;
	}
	return $lines;
}

function Area($layout, $model, $service, $lines, $original, $previous){
	
	$lines = headers($model, $previous, $lines, $layout, $original);

	
	$layout->echoln('<tr><td><sup>'.$original['sentence'].'</sup>'.nl2br($original['sentence_text']).'</td><td>');
	
	if ($model->getId() != ''){
		$layout->echoln('<sup><script>document.write(diffStringColour(\''.$original['sentence'].'\', \''.$model->getSentence().'\'));</script></sup> ');
		$layout->echoln('<script>document.write(diffStringColour(\''.preg_replace('/(\r\n|\n|\r)/','<br/>',$original['sentence_text']).'\', \''.preg_replace('/(\r\n|\n|\r)/','<br/>',$model->getSentence_text()).'\'));</script>');
		if($model->getJc_comment() != ''){
			$style = 'block';
		}else{
			$style = 'none';
		}
		$layout->echoln('</td></tr><tr><td></td><td ><u onclick="toggle_area(\''.$lines.'\');">Comment</u><span id="'.$lines.'" style="display:'.$style.'">');
		
		$form = new Proposals_sentencesForm($layout,$model,$service,$lines);
		$comment = new TextAreaField('jc_comment','' ,2,50);
		$form->addField($comment);
		$form->addHiddenField(new HiddenField('form',$lines));
		$form->display();
		$lines++;
	}
	$layout->echoln('</span></td></tr>');
	$lines++;
	return $lines;
	
}

/**
 * End functions
 */

 
$layout = new DefaultLayout("JC_MANAGE", "./jc/");
$layout->init();
$layout->addJavascript('js/visibility.js');
$layout->addJavascript('js/text_diff.js');

$proposals_sentencesService = $GLOBALS['ClassFactory']->getProposals_sentencesService();
$ciaService = $GLOBALS['ClassFactory']->getCIAService();
$proposalsService = $GLOBALS['ClassFactory']->getProposalsService();

$proposal_id = $_GET['proposal_id'];
$order = $_GET['order'];

$proposal = $proposalsService->load($proposal_id);
if($proposal->getStatus()=='Saved'){
	$layout->redirect('review_proposal1.php?agora_id='.$proposal->getAgora_id());
}

$layout->echoln('If you want to make a comment, press "comment" and after writing it press "Save". When finished, go ');
$layout->echoln('<a href="review_proposal2.php?proposal_id='.$proposal_id.'">Back</a><br />');

//load original senteces of this title
$sentences = $ciaService->loadByTitleOrder($order);

//if a new title is created
if ($sentences==NULL)
{

	$layout->echoln('<br /><b>New Section</b><br />');
	$sentence = new CIA('') ;
	foreach($proposals_sentences as $ps){
		$cat= $ps['category'];
		break;
	}

	$sentence=array(
	'id'=>'-1',
	'category'=>$cat,
	'title'=>' ',
	'order'=>$order,
	'last_change'=>' ',
	'title2'=>'',
	'order2'=>'',
	'article'=>'1',
	'article_title'=>' ',
	'paragraph'=>'1',
	'sentence'=>'1',
	'sentence_text'=>' ',
	'agora_id_start'=>'0',
	'agora_id_end'=>'0', 
	);
	$sentences[] = $sentence;
}

//load changes for this title
$proposals_sentences = $proposals_sentencesService->loadByProposalId_Order($proposal_id, $order);

//display cia+changes like editor, but: original-difference only text.
//forms: jc_comment after each change

$layout->echoln('<table><tr><th width="50%">Original</th><th width="50%">Changes</th></tr>');

//display title
foreach ($sentences as $sentence) {
	//check if modified version exists
	$ps = NULL;
	foreach ($proposals_sentences as $prs){
		if($prs['sentence_id'] == $sentence['id']){
			$ps = $prs;
			break;
		}
	}
	
	$layout->echoln('<tr><td><h3>'.$sentence['title'].'</h3></td><td>');
	if ($ps !=NULL){
		$layout->echoln('<script>document.write(diffStringColour(\''.$sentence['title'].'\', \''.$ps['title'].'\'));</script>');
	}
	
	$layout->echoln('</td></tr>');
	
	break;
}


$empty= new Proposals_sentences('');
$previous = $empty;

$lines = 2;

foreach ($sentences as $sentence) {

	
	//check if edited text exists
	$later = array();
	$modified = NULL;
	foreach($proposals_sentences as $prop_s){
		if ($prop_s['sentence_id'] == $sentence['id']){
			//an edited version of this sentence exists
				
			//simple edited text
			if($prop_s['change_type']=='Edit'){
				$modified = new Proposals_sentences($prop_s);
			}
			elseif($prop_s['change_type']=='Delete'){
				$modified = new Proposals_sentences($prop_s);
			}
			elseif($prop_s['change_type']=='New_^'){
				//display the inserted sentence
				$ps = new Proposals_sentences($prop_s);
				$empty_array = $sentence;
				$empty_array['sentence']='';
				$empty_array['sentence_text']='';
				$lines = Area($layout, $ps, $proposals_sentencesService, $lines, $empty_array, $previous);
				$previous = $ps;
	
			}
			elseif($prop_s['change_type']=='New_v'){
				//display later
				$later []=$prop_s;
			}
		}
	}
	
	if ($modified!=NULL){
		//$i++;
		$lines = Area($layout, $modified, $proposals_sentencesService, $lines, $sentence, $previous);
		$previous = $modified;
	
	}
	else{ 
		//display original cia sentence
		
		$ps = new Proposals_sentences('');
		$ps->copy_from_cia_array($sentence);
		$ps->setProposal_id($proposal_id);
		$ps->setChange_type('Edit');
		$lines = Area($layout, $ps, $proposals_sentencesService, $lines, $sentence, $previous);
		$previous = $ps;
	}
	
	foreach($later as $later_s){
		//display the inserted sentence
		//
		$ps = new Proposals_sentences($later_s);
		$empty_array = $sentence;
		$empty_array['sentence']='';
		$empty_array['sentence_text']='';
		$lines = Area($layout, $ps, $proposals_sentencesService, $lines, $empty_array, $previous);
		$previous = $ps;
	}
	
}

$layout->echoln('<table><br />');
$layout->page_footer();
?>