137 lines
2.9 KiB
PHP
137 lines
2.9 KiB
PHP
<?php
|
|
/*
|
|
Author: Riccardo Di Dato
|
|
Creation Date: 01/lug/2015
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* @author Riccardo Di Dato
|
|
*/
|
|
abstract class RAPI_RequestDetails extends RAPI_MessageDetails{
|
|
/**
|
|
* Stringa md5 usata come checksum.
|
|
* L'attributo è valorizzato solo per i checksumFake
|
|
* @var string
|
|
*/
|
|
private $md5 = null;
|
|
|
|
/*
|
|
* Checksum e checksumFake
|
|
*/
|
|
|
|
/**
|
|
* Restituisce il checksum (Indipendentemente che si tratti o meno di un checksumFake).
|
|
* @return string
|
|
*/
|
|
public function getChecksum(){
|
|
$rval = $this->md5;
|
|
if (is_null($rval)){
|
|
$rval = md5(strval($this));
|
|
}
|
|
return $rval;
|
|
}
|
|
|
|
/**
|
|
* Forza il valore della variabile interna contenente il checkusm.
|
|
* ATTENZIONE! I non checksumFake non dovrebbero avere questo attributo valorizzato
|
|
* @param string $md5
|
|
*/
|
|
public function forceChecksum($md5){
|
|
$this->md5 = $md5;
|
|
}
|
|
|
|
/**
|
|
* Genera la versione checksumFake di un rapi request details.
|
|
* @return RAPI_RequestDetails
|
|
*/
|
|
public function generateChecksumFake(){
|
|
$encObj = parent::generateEncryptionObject();
|
|
|
|
$tmp = new stdClass();
|
|
if (sizeof(static::getArgumentList())>0){
|
|
foreach (static::getArgumentList() as $arg){
|
|
$tmp->$arg = "";
|
|
}
|
|
}
|
|
$obj = new static($tmp,$encObj->attachments);
|
|
$obj->md5 = $this->getChecksum();
|
|
|
|
return $obj;
|
|
}
|
|
|
|
/**
|
|
* Restituisce true se si tratta di un checksum fake.
|
|
* @return boolean
|
|
*/
|
|
public function isChecksumFake(){
|
|
return !is_null($this->md5);
|
|
}
|
|
|
|
/*
|
|
* Metodi propri della classe
|
|
*/
|
|
/**
|
|
* Valuta l'uguaglianza delle request details
|
|
* NOTA: Funziona anche se un requestDetails è un checksumFake, ma in tal caso confronta solo i due checksum.
|
|
* @param RAPI_Request $req
|
|
* @return boolean
|
|
*/
|
|
public function isEqual(RAPI_RequestDetails $req){
|
|
$rval = ( strcmp($this->getChecksum(), $req->getChecksum())==0 ) ;
|
|
if (!$this->isChecksumFake() && !$req->isChecksumFake()){
|
|
$rval = strcmp($this, $req);
|
|
}
|
|
return $rval;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @see RAPI_MessageDetails::generateEncryptionObject()
|
|
*/
|
|
public function generateEncryptionObject(){
|
|
$tmp = parent::generateEncryptionObject();
|
|
$tmp->operation = static::getOperationName();
|
|
if ($this->isChecksumFake()){
|
|
$tmp->md5 = $this->getChecksum();
|
|
}
|
|
return $tmp;
|
|
}
|
|
|
|
/*
|
|
* Factory
|
|
*/
|
|
/**
|
|
* Registra il details alla factory
|
|
*/
|
|
public static function registerToFactory(){
|
|
RAPI_RequestDetailsFactory::addToRegister(static::getOperationName(), get_called_class());
|
|
}
|
|
|
|
/*
|
|
* Metodi astratti
|
|
*/
|
|
/**
|
|
* Returns true if the operation requires an
|
|
* operationId (like for writes and deletion)
|
|
* @return bool
|
|
*/
|
|
public static abstract function usesOperationId();
|
|
|
|
/**
|
|
* Returns the name of the operation used by the request factory (NOT THE RAPI_Operation !!!!!)
|
|
* @return string
|
|
*/
|
|
public static abstract function getOperationName();
|
|
|
|
/**
|
|
* Returns the class name of the response details to use
|
|
* @return string
|
|
*/
|
|
public static abstract function getResponseDetailsClass();
|
|
|
|
}
|
|
|
|
|
|
?>
|