2014-09-19 10:21:18 -04:00
< ? php
/**
* processes_ImportFile . php
*
* ProcessMaker Open Source Edition
* Copyright ( C ) 2004 - 2008 Colosa Inc . 23
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program 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 Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*
* For more information , contact Colosa Inc , 2566 Le Jeune Rd . ,
* Coral Gables , FL , 33134 , USA , or email info @ colosa . com .
*
*/
global $RBAC ;
2017-08-01 12:16:06 -04:00
use ProcessMaker\Plugins\PluginRegistry ;
2018-08-28 09:34:11 -04:00
use ProcessMaker\Validation\ValidationUploadedFiles ;
2017-08-01 12:16:06 -04:00
2014-09-19 10:21:18 -04:00
$RBAC -> requirePermissions ( " PM_SETUP_ADVANCE " );
require_once PATH_CORE . 'methods' . PATH_SEP . 'enterprise' . PATH_SEP . 'enterprise.php' ;
$response = array ();
$status = 1 ;
try {
2018-12-13 14:42:05 -04:00
ValidationUploadedFiles :: getValidationUploadedFiles () -> dispatch ( function ( $validator ) {
2018-08-28 09:34:11 -04:00
throw new Exception ( $validator -> getMessage ());
});
2014-09-19 10:21:18 -04:00
if ( ! isset ( $_FILES [ " form " ][ " error " ][ " PLUGIN_FILENAME " ]) || $_FILES [ " form " ][ " error " ][ " PLUGIN_FILENAME " ] == 1 ) {
$str = " There was an error uploading the file, probably the file size if greater than upload_max_filesize parameter in php.ini, please check this parameter and try again. " ;
throw ( new Exception ( $str ));
}
//save the file
if ( $_FILES [ " form " ][ " error " ][ " PLUGIN_FILENAME " ] == 0 ) {
$filename = $_FILES [ " form " ][ " name " ][ " PLUGIN_FILENAME " ];
$path = PATH_DOCUMENT . " input " . PATH_SEP ;
$tempName = $_FILES [ " form " ][ " tmp_name " ][ " PLUGIN_FILENAME " ];
G :: uploadFile ( $tempName , $path , $filename );
}
if ( ! $_FILES [ " form " ][ " type " ][ " PLUGIN_FILENAME " ] == " application/octet-stream " ) {
$str = " the uploaded files are invalid, expected \" application/octect-stream \" mime type file ( " . $_FILES [ " form " ][ " type " ][ " PLUGIN_FILENAME " ] . " ) " ;
throw ( new Exception ( $str ));
}
2017-02-15 16:26:02 +00:00
2014-09-19 10:21:18 -04:00
$tar = new Archive_Tar ( $path . $filename );
$sFileName = substr ( $filename , 0 , strrpos ( $filename , " . " ));
$sClassName = substr ( $filename , 0 , strpos ( $filename , " - " ));
$aFiles = $tar -> listContent ();
$bMainFile = false ;
$bClassFile = false ;
if ( is_array ( $aFiles )) {
foreach ( $aFiles as $key => $val ) {
if ( $val [ " filename " ] == $sClassName . " .php " ) {
$bMainFile = true ;
}
if ( $val [ " filename " ] == $sClassName . PATH_SEP . " class. " . $sClassName . " .php " ) {
$bClassFile = true ;
}
}
} else {
$str = " Failed to import the file default by doesn't a plugin or invalid file. " ;
throw ( new Exception ( $str ));
}
2017-08-01 12:16:06 -04:00
$oPluginRegistry = PluginRegistry :: loadSingleton ();
2014-09-19 10:21:18 -04:00
$pluginFile = $sClassName . '.php' ;
if ( $bMainFile && $bClassFile ) {
$sAux = $sClassName . 'Plugin' ;
$fVersionOld = 0.0 ;
if ( file_exists ( PATH_PLUGINS . $pluginFile )) {
if ( ! class_exists ( $sAux ) && ! class_exists ( $sClassName . 'plugin' )) {
include PATH_PLUGINS . $pluginFile ;
}
if ( ! class_exists ( $sAux )) {
$sAux = $sClassName . 'plugin' ;
}
$oClass = new $sAux ( $sClassName );
$fVersionOld = $oClass -> iVersion ;
unset ( $oClass );
}
$res = $tar -> extract ( $path );
2016-07-14 12:16:12 -04:00
//Verify if not is Enterprise Plugin
if ( ! $oPluginRegistry -> isEnterprisePlugin ( $sClassName , $path )) {
throw new Exception ( G :: LoadTranslation ( 'ID_EEPLUGIN_IMPORT_PLUGIN_NOT_IS_ENTERPRISE' , [ $filename ]));
}
2014-09-19 10:21:18 -04:00
$res = $tar -> extract ( PATH_PLUGINS );
} else {
$str = " The file $filename doesn't contain class: $sClassName " ;
throw ( new Exception ( $str ));
}
if ( ! file_exists ( PATH_PLUGINS . $sClassName . '.php' )) {
$str = " File ' $pluginFile ' doesn't exists " ;
throw ( new Exception ( $str ));
}
require_once ( PATH_PLUGINS . $pluginFile );
$oPluginRegistry -> registerPlugin ( $sClassName , PATH_PLUGINS . $sClassName . " .php " );
$details = $oPluginRegistry -> getPluginDetails ( $pluginFile );
2017-08-01 12:16:06 -04:00
$oPluginRegistry -> installPlugin ( $details -> getNamespace ());
2014-09-19 10:21:18 -04:00
$oPluginRegistry -> setupPlugins (); //get and setup enabled plugins
2017-08-01 12:16:06 -04:00
$oPluginRegistry -> savePlugin ( $details -> getNamespace ());
2014-09-19 10:21:18 -04:00
//G::header("Location: pluginsList");
//die;
$response [ " success " ] = true ;
} catch ( Exception $e ) {
$response [ " message " ] = $e -> getMessage ();
$status = 0 ;
}
if ( $status == 0 ) {
$response [ " success " ] = false ;
}
2016-07-27 16:37:21 -04:00
G :: outRes ( G :: json_encode ( $response ) );
2014-09-19 10:21:18 -04:00