/**
  * Load a list of $fixtures into a $source
  *
  * @param string $source The name of your datasource (e.g. default)
  * @param array $fixtures An array of fixtures - same format as in CakeTest $fixtures
  * @return void
  */
 public function loadAllFixtures($source, $fixtures)
 {
     $this->_initDb($source);
     try {
         $this->_loadFixtures($fixtures);
     } catch (Exception $e) {
         CakeLog::error('-> ' . $e->getMessage(), array('fixturize'));
     }
     CakeLog::debug('Begin fixture import', array('fixturize'));
     $nested = $this->_db->useNestedTransactions;
     $this->_db->useNestedTransactions = false;
     $this->_db->begin();
     foreach ($fixtures as $f) {
         CakeLog::debug(sprintf('Working on %s', $f));
         if (empty($this->_loaded[$f])) {
             CakeLog::warning('-> Cannot find it in the loaded array', array('fixturize'));
             continue;
         }
         $fixture = $this->_loaded[$f];
         CakeLog::debug(sprintf('-> Found fixture: %s', get_class($fixture)), array('fixturize'));
         $this->_setupTable($fixture, $this->_db, true);
         CakeLog::debug('-> Created table "OK"', array('fixture'));
         if ($fixture->insert($this->_db)) {
             CakeLog::debug('-> Inserted fixture data "OK"', array('fixturize'));
         } else {
             CakeLog::error('-> Inserted fixture data "ERROR"', array('fixturize'));
         }
     }
     $this->_db->commit();
     $this->_useNestedTransactions = $nested;
     CakeLog::debug('Done!', array('fixturize'));
 }
 /**
  * setup
  * 
  * @param Model $model
  * @param array $config 
  */
 public function setup(Model $model, $config = array())
 {
     // catch and adjust old $config parameter names that would have been used rarely and were
     // confusingly named:-
     //  - the "check_cache" parameter has been renamed to "cache_config_name_check"
     //  - the "default_cache" parameter has been renamed to "cache_config_name_default"
     if (isset($config['check_cache'])) {
         $config['cache_config_name_check'] = $config['check_cache'];
         unset($config['check_cache']);
         CakeLog::warning('Use of deprecated Autocache config parameter detected', 'check_cache');
     }
     if (isset($config['default_cache'])) {
         $config['cache_config_name_default'] = $config['default_cache'];
         unset($config['default_cache']);
         CakeLog::warning('Use of deprecated Autocache config parameter detected', 'default_cache');
     }
     // > cache_config_name_check - determines if we bother checking if the supplied
     // cache configuration name is valid - prevents the developer thinking they are
     // caching when they are not - will throw a cache expection if fails this check
     //
     // > cache_config_name_default - is the default cache name, which by default is
     // the string "default" - confused?  You just need to make sure you have an
     // appropriate Cache::config('default',array(...)) in your bootstrap.php
     // or core.php
     //
     // > dummy_datasource - name of the dummy data source in the database.php file
     // should look something like this:-
     // public $autocache = array('datasource' => 'AutocacheSource');
     $this->runtime = array_merge(array('cache_config_name_check' => Configure::read('debug') > 0 ? true : false, 'cache_config_name_default' => 'default', 'dummy_datasource' => 'autocache'), (array) $config);
 }
Ejemplo n.º 3
0
 private function getFontCssRules()
 {
     if (is_null($this->fontCssRules)) {
         $this->fontCssRules = array();
         $cssAssets = $this->epub->EpubSpine->getAssetsByType('text/css');
         foreach ($cssAssets as $css) {
             try {
                 $cssContent = $this->epub->getPageContent($css->relativePath);
                 $cssParser = new CSSParser($cssContent);
                 $objCss = $cssParser->parse();
                 $this->fonts = array();
                 foreach ($objCss->getAllRuleSets() as $cssRuleSet) {
                     $font = array();
                     if (is_a($cssRuleSet, 'CSSAtRule')) {
                         $selectorName = $cssRuleSet->getType();
                         if ($selectorName == 'font-face') {
                             foreach ($cssRuleSet->getRules() as $cssRule) {
                                 $value = (string) $cssRule->getValue();
                                 if (substr($value, 0, 1) == '"') {
                                     $value = substr($value, 1, -1);
                                 }
                                 $font[$cssRule->getRule()] = $value;
                             }
                             $this->fontCssRules[] = $font;
                         }
                     }
                 }
                 unset($objCss);
                 unset($cssParser);
             } catch (Exception $e) {
                 CakeLog::warning('[EpubProcessor::getFontCssRules] Error ' . $e->getMessage() . ' when parsing ' . $css->relativePath);
             }
         }
     }
     return $this->fontCssRules;
 }
