/** * Closes the logger process and writes the output file. * * @return void */ public function close() { // Check for configured log file if ($this->logFile === null) { throw new PHP_Depend_Log_NoLogOutputException($this); } $metrics = $this->collectMetrics(); $proportions = $this->computeProportions($metrics); $svg = new DOMDocument('1.0', 'UTF-8'); $svg->load(dirname(__FILE__) . '/pyramid.svg'); $items = array_merge($metrics, $proportions); foreach ($items as $name => $value) { $svg->getElementById("pdepend.{$name}")->nodeValue = $value; if (($threshold = $this->computeThreshold($name, $value)) === null) { continue; } if (($color = $svg->getElementById("threshold.{$threshold}")) === null) { continue; } if (($rect = $svg->getElementById("rect.{$name}")) === null) { continue; } preg_match('/fill:(#[^;"]+)/', $color->getAttribute('style'), $match); $style = $rect->getAttribute('style'); $style = preg_replace('/fill:#[^;"]+/', "fill:{$match[1]}", $style); $rect->setAttribute('style', $style); } $temp = PHP_Depend_Util_FileUtil::getSysTempDir(); $temp .= '/' . uniqid('pdepend_') . '.svg'; $svg->save($temp); PHP_Depend_Util_ImageConvert::convert($temp, $this->logFile); // Remove temp file unlink($temp); }
/** * Constructs a new file storage instance and calculates the root directory * for the file storage. * * @param string $cacheDir Optional cache directory. */ public function __construct($cacheDir = null) { $this->_engineInstanceKey = strtr(microtime(), ' ', '_'); if ($cacheDir === null) { $cacheDir = PHP_Depend_Util_FileUtil::getSysTempDir(); } $this->_dirname = $cacheDir . '/pdepend_storage'; // Append the user identifier on *NIX systems if (function_exists('posix_getuid') === true) { $this->_dirname .= '-' . posix_getuid(); } }
/** * Closes the logger process and writes the output file. * * @return void * @throws PHP_Depend_Log_NoLogOutputException If the no log target exists. */ public function close() { // Check for configured log file if ($this->logFile === null) { throw new PHP_Depend_Log_NoLogOutputException($this); } $bias = 0.1; $svg = new DOMDocument('1.0', 'UTF-8'); $svg->load(dirname(__FILE__) . '/chart.svg'); $bad = $svg->getElementById('jdepend.bad'); $good = $svg->getElementById('jdepend.good'); $layer = $svg->getElementById('jdepend.layer'); $legendTemplate = $svg->getElementById('jdepend.legend'); $max = 0; $min = 0; $items = array(); foreach ($this->code as $package) { if (!$package->isUserDefined()) { continue; } $metrics = $this->analyzer->getStats($package); if (count($metrics) === 0) { continue; } $size = $metrics['cc'] + $metrics['ac']; if ($size > $max) { $max = $size; } else { if ($min === 0 || $size < $min) { $min = $size; } } $items[] = array('size' => $size, 'abstraction' => $metrics['a'], 'instability' => $metrics['i'], 'distance' => $metrics['d'], 'name' => $package->getName()); } $diff = ($max - $min) / 10; // Sort items by size usort($items, create_function('$a, $b', 'return ($a["size"] - $b["size"]);')); foreach ($items as $item) { if ($item['distance'] < $bias) { $ellipse = $good->cloneNode(true); } else { $ellipse = $bad->cloneNode(true); } $r = 15; if ($diff !== 0) { $r = 5 + ($item['size'] - $min) / $diff; } $a = $r / 15; $e = 50 - $r + $item['abstraction'] * 320; $f = 20 - $r + 190 - $item['instability'] * 190; $transform = "matrix({$a}, 0, 0, {$a}, {$e}, {$f})"; $ellipse->removeAttribute('xml:id'); $ellipse->setAttribute('id', uniqid('pdepend_')); $ellipse->setAttribute('title', $item['name']); $ellipse->setAttribute('transform', $transform); $layer->appendChild($ellipse); $result = preg_match('#\\\\([^\\\\]+)$#', $item['name'], $found); if ($result && count($found)) { $angle = rand(0, 314) / 100 - 1.57; $legend = $legendTemplate->cloneNode(true); $legend->removeAttribute('xml:id'); $legend->setAttribute('x', $e + $r * (1 + cos($angle))); $legend->setAttribute('y', $f + $r * (1 + sin($angle))); $legend->nodeValue = $found[1]; $legendTemplate->parentNode->appendChild($legend); } } $bad->parentNode->removeChild($bad); $good->parentNode->removeChild($good); $legendTemplate->parentNode->removeChild($legendTemplate); $temp = PHP_Depend_Util_FileUtil::getSysTempDir(); $temp .= '/' . uniqid('pdepend_') . '.svg'; $svg->save($temp); PHP_Depend_Util_ImageConvert::convert($temp, $this->logFile); // Remove temp file unlink($temp); }
/** * testGetUserHomeDirOrSysTempDirReturnsExpectedUserHomeDirectory * * @return void */ public function testGetUserHomeDirOrSysTempDirReturnsExpectedUserHomeDirectory() { self::assertEquals(getenv('HOME'), PHP_Depend_Util_FileUtil::getUserHomeDirOrSysTempDir()); }
/** * testDefaultConfigurationHasExpectedCacheLocation * * @return void * @group pdepend * @group pdepend::util * @group pdepend::util::configuration * @group unittest */ public function testDefaultConfigurationHasExpectedCacheLocation() { $factory = new PHP_Depend_Util_Configuration_Factory(); $config = $factory->createDefault(); self::assertEquals(PHP_Depend_Util_FileUtil::getUserHomeDirOrSysTempDir() . '/.pdepend', $config->cache->location); }
/** * Constructs a new factory instance and initializes the default configuration. */ public function __construct() { $home = PHP_Depend_Util_FileUtil::getUserHomeDirOrSysTempDir(); $this->default = new stdClass(); $this->default->cache = new stdClass(); $this->default->cache->driver = 'file'; $this->default->cache->location = $home . '/.pdepend'; $this->default->imageConvert = new stdClass(); $this->default->imageConvert->fontSize = '11'; $this->default->imageConvert->fontFamily = 'Arial'; $this->default->parser = new stdClass(); $this->default->parser->nesting = 8192; }