Merged in darojas/processmaker (pull request #241)

Se cambia url para download y delete se actualiza BEHAT en FILESMANAGER
This commit is contained in:
erik ao
2014-02-26 12:56:05 -04:00
4 changed files with 117 additions and 131 deletions

View File

@@ -42,55 +42,52 @@ Feature: Files Manager Resources
And store "prf_uid" in session array as variable "prf_uid<i>"
Examples:
| test_description | file_name | path | content | http_code | type |
| into public folder | testbehat.txt | public/ | test | 200 | object |
| into maintemplates folder | testbehat.txt | templates/ | test | 200 | object |
| into public subfolder | testbehat.txt | public/test_folder | test | 200 | object |
| into public subfolder | testbehat.txt | templates/test_folder | test | 200 | object |
| test_description | file_name | path | content | http_code | type | i |
| into public folder | testbehat.txt | public/ | test | 200 | object | 0 |
| into mailtemplates folder | testbehat.txt | templates/ | test | 200 | object | 1 |
| into public subfolder | testbehat.txt | public/test_folder | test | 200 | object | 2 |
| into mailtemplates subfolder | testbehat.txt | templates/test_folder | test | 200 | object | 3 |
Scenario Outline: Post files
Given PUT this data:
"""
{
"prf_filename": "<file_name>",
"prf_content": "<content>"
}
"""
And I request "project/1265557095225ff5c688f46031700471/file-manager?path=<path>"
And that I want to update a resource with the key "prf_uid" stored in session array as variable "prf_uid<i>"
And I request "project/1265557095225ff5c688f46031700471/file-manager"
Then the response status code should be <http_code>
And the response charset is "UTF-8"
And the content type is "application/json"
And the type is "<type>"
Examples:
| test_description | file_name | path | content | http_code | type |
| put into public folder | testbehat.txt | public/ | put test | 200 | object |
| put into maintemplates folder | testbehat.txt | templates/ | put test | 200 | object |
| put into public subfolder | testbehat.txt | public/test_folder | put test | 200 | object |
| put into public subfolder | testbehat.txt | templates/test_folder | put test | 200 | object |
| test_description | content | http_code | type | i |
| put into public folder | put test | 200 | object | 0 |
| put into mailtemplates folder | put test | 200 | object | 1 |
| put into public subfolder | put test | 200 | object | 2 |
| put into mailtemplates subfolder | put test | 200 | object | 3 |
Scenario Outline: Delete file
Given that I want to delete a "<path>"
And I request "project/1265557095225ff5c688f46031700471/file-manager?path=<path>"
And the content type is "application/json"
Given that I want to delete a resource with the key "prf_uid" stored in session array as variable "prf_uid<i>"
And I request "project/1265557095225ff5c688f46031700471/file-manager"
Then the response status code should be 200
And the response charset is "UTF-8"
Examples:
| test_description | path |
| delete public folder | public/testbehat.txt |
| delete maintemplates folder | templates/testbehat.txt |
| delete public subfolder | public/test_folder/testbehat.txt |
| delete public subfolder | templates/test_folder/testbehat.txt |
| test_description | i |
| delete public folder | 0 |
| delete mailtemplates folder | 1 |
| delete public subfolder | 2 |
| delete mailtemplates subfolder | 3 |
#Para que funcione este test, debe existir el archivo que se quiere subir
Scenario: Post files
Given POST I want to upload the file "/home/daniel/test.txt" to path "public". Url to create prf_uid "project/1265557095225ff5c688f46031700471/file-manager" and updload "project/1265557095225ff5c688f46031700471/file-manager"
Given POST I want to upload the file "/home/daniel/test.txt" to path "templates". Url "project/1265557095225ff5c688f46031700471/file-manager"
Scenario: Delete file
Given that I want to delete a "public/test.txt"
And I request "project/1265557095225ff5c688f46031700471/file-manager?path=public/test.txt"
And the content type is "application/json"
Given that I want to delete a resource with the key "prf_uid" stored in session array as variable "prf_uid"
And I request "project/1265557095225ff5c688f46031700471/file-manager"
Then the response status code should be 200
And the response charset is "UTF-8"

View File

@@ -1312,14 +1312,13 @@ class RestContext extends BehatContext
$this->iRequest($url);
}
//*********** POST - UPLOAD FILE MANAGER
//UPLOAD FILE MANAGER
/**
* @Given /^POST I want to upload the file "([^"]*)" to path "([^"]*)". Url to create prf_uid "([^"]*)" and updload "([^"]*)"$/
* @Given /^POST I want to upload the file "([^"]*)" to path "([^"]*)". Url "([^"]*)"$/
*/
public function postIWantToUploadTheFileToPathPublicUrlToCreatePrfUidAndUpdload($prfFile, $prfPath, $postUrl, $url)
public function postIWantToUploadTheFileToPathPublicUrl($prfFile, $prfPath, $url)
{
$baseUrl = $this->getParameter('base_url');
$postUrl = $baseUrl.$postUrl;
$url = $baseUrl.$url;
$accesstoken = $this->getParameter('access_token');
$headr = array();
@@ -1327,7 +1326,7 @@ class RestContext extends BehatContext
$path = rtrim($prfPath, '/') . '/';
$sfile = end(explode("/",$prfFile));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$postUrl);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('prf_filename'=>$sfile, "prf_path" => $path, "prf_content" => null));
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
@@ -1340,7 +1339,7 @@ class RestContext extends BehatContext
} else {
var_dump($postResult["error"]);
}
$url = $url.$prfUid."/upload";
$url = $url.'/'.$prfUid."/upload";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);
@@ -1349,9 +1348,15 @@ class RestContext extends BehatContext
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$postResult = curl_exec($ch);
curl_close($ch);
//se guarda el prf_uid en una variable
$varName = 'prf_uid';
$sessionData = new StdClass();
$sessionData->$varName = $prfUid;
file_put_contents("session.data", json_encode($sessionData));
}
//*********** POST - UPLOAD IMAGE
//UPLOAD IMAGE
/**
* @Given /^POST I want to upload the image "([^"]*)" to user "([^"]*)". Url "([^"]*)"$/
*/

