This commit is contained in:
@@ -21,7 +21,7 @@ class RainTPL{
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
static $tpl_dir = "/resources/templates/provision/";
|
static $tpl_dir = "tpl/";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,7 +29,7 @@ class RainTPL{
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
static $cache_dir = "/tmp/";
|
static $cache_dir = "tmp/";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,7 +45,7 @@ class RainTPL{
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
static $tpl_ext = null;
|
static $tpl_ext = "html";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,7 +100,7 @@ class RainTPL{
|
|||||||
*
|
*
|
||||||
* @var bool
|
* @var bool
|
||||||
*/
|
*/
|
||||||
static $debug = true;
|
static $debug = false;
|
||||||
|
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
@@ -255,8 +255,7 @@ class RainTPL{
|
|||||||
|
|
||||||
if( !isset($this->tpl['checked']) ){
|
if( !isset($this->tpl['checked']) ){
|
||||||
|
|
||||||
$tpl_basename = basename( $tpl_name ); // te
|
$tpl_basename = basename( $tpl_name ); // template basename
|
||||||
mplate basename
|
|
||||||
$tpl_basedir = strpos($tpl_name,"/") ? dirname($tpl_name) . '/' : null; // template basedirectory
|
$tpl_basedir = strpos($tpl_name,"/") ? dirname($tpl_name) . '/' : null; // template basedirectory
|
||||||
$tpl_dir = self::$tpl_dir . $tpl_basedir; // template directory
|
$tpl_dir = self::$tpl_dir . $tpl_basedir; // template directory
|
||||||
$this->tpl['tpl_filename'] = $tpl_dir . $tpl_basename . self::$tpl_ext; // template filename
|
$this->tpl['tpl_filename'] = $tpl_dir . $tpl_basename . self::$tpl_ext; // template filename
|
||||||
@@ -271,8 +270,7 @@ mplate basename
|
|||||||
}
|
}
|
||||||
|
|
||||||
// file doesn't exsist, or the template was updated, Rain will compile the template
|
// file doesn't exsist, or the template was updated, Rain will compile the template
|
||||||
if( !file_exists( $this->tpl['compiled_filename'] ) || ( self::$check_template_update && filemtime($this->tpl['compiled_filename']) < filemtime( $this->tpl['tpl_filename'] )
|
if( !file_exists( $this->tpl['compiled_filename'] ) || ( self::$check_template_update && filemtime($this->tpl['compiled_filename']) < filemtime( $this->tpl['tpl_filename'] ) ) ){
|
||||||
) ){
|
|
||||||
$this->compileFile( $tpl_basename, $tpl_basedir, $this->tpl['tpl_filename'], self::$cache_dir, $this->tpl['compiled_filename'] );
|
$this->compileFile( $tpl_basename, $tpl_basedir, $this->tpl['tpl_filename'], self::$cache_dir, $this->tpl['compiled_filename'] );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -320,8 +318,7 @@ mplate basename
|
|||||||
mkdir( $cache_dir, 0755, true );
|
mkdir( $cache_dir, 0755, true );
|
||||||
|
|
||||||
if( !is_writable( $cache_dir ) )
|
if( !is_writable( $cache_dir ) )
|
||||||
throw new RainTpl_Exception ('Cache directory ' . $cache_dir . 'doesn\'t have write permission. Set write permission or set RAINTPL_CHECK_TEMPLATE_UPDATE to false. More deta
|
throw new RainTpl_Exception ('Cache directory ' . $cache_dir . 'doesn\'t have write permission. Set write permission or set RAINTPL_CHECK_TEMPLATE_UPDATE to false. More details on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Configuration/');
|
||||||
ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Configuration/');
|
|
||||||
|
|
||||||
//write compiled file
|
//write compiled file
|
||||||
file_put_contents( $compiled_filename, $template_compiled );
|
file_put_contents( $compiled_filename, $template_compiled );
|
||||||
@@ -412,8 +409,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
elseif( preg_match( '/\{include="([^"]*)"(?: cache="([^"]*)"){0,1}\}/', $html, $code ) ){
|
elseif( preg_match( '/\{include="([^"]*)"(?: cache="([^"]*)"){0,1}\}/', $html, $code ) ){
|
||||||
|
|
||||||
//variables substitution
|
//variables substitution
|
||||||
$include_var = $this->var_replace( $code[ 1 ], $left_delimiter = null, $right_delimiter = null, $php_left_delimiter = '".' , $php_right_delimiter = '."', $loop_level
|
$include_var = $this->var_replace( $code[ 1 ], $left_delimiter = null, $right_delimiter = null, $php_left_delimiter = '".' , $php_right_delimiter = '."', $loop_level );
|
||||||
);
|
|
||||||
|
|
||||||
// if the cache is active
|
// if the cache is active
|
||||||
if( isset($code[ 2 ]) ){
|
if( isset($code[ 2 ]) ){
|
||||||
@@ -426,8 +422,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
' $tpl_dir_temp = self::$tpl_dir;' .
|
' $tpl_dir_temp = self::$tpl_dir;' .
|
||||||
' $tpl->assign( $this->var );' .
|
' $tpl->assign( $this->var );' .
|
||||||
( !$loop_level ? null : '$tpl->assign( "key", $key'.$loop_level.' ); $tpl->assign( "value", $value'.$loop_level.' );' ).
|
( !$loop_level ? null : '$tpl->assign( "key", $key'.$loop_level.' ); $tpl->assign( "value", $value'.$loop_level.' );' ).
|
||||||
' $tpl->draw( dirname("'.$include_var.'") . ( substr("'.$include_var.'",-1,1) != "/" ? "/" : "" ) . basename("'.$include_var.'"
|
' $tpl->draw( dirname("'.$include_var.'") . ( substr("'.$include_var.'",-1,1) != "/" ? "/" : "" ) . basename("'.$include_var.'") );'.
|
||||||
) );'.
|
|
||||||
'} ?>';
|
'} ?>';
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -437,8 +432,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
'$tpl_dir_temp = self::$tpl_dir;' .
|
'$tpl_dir_temp = self::$tpl_dir;' .
|
||||||
'$tpl->assign( $this->var );' .
|
'$tpl->assign( $this->var );' .
|
||||||
( !$loop_level ? null : '$tpl->assign( "key", $key'.$loop_level.' ); $tpl->assign( "value", $value'.$loop_level.' );' ).
|
( !$loop_level ? null : '$tpl->assign( "key", $key'.$loop_level.' ); $tpl->assign( "value", $value'.$loop_level.' );' ).
|
||||||
'$tpl->draw( dirname("'.$include_var.'") . ( substr("'.$include_var.'",-1,1) != "/" ? "/" : "" ) . basename("'.$include_var
|
'$tpl->draw( dirname("'.$include_var.'") . ( substr("'.$include_var.'",-1,1) != "/" ? "/" : "" ) . basename("'.$include_var.'") );'.
|
||||||
.'") );'.
|
|
||||||
'?>';
|
'?>';
|
||||||
|
|
||||||
|
|
||||||
@@ -453,8 +447,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
$loop_level++;
|
$loop_level++;
|
||||||
|
|
||||||
//replace the variable in the loop
|
//replace the variable in the loop
|
||||||
$var = $this->var_replace( '$' . $code[ 1 ], $tag_left_delimiter=null, $tag_right_delimiter=null, $php_left_delimiter=null, $php_right_delimiter=null, $loop_level-1
|
$var = $this->var_replace( '$' . $code[ 1 ], $tag_left_delimiter=null, $tag_right_delimiter=null, $php_left_delimiter=null, $php_right_delimiter=null, $loop_level-1 );
|
||||||
);
|
|
||||||
|
|
||||||
//loop variables
|
//loop variables
|
||||||
$counter = "\$counter$loop_level"; // count iteration
|
$counter = "\$counter$loop_level"; // count iteration
|
||||||
@@ -496,8 +489,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
$this->function_check( $tag );
|
$this->function_check( $tag );
|
||||||
|
|
||||||
//variable substitution into condition (no delimiter into the condition)
|
//variable substitution into condition (no delimiter into the condition)
|
||||||
$parsed_condition = $this->var_replace( $condition, $tag_left_delimiter = null, $tag_right_delimiter = null, $php_left_delimiter = null, $php_right_delimiter = null,
|
$parsed_condition = $this->var_replace( $condition, $tag_left_delimiter = null, $tag_right_delimiter = null, $php_left_delimiter = null, $php_right_delimiter = null, $loop_level );
|
||||||
$loop_level );
|
|
||||||
|
|
||||||
//if code
|
//if code
|
||||||
$compiled_code .= "<?php if( $parsed_condition ){ ?>";
|
$compiled_code .= "<?php if( $parsed_condition ){ ?>";
|
||||||
@@ -514,8 +506,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
$condition = $code[ 1 ];
|
$condition = $code[ 1 ];
|
||||||
|
|
||||||
//variable substitution into condition (no delimiter into the condition)
|
//variable substitution into condition (no delimiter into the condition)
|
||||||
$parsed_condition = $this->var_replace( $condition, $tag_left_delimiter = null, $tag_right_delimiter = null, $php_left_delimiter = null, $php_right_delimiter = null,
|
$parsed_condition = $this->var_replace( $condition, $tag_left_delimiter = null, $tag_right_delimiter = null, $php_left_delimiter = null, $php_right_delimiter = null, $loop_level );
|
||||||
$loop_level );
|
|
||||||
|
|
||||||
//elseif code
|
//elseif code
|
||||||
$compiled_code .= "<?php }elseif( $parsed_condition ){ ?>";
|
$compiled_code .= "<?php }elseif( $parsed_condition ){ ?>";
|
||||||
@@ -556,8 +547,7 @@ ils on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Con
|
|||||||
$parsed_function = $function . "()";
|
$parsed_function = $function . "()";
|
||||||
else
|
else
|
||||||
// parse the function
|
// parse the function
|
||||||
$parsed_function = $function . $this->var_replace( $code[ 2 ], $tag_left_delimiter = null, $tag_right_delimiter = null, $php_left_delimiter = null, $php_righ
|
$parsed_function = $function . $this->var_replace( $code[ 2 ], $tag_left_delimiter = null, $tag_right_delimiter = null, $php_left_delimiter = null, $php_right_delimiter = null, $loop_level );
|
||||||
t_delimiter = null, $loop_level );
|
|
||||||
|
|
||||||
//if code
|
//if code
|
||||||
$compiled_code .= "<?php echo $parsed_function; ?>";
|
$compiled_code .= "<?php echo $parsed_function; ?>";
|
||||||
@@ -578,14 +568,11 @@ t_delimiter = null, $loop_level );
|
|||||||
else{
|
else{
|
||||||
|
|
||||||
//variables substitution (es. {$title})
|
//variables substitution (es. {$title})
|
||||||
$html = $this->var_replace( $html, $left_delimiter = '\{', $right_delimiter = '\}', $php_left_delimiter = '<?php ', $php_right_delimiter = ';?>', $loop_level, $echo
|
$html = $this->var_replace( $html, $left_delimiter = '\{', $right_delimiter = '\}', $php_left_delimiter = '<?php ', $php_right_delimiter = ';?>', $loop_level, $echo = true );
|
||||||
= true );
|
|
||||||
//const substitution (es. {#CONST#})
|
//const substitution (es. {#CONST#})
|
||||||
$html = $this->const_replace( $html, $left_delimiter = '\{', $right_delimiter = '\}', $php_left_delimiter = '<?php ', $php_right_delimiter = ';?>', $loop_level, $ech
|
$html = $this->const_replace( $html, $left_delimiter = '\{', $right_delimiter = '\}', $php_left_delimiter = '<?php ', $php_right_delimiter = ';?>', $loop_level, $echo = true );
|
||||||
o = true );
|
|
||||||
//functions substitution (es. {"string"|functions})
|
//functions substitution (es. {"string"|functions})
|
||||||
$compiled_code .= $this->func_replace( $html, $left_delimiter = '\{', $right_delimiter = '\}', $php_left_delimiter = '<?php ', $php_right_delimiter = ';?>', $loop_le
|
$compiled_code .= $this->func_replace( $html, $left_delimiter = '\{', $right_delimiter = '\}', $php_left_delimiter = '<?php ', $php_right_delimiter = ';?>', $loop_level, $echo = true );
|
||||||
vel, $echo = true );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,32 +619,27 @@ vel, $echo = true );
|
|||||||
$exp = $sub = array();
|
$exp = $sub = array();
|
||||||
|
|
||||||
if( in_array( "img", self::$path_replace_list ) ){
|
if( in_array( "img", self::$path_replace_list ) ){
|
||||||
$exp = array( '/<img(.*?)src=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<img(.*?)src=(?:")([^"]+?)#(?:")/i', '/<img(.*?)src="(.*?)"/', '/<img(.*?)src=(?:\@)([^"]+?)(
|
$exp = array( '/<img(.*?)src=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<img(.*?)src=(?:")([^"]+?)#(?:")/i', '/<img(.*?)src="(.*?)"/', '/<img(.*?)src=(?:\@)([^"]+?)(?:\@)/i' );
|
||||||
?:\@)/i' );
|
|
||||||
$sub = array( '<img$1src=@$2://$3@', '<img$1src=@$2@', '<img$1src="' . $path . '$2"', '<img$1src="$2"' );
|
$sub = array( '<img$1src=@$2://$3@', '<img$1src=@$2@', '<img$1src="' . $path . '$2"', '<img$1src="$2"' );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( in_array( "script", self::$path_replace_list ) ){
|
if( in_array( "script", self::$path_replace_list ) ){
|
||||||
$exp = array_merge( $exp , array( '/<script(.*?)src=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<script(.*?)src=(?:")([^"]+?)#(?:")/i', '/<script(.*?)src="(.*?)"/', '
|
$exp = array_merge( $exp , array( '/<script(.*?)src=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<script(.*?)src=(?:")([^"]+?)#(?:")/i', '/<script(.*?)src="(.*?)"/', '/<script(.*?)src=(?:\@)([^"]+?)(?:\@)/i' ) );
|
||||||
/<script(.*?)src=(?:\@)([^"]+?)(?:\@)/i' ) );
|
|
||||||
$sub = array_merge( $sub , array( '<script$1src=@$2://$3@', '<script$1src=@$2@', '<script$1src="' . $path . '$2"', '<script$1src="$2"' ) );
|
$sub = array_merge( $sub , array( '<script$1src=@$2://$3@', '<script$1src=@$2@', '<script$1src="' . $path . '$2"', '<script$1src="$2"' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( in_array( "link", self::$path_replace_list ) ){
|
if( in_array( "link", self::$path_replace_list ) ){
|
||||||
$exp = array_merge( $exp , array( '/<link(.*?)href=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<link(.*?)href=(?:")([^"]+?)#(?:")/i', '/<link(.*?)href="(.*?)"/', '/<l
|
$exp = array_merge( $exp , array( '/<link(.*?)href=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<link(.*?)href=(?:")([^"]+?)#(?:")/i', '/<link(.*?)href="(.*?)"/', '/<link(.*?)href=(?:\@)([^"]+?)(?:\@)/i' ) );
|
||||||
ink(.*?)href=(?:\@)([^"]+?)(?:\@)/i' ) );
|
|
||||||
$sub = array_merge( $sub , array( '<link$1href=@$2://$3@', '<link$1href=@$2@' , '<link$1href="' . $path . '$2"', '<link$1href="$2"' ) );
|
$sub = array_merge( $sub , array( '<link$1href=@$2://$3@', '<link$1href=@$2@' , '<link$1href="' . $path . '$2"', '<link$1href="$2"' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( in_array( "a", self::$path_replace_list ) ){
|
if( in_array( "a", self::$path_replace_list ) ){
|
||||||
$exp = array_merge( $exp , array( '/<a(.*?)href=(?:")(http\:\/\/|https\:\/\/|javascript:)([^"]+?)(?:")/i', '/<a(.*?)href="(.*?)"/', '/<a(.*?)href=(?:\@)([^"]+?)(?:\@
|
$exp = array_merge( $exp , array( '/<a(.*?)href=(?:")(http\:\/\/|https\:\/\/|javascript:)([^"]+?)(?:")/i', '/<a(.*?)href="(.*?)"/', '/<a(.*?)href=(?:\@)([^"]+?)(?:\@)/i' ) );
|
||||||
)/i' ) );
|
|
||||||
$sub = array_merge( $sub , array( '<a$1href=@$2$3@', '<a$1href="' . self::$base_url . '$2"', '<a$1href="$2"' ) );
|
$sub = array_merge( $sub , array( '<a$1href=@$2$3@', '<a$1href="' . self::$base_url . '$2"', '<a$1href="$2"' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( in_array( "input", self::$path_replace_list ) ){
|
if( in_array( "input", self::$path_replace_list ) ){
|
||||||
$exp = array_merge( $exp , array( '/<input(.*?)src=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<input(.*?)src=(?:")([^"]+?)#(?:")/i', '/<input(.*?)src="(.*?)"/', '/<i
|
$exp = array_merge( $exp , array( '/<input(.*?)src=(?:")(http|https)\:\/\/([^"]+?)(?:")/i', '/<input(.*?)src=(?:")([^"]+?)#(?:")/i', '/<input(.*?)src="(.*?)"/', '/<input(.*?)src=(?:\@)([^"]+?)(?:\@)/i' ) );
|
||||||
nput(.*?)src=(?:\@)([^"]+?)(?:\@)/i' ) );
|
|
||||||
$sub = array_merge( $sub , array( '<input$1src=@$2://$3@', '<input$1src=@$2@', '<input$1src="' . $path . '$2"', '<input$1src="$2"' ) );
|
$sub = array_merge( $sub , array( '<input$1src=@$2://$3@', '<input$1src=@$2@', '<input$1src="' . $path . '$2"', '<input$1src="$2"' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -764,11 +746,9 @@ nput(.*?)src=(?:\@)([^"]+?)(?:\@)/i' ) );
|
|||||||
// compile the variable for php
|
// compile the variable for php
|
||||||
if( isset( $function ) ){
|
if( isset( $function ) ){
|
||||||
if( $php_var )
|
if( $php_var )
|
||||||
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . ( $params ? "( $function( $php_var, $params ) )" : "$function( $php_var )
|
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . ( $params ? "( $function( $php_var, $params ) )" : "$function( $php_var )" ) . $php_right_delimiter;
|
||||||
" ) . $php_right_delimiter;
|
|
||||||
else
|
else
|
||||||
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . ( $params ? "( $function( $params ) )" : "$function()" ) . $php_right_del
|
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . ( $params ? "( $function( $params ) )" : "$function()" ) . $php_right_delimiter;
|
||||||
imiter;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . $php_var . $extra_var . $php_right_delimiter;
|
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . $php_var . $extra_var . $php_right_delimiter;
|
||||||
@@ -786,8 +766,7 @@ imiter;
|
|||||||
function var_replace( $html, $tag_left_delimiter, $tag_right_delimiter, $php_left_delimiter = null, $php_right_delimiter = null, $loop_level = null, $echo = null ){
|
function var_replace( $html, $tag_left_delimiter, $tag_right_delimiter, $php_left_delimiter = null, $php_right_delimiter = null, $loop_level = null, $echo = null ){
|
||||||
|
|
||||||
//all variables
|
//all variables
|
||||||
if( preg_match_all( '/' . $tag_left_delimiter . '\$(\w+(?:\.\${0,1}[A-Za-z0-9_]+)*(?:(?:\[\${0,1}[A-Za-z0-9_]+\])|(?:\-\>\${0,1}[A-Za-z0-9_]+))*)(.*?)' . $tag_right_delimiter . '/',
|
if( preg_match_all( '/' . $tag_left_delimiter . '\$(\w+(?:\.\${0,1}[A-Za-z0-9_]+)*(?:(?:\[\${0,1}[A-Za-z0-9_]+\])|(?:\-\>\${0,1}[A-Za-z0-9_]+))*)(.*?)' . $tag_right_delimiter . '/', $html, $matches ) ){
|
||||||
$html, $matches ) ){
|
|
||||||
|
|
||||||
for( $parsed=array(), $i=0, $n=count($matches[0]); $i<$n; $i++ )
|
for( $parsed=array(), $i=0, $n=count($matches[0]); $i<$n; $i++ )
|
||||||
$parsed[$matches[0][$i]] = array('var'=>$matches[1][$i],'extra_var'=>$matches[2][$i]);
|
$parsed[$matches[0][$i]] = array('var'=>$matches[1][$i],'extra_var'=>$matches[2][$i]);
|
||||||
@@ -879,8 +858,7 @@ imiter;
|
|||||||
|
|
||||||
// compile the variable for php
|
// compile the variable for php
|
||||||
if( isset( $function ) )
|
if( isset( $function ) )
|
||||||
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . ( $params ? "( $function( $php_var, $params ) )" : "$function( $php_var )" )
|
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . ( $params ? "( $function( $php_var, $params ) )" : "$function( $php_var )" ) . $php_right_delimiter;
|
||||||
. $php_right_delimiter;
|
|
||||||
else
|
else
|
||||||
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . $php_var . $extra_var . $php_right_delimiter;
|
$php_var = $php_left_delimiter . ( !$is_init_variable && $echo ? 'echo ' : null ) . $php_var . $extra_var . $php_right_delimiter;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user