Ejemplo n.º 4
0
 protected function _findView($state, $query, $results = array())
 {
     if ($state == 'before') {
         if (empty($query['package_id'])) {
             throw new InvalidArgumentException(__('Invalid package'));
         }
         $query['conditions'] = array("{$this->alias}.{$this->primaryKey}" => $query['package_id']);
         $query['contain'] = array('Maintainer' => array('name', 'username'));
         $query['limit'] = 1;
         if (!empty($query['fields'])) {
             $query['fields'] = array_merge($this->getDataSource()->fields($this, null, $query['fields']), $this->Category->getDataSource()->fields($this->Category));
         } else {
             $query['fields'] = array_merge($this->getDataSource()->fields($this), $this->Category->getDataSource()->fields($this->Category));
         }
         $this->unbindModel(array('belongsTo' => array('Categories.Category')));
         $query['joins'] = array(array('alias' => 'Category', 'table' => 'categories', 'type' => 'LEFT', 'conditions' => array('`Category`.`id` = `Package`.`category_id`')));
         // Join additional records if necessary
         if ($query['user_id']) {
             if (!empty($query['fields'])) {
                 $query['fields'] = array_merge($this->getDataSource()->fields($this, null, $query['fields']), $this->Rating->getDataSource()->fields($this->Rating), $this->Favorite->getDataSource()->fields($this->Favorite));
             } else {
                 $query['fields'] = array_merge($this->getDataSource()->fields($this), $this->Rating->getDataSource()->fields($this->Rating), $this->Favorite->getDataSource()->fields($this->Favorite));
             }
             $this->unbindModel(array('hasMany' => array('Ratings.Rating', 'Favorites.Favorite')));
             $query['joins'][] = array('alias' => 'Favorite', 'table' => 'favorites', 'type' => 'LEFT', 'conditions' => array('`Favorite`.`foreign_key` = `Package`.`id`', 'Favorite.model' => 'Package', 'Favorite.type' => 'bookmark', 'Favorite.user_id' => $query['user_id']));
             $query['joins'][] = array('alias' => 'Rating', 'table' => 'ratings', 'type' => 'LEFT', 'conditions' => array('`Rating`.`foreign_key` = `Package`.`id`', 'Rating.model' => 'Package', 'Rating.user_id' => $query['user_id']));
         }
         return $query;
     }
     if (empty($results[0])) {
         throw new NotFoundException(__('Invalid package'));
     }
     if (empty($results[0]['Maintainer'])) {
         throw new NotFoundException(__('Invalid maintainer'));
     }
     if (empty($results[0]['Favorite']['id'])) {
         $results[0]['Favorite'] = false;
     }
     if (empty($results[0]['Rating']['id'])) {
         $results[0]['Rating'] = false;
     }
     if ($this->shouldForceUpdate($results[0][$this->alias]['modified'])) {
         try {
             $this->enqueue('UpdatePackageJob', array($results[0][$this->alias][$this->primaryKey]));
         } catch (Exception $e) {
             CakeLog::warning('Package::find(\'view\')' . $e->getMessage());
         }
     }
     DebugTimer::start('app.Package::rss', __d('app', 'Package::rss()'));
     list($results[0]['Rss'], $results[0]['Cache']) = $this->rss($results[0]);
     DebugTimer::stop('app.Package::rss');
     return $results[0];
 }
Ejemplo n.º 5
0
 /**
  * Stores multiple messages in the queue so it an external client can work upon them.
  * For performance reasons, it is better to create jobs in batches instead of one a time
  * if you plan to create several jobs in the same process or request.
  *
  * @param string $taskName a task name as defined in the configure key SQS.queues
  * @param array $payloads list of payload data to associate to the new queued message
  * for each entry in the array a new message in the queue will be created
  * @return array list of messages that failed to be sent or false if an exception was caught
  **/
 public function sendBatch($taskName, array $payloads)
 {
     $url = $this->queueUrl($taskName);
     try {
         CakeLog::debug(sprintf('Creating %d messages in queue: %s', count($payloads), $taskName), array('sqs'));
         $result = $this->client()->sendMessageBatch(array('QueueUrl' => $url, 'Entries' => array_map(function ($e) use(&$i) {
             return array('Id' => 'a' . $i++, 'MessageBody' => json_encode($e));
         }, $payloads)));
         $failed = array();
         foreach ((array) $result->get('Failed') as $f) {
             $failed[(int) substr($f['Id'], 1)] = $f['Message'];
         }
         if (!empty($failed)) {
             CakeLog::warning(sprintf('Failed sending %d messages for queue: %s', count($failed), $taskName), array('sqs'));
         }
         return $failed;
     } catch (Exception $e) {
         $this->_handleException($e);
     }
     return false;
 }
