Skip to content

Commit

Permalink
Sparks integration into Bonfire core. Fixes lonnieezell#985
Browse files Browse the repository at this point in the history
  • Loading branch information
lonnieezell committed Feb 21, 2014
1 parent be8902c commit 79aa2c3
Show file tree
Hide file tree
Showing 14 changed files with 1,144 additions and 0 deletions.
6 changes: 6 additions & 0 deletions application/config/application.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@
*/
$config['enable_activity_logging'] = TRUE;

//--------------------------------------------------------------------
// SPARKS
//--------------------------------------------------------------------

$config['sparks_path'] = '../sparks/';

//--------------------------------------------------------------------
// !TEMPLATE
//--------------------------------------------------------------------
Expand Down
265 changes: 265 additions & 0 deletions application/third_party/Sparks_Loader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Sparks
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author CodeIgniter Reactor Dev Team
* @author Kenny Katzgrau <[email protected]>
* @since CodeIgniter Version 1.0
* @filesource
*/

/**
* Loader Class
*
* Loads views and files
*
* @package CodeIgniter
* @subpackage Libraries
* @author CodeIgniter Reactor Dev Team
* @author Kenny Katzgrau <[email protected]>
* @category Loader
* @link http://codeigniter.com/user_guide/libraries/loader.html
*/
class Sparks_Loader extends CI_Loader
{
/**
* Keep track of which sparks are loaded. This will come in handy for being
* speedy about loading files later.
*
* @var array
*/
var $_ci_loaded_sparks = array();

/**
* Is this version less than CI 2.1.0? If so, accomodate
* @bubbafoley's world-destroying change at: http://bit.ly/sIqR7H
* @var bool
*/
var $_is_lt_210 = false;

/**
* Constructor. Define SPARKPATH if it doesn't exist, initialize parent
*/
function __construct()
{
if(!defined('SPARKPATH'))
{
define('SPARKPATH', config_item('sparks_path'));
}

$this->_is_lt_210 = (is_callable(array('CI_Loader', 'ci_autoloader'))
|| is_callable(array('CI_Loader', '_ci_autoloader')));

parent::__construct();
}

/**
* To accomodate CI 2.1.0, we override the initialize() method instead of
* the ci_autoloader() method. Once sparks is integrated into CI, we
* can avoid the awkward version-specific logic.
* @return Loader
*/
function initialize()
{
parent::initialize();

if(!$this->_is_lt_210)
{
$this->ci_autoloader();
}

return $this;
}

/**
* Load a spark by it's path within the sparks directory defined by
* SPARKPATH, such as 'markdown/1.0'
* @param string $spark The spark path withint he sparks directory
* @param <type> $autoload An optional array of items to autoload
* in the format of:
* array (
* 'helper' => array('somehelper')
* )
* @return <type>
*/
function spark($spark, $autoload = array())
{
if(is_array($spark))
{
foreach($spark as $s)
{
$this->spark($s);
}
}

$spark = ltrim($spark, '/');
$spark = rtrim($spark, '/');

$spark_path = SPARKPATH . $spark . '/';
$parts = explode('/', $spark);
$spark_slug = strtolower($parts[0]);

# If we've already loaded this spark, bail
if(array_key_exists($spark_slug, $this->_ci_loaded_sparks))
{
return true;
}

# Check that it exists. CI Doesn't check package existence by itself
if(!file_exists($spark_path))
{
show_error("Cannot find spark path at $spark_path");
}

if(count($parts) == 2)
{
$this->_ci_loaded_sparks[$spark_slug] = $spark;
}

$this->add_package_path($spark_path);

foreach($autoload as $type => $read)
{
if($type == 'library')
$this->library($read);
elseif($type == 'model')
$this->model($read);
elseif($type == 'config')
$this->config($read);
elseif($type == 'helper')
$this->helper($read);
elseif($type == 'view')
$this->view($read);
else
show_error ("Could not autoload object of type '$type' ($read) for spark $spark");
}

// Looks for a spark's specific autoloader
$this->ci_autoloader($spark_path);

return true;
}

/**
* Pre-CI 2.0.3 method for backward compatility.
*
* @param null $basepath
* @return void
*/
function _ci_autoloader($basepath = NULL)
{
$this->ci_autoloader($basepath);
}

/**
* Specific Autoloader (99% ripped from the parent)
*
* The config/autoload.php file contains an array that permits sub-systems,
* libraries, and helpers to be loaded automatically.
*
* @param array|null $basepath
* @return void
*/
function ci_autoloader($basepath = NULL)
{
if($basepath !== NULL)
{
$autoload_path = $basepath.'config/autoload'.EXT;
}
else
{
$autoload_path = APPPATH.'config/autoload'.EXT;
}

if(! file_exists($autoload_path))
{
return FALSE;
}

include($autoload_path);

if ( ! isset($autoload))
{
return FALSE;
}

if($this->_is_lt_210 || $basepath !== NULL)
{
// Autoload packages
if (isset($autoload['packages']))
{
foreach ($autoload['packages'] as $package_path)
{
$this->add_package_path($package_path);
}
}
}

// Autoload sparks
if (isset($autoload['sparks']))
{
foreach ($autoload['sparks'] as $spark)
{
$this->spark($spark);
}
}

if($this->_is_lt_210 || $basepath !== NULL)
{
if (isset($autoload['config']))
{
// Load any custom config file
if (count($autoload['config']) > 0)
{
$CI =& get_instance();
foreach ($autoload['config'] as $key => $val)
{
$CI->config->load($val);
}
}
}

// Autoload helpers and languages
foreach (array('helper', 'language') as $type)
{
if (isset($autoload[$type]) AND count($autoload[$type]) > 0)
{
$this->$type($autoload[$type]);
}
}

// A little tweak to remain backward compatible
// The $autoload['core'] item was deprecated
if ( ! isset($autoload['libraries']) AND isset($autoload['core']))
{
$autoload['libraries'] = $autoload['core'];
}

// Load libraries
if (isset($autoload['libraries']) AND count($autoload['libraries']) > 0)
{
// Load the database driver.
if (in_array('database', $autoload['libraries']))
{
$this->database();
$autoload['libraries'] = array_diff($autoload['libraries'], array('database'));
}

// Load all other libraries
foreach ($autoload['libraries'] as $item)
{
$this->library($item);
}
}

// Autoload models
if (isset($autoload['model']))
{
$this->model($autoload['model']);
}
}
}
}
22 changes: 22 additions & 0 deletions bonfire/core/Loader.php
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,28 @@ public function is_loaded($class)

