Version 4.0.13.1
This commit is contained in:
1 parent
f9e857d255
commit
c6a86f0d9b
7517 files changed
+597400
-668041
No files matched your search
@@ -0,0 +1,220 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief IN_DEV Skin Set
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @since 12 May 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\Email\Theme;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* IN_DEV Skin set
|
||||
*/
|
||||
class _Theme extends \IPS\Theme
|
||||
{
|
||||
/**
|
||||
* @brief Template Classes
|
||||
*/
|
||||
protected $templates;
|
||||
|
||||
/**
|
||||
* @brief [SkinSets] Templates already loaded and evald via getTemplate()
|
||||
*/
|
||||
public static $calledTemplates = array();
|
||||
|
||||
/**
|
||||
* Get currently logged in member's theme
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function i()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write IN_DEV files
|
||||
*
|
||||
* @param boolean $force TRUE to rewrite templates, FALSE to check if exists first
|
||||
* @return void
|
||||
*/
|
||||
public static function writeInDev( $force=FALSE )
|
||||
{
|
||||
$path = \IPS\ROOT_PATH . '/applications/content/dev/html';
|
||||
|
||||
if ( ! \IPS\IN_DEV OR ! is_writeable( $path ) )
|
||||
{
|
||||
throw new \DomainException();
|
||||
}
|
||||
|
||||
foreach( \IPS\Db::i()->select( '*', 'content_templates', array( 'template_master=?', 1 ) ) as $template )
|
||||
{
|
||||
if ( ! is_dir( $path . '/' . $template['template_location'] ) )
|
||||
{
|
||||
mkdir( $path . '/' . $template['template_location'] );
|
||||
@chmod( $path . '/' . $template['template_location'], \IPS\IPS_FOLDER_PERMISSION );
|
||||
}
|
||||
|
||||
if ( ! is_dir( $path . '/' . $template['template_location'] . '/' . $template['template_group'] ) )
|
||||
{
|
||||
mkdir( $path . '/' . $template['template_location'] . '/' . $template['template_group'] );
|
||||
@chmod( $path . '/' . $template['template_location'] . '/' . $template['template_group'], \IPS\IPS_FOLDER_PERMISSION );
|
||||
}
|
||||
|
||||
$container = NULL;
|
||||
|
||||
if ( ! file_exists( $path . '/' . $template['template_location'] . '/' . $template['template_group'] . '/' . $template['template_key'] . '.phtml' ) OR $force === TRUE )
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( $template['template_container'] )
|
||||
{
|
||||
$item = \IPS\content\Templates\Container::load( $template['template_container'] );
|
||||
|
||||
$container = array(
|
||||
'name' => $item->name,
|
||||
'type' => $item->type,
|
||||
'parent_id' => $item->parent_id,
|
||||
'key' => $item->key
|
||||
);
|
||||
}
|
||||
}
|
||||
catch( \OutofRangeException $ex ) { }
|
||||
|
||||
$data = json_encode( array(
|
||||
'title' => $template['template_title'],
|
||||
'desc' => $template['template_desc'],
|
||||
'rel_id' => $template['template_rel_id'],
|
||||
'container' => $container
|
||||
) );
|
||||
|
||||
$write = '<ips:template parameters="' . $template['template_params'] . '" data="' . $data . '" />' . "\n";
|
||||
$write .= $template['template_content'];
|
||||
|
||||
if ( ! @\file_put_contents( $path . '/' . $template['template_location'] . '/' . $template['template_group'] . '/' . $template['template_key'] . '.phtml', $write ) )
|
||||
{
|
||||
throw new \RuntimeException( \IPS\Member::loggedIn()->language()->addToStack( 'content_theme_dev_cannot_write_template', FALSE, array( 'sprintf' => array( $path . '/' . $template['template_location'] . '/' . $template['template_group'] . '/' . $template['template_key'] ) ) ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@chmod( $path . '/' . $template['template_location'] . '/' . $template['template_group'] . '/' . $template['template_key'] . '.phtml', 0777 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a template
|
||||
*
|
||||
* @param string $group Template Group
|
||||
* @param string $app Application key (NULL for current application)
|
||||
* @param string $location Template Location (NULL for current template location)
|
||||
* @return \IPS\Theme\Template
|
||||
*/
|
||||
public function getTemplate( $group, $app=NULL, $location=NULL )
|
||||
{
|
||||
/* Do we have an application? */
|
||||
if( $app === NULL )
|
||||
{
|
||||
$app = \IPS\Dispatcher::i()->application->directory;
|
||||
}
|
||||
|
||||
/* How about a template location? */
|
||||
if( $location === NULL )
|
||||
{
|
||||
$location = \IPS\Dispatcher::i()->controllerLocation;
|
||||
}
|
||||
|
||||
/* Get template */
|
||||
if ( \IPS\IN_DEV )
|
||||
{
|
||||
if ( ! isset( $this->templates[ $app ][ $location ][ $group ] ) )
|
||||
{
|
||||
$this->templates[ $app ][ $location ][ $group ] = new \IPS\Email\Theme\Template( $app, $location, $group );
|
||||
}
|
||||
|
||||
return $this->templates[ $app ][ $location ][ $group ];
|
||||
}
|
||||
else
|
||||
{
|
||||
$key = \strtolower( 'template_email_' . static::makeBuiltTemplateLookupHash( $app, $location, $group ) . '_' . $group );
|
||||
|
||||
/* Still here */
|
||||
if ( !in_array( $key, array_keys( self::$calledTemplates ) ) )
|
||||
{
|
||||
/* If we don't have a compiled template, do that now */
|
||||
if ( !isset( \IPS\Data\Store::i()->$key ) )
|
||||
{
|
||||
$functions = array( 'html' => array(), 'plain' => array() );
|
||||
|
||||
/* Get it from the database */
|
||||
foreach( \IPS\Db::i()->select( '*', 'core_email_templates', array( "template_app=? AND template_name LIKE '" . \IPS\Db::i()->real_escape_string( $group ) . "__%'", $app ) ) as $data )
|
||||
{
|
||||
$funcName = mb_substr( $data['template_name'], ( mb_strlen( $group ) + 2 ) );
|
||||
$functions['html'][ $funcName ] = static::compileTemplate( $data['template_content_html'], $funcName, $data['template_data'], true );
|
||||
$functions['plain'][ $funcName ] = static::compileTemplate( $data['template_content_plaintext'], $funcName, $data['template_data'], true );
|
||||
}
|
||||
|
||||
/* Put them in a class */
|
||||
foreach( array( 'html', 'plain' ) as $type )
|
||||
{
|
||||
$var = 'template_' . $type;
|
||||
${$var} = <<<EOF
|
||||
namespace IPS\Theme;
|
||||
class class_email_{$app}_{$type}_{$group}
|
||||
{
|
||||
|
||||
EOF;
|
||||
${$var} .= implode( "\n\n", $functions[ $type ] );
|
||||
|
||||
${$var} .= <<<EOF
|
||||
}
|
||||
EOF;
|
||||
$storeKey = \strtolower( 'template_email_' . static::makeBuiltTemplateLookupHash( $app, $type, $group ) . '_' . $group );
|
||||
\IPS\Data\Store::i()->$storeKey = ${$var};
|
||||
}
|
||||
}
|
||||
|
||||
/* Load compiled template */
|
||||
$compiledGroup = \IPS\Data\Store::i()->$key;
|
||||
|
||||
if ( @eval( $compiledGroup ) === FALSE )
|
||||
{
|
||||
throw new \UnexpectedValueException;
|
||||
}
|
||||
|
||||
/* Hooks */
|
||||
$class = 'class_email_' . $app . '_' . $location . '_' . $group;
|
||||
$class = "\IPS\Theme\\{$class}";
|
||||
|
||||
/* Init */
|
||||
self::$calledTemplates[ $key ] = new $class();
|
||||
}
|
||||
|
||||
return self::$calledTemplates[ $key ];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the path for the IN_DEV .phtml files
|
||||
* @param string $app Application Key
|
||||
* @param string|null $location Location
|
||||
* @param string|null $path Path or Filename
|
||||
* @return string
|
||||
*/
|
||||
protected static function _getHtmlPath( $app, $location=null, $path=null )
|
||||
{
|
||||
return rtrim( \IPS\ROOT_PATH . "/applications/{$app}/dev/html/{$location}/{$path}", '/' ) . '/';
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user