diff --git a/Mage/Task/BuiltIn/Ioncube/EncryptTask.php b/Mage/Task/BuiltIn/Ioncube/EncryptTask.php
index baca28d..f3edb7d 100644
--- a/Mage/Task/BuiltIn/Ioncube/EncryptTask.php
+++ b/Mage/Task/BuiltIn/Ioncube/EncryptTask.php
@@ -144,12 +144,18 @@ class EncryptTask extends AbstractTask {
*
* @var array
*/
- private $ignoreExtens = array(
- 'jpg',
- 'jpeg',
- 'png',
- 'js',
- );
+ private $checkIgnoreExtens = array();
+
+ /**
+ * List of paths to exclude from
+ * encrypted/encoded test
+ * Paths must begin with '/'
+ * and are all relative to the
+ * project root
+ *
+ * @var array
+ */
+ private $checkIgnorePaths = array();
/**
* (non-PHPdoc)
@@ -166,10 +172,22 @@ class EncryptTask extends AbstractTask {
* @see \Mage\Task\AbstractTask::init()
*/
public function init() {
+ // Set the default extensions to ignore
+ $this->checkIgnoreExtens = array (
+ 'jpg',
+ 'jpeg',
+ 'png',
+ 'js',
+ 'gif',
+ 'css',
+ 'ttf',
+ 'svg',
+ 'map',
+ 'ico',
+
+ );
// Get any options specfic to this task
- $this->mageConfig = $this->getConfig ()->environmentConfig( 'ioncube' );
- var_dump($this->mageConfig);
- exit;
+ $this->mageConfig = $this->getConfig()->environmentConfig( 'ioncube' );
/*
* Get all our IonCube config options
*/
@@ -221,9 +239,21 @@ class EncryptTask extends AbstractTask {
* encrypt/encode file check
*
*/
- if (isset ( $this->mageConfig ['ignoreextens'])) {
- $this->ignoreExtens=array_merge($this->ignoreExtens, $this->mageConfig['ignoreextens']);
+ if (isset ( $this->mageConfig ['checkignoreextens'])) {
+ $this->checkIgnoreExtens=array_merge($this->ignoreExtens, $this->mageConfig['ignoreextens']);
}
+
+ /*
+ * Check if we have been passed any extra
+ * file paths/files to exclude from
+ * encrypt/encode file check
+ *
+ */
+ if (isset ( $this->mageConfig ['checkignorepaths'])) {
+ $this->checkIgnorePaths=array_merge($this->checkIgnorePaths, $this->mageConfig['checkignorepaths']);
+ }
+
+
/*
* now merge all the config options together
*/
@@ -289,13 +319,16 @@ class EncryptTask extends AbstractTask {
$this->switchSrcToTmp ();
$this->writeProjectFile ();
$result = $this->runIonCube ();
- exit;
- echo "Encoding result :".($result ? 'True' : 'False')."\n";
- if (($this->checkEncoding) && ($this->checkEncoding())) {
- $result=true;
+ Console::output("Encoding result :".($result ? 'OK' : 'Bad!')."\n", 0, 2);
+ if (!$result) {
+ $this->deleteTmpFiles ();
+ throw new ErrorWithMessageException('Ioncube failed to encode your project :'.$result);
+ }
+ if (($this->checkEncoding) && (!$this->checkEncoding())) {
+ $this->deleteTmpFiles();
+ throw new ErrorWithMessageException('Operation canceled by user.');
}
$this->deleteTmpFiles ();
- exit;
return $result;
}
@@ -311,46 +344,67 @@ class EncryptTask extends AbstractTask {
*/
private function checkEncoding() {
$src = $this->source;
- $ask=false;
- $rit = new RecursiveDirectoryIterator ( $src );
- foreach ( new RecursiveIteratorIterator ( $rit ) as $filename => $cur ) {
- $exten=pathinfo($filename, PATHINFO_EXTENSION);
- if (!array_key_exists($strtolower($exten), $this->ignoreExtens)) {
- // ok, this extension needs to be checked
- if ($this->checkFile($filename)) {
- // file was encrypted/encoded
- } else {
- // file was not encrypted/encoded
- echo "File :".$filename." -> Was not encrypted\n";
- $ask=true;
+ // $ask holds flag to indicate we need to prompt the end user
+ $ask = false;
+ // scan through the directory
+ $rit = new \RecursiveDirectoryIterator ( $src );
+ foreach ( new \RecursiveIteratorIterator ( $rit ) as $filename => $cur ) {
+ // get the 'base dir' for the project, eg. relative to the temp folder
+ $srcFileName = (str_replace ( $this->source, '', $filename ));
+ /*
+ * Scan through the ignor directorys array
+ * and if it matches the current path/filename
+ * then mark the file to be skipped from testing
+ */
+ $skip = false;
+ foreach ( $this->checkIgnorePaths as $path ) {
+ if (fnmatch ( $path, $srcFileName )) {
+ $skip = true;
+ }
+ }
+ // check if we should test this file
+ if (! $skip) {
+ // get the file exten for this file and compare to our fileexten exclude array
+ $exten = pathinfo ( $filename, PATHINFO_EXTENSION );
+ if (! in_array ( strtolower ( $exten ), $this->checkIgnoreExtens )) {
+ // ok, this extension needs to be checked
+ if ($this->checkFileCoding ( $filename )) {
+ // file was encrypted/encoded
+ } else {
+ // file was not encrypted/encoded
+ Console::output("File :" . $srcFileName . " -> Was not encrypted", 0, 1);
+ $ask = true;
+ }
}
}
}
if ($ask) {
// ok lets ask the user if they want to procede
- echo "\n\nDo you wish to procede (y/N):";
- $key=strtolower($this->inKey(array('y', 'Y', 'N', 'n', '')));
- if ($key!='y') {
- return true;
+ Console::output("\n\nDo you wish to procede (y/N):", 0, 0);
+ if (! $this->promptYn ()) {
+ return false;
}
}
- return false;
+
+ return true;
}
/**
- * This simply wiats for a single
- * key press, and returns it
- *
- * @param array $vals Array of posible key presses
+ * This simply for user to enter
+ * 'y' or 'Y' and press enter, if
+ * a single 'y' is not entered then
+ * false is returned, otherwise
+ * true is returned.
*
- * @return string
+ * @return bool True if 'y' pressed
*/
- private function inKey($vals) {
- $inKey = "";
- While(!in_array($inKey,$vals)) {
- $inKey = trim(`read -s -n1 valu;echo \$valu`);
+ private function promptYn() {
+ $handle = fopen ("php://stdin","r");
+ $line = strtolower(fgets($handle));
+ if(trim($line) != 'y'){
+ return false;
}
- return $inKey;
+ return true;
}
/**
@@ -402,11 +456,14 @@ class EncryptTask extends AbstractTask {
if (isset ( $this->mageConfig ['keeptemp'] )) {
return;
}
+ Console::log('Deleting tempory files :', 0);
$ret1 = $this->runCommandLocal ( 'rm -Rf ' . $this->ionSource, $out1 );
$ret2 = $this->runCommandLocal ( 'rm ' . $this->projectFile, $out2 );
if ($ret1 && $ret2) {
+ Console::log('OK',0);
return;
}
+ Console::log('Failed!', 1);
throw new ErrorWithMessageException ( 'Error deleting temp files :' . $out1 . ' : ' . $out2, 40 );
}
@@ -528,7 +585,7 @@ class EncryptTask extends AbstractTask {
* @return bool
*/
private function switchSrcToTmp() {
- echo "\nSwitching :" . $this->source . " -> To :" . $this->ionSource."\n";
+ //echo "\nSwitching :" . $this->source . " -> To :" . $this->ionSource."\n";
$ret = $this->runCommandLocal ( 'mv ' . $this->source . ' ' . $this->ionSource, $out );
if (! $ret) {
throw new ErrorWithMessageException ( 'Cant create tmp dir :' . $out, $ret );