parent
51d292bf3c
commit
f7350b6a66
@ -0,0 +1,81 @@ |
||||
<?php |
||||
/* |
||||
Module Compilatio v0.9 pour Dokeos |
||||
*/ |
||||
/* |
||||
* admin's section: allow to see the credit's quota and do a SOAP's connection test |
||||
* Partie admin: permet de voir le quotas de cr?dit et de faire un test de connexion SOAP |
||||
*/ |
||||
ini_set('soap.wsdl_cache_enabled', 0); |
||||
ini_set('default_socket_timeout', '1000'); |
||||
|
||||
require_once '../../inc/lib/api.lib.php'; |
||||
require_once '../compilatio/compilatio.class.php'; |
||||
require_once '../compilatio/config.php'; |
||||
|
||||
$compilatio = new compilatio( |
||||
$compilatioParameter['key'], |
||||
$compilatioParameter['$urlsoap'], |
||||
$compilatioParameter['proxy_host'], |
||||
$compilatioParameter['proxy_port'] |
||||
); |
||||
$use_space = number_format($quotas->usedSpace/1000000, 2); |
||||
$total_space=$quotas->space/1000000; |
||||
|
||||
echo "<h3>" . get_lang('compilatioDescription') . "</h3>"; |
||||
|
||||
echo "<b>" |
||||
. get_lang('compilatioQuota') |
||||
. ":" |
||||
. " </b><br>" |
||||
. get_lang('compilatioCredit') |
||||
. ": " |
||||
. $quotas->usedCredits |
||||
. get_lang('compilatioOn') |
||||
. $quotas->credits; |
||||
|
||||
?> |
||||
<br><br> |
||||
<? |
||||
if(!isset($_GET['action'])) |
||||
{ |
||||
?> |
||||
<body style="margin:0px;padding:0px"> |
||||
<form style="margin:0px;" method="GET"> |
||||
<input type="submit" name="action" value="Test de Connexion SOAP"> |
||||
</form> |
||||
<? |
||||
} else { |
||||
echo get_lang('compilatioConnectionTestSoap')."<br>"; |
||||
echo "1) ".get_lang('compilatioServerConnection')."<br>"; |
||||
$compilatio = new compilatio( |
||||
$compilatioParameter['key'], |
||||
$compilatioParameter['$urlsoap'], |
||||
$compilatioParameter['proxy_host'], |
||||
$compilatioParameter['proxy_port'] |
||||
); |
||||
|
||||
if ($compilatio) |
||||
{ |
||||
echo get_lang('compilatioConnectionAccomplished')."<br>"; |
||||
echo "2) ".get_lang('compilatioSendTextToServer')."<br>"; |
||||
$text = get_lang('compilatioTestSendText'). $compilatioParameter['key']; |
||||
$id_compi = $compilatio->SendDoc( |
||||
'Doc de test', |
||||
'test', |
||||
'test', |
||||
'text/plain', |
||||
$text |
||||
); |
||||
if (isMd5($id_compi)) { |
||||
echo get_lang('compilatioSuccessfulTransfer')."<br>"; |
||||
} else { |
||||
echo get_lang('compilatioFailedTransfer')."<br>"; |
||||
} |
||||
} else { |
||||
echo get_lang('compilatioNotConnection')."<br>"; |
||||
echo get_lang('compilatioParamVerification')."<br>"; |
||||
} |
||||
} |
||||
?> |
||||
</body> |
@ -0,0 +1,359 @@ |
||||
<?php |
||||
/** |
||||
* Description: |
||||
* build the comunication with the SOAP server Compilatio.net |
||||
* call severals methods for the file management in Compilatio.net |
||||
* |
||||
* Date: 26/05/16 |
||||
* @version:1.0 |
||||
*/ |
||||
|
||||
class compilatio |
||||
{ |
||||
/*Identification key for the Compilatio account*/ |
||||
var $key = null; |
||||
/*Webservice connection*/ |
||||
var $soapcli; |
||||
|
||||
/** |
||||
* compilatio constructor. |
||||
* @param $key |
||||
* @param $urlsoap |
||||
* @param $proxyHost |
||||
* @param $proxyPort |
||||
*/ |
||||
function compilatio($key, $urlsoap, $proxyHost, $proxyPort) |
||||
{ |
||||
try |
||||
{ |
||||
if(!empty($key)){ |
||||
$this->key = $key; |
||||
if(!empty($urlsoap)){ |
||||
if(!empty($proxyHost)) { |
||||
$param = array('trace' => false, |
||||
'soap_version' => SOAP_1_2, |
||||
'exceptions' => true, |
||||
'proxy_host' => '"' . $proxyHost . '"', |
||||
'proxy_port' => $proxyPort); |
||||
} else { |
||||
$param = array('trace' => false, |
||||
'soap_version' => SOAP_1_2, |
||||
'exceptions' => true); |
||||
} |
||||
$this->soapcli = new SoapClient($urlsoap,$param); |
||||
}else{ |
||||
$this->soapcli = 'WS urlsoap not available' ; |
||||
} |
||||
}else{ |
||||
$this->soapcli ='API key not available'; |
||||
} |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
$this->soapcli = "Error constructor compilatio " . $fault->faultcode ." " .$fault->faultstring ; |
||||
} |
||||
catch (Exception $e) { |
||||
$this->soapcli = "Error constructor compilatio with urlsoap" . $urlsoap; |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Method for the file load |
||||
* |
||||
* @param $title |
||||
* @param $description |
||||
* @param $filename |
||||
* @param $mimeType |
||||
* @param $content |
||||
* @return string |
||||
*/ |
||||
function sendDoc($title, $description, $filename, $mimeType, $content) |
||||
{ |
||||
try |
||||
{ |
||||
if (!is_object($this->soapcli)) |
||||
return("Error in constructor compilatio() " . $this->soapcli); |
||||
$idDocument = $this->soapcli->__call('addDocumentBase64', |
||||
array( |
||||
$this->key, |
||||
utf8_encode(urlencode($title)), |
||||
utf8_encode(urlencode($description)), |
||||
utf8_encode(urlencode($filename)), |
||||
utf8_encode($mimeType), |
||||
base64_encode($content) |
||||
) |
||||
); |
||||
return $idDocument; |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
return("Erreur sendDoc()" . $fault->faultcode ." " .$fault->faultstring); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Method for recover a document's information |
||||
* @param $compiHash |
||||
* @return string |
||||
*/ |
||||
function getDoc($compiHash) |
||||
{ |
||||
try |
||||
{ |
||||
if (!is_object($this->soapcli)){ |
||||
return("Error in constructor compilatio() " . $this->soapcli); |
||||
} |
||||
$param = array($this->key, $compiHash); |
||||
$idDocument = $this->soapcli->__call('getDocument', $param); |
||||
return $idDocument; |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
return("Erreur getDoc()" . $fault->faultcode . " " .$fault->faultstring); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* method for recover an url document's report |
||||
* @param $compiHash |
||||
* @return string |
||||
*/ |
||||
function getReportUrl($compiHash) |
||||
{ |
||||
try |
||||
{ |
||||
if (!is_object($this->soapcli)){ |
||||
return("Error in constructor compilatio() " . $this->soapcli); |
||||
} |
||||
$param = array($this->key,$compiHash); |
||||
$idDocument = $this->soapcli->__call('getDocumentReportUrl', $param); |
||||
return $idDocument; |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
return("Erreur getReportUrl()" . $fault->faultcode ." " .$fault->faultstring); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Method for deleting a Compialtio's account document |
||||
* @param $compiHash |
||||
* @return string |
||||
*/ |
||||
function deldoc($compiHash) |
||||
{ |
||||
try |
||||
{ |
||||
if (!is_object($this->soapcli)){ |
||||
return("Error in constructor compilatio() " . $this->soapcli); |
||||
} |
||||
$param = array($this->key,$compiHash); |
||||
$this->soapcli->__call('deleteDocument', $param); |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
return("Erreur deldoc()" . $fault->faultcode . " " .$fault->faultstring); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Method for start the analysis for a document |
||||
* @param $compiHash |
||||
* @return string |
||||
*/ |
||||
function startAnalyse($compiHash) |
||||
{ |
||||
try |
||||
{ |
||||
if (!is_object($this->soapcli)){ |
||||
return("Error in constructor compilatio() " . $this->soapcli); |
||||
} |
||||
$param = array($this->key,$compiHash); |
||||
$this->soapcli->__call('startDocumentAnalyse', $param); |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
return("Erreur startAnalyse()" . $fault->faultcode ." " .$fault->faultstring); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Method for recover the account's quota |
||||
* @return string |
||||
*/ |
||||
function getQuotas() |
||||
{ |
||||
try |
||||
{ |
||||
if (!is_object($this->soapcli)){ |
||||
return("Error in constructor compilatio() " . $this->soapcli); |
||||
} |
||||
$param=array($this->key); |
||||
$resultat=$this->soapcli->__call('getAccountQuotas', $param); |
||||
return $resultat; |
||||
} |
||||
catch (SoapFault $fault) |
||||
{ |
||||
return("Erreur getQuotas()" . $fault->faultcode ." " .$fault->faultstring); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
/** |
||||
* Method for identify a file extension and the possibility that the document can be managed by Compilatio |
||||
* @param $filename |
||||
* @return bool |
||||
*/ |
||||
function verifiFileType($filename) |
||||
{ |
||||
$types = array("doc","docx", "rtf", "xls", "xlsx", "ppt", "pptx", "odt", "pdf", "txt", "htm", "html"); |
||||
$extension = substr($filename, strrpos($filename, ".")+1); |
||||
$extension = strtolower($extension); |
||||
if (in_array($extension, $types)) { |
||||
return true; |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Fonction affichage de la barre de progression d'analyse version 3.1 |
||||
* |
||||
* @param $statut From the document |
||||
* @param $pour |
||||
* @param $imagesPath |
||||
* @param $text Array includes the extract from the text |
||||
* @return unknown_type |
||||
*/ |
||||
function getProgressionAnalyseDocv31($status, $pour = 0, $imagesPath = '', $text = '') |
||||
{ |
||||
|
||||
$refreshReturn = "<a href='javascript:window.location.reload(false);'><img src='" |
||||
.$imagesPath |
||||
."ajax-loader_green.gif' title='" |
||||
. $text['refresh'] |
||||
. "' alt='" |
||||
. $text['refresh'] |
||||
. "'/></a> "; |
||||
$startReturn = "<table cellpadding='0' cellspacing='0' style='border:0;margin:0;padding:0;'><tr>"; |
||||
$startReturn .= "<td width='25' style='border:0;margin:0;padding:0;'> </td>"; |
||||
$startReturn .= "<td valign='middle' align='right' style='border:0;margin:0;padding-right:10px;'>" |
||||
.$refreshReturn |
||||
."</td>"; |
||||
$startReturn .= "<td style='border:0;margin:0;padding:0;'>"; |
||||
$startReturnLittleWidth = "<table cellpadding='0' cellspacing='0' style='border:0;margin:0;padding:0;'><tr>"; |
||||
$startReturnLittleWidth .= "<td width='25' valign='middle' align='right' style='border:0;margin:0;padding:0;'>" |
||||
.$refreshReturn |
||||
."</td>"; |
||||
$finretour = "</td></tr></table>"; |
||||
if($status == "ANALYSE_IN_QUEUE" ){ |
||||
return $startReturn . "<span style='font-size:11px'>" . $text['analysisinqueue'] . "</span>" . $finretour; |
||||
} |
||||
if($status == "ANALYSE_PROCESSING" ){ |
||||
if($pour == 100){ |
||||
return $startReturn |
||||
. "<span style='font-size:11px'>" |
||||
. $text['analysisinfinalization'] |
||||
. "</span>" |
||||
. $finretour; |
||||
} else { |
||||
return $startReturnLittleWidth |
||||
. "<td align=\"right\" style=\"border:0;margin:0;padding-right:10px;\">" |
||||
. $pour |
||||
. "%</td><td style=\"border:0;margin:0;padding:0;\"><div style=\"background" |
||||
. ":transparent url(" |
||||
. $imagesPath |
||||
. "mini-jauge_fond.png) no-repeat scroll 0;height:12px;padding:0 0 0 2px;width:55px;\"><div style=\"" |
||||
. "background:transparent url(" |
||||
. $imagesPath |
||||
. "mini-jauge_gris.png) no-repeat scroll 0;height:12px;width:" |
||||
. $pour/2 |
||||
. "px;\"></div></div>" |
||||
. $finretour; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Method for display the PomprseuilmankBar (% de plagiat) |
||||
* |
||||
* @param $percentagePumping |
||||
* @param $weakThreshold |
||||
* @param $highThreshold |
||||
* @param $imagesPath |
||||
* @param $text : array includes the extract from the text |
||||
* @return unknown_type |
||||
*/ |
||||
function getPomprankBarv31($pourcentagePompage, $weakThreshold, $highThreshold, $chemin_images='',$texte='') { |
||||
|
||||
$pourcentagePompage = round($pourcentagePompage); |
||||
$pour = round((50*$pourcentagePompage)/100); |
||||
$return = ""; |
||||
$couleur = ""; |
||||
if($pourcentagePompage < $weakThreshold) { |
||||
$couleur = "vert"; |
||||
} else if($pourcentagePompage >= $weakThreshold && $pourcentagePompage < $highThreshold) { |
||||
$couleur = "orange"; |
||||
} else { |
||||
$couleur = "rouge"; |
||||
} |
||||
$return .= "<div style='float:left;margin-right:2px;'><img src='" |
||||
. $chemin_images."mini-drapeau_$couleur.png' title='" |
||||
. $texte['result'] |
||||
. "' alt='faible' width='15' height='15' /></div>"; |
||||
$return .= "<div style='float:left; margin-right:5px;width:45px;text-align:right;'>" |
||||
. $pourcentagePompage |
||||
. " %</div>"; |
||||
$return .= "<div style='float:left;background:transparent url(" |
||||
. $chemin_images |
||||
. "mini-jauge_fond.png) no-repeat scroll 0;height:12px;margin-top:5px;padding:0 0 0 2px;width:55px;'>"; |
||||
$return .= "<div style='float:left;background:transparent url(" |
||||
. $chemin_images |
||||
. "mini-jauge_" |
||||
. $couleur |
||||
. ".png) no-repeat scroll 0;height:12px;width:" |
||||
. $pour |
||||
. "px'></div></div>"; |
||||
|
||||
return $return; |
||||
} |
||||
/* |
||||
* Method for validation of hash |
||||
* @param $hash |
||||
* @return bool |
||||
* |
||||
*/ |
||||
function isMd5($hash) |
||||
{ |
||||
if(preg_match('`^[a-f0-9]{32}$`', $hash)) { |
||||
return true; |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
/* |
||||
* Method for identify Internet media type |
||||
* @param $filename |
||||
*/ |
||||
function typeMime($filename) |
||||
{ |
||||
if (preg_match("@Opera(/| )([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats)){ |
||||
$navigateur = "Opera"; |
||||
} elseif (preg_match("@MSIE ([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats)){ |
||||
$navigateur = "Internet Explorer"; |
||||
} else { |
||||
$navigateur = "Mozilla"; |
||||
$mime = parse_ini_file("mime.ini"); |
||||
$extension = substr($filename, strrpos($filename, ".")+1); |
||||
} |
||||
if(array_key_exists($extension, $mime)) { |
||||
$type = $mime[$extension]; |
||||
} else { |
||||
$type = ($navigateur!="Mozilla") ? 'application/octetstream' : 'application/octet-stream'; |
||||
} |
||||
return $type; |
||||
} |
||||
?> |
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,121 @@ |
||||
<?php |
||||
require ('../../inc/global.inc.php'); |
||||
include('config.php'); |
||||
include('compilatio.class.php'); |
||||
|
||||
if (isset($_GET['workid'])) { |
||||
$compTable = Database::get_course_table(TABLE_PLAGIARISM); |
||||
$workIdList = $_GET['workid']; // list of workid separate by the : |
||||
$result = ""; |
||||
// $tabWorkId = split("a", $workIdList); |
||||
$tabWorkId = explode("a", $workIdList); |
||||
for ($i=0; $i < count($tabWorkId); $i++) { |
||||
if (is_numeric($tabWorkId[$i])) { |
||||
$result .= giveWorkIdState($tabWorkId[$i]); |
||||
} |
||||
} |
||||
echo $result; |
||||
} |
||||
/** |
||||
* @param $workId |
||||
* @return string |
||||
*/ |
||||
function giveWorkIdState($workId) { |
||||
global $compilatioParameter; |
||||
global $compTable; |
||||
$compilatio = new compilatio( |
||||
$compilatioParameter['key'], |
||||
$compilatioParameter['$urlsoap'], |
||||
$compilatioParameter['proxy_host'], |
||||
$compilatioParameter['proxy_port'] |
||||
); |
||||
$text = ""; |
||||
$result = ""; |
||||
$compilatioImgFolder = api_get_path(WEB_CODE_PATH)."plagiarism/compilatio/img/"; |
||||
$compilatioWebFolder = api_get_path(WEB_CODE_PATH)."plagiarism/compilatio/"; |
||||
$courseId = api_get_course_int_id(); |
||||
$compilatioQuery = "SELECT compilatio_id |
||||
FROM $compTable |
||||
where id_doc = $workId |
||||
AND c_id = $courseId"; |
||||
$compiSqlResult = Database::query($compilatioQuery); |
||||
$compi = Database::fetch_object($compiSqlResult); |
||||
if (isset($compi->compilatio_id)) { |
||||
$actionCompilatio = ""; |
||||
if(isMd5($compi->compilatio_id)) { |
||||
// if compilatio_id is a hash md5, we call the function of the compilatio's webservice who return the document's status |
||||
|
||||
$soapRes = $compilatio->getDoc($compi->compilatio_id); |
||||
$status = ''; |
||||
if(isset($soapRes->documentStatus)) { |
||||
$status = $soapRes->documentStatus->status; |
||||
} |
||||
} else { |
||||
// if the compilatio's hash is not a valide hash md5, we return à specific status (cf : IsInCompilatio() ) |
||||
$status="NOT_IN_COMPILATIO"; |
||||
$actionCompilatio = "<div style='font-style:italic'>" |
||||
. get_lang('compilatioDocumentTextNotImage') |
||||
. "<br/>" |
||||
. get_lang('compilatioDocumentNotCorrupt') |
||||
. "</div>"; |
||||
} |
||||
|
||||
if ($status == "ANALYSE_COMPLETE") { |
||||
$urlRapport = $compilatio->getReportUrl($compi->compilatio_id); |
||||
$actionCompilatio .= getPomprankBarv31( |
||||
$soapRes->documentStatus->indice, |
||||
10 , |
||||
35, |
||||
$compilatioImgFolder, |
||||
$text |
||||
) |
||||
. "<br/><a href='" |
||||
. $urlRapport |
||||
. "' target='_blank'>" |
||||
. get_lang('compilatioSeeReport') |
||||
. "</a>"; |
||||
} elseif ($status == "ANALYSE_PROCESSING") { |
||||
$actionCompilatio .= "<div style='font-weight:bold;text-align:left'>" |
||||
. get_lang('compilatioAnalysisInProgress') |
||||
. "</div>"; |
||||
$actionCompilatio .= "<div style='font-size:80%;font-style:italic;margin-bottom:5px;'>" |
||||
. get_lang('compilatioAnalysisPercentage') |
||||
. "</div>"; |
||||
$text['analysisinqueue'] = get_lang('compilatioWaitingAnalysis'); |
||||
$text['analysisinfinalization'] = get_lang('compilatioAnalysisEnding'); |
||||
$text['refresh'] = get_lang('Refresh'); |
||||
$actionCompilatio .= getProgressionAnalyseDocv31( |
||||
$status, |
||||
$soapRes->documentStatus->progression, |
||||
$compilatioImgFolder, |
||||
$text |
||||
); |
||||
} |
||||
elseif ($status == "ANALYSE_IN_QUEUE") { |
||||
$actionCompilatio.="<img src='" |
||||
. $compilatioImgFolder |
||||
. "/ajax-loader2.gif' style='margin-right:10px;' />" |
||||
. get_lang('compilatioAwaitingAnalysis'); |
||||
} elseif ($status == "BAD_FILETYPE") { |
||||
$actionCompilatio.= "<div style='font-style:italic'>" |
||||
. get_lang('compilatioFileisnotsupported') |
||||
. "<br/>" |
||||
. get_lang('compilatioProtectedPdfVerification') |
||||
. "</div>"; |
||||
} elseif ($status == "BAD_FILESIZE") { |
||||
$actionCompilatio.= "<div style='font-style:italic'>" |
||||
. get_lang('compilatioTooHeavyDocument') |
||||
. "</div>"; |
||||
} elseif ($status != "NOT_IN_COMPILATIO") { |
||||
$actionCompilatio.= "<div style='font-style:italic'>" |
||||
. get_lang('compilatioMomentarilyUnavailableResult') |
||||
. " : [ " |
||||
. $status |
||||
. "].</div>"; |
||||
} |
||||
} |
||||
$result = $workId . "|" . $actionCompilatio . "|" . $status . "|"; |
||||
|
||||
return $result; |
||||
} |
||||
?> |
After Width: | Height: | Size: 778 B |
@ -0,0 +1,31 @@ |
||||
<?php |
||||
|
||||
require_once(api_get_path(LIBRARY_PATH) . "api.lib.php"); |
||||
|
||||
/*Compilatio's key*/ |
||||
$compilatioParameter['key'] = api_get_setting("compilatioParamKey"); |
||||
$compilatioParameter['version'] = "1.2"; |
||||
|
||||
/* Url from soap Compilatio server */ |
||||
/* You can choice the SSL version if you want */ |
||||
$compilatioParameter['$urlsoap'] = api_get_setting("compilatioParamURLSoap"); |
||||
|
||||
/* Parameter form your server's proxy (for call SOAP), don't enter it if you dont have one */ |
||||
|
||||
$compilatioParameter['proxy_host'] = ""; |
||||
$compilatioParameter['proxy_port'] = ""; |
||||
|
||||
/* Method to data transmission */ |
||||
/* Nothing by default, the data transmission is done by SOAP */ |
||||
/* Wget: the Compilatio's server download the file for the analysis */ |
||||
$compilatioParameter['mode_transport'] = ""; |
||||
/* if the selected data transmission method is wget, you can set up a special url acces */ |
||||
$compilatioParameter['wget_uri'] = ""; |
||||
|
||||
/* If the selected data transmission method is wget, you can specify a login/password acces to the directory */ |
||||
$compilatioParameter['wget_login'] = ""; |
||||
$compilatioParameter['wget_password'] = ""; |
||||
|
||||
/*Document's maximum size*/ |
||||
$compilatioParameter['max_filesize'] = 10000000; // 10Mo |
||||
|
@ -0,0 +1,59 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* This file is responsible for passing requested documents to the browser. |
||||
* Html files are parsed to fix a few problems with URLs, |
||||
* but this code will hopefully be replaced soon by an Apache URL |
||||
* rewrite mechanism. |
||||
* |
||||
* @package chamilo.work |
||||
*/ |
||||
|
||||
session_cache_limiter('public'); |
||||
require_once '../inc/global.inc.php'; |
||||
$current_course_tool = TOOL_STUDENTPUBLICATION; |
||||
|
||||
$this_section = SECTION_COURSES; |
||||
|
||||
// IMPORTANT to avoid caching of documents |
||||
header('Expires: Wed, 01 Jan 1990 00:00:00 GMT'); |
||||
header('Cache-Control: public'); |
||||
header('Pragma: no-cache'); |
||||
|
||||
//protection |
||||
api_protect_course_script(true); |
||||
|
||||
$id = intval($_GET['id']); |
||||
|
||||
$course_info = api_get_course_info(); |
||||
|
||||
if (empty($course_info)) { |
||||
api_not_allowed(true); |
||||
} |
||||
|
||||
$tbl_student_publication = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
||||
|
||||
if (!empty($course_info['real_id'])) { |
||||
$sql = 'SELECT * FROM '.$tbl_student_publication.' WHERE c_id = '.$course_info['real_id'].' AND id = "'.$id.'"'; |
||||
$result = Database::query($sql); |
||||
if ($result && Database::num_rows($result)) { |
||||
$row = Database::fetch_array($result, 'ASSOC'); |
||||
$full_file_name = api_get_path(SYS_COURSE_PATH).api_get_course_path().'/'.$row['url']; |
||||
|
||||
$item_info = api_get_item_property_info(api_get_course_int_id(), 'work', $row['id']); |
||||
if (empty($item_info)) { |
||||
exit; |
||||
} |
||||
if ($course_info['show_score'] == 0 || $item_info['visibility'] == 1 && $row['accepted'] == 1 && ($row['user_id'] == api_get_user_id() || api_is_allowed_to_edit())) { |
||||
$title = str_replace(' ', '_', $row['title']); |
||||
event_download($title); |
||||
if (Security::check_abs_path($full_file_name, api_get_path(SYS_COURSE_PATH).api_get_course_path().'/')) { |
||||
DocumentManager::file_send_for_download($full_file_name, true, $title); |
||||
} |
||||
} else { |
||||
api_not_allowed(); |
||||
} |
||||
} |
||||
} |
||||
exit; |
@ -0,0 +1,337 @@ |
||||
<?php |
||||
|
||||
/* Dokeos and compilatio's includes */ |
||||
require ('../../inc/global.inc.php'); |
||||
require_once ("../../work/work.lib.php"); |
||||
require_once('../../inc/lib/document.lib.php'); |
||||
require_once('../../inc/lib/fileDisplay.lib.php'); |
||||
require_once ('compilatio.class.php'); |
||||
require_once ('config.php'); |
||||
|
||||
/*parameters SOAP use*/ |
||||
ini_set('soap.wsdl_cache_enabled', 0); |
||||
ini_set('default_socket_timeout', '1000'); |
||||
$coursId = api_get_course_int_id(); |
||||
|
||||
/* Variables */ |
||||
$typeMessage = 0; |
||||
$errorCodeNotValid = get_lang('compilatioError') . get_lang('documentCodeNotValid'); |
||||
$errorLoadError = get_lang('compilatioLoadError') . get_lang('compilatioContactAdmin'); |
||||
|
||||
/*message to the user for be patient*/ |
||||
$msgWait = get_lang('PleaseWaitThisCouldTakeAWhile'); |
||||
|
||||
/* if we have to upload severals documents*/ |
||||
if(isset($_REQUEST['type']) && $_REQUEST['type']=="multi"){ |
||||
$docs = preg_split("/a/", $_REQUEST['doc']); |
||||
for ($k=0 ; $k < sizeof($docs)-1 ; $k++) { |
||||
/* We have to modify the timeout server for send the heavy files */ |
||||
set_time_limit(600); |
||||
$documentId = 0; |
||||
if (intval($docs[$k])) { |
||||
$documentId = $docs[$k]; |
||||
} |
||||
/** |
||||
* File problem in the url field that no longer have the file extension, |
||||
* Compilatio's server refuse the files |
||||
* we renames in the FS and the database with the file extension that is found in the title field |
||||
*/ |
||||
compilatioUpdateWorkDocument($documentId, $coursId); |
||||
|
||||
$compTable = Database::get_course_table(TABLE_PLAGIARISM); |
||||
$compilatioQuery = "SELECT compilatio_id FROM " |
||||
. $compTable |
||||
. " WHERE id_doc=" |
||||
. $documentId |
||||
. " AND c_id=" |
||||
. $coursId; |
||||
$compiSqlResult = Database::query($compilatioQuery); |
||||
$compi = Database::fetch_object($compiSqlResult); |
||||
if (isset($compi->compilatio_id)) { |
||||
/*The document is already in Compilatio, we do nothing*/ |
||||
|
||||
} else { |
||||
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
||||
$query = "SELECT * FROM " |
||||
. $workTable |
||||
. " WHERE id='" |
||||
. $documentId |
||||
. "' AND c_id=" |
||||
. $coursId; |
||||
$sqlResult = Database::query($query); |
||||
$doc = Database::fetch_object($sqlResult); |
||||
if ($doc) { |
||||
/*We load the document in compilatio through the webservice */ |
||||
$currentCourseRepositoryWeb = api_get_path(WEB_COURSE_PATH) . $_course["path"] . "/"; |
||||
$WrkUrl = $currentCourseRepositoryWeb . $doc->url; |
||||
$LocalWrkUrl = api_get_path(SYS_COURSE_PATH) . $_course["path"] . "/" . $doc->url; |
||||
$LocalWrkTitle = $doc->title; |
||||
$mime = typeMime($LocalWrkTitle); |
||||
$compilatio = new compilatio( |
||||
$compilatioParameter['key'], |
||||
$compilatioParameter['$urlsoap'], |
||||
$compilatioParameter['proxy_host'], |
||||
$compilatioParameter['proxy_port']); |
||||
|
||||
if ($compilatioParameter['mode_transport'] == 'wget') { |
||||
/*Compilatio's server recover tjre file throught wget like this: |
||||
username:password@http://somedomain.com/reg/remotefilename.tar.gz */ |
||||
if (strlen($compilatioParameter['wget_uri']) > 2) { |
||||
$filename = ereg_replace("/$", |
||||
"", |
||||
$compilatioParameter['wget_uri']) |
||||
. "/" |
||||
. $_course["path"] |
||||
. "/" |
||||
. $doc->url; |
||||
} else { |
||||
$filename = $WrkUrl; |
||||
} |
||||
if (strlen($compilatioParameter['wget_login']) > 2) { |
||||
$filename = $compilatioParameter['wget_login'] |
||||
. ":" |
||||
. $compilatioParameter['wget_password'] |
||||
. "@" |
||||
. $filename; |
||||
} |
||||
$mime = "text/plain"; |
||||
$compilatioId = $compilatio->sendDoc($doc->title, '', $filename, $mime, 'get_url'); |
||||
} else { |
||||
/* we use strictly the SOAP for the data trasmission */ |
||||
$pieces = explode("/", $doc->url); |
||||
$nbPieces = count($pieces); |
||||
$filename = $pieces[$nbPieces - 1]; |
||||
$compilatioId = $compilatio->sendDoc($doc->title, |
||||
'', |
||||
$filename, |
||||
$mime, |
||||
file_get_contents($LocalWrkUrl) |
||||
); |
||||
} |
||||
/*we associate in the database the document chamilo to the document compilatio*/ |
||||
$compTable = Database::get_course_table(TABLE_PLAGIARISM); |
||||
$sql4 = "INSERT INTO " |
||||
. $compTable |
||||
. " (c_id, id_doc, compilatio_id) VALUES (" |
||||
. $coursId |
||||
. ", '" |
||||
. $doc->id |
||||
. "','" |
||||
. $compilatioId |
||||
. "')"; |
||||
/*we verify that the docmuent's id is an hash_md5*/ |
||||
|
||||
if (isMd5($compilatioId)) { |
||||
/*We insert the document into the DB*/ |
||||
Database::query($sql4); |
||||
} else { |
||||
$typeMessage = 1; |
||||
} |
||||
if (isMd5($compilatioId)) { |
||||
/*the uploading is good, we return an compilatio's id_doc*/ |
||||
$soapRes = $compilatio->startAnalyse($compilatioId); |
||||
} else { |
||||
$typeMessage = 2; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
if ($typeMessage == 1) { |
||||
$message = $errorCodeNotValid; |
||||
Display::display_error_message($message); |
||||
}elseif($typeMessage == 2){ |
||||
$message = $errorLoadError; |
||||
Display::display_error_message($message); |
||||
}else{ |
||||
$message = $msgWait; |
||||
Display::display_confirmation_message($message); |
||||
} |
||||
|
||||
} else { |
||||
//non multiple |
||||
|
||||
$documentId = $_GET['doc']; |
||||
compilatioUpdateWorkDocument($documentId, $coursId); |
||||
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
||||
$query = "SELECT * FROM " |
||||
. $workTable |
||||
. " WHERE id='" |
||||
. $documentId |
||||
. "' AND c_id=" |
||||
. $coursId; |
||||
$sqlResult = Database::query($query); |
||||
$doc = Database::fetch_object($sqlResult); |
||||
$currentCourseRepositoryWeb = api_get_path(WEB_COURSE_PATH) . $_course["path"] . "/"; |
||||
$WrkUrl = $currentCourseRepositoryWeb . $doc->url; |
||||
$WrkTitle = $doc->title; |
||||
$LocalWrkUrl = api_get_path(SYS_COURSE_PATH).$_course["path"] . "/" . $doc->url; |
||||
$mime = typeMime($WrkTitle); |
||||
$compilatio = new compilatio( |
||||
$compilatioParameter['key'], |
||||
$compilatioParameter['$urlsoap'], |
||||
$compilatioParameter['proxy_host'], |
||||
$compilatioParameter['proxy_port']); |
||||
if ($compilatioParameter['mode_transport'] == 'wget') { |
||||
|
||||
if (strlen($compilatioParameter['wget_uri']) > 2) { |
||||
$filename = ereg_replace("/$", |
||||
"", |
||||
$compilatioParameter['wget_uri']) |
||||
. "/" |
||||
. $_course["path"] |
||||
. "/" |
||||
. $doc->title; |
||||
} else { |
||||
$filename = $WrkUrl; |
||||
} |
||||
if (strlen($compilatioParameter['wget_login']) > 2) { |
||||
$filename = $compilatioParameter['wget_login'] |
||||
. ":" |
||||
. $compilatioParameter['wget_password'] |
||||
. "@" |
||||
. $filename; |
||||
} |
||||
$mime = "text/plain"; |
||||
$compilatioId = $compilatio->sendDoc($doc->title, '', $filename, $mime, 'get_url'); |
||||
} else { |
||||
$pieces = explode("/", $doc->url); |
||||
$nbPieces = count($pieces); |
||||
$filename = $pieces[$nbPieces-1]; |
||||
$compilatioId = $compilatio->sendDoc($doc->title, '', $filename, $mime, file_get_contents($LocalWrkUrl)); |
||||
} |
||||
$compTable = Database::get_course_table(TABLE_PLAGIARISM); |
||||
|
||||
$sql4 = "INSERT INTO " |
||||
. $compTable |
||||
. "(c_id, id_doc, compilatio_id) VALUES (" |
||||
. $coursId |
||||
. ", '" |
||||
. $doc->id |
||||
. "','" |
||||
. $compilatioId |
||||
. "')"; |
||||
if (isMd5($compilatioId)) { |
||||
Database::query($sql4); |
||||
} else { |
||||
$sql5 = "INSERT INTO " |
||||
. $compTable |
||||
. " (c_id, id_doc,compilatio_id) VALUES (" |
||||
. $coursId |
||||
. ", '" |
||||
. $doc->id |
||||
."','error')"; |
||||
Database::query($sql5); |
||||
|
||||
} |
||||
if (isMd5($compilatioId)) { |
||||
$soapRes = $compilatio->startAnalyse($compilatioId); |
||||
} else { |
||||
$typeMessage = 2; |
||||
} |
||||
|
||||
if ($typeMessage == 1) { |
||||
$message = $errorCodeNotValid; |
||||
Display::display_error_message($message); |
||||
}elseif($typeMessage == 2){ |
||||
$message = $errorLoadError; |
||||
Display::display_error_message($message); |
||||
}else{ |
||||
$message = $msgWait; |
||||
Display::display_confirmation_message($message); |
||||
} |
||||
|
||||
} |
||||
|
||||
/** |
||||
* function for show and recovery the extension from a file |
||||
* |
||||
* @param $docId |
||||
* @param $coursId |
||||
* @return string |
||||
*/ |
||||
function workDocExtension($docId, $coursId) { |
||||
$dbTitle = getWorkTitle($docId, $coursId); |
||||
$res = getFileExtension($dbTitle); |
||||
return $res; |
||||
} |
||||
|
||||
function getFileExtension($filename) { |
||||
$res = ""; |
||||
preg_match("/.*\.([^.]+)/", $filename, $dbTitle); |
||||
if (count($dbTitle) > 1) { |
||||
$res = $dbTitle[1]; |
||||
} |
||||
return $res; |
||||
} |
||||
|
||||
function getWorkTitle($docId, $coursId) { |
||||
$res = ""; |
||||
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
||||
$sql = "SELECT title FROM " . $workTable . " WHERE c_id=" . $coursId . " AND id=" . $docId; |
||||
$res = Database::query($sql); |
||||
if (Database::num_rows($res) > 0) { |
||||
$data = Database::fetch_array($res); |
||||
$res = $data['title']; |
||||
} |
||||
return $res; |
||||
} |
||||
|
||||
|
||||
function getFilename($txt) { |
||||
$res = $txt; |
||||
preg_match("|.*/([^/]+)|", $txt, $urlList); |
||||
if (count($urlList) > 0) { |
||||
$res = $urlList[1]; |
||||
} |
||||
return $res; |
||||
} |
||||
|
||||
function getWorkFolder($txt) { |
||||
$res = ""; |
||||
preg_match("|(.*/)[^/]+|", $txt, $urlList); |
||||
if (count($urlList) > 0) { |
||||
$res = $urlList[1]; |
||||
} |
||||
return $res; |
||||
} |
||||
|
||||
function getShortFilename($txt) { |
||||
$res = $txt; |
||||
if (strlen($txt) > 10) { |
||||
$res = substr($txt, 0, 10); |
||||
} |
||||
return $res; |
||||
} |
||||
|
||||
function compilatioUpdateWorkDocument($docId, $coursId) { |
||||
global $_course; |
||||
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
||||
$extensionFile = workDocExtension($docId, $coursId); |
||||
$urlFile = get_work_path($docId); |
||||
$filename = getFilename($urlFile); |
||||
$work_folder = getWorkFolder($urlFile); |
||||
$urlFile_ext = getFileExtension($urlFile); |
||||
$coursePath = api_get_path(SYS_COURSE_PATH) . $_course["path"] . "/"; |
||||
$workTitle = getWorkTitle($docId, $coursId); |
||||
|
||||
if ($extensionFile != "" && $urlFile_ext == "") { |
||||
/*rename the files in the FS whit the extension*/ |
||||
$shortFilename = $filename; |
||||
$cleanWorkTitle = api_replace_dangerous_char($workTitle); |
||||
$newestFilename = $shortFilename . "_" . $cleanWorkTitle; |
||||
rename($coursePath . $urlFile, $coursePath . $work_folder . $newestFilename); |
||||
/*rename the db's input with the extension*/ |
||||
$sql = "UPDATE " |
||||
. $workTable |
||||
. " SET url='" |
||||
. $work_folder |
||||
. $newestFilename |
||||
. "' WHERE c_id=" |
||||
. $coursId |
||||
. " AND id=" |
||||
. $docId; |
||||
$res = Database::query($sql); |
||||
} |
||||
} |
||||
?> |
Loading…
Reference in new issue