// --------------------------------------------------------------------

//--------------------------------------------------------------------
// Sparks Integration
//--------------------------------------------------------------------

/**
* Provides a convenience method that lets us use the provided
* official Sparks loader in a nice convenient way.
*
* @param $spark
* @param array $autoload
*/
public function spark ($spark, $autoload=array())
{
require_once (APPPATH .'third_party/Sparks_Loader.php');

$loader = new Sparks_Loader();
$loader->spark($spark, $autoload);
}

//--------------------------------------------------------------------


//--------------------------------------------------------------------
// HMVC Methods
//--------------------------------------------------------------------
Expand Down
47 changes: 47 additions & 0 deletions tools/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# CodeIgniter Spark

Spark is a way to pull down packages automatically

$ tools/spark install -v1.2 gravatar_helper

And then you can load the package like so:

$this->load->spark('gravatar_helper/1.2');
echo Gravatar_helper::from_email('[email protected]');

---

## Adding a package

$ tools/spark install -v1.2 gravatar
$ tools/spark install gravatar # most recent version

## Removing a package

$ tools/spark remove -v1.2 gravatar # remove a specific version
$ tools/spark remove gravatar -f # remove all

## Reinstalling a package

$ tools/spark reinstall -v1.2 gravatar # reinstall a specific version
$ tools/spark reinstall gravatar -f # remove all versions and install latest

## Search for a package

$ tools/spark search gravatar

## List installed packages

$ tools/spark list

## Get Help

$ tools/spark help

---

## Install

Go to your favorite CI project, and run (must have CURL installed):

$ php -r "$(curl -fsSL http://www.getsparks.org/static/install.php)"
4 changes: 4 additions & 0 deletions tools/lib/spark/sources
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# the main repository
getsparks.org

# list other repositories here
Loading

0 comments on commit 79aa2c3

Please sign in to comment.