Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Extensions/src/CroogoComposer.php
<?php

namespace Croogo\Extensions;

use
App\Network\Http\Client;
use
Cake\Utility\File;
use
Croogo\Lib\CroogoJson;

/**
 * Croogo Composer Wrapper
 *
 * @category Lib
 * @package  Croogo.Extensions.Lib
 * @since    1.4
 * @author   Kyle Robinson Young <kyle@dontkry.com>
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class CroogoComposer
{

   
/**
     * Path to APP
     *
     * @var string
     */
   
public $appPath = APP;

    public
$composerPath = null;

   
/**
     * Downloads composer if it doesn't exist
     *
     * @return bool
     */
   
public function getComposer()
    {
       
$appComposer = $this->appPath . 'composer.phar';
        if (
file_exists($appComposer)) {
           
$this->composerPath = $appComposer;
        } else {
            if (
DS != '\\' && exec('which composer', $output, $found)) {
                if (
$found == 0) {
                   
$this->composerPath = $output[0];

                    return
true;
                }
            }

           
$this->_shellExec('curl -s http://getcomposer.org/installer | php -- --install-dir=' . $this->appPath);
           
$this->composerPath = $appComposer;
        }

        return
true;
    }

   
/**
     * Runs composer.phar
     *
     * @return bool
     */
   
public function runComposer()
    {
       
$cmd = 'php ' . $this->composerPath . ' ';
        if (
file_exists($this->appPath . 'composer.lock')) {
           
$cmd .= 'update';
        } else {
           
$cmd .= 'install';
        }

        return
$this->_shellExec($cmd);
    }

   
/**
     * setConfig
     *
     * @param array $requires
     * @return bool
     */
   
public function setConfig($requires = [])
    {
       
$filename = 'composer.json';
        if (
file_exists($this->appPath . $filename)) {
           
$file = new File($this->appPath . $filename);
           
$json = json_decode($file->read(), true);
        } else {
           
$file = new File($this->appPath . $filename, true);
           
$json = [];
        }
        if (!isset(
$json['minimum-stability'])) {
           
$json['minimum-stability'] = 'dev';
        }
        if (!isset(
$json['config']['vendor-dir'])) {
           
$json['config']['vendor-dir'] = 'Vendor';
        }
        if (!isset(
$json['config']['bin-dir'])) {
           
$json['config']['bin-dir'] = 'Vendor/bin';
        }
        if (!isset(
$json['require'])) {
           
$json['require'] = ['composer/installers' => '*'];
        }
        foreach (
$requires as $pkg => $ver) {
            if (
strpos($ver, '/') !== false) {
               
$pkg = $ver;
               
$ver = '*';
            }
           
$json['require'][$pkg] = $ver;
        }
       
$options = 0;
        if (
version_compare(PHP_VERSION, '5.3.3', '>=')) {
           
$options |= JSON_NUMERIC_CHECK;
        }
        if (
version_compare(PHP_VERSION, '5.4.0', '>=')) {
           
$options |= JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT;
        }
       
$json = CroogoJson::stringify($json, $options) . "\n";
       
$file->write($json);
       
$file->close();

        return
true;
    }

   
/**
     * Wrapper for shell_exec() method for testing
     */
   
protected function _shellExec($cmd)
    {
       
$output = system($cmd, $returnValue);

        return
compact('cmd', 'output', 'returnValue');
    }
}