Ejemplo n.º 6
0
 /**
  * test convenience methods
  *
  * @return void
  */
 public function testConvenienceMethods()
 {
     $this->_deleteLogs();
     CakeLog::config('debug', array('engine' => 'File', 'types' => array('notice', 'info', 'debug'), 'file' => 'debug'));
     CakeLog::config('error', array('engine' => 'File', 'types' => array('emergency', 'alert', 'critical', 'error', 'warning'), 'file' => 'error'));
     $testMessage = 'emergency message';
     CakeLog::emergency($testMessage);
     $contents = file_get_contents(LOGS . 'error.log');
     $this->assertRegExp('/(Emergency|Critical): ' . $testMessage . '/', $contents);
     $this->assertFalse(file_exists(LOGS . 'debug.log'));
     $this->_deleteLogs();
     $testMessage = 'alert message';
     CakeLog::alert($testMessage);
     $contents = file_get_contents(LOGS . 'error.log');
     $this->assertRegExp('/(Alert|Critical): ' . $testMessage . '/', $contents);
     $this->assertFalse(file_exists(LOGS . 'debug.log'));
     $this->_deleteLogs();
     $testMessage = 'critical message';
     CakeLog::critical($testMessage);
     $contents = file_get_contents(LOGS . 'error.log');
     $this->assertContains('Critical: ' . $testMessage, $contents);
     $this->assertFalse(file_exists(LOGS . 'debug.log'));
     $this->_deleteLogs();
     $testMessage = 'error message';
     CakeLog::error($testMessage);
     $contents = file_get_contents(LOGS . 'error.log');
     $this->assertContains('Error: ' . $testMessage, $contents);
     $this->assertFalse(file_exists(LOGS . 'debug.log'));
     $this->_deleteLogs();
     $testMessage = 'warning message';
     CakeLog::warning($testMessage);
     $contents = file_get_contents(LOGS . 'error.log');
     $this->assertContains('Warning: ' . $testMessage, $contents);
     $this->assertFalse(file_exists(LOGS . 'debug.log'));
     $this->_deleteLogs();
     $testMessage = 'notice message';
     CakeLog::notice($testMessage);
     $contents = file_get_contents(LOGS . 'debug.log');
     $this->assertRegExp('/(Notice|Debug): ' . $testMessage . '/', $contents);
     $this->assertFalse(file_exists(LOGS . 'error.log'));
     $this->_deleteLogs();
     $testMessage = 'info message';
     CakeLog::info($testMessage);
     $contents = file_get_contents(LOGS . 'debug.log');
     $this->assertRegExp('/(Info|Debug): ' . $testMessage . '/', $contents);
     $this->assertFalse(file_exists(LOGS . 'error.log'));
     $this->_deleteLogs();
     $testMessage = 'debug message';
     CakeLog::debug($testMessage);
     $contents = file_get_contents(LOGS . 'debug.log');
     $this->assertContains('Debug: ' . $testMessage, $contents);
     $this->assertFalse(file_exists(LOGS . 'error.log'));
     $this->_deleteLogs();
 }
Ejemplo n.º 7
0
 /**
  * Checks authorization by content
  *
  * @throws CakeException
  */
 protected function _authorizeByContent($user, CakeRequest $request, $id)
 {
     if (!isset($this->settings['actionMap'][$request->params['action']])) {
         throw new CakeException(__d('croogo', '_authorizeByContent() - Access of un-mapped action "%1$s" in controller "%2$s"', $request->action, $request->controller));
     }
     list($plugin, $userModel) = pluginSplit($this->settings['userModel']);
     $acoNode = array('model' => $this->_Controller->modelClass, 'foreign_key' => $id);
     $alias = sprintf('%s.%s', $acoNode['model'], $acoNode['foreign_key']);
     $action = $this->settings['actionMap'][$request->params['action']];
     $cacheName = 'permissions_content_' . strval($user['id']);
     if (($permissions = Cache::read($cacheName, 'permissions')) === false) {
         $permissions = array();
         Cache::write($cacheName, $permissions, 'permissions');
     }
     if (!isset($permissions[$alias][$action])) {
         $Acl = $this->_Collection->load('Acl');
         try {
             $allowed = $Acl->check(array($userModel => $user), $acoNode, $action);
         } catch (Exception $e) {
             CakeLog::warning('authorizeByContent: ' . $e->getMessage());
             $allowed = false;
         }
         $permissions[$alias][$action] = $allowed;
         Cache::write($cacheName, $permissions, 'permissions');
         $hit = false;
     } else {
         $allowed = $permissions[$alias][$action];
         $hit = true;
     }
     if (Configure::read('debug')) {
         $status = $allowed ? ' allowed.' : ' denied.';
         $cached = $hit ? ' (cache hit)' : ' (cache miss)';
         CakeLog::write(LOG_ERR, $user['username'] . ' - ' . $action . '/' . $id . $status . $cached);
     }
     return $allowed;
 }
