Add compilation code BT#15698

pull/2970/head
Julio Montoya 6 years ago
parent 51d292bf3c
commit f7350b6a66
  1. 81
      main/plagiarism/compilatio/compiladmin.php
  2. 359
      main/plagiarism/compilatio/compilatio.class.php
  3. BIN
      main/plagiarism/compilatio/compilatio.gif
  4. 121
      main/plagiarism/compilatio/compilatio_ajax.php
  5. BIN
      main/plagiarism/compilatio/compilatio_na.gif
  6. 31
      main/plagiarism/compilatio/config.php
  7. 59
      main/plagiarism/compilatio/download.php
  8. 337
      main/plagiarism/compilatio/upload.php

@ -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;'>&nbsp;</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;
}
?>

Binary file not shown.

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

Binary file not shown.

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…
Cancel
Save