View File

@@ -45,6 +45,7 @@ class FilesManager
{
try {
$sMainDirectory = current(explode("/", $path));
$path = str_replace('/', '', $path);
if (strstr($path,'/')) {
$sSubDirectory = substr($path, strpos($path, "/")+1). PATH_SEP ;
} else {
@@ -104,7 +105,14 @@ class FilesManager
'prf_content' => $fcontent);
} else {
$aTheFiles[] = array('prf_uid' => $oProcessFiles->getPrfUid(),
$extention = end(explode(".", $aFile['FILE']));
if ($extention == 'docx' || $extention == 'doc' || $extention == 'html' || $extention == 'php' || $extention == 'jsp' ||
$extention == 'xlsx' || $extention == 'xls' || $extention == 'js' || $extention == 'css' || $extention == 'txt') {
$editable = 'true';
} else {
$editable = 'false';
}
$aTheFiles[] = array('prf_uid' => '',
'prf_filename' => $aFile['FILE'],
'usr_uid' => '',
'prf_update_usr_uid' => '',
@@ -243,6 +251,9 @@ class FilesManager
} else {
throw new \Exception(\G::LoadTranslation('ID_PMTABLE_UPLOADING_FILE_PROBLEM'));
}
$oProcessFile = array('prf_uid' => $prfUid);
var_dump($oProcessFile);
return $oProcessFile;
} catch (Exception $e) {
throw $e;
}
@@ -274,44 +285,41 @@ class FilesManager
* Return the Process Files Manager
*
* @param string $sProcessUID {@min 32} {@max 32}
* @param string $path
* @param string $userUID {@min 32} {@max 32}
* @param array $aData
* @param string $prfUid {@min 32} {@max 32}
*
* return array
*
* @access public
*/
public function updateProcessFilesManager($sProcessUID, $userUID, $aData, $path)
public function updateProcessFilesManager($sProcessUID, $userUID, $aData, $prfUid)
{
try {
$path = rtrim($path, '/') . '/';
$sMainDirectory = current(explode("/", $path));
if ($sMainDirectory != 'public' && $sMainDirectory != 'templates') {
throw (new \Exception( 'invalid value specified for `prf_path`. Expecting `templates/` or `public/`'));
$path = '';
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\ProcessFilesPeer::PRF_PATH);
$criteria->add(\ProcessFilesPeer::PRF_UID, $prfUid, \Criteria::EQUAL);
$rsCriteria = \ProcessFilesPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
while ($aRow = $rsCriteria->getRow()) {
$path = $aRow['PRF_PATH'];
$rsCriteria->next();
}
if (strstr($path,'/')) {
$sSubDirectory = substr($path, strpos($path, "/")+1) ;
if ($path == ''){
throw new \Exception('invalid value specified for `prf_uid`.');
}
$sFile = end(explode("/",$path));
$sPath = str_replace($sFile,'',$path);
$sSubDirectory = str_replace('/','',str_replace($sProcessUID,'',substr($sPath,(strpos($sPath, $sProcessUID)))));
$sMainDirectory = str_replace(substr($sPath, strpos($sPath, $sProcessUID)),'', $sPath);
if ($sMainDirectory == PATH_DATA_MAILTEMPLATES){
$sMainDirectory = 'mailTemplates';
} else {
$sSubDirectory = '';
$sMainDirectory = 'public';
}
switch ($sMainDirectory) {
case 'templates':
$sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . $sSubDirectory . $aData['prf_filename'];
$sEditable = false;
break;
case 'public':
$sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . $sSubDirectory . $aData['prf_filename'];
break;
default:
$sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . $aData['prf_filename'];
break;
}
$arrayFileUid = $this->getFileManagerUid($sDirectory);
if (!$arrayFileUid) {
throw (new \Exception( 'invalid value specified for `path`.'));
}
$extention = end(explode(".", $aData['prf_filename']));
$extention = end(explode(".", $sFile));
if ($extention == 'docx' || $extention == 'doc' || $extention == 'html' || $extention == 'php' || $extention == 'jsp' ||
$extention == 'xlsx' || $extention == 'xls' || $extention == 'js' || $extention == 'css' || $extention == 'txt') {
$sEditable = true;
@@ -321,17 +329,17 @@ class FilesManager
if ($sEditable == false) {
throw (new \Exception( 'Can`t edit. Make sure your file has an editable extension.'));
}
$fileUid = $arrayFileUid["PRF_UID"];
$oProcessFiles = \ProcessFilesPeer::retrieveByPK($fileUid);
$oProcessFiles = \ProcessFilesPeer::retrieveByPK($prfUid);
$sDate = date('Y-m-d H:i:s');
$oProcessFiles->setPrfUpdateUsrUid($userUID);
$oProcessFiles->setPrfUpdateDate($sDate);
$oProcessFiles->save();
$fp = fopen($sDirectory, 'w');
$fp = fopen($path, 'w');
$content = $aData['prf_content'];
fwrite($fp, $content);
fclose($fp);
$oProcessFile = array('prf_uid' => $oProcessFiles->getPrfUid(),
'prf_filename' => $sFile,
'usr_uid' => $oProcessFiles->getUsrUid(),
'prf_update_usr_uid' => $oProcessFiles->getPrfUpdateUsrUid(),
'prf_path' => $sMainDirectory.PATH_SEP.$sSubDirectory,
@@ -349,53 +357,41 @@ class FilesManager
/**
*
* @param string $sProcessUID {@min 32} {@max 32}
* @param string $path
* @param string $prfUid {@min 32} {@max 32}
*
*
* @access public
*/
public function deleteProcessFilesManager($sProcessUID, $path)
public function deleteProcessFilesManager($sProcessUID, $prfUid)
{
try {
$sMainDirectory = current(explode("/", $path));
if ($sMainDirectory != 'public' && $sMainDirectory != 'templates') {
throw (new \Exception( 'invalid value specified for `prf_path`. Expecting `templates/` or `public/`'));
$path = '';
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\ProcessFilesPeer::PRF_PATH);
$criteria->add(\ProcessFilesPeer::PRF_UID, $prfUid, \Criteria::EQUAL);
$rsCriteria = \ProcessFilesPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
while ($aRow = $rsCriteria->getRow()) {
$path = $aRow['PRF_PATH'];
$rsCriteria->next();
}
if ($sMainDirectory == 'templates') {
if ($path == ''){
throw new \Exception('invalid value specified for `prf_uid`.');
}
$sFile = end(explode("/",$path));
$sPath = str_replace($sFile,'',$path);
$sSubDirectory = str_replace('/','',str_replace($sProcessUID,'',substr($sPath,(strpos($sPath, $sProcessUID)))));
$sMainDirectory = str_replace(substr($sPath, strpos($sPath, $sProcessUID)),'', $sPath);
if ($sMainDirectory == PATH_DATA_MAILTEMPLATES){
$sMainDirectory = 'mailTemplates';
}
$sfile = end(explode("/",$path));
$sSubDirectorytemp = substr($path, strpos($path, "/")+1);
if (strstr($sSubDirectorytemp,'/')) {
$sSubDirectory = str_replace('/'.$sfile,"",$sSubDirectorytemp);
$sSubDirectoryCheck = str_replace($sfile,"",$sSubDirectorytemp);
} else {
$sSubDirectory = '';
$sSubDirectoryCheck = '';
}
switch ($sMainDirectory) {
case 'mailTemplates':
$sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . $sSubDirectoryCheck . $sfile;
$sEditable = false;
break;
case 'public':
$sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . $sSubDirectoryCheck . $sfile;
break;
default:
$sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . $sfile;
break;
}
$arrayTaskUid = $this->getFileManagerUid($sDirectory);
if (!$arrayTaskUid){
throw (new \Exception( 'invalid value specified for `path`.'));
$sMainDirectory = 'public';
}
$oProcessMap = new \processMap(new \DBConnection());
$oProcessMap->deleteFile($sProcessUID,
$sMainDirectory,
$sSubDirectory,
$sfile);
$oProcessMap->deleteFile($sProcessUID, $sMainDirectory, $sSubDirectory, $sFile);
$c = new \Criteria("workflow");
$c->add(\ProcessFilesPeer::PRF_PATH, $sDirectory, \Criteria::EQUAL);
$c->add(\ProcessFilesPeer::PRF_UID, $prfUid, \Criteria::EQUAL);
$rs = \ProcessFilesPeer::doDelete($c);
} catch (Exception $e) {
throw $e;
@@ -432,7 +428,7 @@ class FilesManager
$sSubDirectory = str_replace('/','',str_replace($sProcessUID,'',substr($sPath,(strpos($sPath, $sProcessUID)))));
$sMainDirectory = str_replace(substr($sPath, strpos($sPath, $sProcessUID)),'', $sPath);
if ($sMainDirectory == PATH_DATA_MAILTEMPLATES){
$sMainDirectory = 'mainTemplates';
$sMainDirectory = 'mailTemplates';
} else {
$sMainDirectory = 'public';
}

View File

@@ -67,7 +67,9 @@ class FilesManager extends Api
{
try {
$filesManager = new \BusinessModel\FilesManager();
$filesManager->uploadProcessFilesManager($prjUid, $prfUid);
$sData = $filesManager->uploadProcessFilesManager($prjUid, $prfUid);
//Response
$response = $sData;
} catch (\Exception $e) {
//response
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
@@ -76,18 +78,18 @@ class FilesManager extends Api
/**
* @param string $prjUid {@min 32} {@max 32}
* @param ProcessFilesManagerStructurePut $request_data
* @param string $path
* @param ProcessFilesManagerStructure $request_data
* @param string $prfUid {@min 32} {@max 32}
*
* @url PUT /:prjUid/file-manager
* @url PUT /:prjUid/file-manager/:prfUid
*/
public function doPutProcessFilesManager($prjUid, ProcessFilesManagerStructurePut $request_data, $path)
public function doPutProcessFilesManager($prjUid, ProcessFilesManagerStructure $request_data, $prfUid)
{
try {
$userUid = $this->getUserId();
$request_data = (array)($request_data);
$filesManager = new \BusinessModel\FilesManager();
$arrayData = $filesManager->updateProcessFilesManager($prjUid, $userUid, $request_data, $path);
$arrayData = $filesManager->updateProcessFilesManager($prjUid, $userUid, $request_data, $prfUid);
//Response
$response = $arrayData;
} catch (\Exception $e) {
@@ -99,15 +101,15 @@ class FilesManager extends Api
/**
* @param string $prjUid {@min 32} {@max 32}
* @param string $path
* @param string $prfUid {@min 32} {@max 32}
*
* @url DELETE /:prjUid/file-manager
* @url DELETE /:prjUid/file-manager/:prfUid
*/
public function doDeleteProcessFilesManager($prjUid, $path)
public function doDeleteProcessFilesManager($prjUid, $prfUid)
{
try {
$filesManager = new \BusinessModel\FilesManager();
$filesManager->deleteProcessFilesManager($prjUid, $path);
$filesManager->deleteProcessFilesManager($prjUid, $prfUid);
} catch (\Exception $e) {
//response
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
@@ -150,17 +152,3 @@ class ProcessFilesManagerStructure
public $prf_content;
}
class ProcessFilesManagerStructurePut
{
/**
* @var string {@from body}
*/
public $prf_filename;
/**
* @var string {@from body}
*/
public $prf_content;
}