# PLUGIN PREVIEW BY TEXTPATTERN.INFO
if (class_exists('\Textpattern\Tag\Registry')) {
Txp::get('\Textpattern\Tag\Registry')->register('rvm_css');
}
if (txpinterface == 'admin')
{
register_callback('rvm_css_save', 'css', 'css_save');
register_callback('rvm_css_save', 'css', 'css_save_posted');
register_callback('rvm_css_save', 'css', 'del_dec');
register_callback('rvm_css_delete', 'css', 'css_delete');
register_callback('rvm_css_prefs', 'prefs', '', 1);
register_callback('rvm_css_cleanup', 'plugin_lifecycle.rvm_css', 'deleted');
}
function rvm_css($atts)
{
global $txp_error_code, $s, $path_to_site, $rvm_css_dir, $version;
extract(lAtts(array(
'format' => 'url',
'media' => 'screen',
'n' => '',
'name' => '',
'rel' => 'stylesheet',
'title' => '',
), $atts));
if ($n === '' and $name === '')
{
if ($s)
{
$name = safe_field('css', 'txp_section', "name='".doSlash($s)."'");
}
else
{
$name = 'default';
}
}
elseif ($name === '')
{
$name = $n;
}
if ($format === 'link' and strpos($name, ',') !== false)
{
$names = do_list($name);
$css = '';
foreach ($names as $name)
{
$atts['name'] = $name;
$css .= rvm_css($atts);
}
return $css;
}
$file = $rvm_css_dir.'/'.strtolower(sanitizeForUrl($name)).'.css';
if (empty($rvm_css_dir) or !is_readable($path_to_site.'/'.$file))
{
if (version_compare($version, '4.3.0', '>='))
{
unset($atts['n']);
$atts['name'] = $name;
}
else
{
unset($atts['name']);
$atts['n'] = $name;
}
return css($atts);
}
if ($format === 'link')
{
return '<link rel="'.$rel.'" type="text/css"'.
($media ? ' media="'.$media.'"' : '').
($title ? ' title="'.$title.'"' : '').
' href="'.hu.$file.'" />';
}
return hu.$file;
}
function rvm_css_save()
{
global $path_to_site, $rvm_css_dir;
$name = (ps('copy') or ps('savenew')) ? ps('newname') : ps('name');
$filename = strtolower(sanitizeForUrl($name));
if (empty($rvm_css_dir) or !$filename)
{
return;
}
$css = safe_field('css', 'txp_css', "name='".doSlash($name)."'");
if ($css)
{
if (preg_match('!^[a-zA-Z0-9/+]*={0,2}$!', $css))
{
$css = base64_decode($css);
}
$file = $path_to_site.'/'.$rvm_css_dir.'/'.$filename;
if (class_exists('lessc'))
{
$handle = fopen($file.'.less', 'wb');
fwrite($handle, $css);
fclose($handle);
chmod($file.'.less', 0644);
$less = new lessc();
$less->setFormatter('compressed');
$less->setImportDir($path_to_site.'/'.$rvm_css_dir.'/');
try
{
$css = $less->parse($css);
}
catch (Exception $ex)
{
echo "lessphp fatal error: ".$ex->getMessage();
return;
}
}
$handle = fopen($file.'.css', 'wb');
fwrite($handle, $css);
fclose($handle);
chmod($file.'.css', 0644);
}
}
function rvm_css_delete()
{
global $path_to_site, $rvm_css_dir;
if (safe_field('css', 'txp_css', "name='".doSlash(ps('name'))."'"))
{
return;
}
$name = strtolower(sanitizeForUrl(ps('name')));
$file = $path_to_site.'/'.$rvm_css_dir.'/'.$name;
if (!empty($rvm_css_dir) and $name)
{
unlink($file.'.css');
if (class_exists('lessc'))
{
unlink($file.'.less');
}
}
}
function rvm_css_prefs()
{
global $textarray;
$textarray['rvm_css_dir'] = 'Style directory';
if (!safe_field ('name', 'txp_prefs', "name='rvm_css_dir'"))
{
safe_insert('txp_prefs', "prefs_id=1, name='rvm_css_dir', val='css', type=1, event='admin', html='text_input', position=20");
}
}
function rvm_css_cleanup()
{
safe_delete('txp_prefs', "name='rvm_css_dir'");
}