Ejemplo n.º 8
0
 protected function cropImage($idmlImage, $idmlRectangle, $s3File)
 {
     $ffi = $idmlRectangle->frameFittingOption;
     if ($ffi->hasCroppingInstructions()) {
         if (!$this->FileManager->exists($s3File)) {
             CakeLog::warning('[IdmlResourceManager::cropImage] Source file ' . $s3File . ' does not exist.');
             return false;
         }
         // InDesign uses 72ppi as its base units for IDML
         // convert the cropping instruction units to image pixel units
         $leftCrop = $ffi->leftCrop * ($idmlImage->ppiX / 72);
         $rightCrop = $ffi->rightCrop * ($idmlImage->ppiX / 72);
         $topCrop = $ffi->topCrop * ($idmlImage->ppiY / 72);
         $bottomCrop = $ffi->bottomCrop * ($idmlImage->ppiY / 72);
         // convert the image dimensions from InDesign units to real pixels
         $originalImageWidth = $idmlImage->width * ($idmlImage->ppiX / 72);
         $originalImageHeight = $idmlImage->height * ($idmlImage->ppiY / 72);
         $widthOfCrop = $originalImageWidth - ($rightCrop + $leftCrop);
         $heightOfCrop = $originalImageHeight - ($topCrop + $bottomCrop);
         // download from S3 to local computer
         $tmp = $this->FileManager->getTmpPath();
         $basename = pathinfo($s3File, PATHINFO_BASENAME);
         $localFile = $tmp . DS . $basename;
         $this->FileManager->copy($s3File, $localFile);
         $result = true;
         // Crop
         $imagick = new Imagick($localFile);
         if ($imagick) {
             try {
                 $imagick->cropImage($widthOfCrop, $heightOfCrop, $leftCrop, $topCrop);
                 $imagick->writeImage();
             } catch (Exception $e) {
                 CakeLog::warning('[IdmlResourceManager::cropImage] Failed to crop ' . $localFile);
                 $result = false;
             }
             $imagick->clear();
             $imagick->destroy();
         }
         // upload from local computer to S3
         $this->FileManager->copy($localFile, $s3File);
         $this->processor->patchSourceAssetList($localFile, $localFile);
         return $result;
     }
 }
Ejemplo n.º 9
0
 public function warning($message, array $context = array())
 {
     CakeLog::warning($message, $context);
 }
Ejemplo n.º 10
0
 protected function importSourceAssets()
 {
     if (is_array($this->sourceAssets) && count($this->sourceAssets) > 0) {
         foreach ($this->sourceAssets as $localFile => $sourceFileName) {
             $ext = pathinfo($sourceFileName, PATHINFO_EXTENSION);
             CakeLog::debug('[ImportProcessor::importSourceAssets] processing asset ' . $sourceFileName);
             if (in_array($ext, self::$supportedImageTypes)) {
                 CakeLog::debug('[ImportProcessor::importSourceAssets] Adding image file ' . $localFile . ' to book');
                 $this->addImageAssetToBook($localFile, 'images/');
             } elseif (in_array($ext, self::$supportedFontTypes)) {
                 CakeLog::debug('[ImportProcessor::importSourceAssets] Adding font file ' . $localFile . ' to book');
                 $this->addFontToBook($localFile);
             } elseif (in_array($ext, self::$supportedAudioTypes)) {
                 CakeLog::debug('[ImportProcessor::importSourceAssets] Adding audio file ' . $localFile . ' to book');
                 $this->addAudioAssetToBook($localFile, 'audio/');
             } elseif (in_array($ext, self::$supportedVideoTypes)) {
                 CakeLog::debug('[ImportProcessor::importSourceAssets] Adding video file ' . $localFile . ' to book');
                 $this->addVideoAssetToBook($localFile, 'video/');
             } else {
                 CakeLog::warning('[ImportProcessor::importSourceAssets] Skipping file' . $sourceFileName . ': unknown file type');
             }
             $this->progress->incrementStep();
         }
     }
 }
