<?php defined('SYSPATH') or die('No direct access allowed.'); /** * This class overrides Kohana's Core * * @package OSB * @category Modifications * @author Deon George * @copyright (c) 2009-2013 Open Source Billing * @license http://dev.osbill.net/license.html */ abstract class Kohana extends Kohana_Core { /** * Work out our Class Name as per Kohana's standards */ public static function classname($name) { return str_replace(' ','_',ucwords(strtolower(str_replace('_',' ',$name)))); } /** * Find files using a multi-site enabled application * * In order of precedence, we'll return: * 1) site-theme file, ie: site/X/THEME/${file} * 2) site file, ie: site/X/${file} * 3) theme file, ie: THEME/${file} * 4) normal search, ie: ${file} */ public static function find_file($dir,$file,$ext=NULL,$array=FALSE) { // Limit our scope to the following dirs // @note, we cannot have classes checked, since Config() doesnt exist yet $dirs = array('views','media'); if (! in_array($dir,$dirs) OR PHP_SAPI === 'cli') return parent::find_file($dir,$file,$ext,$array); $prefixes = array(''); // Our search order. array_unshift($prefixes,Site::Theme().'/'); array_unshift($prefixes,sprintf('site/%s/',Site::ID())); array_unshift($prefixes,sprintf('site/%s/%s/',Site::ID(),Site::Theme())); foreach ($prefixes as $p) if ($x = parent::find_file($dir,$p.$file,$ext,$array)) break; // We found a path. return $x; } /** * Override Kohana's shutdown_handler() * * When set up for multi-site, we need to disable Kohana's caching * unless each site has exactly the same modules enabled. * This is because Kohana::$file is cached with the enabled modules * and is not OSB multi-site aware. */ public static function shutdown_handler() { // If caching isnt enabled, we can skip this anyway if (! Kohana::$caching) return parent::shutdown_handler(); Kohana::$caching = FALSE; $result = parent::shutdown_handler(); Kohana::$caching = TRUE; return $result; } } ?>