Ejemplo n.º 11
0
 public function warning($message)
 {
     CakeLog::warning($message, $this->scope);
 }
Ejemplo n.º 12
0
 protected function _rotate($config)
 {
     // do rotation
     $path = $config['path'];
     for ($i = $config['keep']; $i >= 0; $i--) {
         switch (true) {
             case $i == $config['keep']:
                 $SrcFile = $this->_getFile($path, $i);
                 if (!$SrcFile->exists()) {
                     continue;
                 }
                 // send report mail
                 if ($config['email_to']) {
                     try {
                         //TODO use dependency injection
                         //TODO use backend-wide email report settings
                         $email = new CakeEmail(array('transport' => 'Mail', 'from' => 'report@' . gethostname(), 'to' => $config['email_to'], 'subject' => 'Log report', 'emailFormat' => 'text', 'template' => false, 'layout' => false));
                         $email->addAttachments($SrcFile->path);
                         $email->send('Log file attached');
                     } catch (Exception $e) {
                         CakeLog::warning('LogRotation::rotate() - ' . $e->getMessage(), 'backend');
                     }
                 }
                 break;
             case $i > 0:
                 $SrcFile = $this->_getFile($path, $i);
                 if (!$SrcFile->exists()) {
                     continue;
                 }
                 if (!$config['rotate_empty'] && $SrcFile->size() < 1) {
                     #if (!$SrcFile->delete())
                     #	$this->log[] = "Failed to delete file";
                     continue;
                 }
                 $NewFile = $this->_getFile($path, $i + 1, true);
                 if (!$NewFile->write($SrcFile->read())) {
                     throw new Exception("Failed to copy log {$path}.'.'.{$i}");
                 }
                 if ($i == 1 && !$config['compress'] && $config['compress_delay']) {
                     $this->_compress($NewFile);
                 }
                 break;
             case $i == 0:
                 $SrcFile = $this->_getFile($path);
                 if (!$config['rotate_empty'] && $SrcFile->size() < 1) {
                     continue;
                 }
                 $NewFile = $this->_getFile($path, $i + 1, true);
                 if (!$NewFile->write($SrcFile->read())) {
                     throw new Exception("Failed to copy log {$path}");
                 }
                 if ($config['compress']) {
                     $this->_compress($NewFile);
                 }
                 if (!$SrcFile->write("")) {
                     throw new Exception("Failed to create empty log {$path}");
                 }
                 break;
             default:
                 throw new Exception("Fatal Error");
                 break;
         }
     }
 }
Ejemplo n.º 13
0
 /**
  * Create image assets.
  */
 private function createImageAssets()
 {
     // Get image directory
     $imageDir = Folder::addPathElement($this->workingDir, 'images');
     if (is_dir($imageDir)) {
         // Get all image files
         $imageFiles = $this->FileManager->getAllFiles($imageDir);
         // Check if there are any images
         if (count($imageFiles) > 0) {
             // Adjust progress
             $this->progress->adjustMaxSteps(count($imageFiles), TRUE);
             // Loop through image files
             foreach ($imageFiles as $imagePath) {
                 // Get file image name
                 $imagePathInfo = pathinfo($imagePath);
                 $imageFilename = $imagePathInfo['basename'];
                 // Check if image exists
                 if (file_exists($imagePath)) {
                     // Path to unlink
                     $imagePathUnlink = $imagePath;
                     // Import image files
                     $this->addImageAssetToBook($imagePath, 'images/');
                     // Remove image files
                     unlink($imagePathUnlink);
                 } else {
                     CakeLog::warning("[WordProcessor::importImages] File {$imageFilename} not found");
                 }
                 // Update step
                 $this->progress->incrementStep();
             }
         }
     }
 }
Ejemplo n.º 14
0
 /**
  * ZIPコマンドを使った解凍
  *
  * @param string $path zipファイルパス
  * @return bool
  */
 protected function _extractWithZipCommand($path)
 {
     // コマンドで解凍
     $cmd = sprintf('unzip -P %s %s -d %s', $this->_password, $this->_zipPath, $path);
     exec($cmd, $output, $returnVar);
     if ($returnVar > 0) {
         // エラー
         CakeLog::warning('Unzip Error:output=' . json_encode($output) . ', return_var=' . $returnVar);
         return false;
     }
     return true;
 }