forked from bruno/pabx-app
Lucas Awade
8 months ago
212 changed files with 2510 additions and 9362 deletions
@ -1,121 +0,0 @@ |
|||||||
<html> |
|
||||||
<head> |
|
||||||
<style> |
|
||||||
body, p { |
|
||||||
font-family: Arial, Helvetica, sans-serif; |
|
||||||
font-size: 12px; |
|
||||||
} |
|
||||||
div.width { |
|
||||||
width: 500px; |
|
||||||
text-align: left; |
|
||||||
} |
|
||||||
</style> |
|
||||||
<script> |
|
||||||
<!-- |
|
||||||
var popsite = "http://phpmailer.codeworxtech.com" |
|
||||||
var withfeatures = "width=960,height=760,scrollbars=1,resizable=1,toolbar=1,location=1,menubar=1,status=1,directories=0" |
|
||||||
var once_per_session = 0 |
|
||||||
function get_cookie(Name) { |
|
||||||
var search = Name + "=" |
|
||||||
var returnvalue = ""; |
|
||||||
if (document.cookie.length > 0) { |
|
||||||
offset = document.cookie.indexOf(search) |
|
||||||
if (offset != -1) { // if cookie exists |
|
||||||
offset += search.length |
|
||||||
// set index of beginning of value |
|
||||||
end = document.cookie.indexOf(";", offset); |
|
||||||
// set index of end of cookie value |
|
||||||
if (end == -1) |
|
||||||
end = document.cookie.length; |
|
||||||
returnvalue = unescape(document.cookie.substring(offset, end)) |
|
||||||
} |
|
||||||
} |
|
||||||
return returnvalue; |
|
||||||
} |
|
||||||
function loadornot() { |
|
||||||
if (get_cookie('popsite') == '') { |
|
||||||
loadpopsite() |
|
||||||
document.cookie = "popsite=yes" |
|
||||||
} |
|
||||||
} |
|
||||||
function loadpopsite() { |
|
||||||
win2 = window.open(popsite, "", withfeatures) |
|
||||||
win2.blur() |
|
||||||
window.focus() |
|
||||||
} |
|
||||||
if (once_per_session == 0) { |
|
||||||
loadpopsite() |
|
||||||
} else { |
|
||||||
loadornot() |
|
||||||
} |
|
||||||
--> |
|
||||||
</script> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<center> |
|
||||||
<div class="width"> |
|
||||||
<hr> |
|
||||||
The http://phpmailer.codeworxtech.com/ website now carries a few |
|
||||||
advertisements through the Google Adsense network to help offset |
|
||||||
some of our costs.<br /> |
|
||||||
Thanks ....<br /> |
|
||||||
<hr> |
|
||||||
<p><b>My name is Andy Prevost, AKA "codeworxtech".</b><br /> |
|
||||||
<a href="http://www.codeworxtech.com">www.codeworxtech.com</a> for more information.<br /> |
|
||||||
</p> |
|
||||||
<p><strong>WHY USE OUR TOOLS & WHAT'S IN IT FOR YOU?</strong></p> |
|
||||||
<p>A valid question. We're developers too. We've been writing software, primarily for the internet, for more than 15 years. Along the way, there are two major things that had tremendous impact of our company: PHP and Open Source. PHP is without doubt the most popular platform for the internet. There has been more progress in this area of technology because of Open Source software than in any other IT segment. We have used many open source tools, some as learning tools, some as components in projects we were working on. To us, it's not about popularity ... we're committed to robust, stable, and efficient tools you can use to get your projects in your user's hands quickly. So the shorter answer: what's in it for you? rapid development and rapid deployment without fuss and with straight forward open source licensing.</p> |
|
||||||
<p>Now, the introductions:</p> |
|
||||||
<p>Our company, <strong>Worx International Inc.</strong>, is the publisher of several Open Source applications and developer tools as well as several commercial PHP applications. The Open Source applications are ttCMS and DCP Portal. The Open Source developer tools include QuickComponents (QuickSkin and QuickCache) and now PHPMailer. |
|
||||||
We have staff and offices in the United States, Caribbean, the Middle |
|
||||||
East, and our primary development center in Canada. Our company is represented by |
|
||||||
agents and resellers globally.</p> |
|
||||||
<p><strong>Worx International Inc.</strong> is at the forefront of developing PHP applications. Our staff are all Zend Certified university educated and experts at object oriented programming. While <strong>Worx International Inc.</strong> can handle any project from trouble shooting programs written by others all the way to finished mission-critical applications, we specialize in taking projects from inception all the way through to implementation - on budget, and on time. If you need help with your projects, we're the team to get it done right at a reasonable price.</p> |
|
||||||
<p>Over the years, there have been a number of tools that have been constant favorites in all of our projects. We have become the project administrators for most of these tools.</p> |
|
||||||
<p>Our developer tools are all Open Source. Here's a brief description:</p> |
|
||||||
<ul> |
|
||||||
<li><span style="background-color: #FFFF00"><strong>PHPMailer</strong></span>. Originally authored by Brent Matzelle, PHPMailer is the leading "email transfer class" for PHP. PHPMailer is downloaded more than 18000 times each and every month by developers looking for a stable, simple email solution. We used it ourselves for years as our favorite tool. It's always been small (the entire footprint is around 100 Kb), stable, and as complete a solution as you can find. Other tools are nowhere near as simple. And more importantly, most of our applications (including PHPMailer) is implemented in a smaller footprint than one competing email class. Our thanks to Brent Matzelle for this superb tool - our commitment is to keep it lean, keep it focused, and compliant with standards. Visit the PHPMailer website at |
|
||||||
<a href="http://phpmailer.codeworxtech.com/">http://phpmailer.codeworxtech.com/</a>. <br /> |
|
||||||
Please note: <strong>all of our focus is now on the PHPMailer for PHP5.</strong><br /> |
|
||||||
<span style="background-color: #FFFF00">PS. While you are at it, please visit our sponsor's sites, click on their ads. |
|
||||||
It helps offset some of our costs.</span><br /> |
|
||||||
Want to help? We're looking for progressive developers to join our team of volunteer professionals working on PHPMailer. Our entire focus is on PHPMailer for PHP5, and our next major task is to enhance our |
|
||||||
exception/error handling with PHP 5's object oriented try/throw/catch mechanisms. If you are interested, let us know.<br /> |
|
||||||
<br /> |
|
||||||
</li> |
|
||||||
<li><strong><span style="background-color: #FFFF00">QuickCache</span></strong>. Originally authored by Jean Pierre Deckers as jpCache, QuickCache is an HTTP OpCode caching strategy that works on your entire site with only one line of code at the top of your script. The cached pages can be stored as files or as database objects. The benefits are absolutely astounding: bandwidth savings of up to 80% and screen display times increased by 8 - 10x. Visit the QuickCache website at |
|
||||||
<a href="http://quickcache.codeworxtech.com/">http://quickcache.codeworxtech.com/</a>.<br /> |
|
||||||
<br /> |
|
||||||
</li> |
|
||||||
<li><strong><span style="background-color: #FFFF00">QuickSkin</span></strong>. Originally authored by Philipp v. Criegern and named "SmartTemplate". The project was taken over by Manuel 'EndelWar' Dalla Lana and now by "codeworxtech". QuickSkin is one of the truly outstanding templating engines available, but has always been confused with Smarty Templating Engine. QuickSkin is even more relevant today than when it was launched. It's a small footprint with big impact on your projects. It features a built in caching technology, token based substitution, and works on the concept of one single HTML file as the template. The HTML template file can contain variable information making it one small powerful tool for your developer tool kit. Visit the QuickSkin website at |
|
||||||
<a href="http://quickskin.codeworxtech.com/">http://quickskin.codeworxtech.com/</a>.<br /> |
|
||||||
<br /> |
|
||||||
</li> |
|
||||||
</ul> |
|
||||||
<p>We're committed to PHP and to the Open Source community.</p> |
|
||||||
<p>Opportunities with <strong>Worx International Inc.</strong>:</p> |
|
||||||
<ul> |
|
||||||
<li><span style="background-color: #FFFF00">Resellers/Agents</span>: We're always interested in talking with companies that |
|
||||||
want to represent |
|
||||||
<strong>Worx International Inc.</strong> in their markets. We also have private label programs for our commercial products (in certain circumstances).</li> |
|
||||||
<li>Programmers/Developers: We are usually fully staffed, however, if you would like to be considered for a career with |
|
||||||
<strong>Worx International Inc.</strong>, we would be pleased to hear from you.<br /> |
|
||||||
A few things to note:<br /> |
|
||||||
<ul> |
|
||||||
<li>experience level does not matter: from fresh out of college to multi-year experience - it's your |
|
||||||
creative mind and a positive attitude we want</li> |
|
||||||
<li>if you contact us looking for employment, include a cover letter, indicate what type of work/career you are looking for and expected compensation</li> |
|
||||||
<li>if you are representing someone else looking for work, do not contact us. We have an exclusive relationship with a recruiting partner already and not interested in altering the arrangement. We will not hire your candidate under any circumstances unless they wish to approach us individually.</li> |
|
||||||
<li>any contact that ignores any of these points will be discarded</li> |
|
||||||
</ul></li> |
|
||||||
<li>Affiliates/Partnerships: We are interested in partnering with other firms who are leaders in their field. We clearly understand that successful companies are built on successful relationships in all industries world-wide. We currently have innovative relationships throughout the world that are mutually beneficial. Drop us a line and let's talk.</li> |
|
||||||
</ul> |
|
||||||
Regards,<br /> |
|
||||||
Andy Prevost (aka, codeworxtech)<br /> |
|
||||||
<a href="mailto:codeworxtech@users.sourceforge.net">codeworxtech@users.sourceforge.net</a><br /> |
|
||||||
<br /> |
|
||||||
We now also offer website design. hosting, and remote forms processing. Visit <a href="http://www.worxstudio.com/" target="_blank">WorxStudio.com</a> for more information.<br /> |
|
||||||
</div> |
|
||||||
</center> |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="5e590970 30c 1ab 0 0 30c 4d 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="1f952a6b 30c 1ab 0 4d 5f 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="3b29a27c 30c 1ab 5f 4d 75 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="49b52f98 30c 1ab d4 4d 75 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="35cdabc8 30c 1ab 149 4d 96 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="16ab108c 30c 1ab 1df 4d 12d 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="7866f63d 30c 1ab 0 87 30c 124 0" /> |
|
||||||
</info> |
|
@ -0,0 +1,113 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\controllers; |
||||||
|
|
||||||
|
use app\models\AuditaFull; |
||||||
|
use app\models\OrganizacaoUsuario; |
||||||
|
use app\models\Token; |
||||||
|
use app\models\Usuario; |
||||||
|
use Slim\Routing\RouteCollectorProxy; |
||||||
|
use Psr\Http\Message\ResponseInterface as Response; |
||||||
|
use Psr\Http\Message\ServerRequestInterface as Request; |
||||||
|
use Firebase\JWT\JWT; |
||||||
|
|
||||||
|
use DateTime; |
||||||
|
|
||||||
|
class AuthController |
||||||
|
{ |
||||||
|
const CONF_JWT_SECRET_KEY = '$2y$10$SfYYXbZxidLwSlFjoVIzJOOWbZzXQyvPDbCtI5E998Hn.TASJVnkm'; |
||||||
|
|
||||||
|
static function route() |
||||||
|
{ |
||||||
|
return function (RouteCollectorProxy $group) { |
||||||
|
$group->post('/auth', [self::class, 'auth']); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function auth(Request $request, Response $response, $args) |
||||||
|
{ |
||||||
|
$body = json_decode($request->getBody()->getContents(), true); |
||||||
|
|
||||||
|
if (empty($body['senha']) || empty($body['email'])) { |
||||||
|
$response->getBody()->write(json_encode( |
||||||
|
[ |
||||||
|
'status' => false, |
||||||
|
'data' => ["message" => "Por favor verifique as informacoes passadas!"] |
||||||
|
] |
||||||
|
)); |
||||||
|
return $response; |
||||||
|
} |
||||||
|
|
||||||
|
$usuario = Usuario::find(["email" => $body['email']], ['id', 'nome', 'apelido', 'email', 'senha']); |
||||||
|
|
||||||
|
if (!$usuario || md5($body['senha']) != $usuario->senha) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Usuario e senha nao confere, por favor verifique as informacoes passadas!"]])); |
||||||
|
return $response; |
||||||
|
} |
||||||
|
|
||||||
|
$expiredat = (new \DateTime())->modify('+1 days')->format('Y-m-d H:i:s'); |
||||||
|
$tokenPayload = ['sub' => $usuario->id, 'name' => $usuario->nome, 'email' => $usuario->email, 'expired_at' => $expiredat]; |
||||||
|
$tokens = Token::find(["id_usuario" => $usuario->id]); |
||||||
|
|
||||||
|
if ($tokens) { |
||||||
|
$expiredDate = new DateTime($tokens->expired_at); |
||||||
|
$now = new DateTime(); |
||||||
|
if ($expiredDate < $now) { |
||||||
|
Token::delete(["id" => $tokens->id]); |
||||||
|
} else { |
||||||
|
$response->getBody()->write(json_encode(['status' => true, 'data' => ["token" => $tokens->token, "refresh_token" => $tokens->refresh_token]])); |
||||||
|
return $response; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
$token = JWT::encode($tokenPayload, self::CONF_JWT_SECRET_KEY, 'HS256'); |
||||||
|
$refreshToken = JWT::encode(['email' => $usuario->email], self::CONF_JWT_SECRET_KEY, 'HS256'); |
||||||
|
|
||||||
|
$insert = [ |
||||||
|
"token" => $token, |
||||||
|
"id_usuario" => $usuario->id, |
||||||
|
"refresh_token" => $refreshToken, |
||||||
|
"expired_at" => $expiredat, |
||||||
|
"updated_at" => date('Y-m-d H:i:s') |
||||||
|
]; |
||||||
|
|
||||||
|
$isCreated = Token::create($insert); |
||||||
|
|
||||||
|
if (!$isCreated) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel gerar o Token de autenticacao!"]])); |
||||||
|
return $response; |
||||||
|
} |
||||||
|
|
||||||
|
$org = OrganizacaoUsuario::find(['id_usuario' => $usuario->id], ['id_organizacao']); |
||||||
|
$org_id = $org->id_organizacao ?? '0'; |
||||||
|
|
||||||
|
$auditoria = [ |
||||||
|
'login' => $usuario->apelido, |
||||||
|
'id_prog' => '1', |
||||||
|
'full_ip' => $_SERVER['REMOTE_ADDR'], |
||||||
|
'full_uid' => time(), |
||||||
|
'full_prog_nome' => 'api.php', |
||||||
|
'full_tipo' => 'POST', |
||||||
|
'full_log' => json_encode( |
||||||
|
[ |
||||||
|
"usuario" => [ |
||||||
|
'id' => $usuario->id, |
||||||
|
'nome' => $usuario->nome, |
||||||
|
'email' => $usuario->email |
||||||
|
], |
||||||
|
"request" => $body, |
||||||
|
"server" => $_SERVER |
||||||
|
], |
||||||
|
true |
||||||
|
), |
||||||
|
'org_id' => $org_id |
||||||
|
]; |
||||||
|
|
||||||
|
AuditaFull::create($auditoria); |
||||||
|
$response->getBody()->write( |
||||||
|
json_encode(['status' => true, 'data' => ["token" => $token, "refresh_token" => $refreshToken]]) |
||||||
|
); |
||||||
|
|
||||||
|
return $response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,102 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\controllers; |
||||||
|
|
||||||
|
use app\models\Bilhetes; |
||||||
|
use app\traits\Validate; |
||||||
|
use Slim\Routing\RouteCollectorProxy; |
||||||
|
use Psr\Http\Message\ResponseInterface as Response; |
||||||
|
use Psr\Http\Message\ServerRequestInterface as Request; |
||||||
|
use Exception; |
||||||
|
|
||||||
|
class CallController |
||||||
|
{ |
||||||
|
use Validate; |
||||||
|
static function route() |
||||||
|
{ |
||||||
|
return function (RouteCollectorProxy $group) { |
||||||
|
$group->post('/bilhetes', [self::class, 'listarBilhetes']); |
||||||
|
$group->post('/eventos', [self::class, 'listarEventos']); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function listarBilhetes(Request $request, Response $response, array $args) |
||||||
|
{ |
||||||
|
try { |
||||||
|
$body = json_decode($request->getBody()->getContents(), true); |
||||||
|
$dados = $this->validateData($request, true); |
||||||
|
|
||||||
|
$query = "SELECT |
||||||
|
a.id_bilhetes AS id, a.calldate AS data_hora, |
||||||
|
a.src AS origem, a.dst AS destino, a.billsec AS tempo_conversacao, |
||||||
|
a.duration AS tempo_atendimento, a.accountcode AS id_transfer, |
||||||
|
a.uniqueid AS uniqueid, a.userfield AS nome_audio, |
||||||
|
a.data_bilhete AS data, a.fora_horario AS fora_horario, |
||||||
|
a.org_id |
||||||
|
FROM pbx_bilhetes a |
||||||
|
WHERE a.lastapp <> 'Transferred Call' "; |
||||||
|
|
||||||
|
$dados['org_id'] = $body['org_id']; |
||||||
|
foreach ($dados as $k => $v) { |
||||||
|
if ($v) { |
||||||
|
$query .= " AND $k = :$k"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
$data = Bilhetes::query($query, $dados); |
||||||
|
if (!$data) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nenhum resultado encontrado!']])); |
||||||
|
} else { |
||||||
|
$response->getBody()->write(json_encode(['status' => true, 'data' => $data])); |
||||||
|
} |
||||||
|
} catch (Exception $e) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]])); |
||||||
|
} |
||||||
|
return $response; |
||||||
|
} |
||||||
|
|
||||||
|
public function listarEventos(Request $request, Response $response, array $args) |
||||||
|
{ |
||||||
|
try { |
||||||
|
$body = json_decode($request->getBody()->getContents(), true); |
||||||
|
$dados = $this->validateData($request, true); |
||||||
|
$query = "SELECT |
||||||
|
a.id_bilhetes AS id, |
||||||
|
a.uniqueid, |
||||||
|
c.id AS fila_id, |
||||||
|
b.fila, |
||||||
|
d.nome, |
||||||
|
d.apelido AS login, |
||||||
|
SUBSTRING(b.agente,7,4) AS matricula, |
||||||
|
b.evento AS evento, |
||||||
|
b.param1 AS param1, |
||||||
|
b.param2 AS param2, |
||||||
|
b.param3 AS param3, |
||||||
|
b.param4 AS param4 |
||||||
|
FROM pbx_bilhetes a |
||||||
|
INNER JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2 |
||||||
|
INNER JOIN pbx_dacs c ON c.nome = b.fila |
||||||
|
INNER JOIN pbx_usuarios d ON d.matricula = SUBSTRING(b.agente,7,4) |
||||||
|
WHERE evento IN ('ABANDON','COMPLETEAGENT','COMPLETECALLER','CONNECT','ENTERQUEUE', |
||||||
|
'EXITWITHTIMEOUT', 'TRANSBORDANDO', 'TRANSBORDADO','TRANSFER', 'TRANSFERORIG', |
||||||
|
'COMPLETACALLER', 'COMPLETAAGENT', 'ANSWERED', 'BUSYS', 'NOANSWERS') "; |
||||||
|
|
||||||
|
$dados['org_id'] = $body['org_id']; |
||||||
|
$data = Bilhetes::query($query, $dados); |
||||||
|
foreach ($dados as $k => $v) { |
||||||
|
if ($v) { |
||||||
|
$query .= " AND $k = :$k"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!$data) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nenhum resultado encontrado!']])); |
||||||
|
} else { |
||||||
|
$response->getBody()->write(json_encode(['status' => true, 'data' => $data])); |
||||||
|
} |
||||||
|
} catch (Exception $e) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]])); |
||||||
|
} |
||||||
|
return $response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\controllers; |
||||||
|
|
||||||
|
use app\models\Queue; |
||||||
|
use app\traits\Validate; |
||||||
|
use Slim\Routing\RouteCollectorProxy; |
||||||
|
use Psr\Http\Message\ResponseInterface as Response; |
||||||
|
use Psr\Http\Message\ServerRequestInterface as Request; |
||||||
|
use Exception; |
||||||
|
|
||||||
|
class QueueController |
||||||
|
{ |
||||||
|
use Validate; |
||||||
|
static function route() |
||||||
|
{ |
||||||
|
return function (RouteCollectorProxy $group) { |
||||||
|
$group->post('/listar', [self::class, 'listarQueue']); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function listarQueue(Request $request, Response $response, array $args) |
||||||
|
{ |
||||||
|
try { |
||||||
|
$body = json_decode($request->getBody()->getContents(), true); |
||||||
|
$dados = $this->validateData($request); |
||||||
|
|
||||||
|
$dados['org_id'] = $body['org_id']; |
||||||
|
|
||||||
|
$data = Queue::find($dados, [ |
||||||
|
'id', "REGEXP_REPLACE(nome, '@[0-9]+', '') AS nome", 'numero', 'musicclass', 'strategy', 'servicelevel', |
||||||
|
'status', 'tempo_ring', 'modo_atendimento', |
||||||
|
'disponivelfila', 'libera_pausa' |
||||||
|
]); |
||||||
|
|
||||||
|
if (!$data) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nenhum resultado encontrado!']])); |
||||||
|
} else { |
||||||
|
$response->getBody()->write(json_encode(['status' => true, 'data' => $data])); |
||||||
|
} |
||||||
|
} catch (Exception $e) { |
||||||
|
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]])); |
||||||
|
} |
||||||
|
return $response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\core; |
||||||
|
|
||||||
|
use PDO; |
||||||
|
|
||||||
|
class Connection |
||||||
|
{ |
||||||
|
private static PDO $instance; |
||||||
|
public static function getInstance() |
||||||
|
{ |
||||||
|
$cd = []; |
||||||
|
if (empty(self::$instance)) { |
||||||
|
$cd = [ |
||||||
|
'host_db' => 'postgres', |
||||||
|
'porta_db' => '5432', |
||||||
|
'base_db' => 'pbx', |
||||||
|
'usuario' => 'contacte', |
||||||
|
'senha' => 'ctepgSQL' |
||||||
|
]; |
||||||
|
self::$instance = new PDO( |
||||||
|
"pgsql:host={$cd['host_db']};port={$cd['porta_db']};dbname={$cd['base_db']}", |
||||||
|
$cd['usuario'], |
||||||
|
$cd['senha'], |
||||||
|
[ |
||||||
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, |
||||||
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, |
||||||
|
PDO::ATTR_CASE => PDO::CASE_NATURAL |
||||||
|
] |
||||||
|
); |
||||||
|
} |
||||||
|
if (self::$instance) { |
||||||
|
return self::$instance; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,90 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\core; |
||||||
|
|
||||||
|
use app\shared\Logger; |
||||||
|
|
||||||
|
use Exception; |
||||||
|
use PDO; |
||||||
|
use PDOException; |
||||||
|
|
||||||
|
class Database |
||||||
|
{ |
||||||
|
private $logger; |
||||||
|
|
||||||
|
public function __construct() |
||||||
|
{ |
||||||
|
$this->logger = new Logger('database_' . date('Ymd')); |
||||||
|
} |
||||||
|
|
||||||
|
public function databaseLog() |
||||||
|
{ |
||||||
|
return $this->logger; |
||||||
|
} |
||||||
|
|
||||||
|
protected function strquery($stmt, $params) |
||||||
|
{ |
||||||
|
foreach ($params as $key => $value) { |
||||||
|
if (is_null($value) || (is_string($value) && $value == '')) { |
||||||
|
$value = null; |
||||||
|
} |
||||||
|
if (is_bool($value)) { |
||||||
|
$value = (int)$value; |
||||||
|
} |
||||||
|
$stmt->bindValue(":{$key}", $value, (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function create($query, $data) |
||||||
|
{ |
||||||
|
try { |
||||||
|
$stmt = Connection::getInstance()->prepare($query); |
||||||
|
$this->strquery($stmt, $data); |
||||||
|
$stmt->execute(); |
||||||
|
return Connection::getInstance()->lastInsertId(); |
||||||
|
} catch (PDOException $e) { |
||||||
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function read($query, $data = null) |
||||||
|
{ |
||||||
|
try { |
||||||
|
$stmt = Connection::getInstance()->prepare($query); |
||||||
|
$this->strquery($stmt, $data); |
||||||
|
$stmt->execute(); |
||||||
|
if ($stmt->rowCount() > 0) { |
||||||
|
return $stmt; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} catch (PDOException $e) { |
||||||
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function delete($query, $data): int |
||||||
|
{ |
||||||
|
try { |
||||||
|
$stmt = Connection::getInstance()->prepare($query); |
||||||
|
$this->strquery($stmt, $data); |
||||||
|
$stmt->execute(); |
||||||
|
return ($stmt->rowCount() ? 1 : 0); |
||||||
|
} catch (Exception $e) { |
||||||
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
function update($query, $data): int |
||||||
|
{ |
||||||
|
try { |
||||||
|
$stmt = Connection::getInstance()->prepare($query); |
||||||
|
$this->strquery($stmt, $data); |
||||||
|
$stmt->execute(); |
||||||
|
return $stmt->rowCount() ? 1 : 0; |
||||||
|
} catch (Exception $e) { |
||||||
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,318 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\core; |
||||||
|
|
||||||
|
use app\core\Database; |
||||||
|
use Exception; |
||||||
|
use stdClass; |
||||||
|
|
||||||
|
abstract class Repository |
||||||
|
{ |
||||||
|
public DataBase $db; |
||||||
|
protected static $table; |
||||||
|
|
||||||
|
public static function create(array $params) |
||||||
|
{ |
||||||
|
$dados = []; |
||||||
|
$db = new Database(); |
||||||
|
try { |
||||||
|
$table = static::$table; |
||||||
|
$query = "INSERT INTO $table ("; |
||||||
|
foreach ($params as $key => $value) { |
||||||
|
$dados[$key] = $value; |
||||||
|
if (array_key_last($params) == $key) { |
||||||
|
$query .= " $key )"; |
||||||
|
} else { |
||||||
|
$query .= " $key, "; |
||||||
|
} |
||||||
|
} |
||||||
|
$query .= " VALUES( "; |
||||||
|
foreach ($params as $key => $value) { |
||||||
|
if (array_key_last($params) == $key) { |
||||||
|
$query .= " :$key );"; |
||||||
|
} else { |
||||||
|
$query .= " :$key, "; |
||||||
|
} |
||||||
|
} |
||||||
|
return $db->create($query, $dados); |
||||||
|
} catch (Exception $e) { |
||||||
|
$db->databaseLog()->error(print_r( |
||||||
|
[ |
||||||
|
'error' => $e->getMessage(), |
||||||
|
__FUNCTION__ => $table, |
||||||
|
'query' => $query, |
||||||
|
'params' => $params |
||||||
|
], |
||||||
|
true |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static function query(string $query, array $params = []) |
||||||
|
{ |
||||||
|
$db = new Database(); |
||||||
|
try { |
||||||
|
$data = $db->read($query, $params); |
||||||
|
if (!$data) { |
||||||
|
return []; |
||||||
|
} |
||||||
|
return $data?->fetchAll(); |
||||||
|
} catch (Exception $e) { |
||||||
|
$db->databaseLog()->error(print_r( |
||||||
|
[ |
||||||
|
'error' => $e->getMessage(), |
||||||
|
__FUNCTION__ => 'custom', |
||||||
|
'query' => $query, |
||||||
|
'params' => $params |
||||||
|
], |
||||||
|
true |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static function find(array $params = [], array $columns = []): array | stdClass |
||||||
|
{ |
||||||
|
$db = new Database(); |
||||||
|
try { |
||||||
|
$table = static::$table; |
||||||
|
$column = count($columns) > 0 ? implode(',', $columns) : "*"; |
||||||
|
$query = "SELECT $column FROM $table WHERE 1 = 1"; |
||||||
|
foreach ($params as $k => $v) { |
||||||
|
$query .= " AND $k = :$k"; |
||||||
|
} |
||||||
|
$db->databaseLog()->error($query); |
||||||
|
|
||||||
|
$data = $db->read($query, $params); |
||||||
|
if (!$data) { |
||||||
|
return []; |
||||||
|
} |
||||||
|
return $data->fetch(); |
||||||
|
} catch (Exception $e) { |
||||||
|
$db->databaseLog()->error(print_r( |
||||||
|
[ |
||||||
|
'error' => $e->getMessage(), |
||||||
|
__FUNCTION__ => $table, |
||||||
|
'query' => $query, |
||||||
|
'params' => $params, |
||||||
|
'columns' => $columns |
||||||
|
], |
||||||
|
true |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static function get(array $params = [], array $columns = []): array | stdClass |
||||||
|
{ |
||||||
|
$db = new Database(); |
||||||
|
try { |
||||||
|
$table = static::$table; |
||||||
|
$column = count($columns) > 0 ? implode(',', $columns) : "*"; |
||||||
|
$query = "SELECT $column FROM $table WHERE 1 = 1"; |
||||||
|
foreach ($params as $k => $v) { |
||||||
|
$query .= " AND $k = :$k"; |
||||||
|
} |
||||||
|
|
||||||
|
$data = $db->read($query, $params); |
||||||
|
if (!$data) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return $data->fetchAll(); |
||||||
|
} catch (Exception $e) { |
||||||
|
$db->databaseLog()->error(print_r( |
||||||
|
[ |
||||||
|
'error' => $e->getMessage(), |
||||||
|
__FUNCTION__ => $table, |
||||||
|
'query' => $query, |
||||||
|
'params' => $params, |
||||||
|
'columns' => $columns |
||||||
|
], |
||||||
|
true |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static function update(array $params, array $where) |
||||||
|
{ |
||||||
|
$db = new Database(); |
||||||
|
try { |
||||||
|
$dados = array_filter($params); |
||||||
|
$table = static::$table; |
||||||
|
$query = "UPDATE $table SET "; |
||||||
|
foreach ($dados as $key => $value) { |
||||||
|
if (array_key_last($dados) == $key) { |
||||||
|
$query .= " $key = :$key"; |
||||||
|
} else { |
||||||
|
$query .= " $key = :$key, "; |
||||||
|
} |
||||||
|
} |
||||||
|
$query .= " WHERE 1 = 1 "; |
||||||
|
if (empty($where)) { |
||||||
|
throw new Exception("Parâmetro (where) é obrigatório! [Table: $table] where: ['column' => 'value']"); |
||||||
|
} |
||||||
|
|
||||||
|
foreach ($where as $column => $value) { |
||||||
|
$query .= "AND $column = :$column"; |
||||||
|
$dados[$column] = $value; |
||||||
|
} |
||||||
|
|
||||||
|
return $db->update($query, $dados); |
||||||
|
} catch (Exception $e) { |
||||||
|
$db->databaseLog()->error(print_r( |
||||||
|
[ |
||||||
|
'error' => $e->getMessage(), |
||||||
|
__FUNCTION__ => $table, |
||||||
|
'query' => $query, |
||||||
|
'params' => $params, |
||||||
|
'where' => $where |
||||||
|
], |
||||||
|
true |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static function delete(array $where): int |
||||||
|
{ |
||||||
|
$db = new Database(); |
||||||
|
try { |
||||||
|
$table = static::$table; |
||||||
|
$dados = []; |
||||||
|
$query = "DELETE FROM $table WHERE 1 = 1"; |
||||||
|
if (empty($where)) { |
||||||
|
throw new Exception("Parâmetro (where) é obrigatório! [Table: $table] where: ['column' => 'value']"); |
||||||
|
} |
||||||
|
|
||||||
|
foreach ($where as $column => $value) { |
||||||
|
$query .= "AND $column = :$column"; |
||||||
|
$dados[$column] = $value; |
||||||
|
} |
||||||
|
|
||||||
|
return $db->delete($query, $dados); |
||||||
|
} catch (Exception $e) { |
||||||
|
$db->databaseLog()->error(print_r( |
||||||
|
[ |
||||||
|
'error' => $e->getMessage(), |
||||||
|
__FUNCTION__ => $table, |
||||||
|
'query' => $query, |
||||||
|
'where' => $where |
||||||
|
], |
||||||
|
true |
||||||
|
)); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// function create(array $params) |
||||||
|
// { |
||||||
|
// $dados = []; |
||||||
|
// try { |
||||||
|
// $table = $this->table; |
||||||
|
// $query = "INSERT INTO $table ("; |
||||||
|
// foreach ($params as $key => $value) { |
||||||
|
// $dados[$key] = $value; |
||||||
|
// if (array_key_last($params) == $key) { |
||||||
|
// $query .= " $key )"; |
||||||
|
// } else { |
||||||
|
// $query .= " $key, "; |
||||||
|
// } |
||||||
|
// } |
||||||
|
// $query .= " VALUES( "; |
||||||
|
// foreach ($params as $key => $value) { |
||||||
|
// if (array_key_last($params) == $key) { |
||||||
|
// $query .= " :$key );"; |
||||||
|
// } else { |
||||||
|
// $query .= " :$key, "; |
||||||
|
// } |
||||||
|
// } |
||||||
|
// return $this->db->create($query, $dados); |
||||||
|
// } catch (Exception $e) { |
||||||
|
// } |
||||||
|
// } |
||||||
|
|
||||||
|
// function list(array $params = []) |
||||||
|
// { |
||||||
|
// try { |
||||||
|
// $table = $this->table; |
||||||
|
// $query = "SELECT * FROM $table"; |
||||||
|
// $data = $this->db->read($query, $params); |
||||||
|
// if (!$data) { |
||||||
|
// return []; |
||||||
|
// } |
||||||
|
// return $data->fetchAll(); |
||||||
|
// } catch (Exception $e) { |
||||||
|
// } |
||||||
|
// } |
||||||
|
|
||||||
|
// function update(array $params, $where) |
||||||
|
// { |
||||||
|
// try { |
||||||
|
// $dados = array_filter($params); |
||||||
|
// $table = $this->table; |
||||||
|
// $query = "UPDATE $table SET "; |
||||||
|
// foreach ($dados as $key => $value) { |
||||||
|
// if (array_key_last($dados) == $key) { |
||||||
|
// $query .= " $key = :$key"; |
||||||
|
// } else { |
||||||
|
// $query .= " $key = :$key, "; |
||||||
|
// } |
||||||
|
// } |
||||||
|
// $query .= " WHERE 1 = 1 "; |
||||||
|
// if (empty($where)) { |
||||||
|
// throw new Exception("Parâmetro (where) é obrigatório! [Table: $table] where: ['column' => 'value']"); |
||||||
|
// } |
||||||
|
|
||||||
|
// foreach ($where as $column => $value) { |
||||||
|
// $query .= "AND $column = :$column"; |
||||||
|
// $dados[$column] = $value; |
||||||
|
// } |
||||||
|
|
||||||
|
// return $this->db->update($query, $dados); |
||||||
|
// } catch (Exception $e) { |
||||||
|
// } |
||||||
|
// } |
||||||
|
|
||||||
|
// function delete(array $where): int |
||||||
|
// { |
||||||
|
// try { |
||||||
|
// $table = $this->table; |
||||||
|
// $dados = []; |
||||||
|
// $query = "DELETE FROM $table WHERE 1 = 1"; |
||||||
|
// if (empty($where)) { |
||||||
|
// throw new Exception("Parâmetro (where) é obrigatório! [Table: $table] where: ['column' => 'value']"); |
||||||
|
// } |
||||||
|
|
||||||
|
// foreach ($where as $column => $value) { |
||||||
|
// $query .= "AND $column = :$column"; |
||||||
|
// $dados[$column] = $value; |
||||||
|
// } |
||||||
|
|
||||||
|
// return $this->db->delete($query, $dados); |
||||||
|
// } catch (Exception $e) { |
||||||
|
// } |
||||||
|
// return 0; |
||||||
|
// } |
||||||
|
|
||||||
|
// function get(array $params = null, $limit = 100) |
||||||
|
// { |
||||||
|
// try { |
||||||
|
// $table = $this->table; |
||||||
|
// $dados = []; |
||||||
|
// $query = "SELECT * FROM $table WHERE 1=1 "; |
||||||
|
// if (empty($params)) { |
||||||
|
// $query .= " ORDER BY 1 LIMIT $limit"; |
||||||
|
// } else { |
||||||
|
// foreach ($params as $column => $value) { |
||||||
|
// $query .= "AND $column = :$column"; |
||||||
|
// $dados[$column] = $value; |
||||||
|
// } |
||||||
|
// } |
||||||
|
|
||||||
|
// $data = $this->db->read($query, $dados); |
||||||
|
// if (!$data) { |
||||||
|
// return []; |
||||||
|
// } |
||||||
|
// return $data->fetch(); |
||||||
|
// } catch (Exception $e) { |
||||||
|
// } |
||||||
|
// } |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\middleware; |
||||||
|
|
||||||
|
use Psr\Http\Message\ServerRequestInterface as Request; |
||||||
|
use Psr\Http\Server\RequestHandlerInterface as RequestHandler; |
||||||
|
use Psr\Http\Message\ResponseInterface; |
||||||
|
use Tuupola\Http\Factory\ResponseFactory; |
||||||
|
use app\traits\AuthToken; |
||||||
|
use Exception; |
||||||
|
|
||||||
|
class AuthMiddleware |
||||||
|
{ |
||||||
|
use AuthToken; |
||||||
|
public function __invoke(Request $request, RequestHandler $handler): ResponseInterface |
||||||
|
{ |
||||||
|
try { |
||||||
|
$this->findToken($request); |
||||||
|
$response = $handler->handle($request); |
||||||
|
} catch (Exception $e) { |
||||||
|
$fac = new ResponseFactory; |
||||||
|
$response = $fac->createResponse(403); |
||||||
|
$message = mb_convert_encoding($e->getMessage(), 'ISO8859-1'); |
||||||
|
$response->withStatus(403)->withHeader('Content-Type', 'application/json')->getBody()->write( |
||||||
|
json_encode(['status' => false, 'data' => ['message' => $message]]) |
||||||
|
); |
||||||
|
} |
||||||
|
return $response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Audita extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_audita'; |
||||||
|
|
||||||
|
static function gravar() |
||||||
|
{ |
||||||
|
/** |
||||||
|
aud_id |
||||||
|
id_prog |
||||||
|
aud_data |
||||||
|
aud_id |
||||||
|
aud_tabela |
||||||
|
aud_campo |
||||||
|
aud_campo_display |
||||||
|
aud_operacao |
||||||
|
aud_valor_antigo |
||||||
|
aud_valor_novo |
||||||
|
reg_id |
||||||
|
aud_uid |
||||||
|
user_reg |
||||||
|
data_reg |
||||||
|
*/ |
||||||
|
//self::create(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class AuditaFull extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_audita_full'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Bilhetes extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_bilhetes'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Organizacao extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_organizacao'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class OrganizacaoUsuario extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_organizacao_usuarios'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Parametro extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_parametros'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Queue extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_queues_grupos'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Token extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_tokens'; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\models; |
||||||
|
|
||||||
|
use app\core\Repository; |
||||||
|
|
||||||
|
class Usuario extends Repository |
||||||
|
{ |
||||||
|
protected static $table = 'pbx_usuarios'; |
||||||
|
} |
@ -0,0 +1,173 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\shared; |
||||||
|
|
||||||
|
/** |
||||||
|
* Classe para utilizar |
||||||
|
* |
||||||
|
* @documentation: |
||||||
|
* @author Lucas Awade |
||||||
|
* @function developer |
||||||
|
* @company SimplesIP |
||||||
|
* @version 1.0.0 |
||||||
|
*/ |
||||||
|
class Logger |
||||||
|
{ |
||||||
|
/* |
||||||
|
* GENERATE LOG |
||||||
|
*/ |
||||||
|
|
||||||
|
private $active; |
||||||
|
private $log; |
||||||
|
private $type; |
||||||
|
private $text; |
||||||
|
|
||||||
|
/* |
||||||
|
* CONF. FILE LOG |
||||||
|
*/ |
||||||
|
private $file; |
||||||
|
private $path; |
||||||
|
private $name; |
||||||
|
|
||||||
|
/* |
||||||
|
* CONST. MESSAGE TYPE |
||||||
|
*/ |
||||||
|
|
||||||
|
const LOG_SUCCESS = "SUCCESS"; |
||||||
|
const LOG_DEBUG = "DEBUG"; |
||||||
|
const LOG_INFO = "INFO"; |
||||||
|
const LOG_WARNING = "WARNING"; |
||||||
|
const LOG_ERROR = "ERROR"; |
||||||
|
|
||||||
|
public function __construct($nameLog, $active = false, $path = "/var/log/asterisk/") |
||||||
|
{ |
||||||
|
$this->name = $nameLog; |
||||||
|
$this->path = $path; |
||||||
|
$this->active = $active; |
||||||
|
$this->config($nameLog); |
||||||
|
} |
||||||
|
|
||||||
|
######################################################################## |
||||||
|
## TYPES ## |
||||||
|
######################################################################## |
||||||
|
|
||||||
|
public function success($log, $debug_trace = null) |
||||||
|
{ |
||||||
|
$this->type = self::LOG_SUCCESS; |
||||||
|
$this->text = $log; |
||||||
|
$this->header($log, $debug_trace ? $debug_trace : debug_backtrace()); |
||||||
|
$this->write(); |
||||||
|
} |
||||||
|
|
||||||
|
public function debug($log, $debug_trace = null) |
||||||
|
{ |
||||||
|
$this->type = self::LOG_DEBUG; |
||||||
|
$this->text = $log; |
||||||
|
$this->header($log, $debug_trace ? $debug_trace : $this->name); |
||||||
|
$this->write(); |
||||||
|
} |
||||||
|
|
||||||
|
public function info($log, $debug_trace = null) |
||||||
|
{ |
||||||
|
$this->type = self::LOG_INFO; |
||||||
|
$this->text = $log; |
||||||
|
$this->header($log, $debug_trace ? $debug_trace : $this->name); |
||||||
|
$this->write(); |
||||||
|
} |
||||||
|
|
||||||
|
public function error($log, $debug_trace = null) |
||||||
|
{ |
||||||
|
$this->type = self::LOG_ERROR; |
||||||
|
$this->text = $log; |
||||||
|
$this->header($log, $debug_trace ? $debug_trace : $this->name); |
||||||
|
$this->write(); |
||||||
|
} |
||||||
|
|
||||||
|
public function warning($log, $debug_trace = null) |
||||||
|
{ |
||||||
|
$this->type = self::LOG_WARNING; |
||||||
|
$this->text = $log; |
||||||
|
$this->header($log, $debug_trace ? $debug_trace : $this->name); |
||||||
|
$this->write(); |
||||||
|
} |
||||||
|
|
||||||
|
######################################################################## |
||||||
|
## IMPORTANT ## |
||||||
|
######################################################################## |
||||||
|
|
||||||
|
private function write() |
||||||
|
{ |
||||||
|
if ($this->active) { |
||||||
|
file_put_contents($this->file, $this->log, FILE_APPEND); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private function header($log, $debug_trace) |
||||||
|
{ |
||||||
|
$this->log = "________________________________________________________________________________________\n"; |
||||||
|
if (is_array($debug_trace)) { |
||||||
|
$method = $debug_trace[0]['class'] ? "{$debug_trace[0]['class']}::{$debug_trace[0]['function']}" : $debug_trace[0]['function']; |
||||||
|
$args = null; |
||||||
|
$x = 0; |
||||||
|
if (count($debug_trace[0]['args']) > 0) { |
||||||
|
foreach ($debug_trace[0]['args'] as $key => $arg) { |
||||||
|
$x++; |
||||||
|
$args .= $arg; |
||||||
|
if (count($debug_trace[0]['args']) != $x) { |
||||||
|
$args .= ","; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
$this->log .= sprintf("\n[ %s ][ LINE %s ][ %s ][ ARGS ($args) ][ %s ]\n\n", date('d/m/Y H:i:s'), $debug_trace[0]['line'], $method, $this->type); |
||||||
|
} else { |
||||||
|
$this->log .= sprintf("\n[ %s ][ %s ][ %s ]\n\n", date('d/m/Y H:i:s'), $debug_trace, $this->type); |
||||||
|
} |
||||||
|
$this->log .= "> " . $log; |
||||||
|
$this->log .= "\n\n ---------------------------------- [ FINISH LOGGER ] ----------------------------------\n\n"; |
||||||
|
} |
||||||
|
|
||||||
|
public function openLog() |
||||||
|
{ |
||||||
|
//$file = fopen($this->file, 'rb'); |
||||||
|
} |
||||||
|
|
||||||
|
public function locateLog() |
||||||
|
{ |
||||||
|
echo "\n\n {$this->file} \n\n"; |
||||||
|
} |
||||||
|
|
||||||
|
######################################################################## |
||||||
|
## CONFIGS ## |
||||||
|
######################################################################## |
||||||
|
|
||||||
|
public function config($name, $exten = ".log", $prefix = null) |
||||||
|
{ |
||||||
|
if (file_exists($this->file)) { |
||||||
|
$contents = file_get_contents($this->file); |
||||||
|
} |
||||||
|
|
||||||
|
$this->file = trim($this->path . $prefix . ($name ? $name : $this->name) . $exten); |
||||||
|
file_put_contents($this->file, $contents ? $contents : "", FILE_APPEND); |
||||||
|
} |
||||||
|
|
||||||
|
public function getType() |
||||||
|
{ |
||||||
|
return $this->type; |
||||||
|
} |
||||||
|
|
||||||
|
public function getText() |
||||||
|
{ |
||||||
|
return $this->text; |
||||||
|
} |
||||||
|
|
||||||
|
public function setLogger($active) |
||||||
|
{ |
||||||
|
if ($this->active === true) { |
||||||
|
$this->active = $active; |
||||||
|
} else if ($active === false) { |
||||||
|
$this->active = $active; |
||||||
|
} else { |
||||||
|
$this->active = true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\traits; |
||||||
|
|
||||||
|
use app\models\Token; |
||||||
|
use Slim\Psr7\Request; |
||||||
|
use Exception; |
||||||
|
use DateTime; |
||||||
|
|
||||||
|
trait AuthToken |
||||||
|
{ |
||||||
|
public function findToken(Request $request) |
||||||
|
{ |
||||||
|
$body = json_decode($request->getBody()->getContents(), true); |
||||||
|
$headers = $request->getHeader('Authorization'); |
||||||
|
$bearerToken = str_replace('Bearer ', '', $headers[0]); |
||||||
|
|
||||||
|
if (empty($bearerToken)) { |
||||||
|
throw new Exception('Informe o token.'); |
||||||
|
} |
||||||
|
|
||||||
|
if (empty($body['org_id'])) { |
||||||
|
throw new Exception('Informe o org_id.'); |
||||||
|
} |
||||||
|
|
||||||
|
$tokenEmpresa = Token::query( |
||||||
|
"SELECT pu.id as user_id, t.id as token_id, pou.id_organizacao, t.token, t.expired_at |
||||||
|
FROM pbx_usuarios pu |
||||||
|
INNER JOIN pbx_tokens t ON t.id_usuario = pu.id |
||||||
|
INNER JOIN pbx_organizacao_usuarios pou ON pou.id_usuario = pu.id |
||||||
|
WHERE t.token = :token AND id_organizacao = :org_id;", |
||||||
|
["token" => $bearerToken, 'org_id' => $body['org_id']] |
||||||
|
); |
||||||
|
|
||||||
|
if (empty($tokenEmpresa)) { |
||||||
|
throw new Exception('Requisicao nao autorizada, por favor verifique o token e a permissao de acesso!'); |
||||||
|
} |
||||||
|
|
||||||
|
$expiredDate = new DateTime($tokenEmpresa[0]->expired_at); |
||||||
|
$now = new DateTime(); |
||||||
|
if ($expiredDate < $now) { |
||||||
|
throw new Exception('Token expirado, realize uma nova autenticacao.'); |
||||||
|
} |
||||||
|
return $tokenEmpresa; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace app\traits; |
||||||
|
|
||||||
|
use app\models\Parametro; |
||||||
|
use Slim\Psr7\Request; |
||||||
|
use Exception; |
||||||
|
|
||||||
|
trait Validate |
||||||
|
{ |
||||||
|
|
||||||
|
public function validateData(Request $request, $data = false) |
||||||
|
{ |
||||||
|
$body = json_decode($request->getBody()->getContents(), true); |
||||||
|
$parametro = Parametro::find(['org_id' => $body['org_id']], ['prm_max_dias_relatorio']); |
||||||
|
$datas = []; |
||||||
|
|
||||||
|
$filters = [ |
||||||
|
'id', 'uniqueid', 'origem', 'destino', |
||||||
|
'fila', 'org_id', 'data_inicial', |
||||||
|
'data_final', 'agente', 'apelido', |
||||||
|
'nome', 'ramal', 'evento' |
||||||
|
]; |
||||||
|
|
||||||
|
foreach ($body as $k => $v) { |
||||||
|
if (!in_array($k, $filters)) { |
||||||
|
throw new Exception("O parametro informado e invalido [$k]!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if ($data) { |
||||||
|
$datas['data_inicial'] = $body['data_inicial'] ?? date('Y-m-d H:i:s'); |
||||||
|
$datas['data_final'] = $body['data_final'] ?? date('Y-m-d H:i:s'); |
||||||
|
|
||||||
|
if (($body['data_inicial'] && $body['data_final']) && strtotime($body['data_inicial']) > strtotime($body['data_final'])) { |
||||||
|
throw new Exception('A [data_inicial] nao pode ser maior que [data_final]!'); |
||||||
|
} |
||||||
|
|
||||||
|
if ($body['data_final'] && strtotime($datas['data_inicial']) > strtotime($body['data_final'])) { |
||||||
|
throw new Exception('Informe o parametro de [data_inicial]!'); |
||||||
|
} |
||||||
|
|
||||||
|
if ($parametro->prm_max_dias_relatorio) { |
||||||
|
if (strtotime($datas['data_inicial']) > strtotime($body['data_inicial'] . "+" . $parametro->prm_max_dias_relatorio . "days")) { |
||||||
|
throw new Exception("O periodo nao pode ultrapassar " . $parametro->prm_max_dias_relatorio . " dias!"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return $datas; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
{ |
||||||
|
"name": "simplesip/aplicativo", |
||||||
|
"description": "Projeto Simples IP", |
||||||
|
"authors": [{ |
||||||
|
"name": "Simples IP Desenvolvimento", |
||||||
|
"email": "desenvolvimento@simplesip.com.br" |
||||||
|
}], |
||||||
|
"autoload": { |
||||||
|
"psr-4": { |
||||||
|
"app\\": "app/" |
||||||
|
} |
||||||
|
}, |
||||||
|
"require": { |
||||||
|
"slim/slim": "4.*", |
||||||
|
"slim/psr7": "^1.6", |
||||||
|
"tuupola/cors-middleware": "^1.3", |
||||||
|
"firebase/php-jwt": "^6.3" |
||||||
|
}, |
||||||
|
"config": { |
||||||
|
"optimize-autoloader": false, |
||||||
|
"classmap-authoritative": false |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,67 +0,0 @@ |
|||||||
{\rtf1\ansi\deff3\adeflang1025 |
|
||||||
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\fnil\fprq0\fcharset2 OpenSymbol{\*\falt Arial Unicode MS};}{\f6\fnil\fprq2\fcharset0 AR PL UMing HK;}{\f7\fnil\fprq2\fcharset0 Lohit Devanagari;}{\f8\fnil\fprq0\fcharset0 Lohit Devanagari;}} |
|
||||||
{\colortbl;\red0\green0\blue0;\red128\green128\blue128;} |
|
||||||
{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033 Normal;} |
|
||||||
{\*\cs15\snext15\b\ab Strong Emphasis;} |
|
||||||
{\*\cs16\snext16\dbch\af5\dbch\af5\loch\f5 Bullets;} |
|
||||||
{\s17\sbasedon0\snext18\sb240\sa120\keepn\dbch\af6\dbch\af7\afs28\loch\f4\fs28 Heading;} |
|
||||||
{\s18\sbasedon0\snext18\sl288\slmult1\sb0\sa140 Text Body;} |
|
||||||
{\s19\sbasedon18\snext19\sl288\slmult1\sb0\sa140\dbch\af8 List;} |
|
||||||
{\s20\sbasedon0\snext20\sb120\sa120\noline\i\dbch\af8\afs24\ai\fs24 Caption;} |
|
||||||
{\s21\sbasedon0\snext21\noline\dbch\af8 Index;} |
|
||||||
}{\info{\author root }{\creatim\yr2017\mo6\dy5\hr8\min47}{\author root }{\revtim\yr2017\mo6\dy23\hr17\min25}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern67241986}}\deftab709 |
|
||||||
\viewscale120 |
|
||||||
{\*\pgdsctbl |
|
||||||
{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Default Style;}} |
|
||||||
\formshade\paperh15840\paperw12240\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc |
|
||||||
\pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\qc{\rtlch \ltrch\loch |
|
||||||
Chamada Entrante} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch |
|
||||||
}{\b\ab\rtlch \ltrch |
|
||||||
}{\b\ab\rtlch \ltrch\loch |
|
||||||
Defini\u231\'e7\u227\'e3o} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch |
|
||||||
}{\rtlch \ltrch\loch |
|
||||||
\tab } |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch\loch |
|
||||||
\tab Chamada recebida da p\u250\'fablica fixo ou m\u243\'f3vel, local, interurbana ou internacional,} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch |
|
||||||
} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b\ab\rtlch \ltrch |
|
||||||
}{\b\ab\rtlch \ltrch\loch |
|
||||||
Tipo de Atendimento }{\rtlch \ltrch\loch |
|
||||||
} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch |
|
||||||
} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\ul\ulc0\b\ab\rtlch \ltrch\loch |
|
||||||
Eletr\u244\'f4nico}{\rtlch \ltrch\loch |
|
||||||
} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch\loch |
|
||||||
\tab Consideramos atendimento eletr\u244\'f4nico aquele que objetiva resolver o problama do usu\u225\'e1rio sem a necessidade de intera\u231\'e7\u227\'e3o humana e ocorre em uma das situa\u231\'e7\u245\'f5es abaixo:} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b\ab\rtlch \ltrch\loch |
|
||||||
\tab URA} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b\ab\rtlch \ltrch\loch |
|
||||||
\tab }{\rtlch \ltrch\loch |
|
||||||
\tab Sistema interativo, capaz de emitir a segunda via de uma fatura por exemplo;} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b\ab\rtlch \ltrch\loch |
|
||||||
\tab Voice Mail } |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b0\ab0\rtlch \ltrch\loch |
|
||||||
\tab \tab Sistema que armazena e gerencia mensagens de voz gravadas;} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b\ab\rtlch \ltrch\loch |
|
||||||
\tab An\u250\'fancio } |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\b0\ab0\rtlch \ltrch\loch |
|
||||||
\tab \tab Sistema normalmente utilizado para informar o usu\u225\'e1rio, como por exemplo nos feri\u225\'e1dos.} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch |
|
||||||
} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\ul\ulc0\b\ab\rtlch \ltrch\loch |
|
||||||
DAC ou Fila}{\ul\ulc0\rtlch \ltrch\loch |
|
||||||
} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch\loch |
|
||||||
\tab A chamada passa por um sistema de gerenciamento que organiza as chamadas em fila para posterior atendimento humano, esta pode ser atendida imediatamente, ap\u243\'f3s espera ou ainda abandonada.} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\rtlch \ltrch\loch |
|
||||||
|
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\ul\ulc0\b\ab\rtlch \ltrch\loch |
|
||||||
Ramal} |
|
||||||
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033{\rtlch \ltrch\loch |
|
||||||
\tab A chamada \u233\'e9 direcionada para uma ramal interno para atendimento humano.} |
|
||||||
\par } |
|
@ -1,68 +0,0 @@ |
|||||||
|
|
||||||
Perfil de Usuários. |
|
||||||
|
|
||||||
O perfil de usuários do sistema é baseado em grupos, estes sdão inicialmente serão gerados pelo super usuário(admin) que tem acesso nativo a todas as funçoes do sistema, |
|
||||||
e portanto, pode adcionar qualquer funcionalidade a qualquer grupo. O admin deverá criar um grupo inicial denominado Administrador que conterá todas as funcionalidades |
|
||||||
necessária para administrar o sistema e será adicionado o usuário de mesmo nome, o qual deverá ser usado para gerar o perfil inicial do sistema. |
|
||||||
Um usuário pode ser adicionado a diversos grupos herdando todas as funcionalidade dos mesmos, este usuario podera portanto fornecer as mesmas permissões a outros |
|
||||||
usuarios por ele gerenciado. |
|
||||||
|
|
||||||
Tabelas: |
|
||||||
Cria grupo de usuários, para dar permissões individuais aos usuarios icluindo automaticamente um grupo para cada usuário com o mesmo nome, |
|
||||||
os mesmos deverão aparecer na tela de gerenciamento de grupos e conterão apenas o login correspondente. |
|
||||||
|
|
||||||
CREATE TABLE pbx_grupo |
|
||||||
( |
|
||||||
gp_id integer NOT NULL DEFAULT nextval('pbx_grupo_gp_id_seq'::regclass), |
|
||||||
gp_nome character varying(50) NOT NULL, --> Nome do grupo |
|
||||||
gp_status integer NOT NULL DEFAULT 1, --> Status 0 desativado 1 ativado |
|
||||||
user_id integer NOT NULL DEFAULT 0, --> Cria um grupo para cada usuario, para fazer permissoes individualizadas. |
|
||||||
gp_user integer NOT NULL DEFAULT 0, --> Dono do grupo, ou seja usuario que o criou. Usado para verificacao na delecao do usuario. |
|
||||||
CONSTRAINT "pkGrupId" PRIMARY KEY (gp_id), |
|
||||||
CONSTRAINT "idxGrupNome" UNIQUE (gp_nome, user_id) |
|
||||||
); |
|
||||||
|
|
||||||
-- Index: "idxDonoGrupo" |
|
||||||
-- DROP INDEX "idxDonoGrupo"; |
|
||||||
CREATE INDEX "idxDonoGrupo" ON pbx_grupo USING btree (gp_id, gp_user); |
|
||||||
|
|
||||||
|
|
||||||
Relaciona usuários a grupos, os usuários constantes no grupo herdardão suas permissões. |
|
||||||
REATE TABLE pbx_grupo_usuario |
|
||||||
( |
|
||||||
user_id integer NOT NULL, |
|
||||||
gp_id integer NOT NULL, |
|
||||||
CONSTRAINT "pkGpUserId" PRIMARY KEY (user_id, gp_id), |
|
||||||
CONSTRAINT "fkUsuarios" FOREIGN KEY (user_id) |
|
||||||
REFERENCES pbx_usuarios (id) MATCH SIMPLE |
|
||||||
ON UPDATE NO ACTION ON DELETE NO ACTION |
|
||||||
); |
|
||||||
|
|
||||||
-- Index: "idxUsuariosGrupos" |
|
||||||
-- DROP INDEX "idxUsuariosGrupos"; |
|
||||||
CREATE INDEX "idxUsuariosGrupos" ON pbx_grupo_usuario USING btree (gp_id); |
|
||||||
|
|
||||||
Relaciona o grupo e suas funçoes. |
|
||||||
-- Table: pbx_grupo_funcoes |
|
||||||
-- DROP TABLE pbx_grupo_funcoes; |
|
||||||
CREATE TABLE pbx_grupo_funcoes |
|
||||||
( |
|
||||||
gp_id integer NOT NULL, |
|
||||||
fun_id integer NOT NULL, |
|
||||||
CONSTRAINT "pkGrupoFunc" PRIMARY KEY (gp_id, fun_id) |
|
||||||
); |
|
||||||
|
|
||||||
Regras: |
|
||||||
1 -> O usuário pode pertencer a diversos grupos. |
|
||||||
2 -> O usuário herda as funcionalidades de todos os grupos. |
|
||||||
3 -> A restrissão aplicada aos ramais é um caso especial, pois irá bloquear o acesso a todos os usuários do grupo, e irá prevalecer a qualquer liberação. |
|
||||||
Para se criar um bloqueio individualizado deve-se aplicar o bloqueio apenas ao usuario em questdão. |
|
||||||
4 -> Um usuário poderá dar o mesmo nível de permissões que possue para outros usuários. |
|
||||||
5 -> Para se remover uma permissdão de um usuário devera faze-lo de forma recursiva removendo também dos outros usuários que herdaram suas permissões. |
|
||||||
6 -> Para se remover um usuário deve-se verificar suas dependências. |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,42 +0,0 @@ |
|||||||
 |
|
||||||
delete from pbx_backup_arquivos; |
|
||||||
delete from pbx_backup; |
|
||||||
delete from pbx_backup_configuracao; |
|
||||||
delete from pbx_backup_destino; |
|
||||||
delete from pbx_backup_protocolo; |
|
||||||
delete from pbx_backup_tipo; |
|
||||||
delete from pbx_backup_frequencia_qtde; |
|
||||||
delete from pbx_backup_frequencia; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Tipo |
|
||||||
insert into pbx_backup_tipo values(1;'Áudio'); |
|
||||||
insert into pbx_backup_tipo values2;'Configurações'); |
|
||||||
insert into pbx_backup_tipo values3;'Configurações/Dados'); |
|
||||||
insert into pbx_backup_tipo values4;'Dados'); |
|
||||||
|
|
||||||
--PROTOCOLO |
|
||||||
insert into pbx_backup_protocolo values(1,'Ftp',1); |
|
||||||
insert into pbx_backup_protocolo values(2,'Sftp',1); |
|
||||||
insert into pbx_backup_protocolo values(3,'Rede',1); |
|
||||||
insert into pbx_backup_protocolo values(4,'Local',1); |
|
||||||
insert into pbx_backup_protocolo values(5,'USB',1); |
|
||||||
|
|
||||||
--FREQUENCIA |
|
||||||
insert into pbx_backup_frequencia values(1, 'Diário'); |
|
||||||
insert into pbx_backup_frequencia values(2, 'Semanal'); |
|
||||||
|
|
||||||
insert into pbx_backup_frequencia_qtde values(1,1,'Uma vez ao dia', '0'); |
|
||||||
insert into pbx_backup_frequencia_qtde values(2,1,'Duas vezez ao dia','0;12'); |
|
||||||
insert into pbx_backup_frequencia_qtde values(3,1,'Três vezes ao dia', '0;8;16'); |
|
||||||
insert into pbx_backup_frequencia_qtde values(4,2,'Domingo', 0); |
|
||||||
insert into pbx_backup_frequencia_qtde values(5,2,'Segunda', 0); |
|
||||||
insert into pbx_backup_frequencia_qtde values(6,2,'Terça', 0); |
|
||||||
insert into pbx_backup_frequencia_qtde values(7,2,'Quarta', 0); |
|
||||||
insert into pbx_backup_frequencia_qtde values(8,2,'Quinta', 0); |
|
||||||
insert into pbx_backup_frequencia_qtde values(9,2,'Sexta', 0); |
|
||||||
insert into pbx_backup_frequencia_qtde values(10,2,'Sabado', 0); |
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
@ -1,58 +0,0 @@ |
|||||||
Versao-1.7.11.5 |
|
||||||
Data: 01/11/2022 |
|
||||||
Autor: Amarildo Pereira |
|
||||||
E-mail: amarildo.pereira@simplesip.com.br |
|
||||||
Modulo: Grupo de Usuarios |
|
||||||
Descricao: Usuarios que estiverem no grupo administrador, poderao adicionar e |
|
||||||
remover usuarios de todos os grupos que o usuario do mesmo nome(adminis- |
|
||||||
trador) estiver presente. Como o usuario administrador e automaticamente |
|
||||||
incluido em todo novo grupo criado, isto resolvera o problema de inclusao de |
|
||||||
bloqueio de ramais sem afetar o usuario em questao. |
|
||||||
|
|
||||||
Versao-1.7.11.5 |
|
||||||
Data: 05/11/2022 |
|
||||||
Autor: Amarildo Pereira |
|
||||||
E-mail: amarildo.pereira@simplesip.com.br |
|
||||||
Modulo: Supervisor |
|
||||||
Descricao: Criacao de hierarquia na monitoria do supervisor de acordo com as regras da LGPD, |
|
||||||
sao criados os grupos com a seguinte nomenclatura, "LGPD_NOMEGRUPO_N...", sendo N1 o nivel |
|
||||||
mais alto, seguido por N2, N3, Nn. Para todo usuario que iniciar o monitoramento sera tocado |
|
||||||
um audio com os informativos da LGPD e sera perguntado se deseja continuar, o usuario devera |
|
||||||
pressionar 1 para continuar e 2 para cancelar, se estiver monitorando um usuario de nivel in- |
|
||||||
ferior este nao recebera aviso, caso senha do mesmo nivel ou nivel superior entao recebera um |
|
||||||
aviso de que esta sendo monitorado e podera pressionar *1 para permitir ou *2 para cancelar. |
|
||||||
Este recurso pode ser habilitado no modulo Configuracoes aba Supervisor. |
|
||||||
|
|
||||||
|
|
||||||
Versao-1.7.11.5 |
|
||||||
Data: 05/11/2022 |
|
||||||
Autor: Amarildo Pereira |
|
||||||
E-mail: amarildo.pereira@simplesip.com.br |
|
||||||
Modulo: Relatorios/Callcenter |
|
||||||
Descricao: Incluida a opcao de servicos (Vinculados a Rota de Entrada) nos relatorios de: |
|
||||||
- Abandonadas Fila |
|
||||||
- Classificacao de Atendimento |
|
||||||
- Classificacao Mensal |
|
||||||
- Classificacao por Agente |
|
||||||
- Metas Mensa |
|
||||||
- Metas Diaria |
|
||||||
- Recebidas Agente |
|
||||||
- Rechamadas |
|
||||||
O comportamento pode ser configurado em Configuracao/Sistema, podendo ser habilitado (Mostra |
|
||||||
o filtro e acrescenta a coluna servicos) habilita filtros (Apenas inclui o filtro) e desabilitado. |
|
||||||
|
|
||||||
|
|
||||||
Versão: 1.7.11.5 |
|
||||||
Autor: Lucas Awade |
|
||||||
Data: 08/11/2022 |
|
||||||
Modulo: Discador |
|
||||||
Descricao: Relatorio de campanha: Foi substituido o arquivo de retorno para um relatorio visual e de extração |
|
||||||
para que os usuarios possam pesquisar e retornar para contatos de campanha selecionada. Cada usuario |
|
||||||
poderá apenas realizar busca da campanha que seu grupo pertence a fila. |
|
||||||
|
|
||||||
Versão: 1.7.11.5 |
|
||||||
Autor: Lucas Awade |
|
||||||
Data: 08/11/2022 |
|
||||||
Modulo: Fila |
|
||||||
Descricao: Disponibilidade Fila: Adicionado um novo campo no cadastro de fila para que os administradores |
|
||||||
possam disponibilizar para os agentes de uma determinada fila a possibilidade de marcar o "Disponivel Fila". |
|
@ -1,21 +0,0 @@ |
|||||||
select id, prm_sk_host_chat, prm_chat_api, prm_media_simultaneo, prm_chat_api_supervisor into pbx_parametros_bk from pbx_parametros where id = 1; |
|
||||||
|
|
||||||
alter table pbx_parametros drop column prm_chat_api_supervisor; |
|
||||||
alter table pbx_parametros add prm_chat_api_supervisor varchar(255); |
|
||||||
|
|
||||||
|
|
||||||
alter table pbx_parametros drop column prm_sk_host_chat; |
|
||||||
alter table pbx_parametros add prm_sk_host_chat varchar(255); |
|
||||||
|
|
||||||
|
|
||||||
alter table pbx_parametros drop column prm_chat_api; |
|
||||||
alter table pbx_parametros add prm_chat_api varchar(255); |
|
||||||
|
|
||||||
|
|
||||||
update pbx_parametros set prm_chat_api_supervisor = (select prm_chat_api_supervisor from pbx_parametros_bk where id = 1); |
|
||||||
update pbx_parametros set prm_chat_api = (select prm_chat_api from pbx_parametros_bk where id = 1); |
|
||||||
update pbx_parametros set prm_sk_host_chat = (select prm_sk_host_chat from pbx_parametros_bk where id = 1); |
|
||||||
|
|
||||||
drop table pbx_parametros_bk; |
|
||||||
--select id, prm_sk_host_chat, prm_chat_api, prm_media_simultaneo, prm_chat_api_supervisor from pbx_parametros where id = 1; |
|
||||||
|
|
@ -1,5 +0,0 @@ |
|||||||
Manutenção de Sites -> http://localhost/index.php?idProg=105 |
|
||||||
Mostra senha no código |
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,2 +0,0 @@ |
|||||||
Manutenção de Sites |
|
||||||
Mostra senha no código |
|
@ -1,2 +0,0 @@ |
|||||||
select * from pbx_funcoes_internas where id_prog in(27,28,29,30, 31); |
|
||||||
select * from pbx_funcoes_internas where id_prog in(84); |
|
Binary file not shown.
@ -1,12 +0,0 @@ |
|||||||
-- select * from pbx_cliente; |
|
||||||
-- select cletp_id, cletp_descricao from pbx_cliente_etapa; |
|
||||||
|
|
||||||
drop table pbx_cliente_etapas; |
|
||||||
create table pbx_cliente_etapa( cletp_id int not null primary key, cletp_descricao varchar(64) not null); |
|
||||||
alter table pbx_cliente add cletp_id int not null default 1; |
|
||||||
|
|
||||||
insert into pbx_cliente_etapa values('1', 'VALIDACAO'), ('2', 'PROSPECCAO'), ('3', 'FINALIZACAO'); |
|
||||||
|
|
||||||
|
|
||||||
Alter table add termo_uso_privacidade integer NOT NULL DEFAULT 0; |
|
||||||
Alter table add termo_uso_privacidade_log character varying(1024); |
|
@ -1,89 +0,0 @@ |
|||||||
|
|
||||||
-- |
|
||||||
-- RELACAO DE STATUS POR MATRICULA |
|
||||||
-- |
|
||||||
SELECT DISTINCT d.ctst_id, d.ctst_nome |
|
||||||
FROM pbx_usuarios a |
|
||||||
INNER JOIN pbx_grupo_usuario b ON a.id = b.user_id |
|
||||||
INNER JOIN pbx_grupo_campanha_contato_status c ON b.gp_id = c.gp_id |
|
||||||
INNER JOIN pbx_campanha_contato_status d ON c.ctst_id = d.ctst_id |
|
||||||
WHERE matricula = '1084' |
|
||||||
AND d.ctst_status = 1 |
|
||||||
ORDER BY ctst_nome; |
|
||||||
|
|
||||||
-- |
|
||||||
-- NUMERO DE REGISTROS POR STATUS |
|
||||||
-- |
|
||||||
select ctst_ID, ctst_nome, count(*) |
|
||||||
from pbx_cliente a, pbx_campanha_contato_status b |
|
||||||
where b.ctst_id = a.client_status::int |
|
||||||
and a.clo_id = 1 |
|
||||||
group by ctst_ID, ctst_nome order by 2; |
|
||||||
|
|
||||||
|
|
||||||
-- Cliente origem |
|
||||||
-- select * from pbx_cliente_origem |
|
||||||
-- select * from pbx_cliente_fornecedor |
|
||||||
|
|
||||||
-- |
|
||||||
-- INFORMACOES DO FORNECEDOR E LISTAS |
|
||||||
-- |
|
||||||
SELECT clo_id,clo_titulo,clo_descricao,a.cfr_id,cfr_razao_social,nome,apelido, (SELECT count(clo_id) FROM pbx_cliente WHERE clo_id = a.clo_id) AS registros, a.data_reg |
|
||||||
FROM pbx_cliente_origem a |
|
||||||
INNER JOIN pbx_cliente_fornecedor b ON a.cfr_id = b.cfr_id |
|
||||||
INNER JOIN pbx_usuarios c ON c.matricula = a.user_reg::VARCHAR |
|
||||||
WHERE clo_id = 1; |
|
||||||
|
|
||||||
-- |
|
||||||
-- NUMERO TOTAL DE REGISTROS POR LISTA E NUMERO DE REGISTROS ATRIBUIDOS A UMA MATRICULA |
|
||||||
-- |
|
||||||
SELECT COUNT(client_id) AS registros, SUM(CASE WHEN(client_user_contato <> '')THEN 1 ELSE 0 END) AS registros_matricula FROM pbx_cliente WHERE clo_id = 1 and client_status <> '999' |
|
||||||
|
|
||||||
-- |
|
||||||
-- USUARIOS RELACIONADOS AO PRE-VENDA |
|
||||||
-- |
|
||||||
SELECT DISTINCT id, nome, apelido, matricula FROM pbx_usuarios a |
|
||||||
INNER JOIN pbx_grupo_usuario b ON a.id = b.user_id |
|
||||||
INNER JOIN pbx_grupo_funcoes c ON c.gp_id = b.gp_id |
|
||||||
WHERE b.gp_id IN(SELECT gp_id FROM (SELECT CASE WHEN(COUNT(gp_id) > 1) THEN gp_id END AS gp_id FROM pbx_grupo_funcoes WHERE fun_id = 209 OR fun_id = 2 GROUP BY gp_id ORDER BY 1) AS DATA) |
|
||||||
|
|
||||||
--select * FROM pbx_funcoes WHERE fun_id = 209 OR fun_id = 2 |
|
||||||
|
|
||||||
|
|
||||||
/* |
|
||||||
-- |
|
||||||
-- MANIPULA OS REGISTROS PARA APRESENTARMOS APENAS DE DETERMINADOS ESTADOS |
|
||||||
-- |
|
||||||
select * from pbx_cliente where clo_id = 1 and client_status = '0' and client_user_contato = '' and client_uf NOT in('SP', 'PR', 'SC', 'RS'); |
|
||||||
update pbx_cliente set client_status = '999' where clo_id = 1 and client_status = '0' and client_user_contato = '' and client_uf NOT in('SP', 'PR', 'SC', 'RS'); |
|
||||||
SELECT * FROM pbx_cliente WHERE clo_id = 1 AND client_user_contato <> '' AND list_id IS NULL AND cmp_id IS NULL; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"Pre Venda";"alessandra.neri";"1055" |
|
||||||
"Pre Venda";"aline.souza";"1067" |
|
||||||
"Pre Venda";"joicy.alves";"1073" |
|
||||||
"Pre Venda";"luciene.franca";"1054" |
|
||||||
"Pre Venda Admin";"amarildo.pereira";"1028" |
|
||||||
"Pre Venda Admin";"awade";"1040" |
|
||||||
"Pre Venda Admin";"gabriely.korb";"1084" |
|
||||||
"Pre Venda Admin";"paulo.ricardo";"1074" |
|
||||||
|
|
||||||
|
|
||||||
select * from pbx_grupo_campanha_contato_status c, pbx_campanha_contato_status d where c.ctst_id = d.ctst_id order by 2,3 ; |
|
||||||
select * from pbx_campanha_contato_status; |
|
||||||
select * from pbx_grupo_usuario; |
|
||||||
select * from pbx_funcoes_internas where arquivo ilike '%grupos%' |
|
||||||
select * from pbx_funcoes_internas where id_prog = 352 |
|
||||||
|
|
||||||
341;"cadastros/prevenda/listacampanhacliente.php";338;0;0 |
|
||||||
344;"cadastros/prevenda/statusReciclaLista.php";338;0;0 |
|
||||||
|
|
||||||
-- matriculas pre-venda |
|
||||||
select distinct c.gp_id, c.gp_nome, a.apelido, a.matricula |
|
||||||
from pbx_usuarios a, pbx_grupo_usuario b, pbx_grupo c |
|
||||||
where b.user_id = a.id |
|
||||||
and c.gp_id = b.gp_id |
|
||||||
and gp_nome ilike 'pre%' |
|
||||||
order by 1,2; |
|
||||||
*/ |
|
@ -1,30 +0,0 @@ |
|||||||
select client_out_id, * from pbx_cliente where clo_id = 1 and client_status::int <> 21 and coalesce(client_out_id, 0) > 0; |
|
||||||
|
|
||||||
update pbx_cliente set client_out_id = null where clo_id = 1 and client_status::int <> 21 and coalesce(client_out_id, 0) > 0; |
|
||||||
|
|
||||||
begin |
|
||||||
|
|
||||||
update pbx_cliente |
|
||||||
set client_out_id = pbx_cliente_bk_prevenda.client_out_id |
|
||||||
from pbx_cliente_bk_prevenda |
|
||||||
where pbx_cliente.client_id = pbx_cliente_bk_prevenda.client_id |
|
||||||
and pbx_cliente_bk_prevenda.clo_id = 1 |
|
||||||
and pbx_cliente_bk_prevenda.client_status::int <> 21 |
|
||||||
and coalesce(pbx_cliente_bk_prevenda.client_out_id, 0) > 0; |
|
||||||
|
|
||||||
commit |
|
||||||
|
|
||||||
rollback |
|
||||||
|
|
||||||
/* |
|
||||||
select * from pbx_cliente_bk_prevenda where clo_id = 1 and client_status::int <> 21 and coalesce(client_out_id, 0) > 0; |
|
||||||
|
|
||||||
select * into pbx_cliente_bk_prevenda from pbx_cliente |
|
||||||
|
|
||||||
select * from pbx_cliente_bk_prevenda |
|
||||||
select ctst_ID, ctst_nome, count(*) |
|
||||||
from pbx_cliente a, pbx_campanha_contato_status b |
|
||||||
where b.ctst_id = a.client_status::int |
|
||||||
group by ctst_ID, ctst_nome order by 1; |
|
||||||
|
|
||||||
*/ |
|
@ -1,33 +0,0 @@ |
|||||||
SELECT * FROM pbx_campanha_referencia_recicla; |
|
||||||
|
|
||||||
select * from pbx_cliente_audio where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
select * from pbx_cliente_anotacoes where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
select * from pbx_cliente_contato where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
select * from pbx_cliente where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
|
|
||||||
|
|
||||||
delete from pbx_cliente_audio where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
delete from pbx_cliente_anotacoes where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
delete from pbx_cliente_contato where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
delete from pbx_cliente where client_id in(select client_id from pbx_cliente where client_status in('9', '10', '11', '20', '23', '24')); |
|
||||||
|
|
||||||
update pbx_cliente set client_status = 0 where client_status in('1','2', '3', '4', '6', '8','12', '19', '25'); |
|
||||||
|
|
||||||
select ctst_ID, ctst_nome, count(*) |
|
||||||
from pbx_cliente a, pbx_campanha_contato_status b |
|
||||||
where b.ctst_id = a.client_status::int |
|
||||||
group by ctst_ID, ctst_nome order by 1 |
|
||||||
|
|
||||||
|
|
||||||
select * from pbx_campanha_operacao where cmp_id = 230; |
|
||||||
|
|
||||||
-- desativa todas as listas do pre-venda, deve-se observar o id_dac e atualizar para o correspondente. |
|
||||||
update pbx_campanha_lista set list_status = 2 where cmp_id IN(select cmp_id from pbx_campanha where ID_DAC = 134); |
|
||||||
update pbx_campanha_contato set cont_status = -1 where cmp_id IN(select cmp_id from pbx_campanha where ID_DAC = 134); |
|
||||||
update pbx_campanha_contato_fone set conf_status = '-1' where cmp_id IN(select cmp_id from pbx_campanha where ID_DAC = 134); |
|
||||||
update pbx_campanha set cmp_status = '0' where cmp_id in( select cmp_id from pbx_campanha where ID_DAC = 134); |
|
||||||
|
|
||||||
|
|
||||||
/* |
|
||||||
|
|
||||||
*/ |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="5e590970 30c 1ab 0 0 30c 4d 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="1f952a6b 30c 1ab 0 4d 5f 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="3b29a27c 30c 1ab 5f 4d 75 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="49b52f98 30c 1ab d4 4d 75 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="35cdabc8 30c 1ab 149 4d 96 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="16ab108c 30c 1ab 1df 4d 12d 3a 0" /> |
|
||||||
</info> |
|
@ -1,5 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||||
<info> |
|
||||||
<infoitem key="fw_source" value="/admin/images/Untitled-1.png" /> |
|
||||||
<infoitem key="fw_slice_info" value="7866f63d 30c 1ab 0 87 30c 124 0" /> |
|
||||||
</info> |
|
@ -1,66 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* assemble filepath of requested plugin |
|
||||||
* |
|
||||||
* @param string $type |
|
||||||
* @param string $name |
|
||||||
* @return string|false |
|
||||||
*/ |
|
||||||
function smarty_core_assemble_plugin_filepath($params, &$smarty) { |
|
||||||
static $_filepaths_cache = array(); |
|
||||||
|
|
||||||
$_plugin_filename = $params['type'] . '.' . $params['name'] . '.php'; |
|
||||||
if (isset($_filepaths_cache[$_plugin_filename])) { |
|
||||||
return $_filepaths_cache[$_plugin_filename]; |
|
||||||
} |
|
||||||
$_return = false; |
|
||||||
|
|
||||||
foreach ((array) $smarty->plugins_dir as $_plugin_dir) { |
|
||||||
|
|
||||||
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; |
|
||||||
|
|
||||||
// see if path is relative |
|
||||||
if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) { |
|
||||||
$_relative_paths[] = $_plugin_dir; |
|
||||||
// relative path, see if it is in the SMARTY_DIR |
|
||||||
if (@is_readable(SMARTY_DIR . $_plugin_filepath)) { |
|
||||||
$_return = SMARTY_DIR . $_plugin_filepath; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
// try relative to cwd (or absolute) |
|
||||||
if (@is_readable($_plugin_filepath)) { |
|
||||||
$_return = $_plugin_filepath; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if ($_return === false) { |
|
||||||
// still not found, try PHP include_path |
|
||||||
if (isset($_relative_paths)) { |
|
||||||
foreach ((array) $_relative_paths as $_plugin_dir) { |
|
||||||
|
|
||||||
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; |
|
||||||
|
|
||||||
$_params = array('file_path' => $_plugin_filepath); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); |
|
||||||
if (smarty_core_get_include_path($_params, $smarty)) { |
|
||||||
$_return = $_params['new_file_path']; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
$_filepaths_cache[$_plugin_filename] = $_return; |
|
||||||
return $_return; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,42 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty assign_smarty_interface core plugin |
|
||||||
* |
|
||||||
* Type: core<br> |
|
||||||
* Name: assign_smarty_interface<br> |
|
||||||
* Purpose: assign the $smarty interface variable |
|
||||||
* @param array Format: null |
|
||||||
* @param Smarty |
|
||||||
*/ |
|
||||||
function smarty_core_assign_smarty_interface($params, &$smarty) { |
|
||||||
if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) { |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
$_globals_map = array('g' => 'HTTP_GET_VARS', |
|
||||||
'p' => 'HTTP_POST_VARS', |
|
||||||
'c' => 'HTTP_COOKIE_VARS', |
|
||||||
's' => 'HTTP_SERVER_VARS', |
|
||||||
'e' => 'HTTP_ENV_VARS'); |
|
||||||
|
|
||||||
$_smarty_vars_request = array(); |
|
||||||
|
|
||||||
foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) { |
|
||||||
if (isset($_globals_map[$_c])) { |
|
||||||
$_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]); |
|
||||||
} |
|
||||||
} |
|
||||||
$_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']); |
|
||||||
|
|
||||||
$smarty->_smarty_vars['request'] = $_smarty_vars_request; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,74 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* create full directory structure |
|
||||||
* |
|
||||||
* @param string $dir |
|
||||||
*/ |
|
||||||
// $dir |
|
||||||
|
|
||||||
function smarty_core_create_dir_structure($params, &$smarty) { |
|
||||||
if (!file_exists($params['dir'])) { |
|
||||||
$_open_basedir_ini = ini_get('open_basedir'); |
|
||||||
|
|
||||||
if (DIRECTORY_SEPARATOR == '/') { |
|
||||||
/* unix-style paths */ |
|
||||||
$_dir = $params['dir']; |
|
||||||
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY); |
|
||||||
$_new_dir = (substr($_dir, 0, 1) == '/') ? '/' : getcwd() . '/'; |
|
||||||
if ($_use_open_basedir = !empty($_open_basedir_ini)) { |
|
||||||
$_open_basedirs = explode(':', $_open_basedir_ini); |
|
||||||
} |
|
||||||
} else { |
|
||||||
/* other-style paths */ |
|
||||||
$_dir = str_replace('\\', '/', $params['dir']); |
|
||||||
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY); |
|
||||||
if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) { |
|
||||||
/* leading "//" for network volume, or "[letter]:/" for full path */ |
|
||||||
$_new_dir = $_root_dir[1]; |
|
||||||
/* remove drive-letter from _dir_parts */ |
|
||||||
if (isset($_root_dir[3])) |
|
||||||
array_shift($_dir_parts); |
|
||||||
} else { |
|
||||||
$_new_dir = str_replace('\\', '/', getcwd()) . '/'; |
|
||||||
} |
|
||||||
|
|
||||||
if ($_use_open_basedir = !empty($_open_basedir_ini)) { |
|
||||||
$_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* all paths use "/" only from here */ |
|
||||||
foreach ($_dir_parts as $_dir_part) { |
|
||||||
$_new_dir .= $_dir_part; |
|
||||||
|
|
||||||
if ($_use_open_basedir) { |
|
||||||
// do not attempt to test or make directories outside of open_basedir |
|
||||||
$_make_new_dir = false; |
|
||||||
foreach ($_open_basedirs as $_open_basedir) { |
|
||||||
if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) { |
|
||||||
$_make_new_dir = true; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} else { |
|
||||||
$_make_new_dir = true; |
|
||||||
} |
|
||||||
|
|
||||||
if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) { |
|
||||||
$smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); |
|
||||||
return false; |
|
||||||
} |
|
||||||
$_new_dir .= '/'; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,59 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty debug_console function plugin |
|
||||||
* |
|
||||||
* Type: core<br> |
|
||||||
* Name: display_debug_console<br> |
|
||||||
* Purpose: display the javascript debug console window |
|
||||||
* @param array Format: null |
|
||||||
* @param Smarty |
|
||||||
*/ |
|
||||||
function smarty_core_display_debug_console($params, &$smarty) { |
|
||||||
// we must force compile the debug template in case the environment |
|
||||||
// changed between separate applications. |
|
||||||
|
|
||||||
if (empty($smarty->debug_tpl)) { |
|
||||||
// set path to debug template from SMARTY_DIR |
|
||||||
$smarty->debug_tpl = SMARTY_DIR . 'debug.tpl'; |
|
||||||
if ($smarty->security && is_file($smarty->debug_tpl)) { |
|
||||||
$smarty->secure_dir[] = realpath($smarty->debug_tpl); |
|
||||||
} |
|
||||||
$smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl'; |
|
||||||
} |
|
||||||
|
|
||||||
$_ldelim_orig = $smarty->left_delimiter; |
|
||||||
$_rdelim_orig = $smarty->right_delimiter; |
|
||||||
|
|
||||||
$smarty->left_delimiter = '{'; |
|
||||||
$smarty->right_delimiter = '}'; |
|
||||||
|
|
||||||
$_compile_id_orig = $smarty->_compile_id; |
|
||||||
$smarty->_compile_id = null; |
|
||||||
|
|
||||||
$_compile_path = $smarty->_get_compile_path($smarty->debug_tpl); |
|
||||||
if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path)) { |
|
||||||
ob_start(); |
|
||||||
$smarty->_include($_compile_path); |
|
||||||
$_results = ob_get_contents(); |
|
||||||
ob_end_clean(); |
|
||||||
} else { |
|
||||||
$_results = ''; |
|
||||||
} |
|
||||||
|
|
||||||
$smarty->_compile_id = $_compile_id_orig; |
|
||||||
|
|
||||||
$smarty->left_delimiter = $_ldelim_orig; |
|
||||||
$smarty->right_delimiter = $_rdelim_orig; |
|
||||||
|
|
||||||
return $_results; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,42 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Get path to file from include_path |
|
||||||
* |
|
||||||
* @param string $file_path |
|
||||||
* @param string $new_file_path |
|
||||||
* @return boolean |
|
||||||
* @staticvar array|null |
|
||||||
*/ |
|
||||||
// $file_path, &$new_file_path |
|
||||||
|
|
||||||
function smarty_core_get_include_path(&$params, &$smarty) { |
|
||||||
static $_path_array = null; |
|
||||||
|
|
||||||
if (!isset($_path_array)) { |
|
||||||
$_ini_include_path = ini_get('include_path'); |
|
||||||
|
|
||||||
if (strstr($_ini_include_path, ';')) { |
|
||||||
// windows pathnames |
|
||||||
$_path_array = explode(';', $_ini_include_path); |
|
||||||
} else { |
|
||||||
$_path_array = explode(':', $_ini_include_path); |
|
||||||
} |
|
||||||
} |
|
||||||
foreach ($_path_array as $_include_path) { |
|
||||||
if (@is_readable($_include_path . DIRECTORY_SEPARATOR . $params['file_path'])) { |
|
||||||
$params['new_file_path'] = $_include_path . DIRECTORY_SEPARATOR . $params['file_path']; |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,21 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Get seconds and microseconds |
|
||||||
* @return double |
|
||||||
*/ |
|
||||||
function smarty_core_get_microtime($params, &$smarty) { |
|
||||||
$mtime = microtime(); |
|
||||||
$mtime = explode(" ", $mtime); |
|
||||||
$mtime = (double) ($mtime[1]) + (double) ($mtime[0]); |
|
||||||
return ($mtime); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,76 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Retrieves PHP script resource |
|
||||||
* |
|
||||||
* sets $php_resource to the returned resource |
|
||||||
* @param string $resource |
|
||||||
* @param string $resource_type |
|
||||||
* @param $php_resource |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
function smarty_core_get_php_resource(&$params, &$smarty) { |
|
||||||
|
|
||||||
$params['resource_base_path'] = $smarty->trusted_dir; |
|
||||||
$smarty->_parse_resource_name($params, $smarty); |
|
||||||
|
|
||||||
/* |
|
||||||
* Find out if the resource exists. |
|
||||||
*/ |
|
||||||
|
|
||||||
if ($params['resource_type'] == 'file') { |
|
||||||
$_readable = false; |
|
||||||
if (file_exists($params['resource_name']) && is_readable($params['resource_name'])) { |
|
||||||
$_readable = true; |
|
||||||
} else { |
|
||||||
// test for file in include_path |
|
||||||
$_params = array('file_path' => $params['resource_name']); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); |
|
||||||
if (smarty_core_get_include_path($_params, $smarty)) { |
|
||||||
$_include_path = $_params['new_file_path']; |
|
||||||
$_readable = true; |
|
||||||
} |
|
||||||
} |
|
||||||
} else if ($params['resource_type'] != 'file') { |
|
||||||
$_template_source = null; |
|
||||||
$_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0]) && call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0], array($params['resource_name'], &$_template_source, &$smarty)); |
|
||||||
} |
|
||||||
|
|
||||||
/* |
|
||||||
* Set the error function, depending on which class calls us. |
|
||||||
*/ |
|
||||||
if (method_exists($smarty, '_syntax_error')) { |
|
||||||
$_error_funcc = '_syntax_error'; |
|
||||||
} else { |
|
||||||
$_error_funcc = 'trigger_error'; |
|
||||||
} |
|
||||||
|
|
||||||
if ($_readable) { |
|
||||||
if ($smarty->security) { |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.is_trusted.php'); |
|
||||||
if (!smarty_core_is_trusted($params, $smarty)) { |
|
||||||
$smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted'); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
} else { |
|
||||||
$smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable'); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
if ($params['resource_type'] == 'file') { |
|
||||||
$params['php_resource'] = $params['resource_name']; |
|
||||||
} else { |
|
||||||
$params['php_resource'] = $_template_source; |
|
||||||
} |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,56 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* determines if a resource is secure or not. |
|
||||||
* |
|
||||||
* @param string $resource_type |
|
||||||
* @param string $resource_name |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
// $resource_type, $resource_name |
|
||||||
|
|
||||||
function smarty_core_is_secure($params, &$smarty) { |
|
||||||
if (!$smarty->security || $smarty->security_settings['INCLUDE_ANY']) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
if ($params['resource_type'] == 'file') { |
|
||||||
$_rp = realpath($params['resource_name']); |
|
||||||
if (isset($params['resource_base_path'])) { |
|
||||||
foreach ((array) $params['resource_base_path'] as $curr_dir) { |
|
||||||
if (($_cd = realpath($curr_dir)) !== false && |
|
||||||
strncmp($_rp, $_cd, strlen($_cd)) == 0 && |
|
||||||
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
if (!empty($smarty->secure_dir)) { |
|
||||||
foreach ((array) $smarty->secure_dir as $curr_dir) { |
|
||||||
if (($_cd = realpath($curr_dir)) !== false) { |
|
||||||
if ($_cd == $_rp) { |
|
||||||
return true; |
|
||||||
} elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 && |
|
||||||
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} else { |
|
||||||
// resource is not on local file system |
|
||||||
return call_user_func_array( |
|
||||||
$smarty->_plugins['resource'][$params['resource_type']][0][2], array($params['resource_name'], &$smarty)); |
|
||||||
} |
|
||||||
|
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,42 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* determines if a resource is trusted or not |
|
||||||
* |
|
||||||
* @param string $resource_type |
|
||||||
* @param string $resource_name |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
// $resource_type, $resource_name |
|
||||||
|
|
||||||
function smarty_core_is_trusted($params, &$smarty) { |
|
||||||
$_smarty_trusted = false; |
|
||||||
if ($params['resource_type'] == 'file') { |
|
||||||
if (!empty($smarty->trusted_dir)) { |
|
||||||
$_rp = realpath($params['resource_name']); |
|
||||||
foreach ((array) $smarty->trusted_dir as $curr_dir) { |
|
||||||
if (!empty($curr_dir) && is_readable($curr_dir)) { |
|
||||||
$_cd = realpath($curr_dir); |
|
||||||
if (strncmp($_rp, $_cd, strlen($_cd)) == 0 && substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) { |
|
||||||
$_smarty_trusted = true; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} else { |
|
||||||
// resource is not on local file system |
|
||||||
$_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3], array($params['resource_name'], $smarty)); |
|
||||||
} |
|
||||||
|
|
||||||
return $_smarty_trusted; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,123 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Load requested plugins |
|
||||||
* |
|
||||||
* @param array $plugins |
|
||||||
*/ |
|
||||||
// $plugins |
|
||||||
|
|
||||||
function smarty_core_load_plugins($params, &$smarty) { |
|
||||||
|
|
||||||
foreach ($params['plugins'] as $_plugin_info) { |
|
||||||
list($_type, $_name, $_tpl_file, $_tpl_line, $_delayed_loading) = $_plugin_info; |
|
||||||
$_plugin = &$smarty->_plugins[$_type][$_name]; |
|
||||||
|
|
||||||
/* |
|
||||||
* We do not load plugin more than once for each instance of Smarty. |
|
||||||
* The following code checks for that. The plugin can also be |
|
||||||
* registered dynamically at runtime, in which case template file |
|
||||||
* and line number will be unknown, so we fill them in. |
|
||||||
* |
|
||||||
* The final element of the info array is a flag that indicates |
|
||||||
* whether the dynamically registered plugin function has been |
|
||||||
* checked for existence yet or not. |
|
||||||
*/ |
|
||||||
if (isset($_plugin)) { |
|
||||||
if (empty($_plugin[3])) { |
|
||||||
if (!is_callable($_plugin[0])) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__); |
|
||||||
} else { |
|
||||||
$_plugin[1] = $_tpl_file; |
|
||||||
$_plugin[2] = $_tpl_line; |
|
||||||
$_plugin[3] = true; |
|
||||||
if (!isset($_plugin[4])) |
|
||||||
$_plugin[4] = true; /* cacheable */ |
|
||||||
} |
|
||||||
} |
|
||||||
continue; |
|
||||||
} else if ($_type == 'insert') { |
|
||||||
/* |
|
||||||
* For backwards compatibility, we check for insert functions in |
|
||||||
* the symbol table before trying to load them as a plugin. |
|
||||||
*/ |
|
||||||
$_plugin_func = 'insert_' . $_name; |
|
||||||
if (function_exists($_plugin_func)) { |
|
||||||
$_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false); |
|
||||||
continue; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$_plugin_file = $smarty->_get_plugin_filepath($_type, $_name); |
|
||||||
|
|
||||||
if (!$_found = ($_plugin_file != false)) { |
|
||||||
$_message = "could not load plugin file '$_type.$_name.php'\n"; |
|
||||||
} |
|
||||||
|
|
||||||
/* |
|
||||||
* If plugin file is found, it -must- provide the properly named |
|
||||||
* plugin function. In case it doesn't, simply output the error and |
|
||||||
* do not fall back on any other method. |
|
||||||
*/ |
|
||||||
if ($_found) { |
|
||||||
include_once $_plugin_file; |
|
||||||
|
|
||||||
$_plugin_func = 'smarty_' . $_type . '_' . $_name; |
|
||||||
if (!function_exists($_plugin_func)) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__); |
|
||||||
continue; |
|
||||||
} |
|
||||||
} |
|
||||||
/* |
|
||||||
* In case of insert plugins, their code may be loaded later via |
|
||||||
* 'script' attribute. |
|
||||||
*/ else if ($_type == 'insert' && $_delayed_loading) { |
|
||||||
$_plugin_func = 'smarty_' . $_type . '_' . $_name; |
|
||||||
$_found = true; |
|
||||||
} |
|
||||||
|
|
||||||
/* |
|
||||||
* Plugin specific processing and error checking. |
|
||||||
*/ |
|
||||||
if (!$_found) { |
|
||||||
if ($_type == 'modifier') { |
|
||||||
/* |
|
||||||
* In case modifier falls back on using PHP functions |
|
||||||
* directly, we only allow those specified in the security |
|
||||||
* context. |
|
||||||
*/ |
|
||||||
if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) { |
|
||||||
$_message = "(secure mode) modifier '$_name' is not allowed"; |
|
||||||
} else { |
|
||||||
if (!function_exists($_name)) { |
|
||||||
$_message = "modifier '$_name' is not implemented"; |
|
||||||
} else { |
|
||||||
$_plugin_func = $_name; |
|
||||||
$_found = true; |
|
||||||
} |
|
||||||
} |
|
||||||
} else if ($_type == 'function') { |
|
||||||
/* |
|
||||||
* This is a catch-all situation. |
|
||||||
*/ |
|
||||||
$_message = "unknown tag - '$_name'"; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if ($_found) { |
|
||||||
$smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true); |
|
||||||
} else { |
|
||||||
// output error |
|
||||||
$smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,72 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* load a resource plugin |
|
||||||
* |
|
||||||
* @param string $type |
|
||||||
*/ |
|
||||||
// $type |
|
||||||
|
|
||||||
function smarty_core_load_resource_plugin($params, &$smarty) { |
|
||||||
/* |
|
||||||
* Resource plugins are not quite like the other ones, so they are |
|
||||||
* handled differently. The first element of plugin info is the array of |
|
||||||
* functions provided by the plugin, the second one indicates whether |
|
||||||
* all of them exist or not. |
|
||||||
*/ |
|
||||||
|
|
||||||
$_plugin = &$smarty->_plugins['resource'][$params['type']]; |
|
||||||
if (isset($_plugin)) { |
|
||||||
if (!$_plugin[1] && count($_plugin[0])) { |
|
||||||
$_plugin[1] = true; |
|
||||||
foreach ($_plugin[0] as $_plugin_func) { |
|
||||||
if (!is_callable($_plugin_func)) { |
|
||||||
$_plugin[1] = false; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!$_plugin[1]) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__); |
|
||||||
} |
|
||||||
|
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
$_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']); |
|
||||||
$_found = ($_plugin_file != false); |
|
||||||
|
|
||||||
if ($_found) { /* |
|
||||||
* If the plugin file is found, it -must- provide the properly named |
|
||||||
* plugin functions. |
|
||||||
*/ |
|
||||||
include_once($_plugin_file); |
|
||||||
|
|
||||||
/* |
|
||||||
* Locate functions that we require the plugin to provide. |
|
||||||
*/ |
|
||||||
$_resource_ops = array('source', 'timestamp', 'secure', 'trusted'); |
|
||||||
$_resource_funcs = array(); |
|
||||||
foreach ($_resource_ops as $_op) { |
|
||||||
$_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op; |
|
||||||
if (!function_exists($_plugin_func)) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__); |
|
||||||
return; |
|
||||||
} else { |
|
||||||
$_resource_funcs[] = $_plugin_func; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,69 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Replace cached inserts with the actual results |
|
||||||
* |
|
||||||
* @param string $results |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_core_process_cached_inserts($params, &$smarty) { |
|
||||||
preg_match_all('!' . $smarty->_smarty_md5 . '{insert_cache (.*)}' . $smarty->_smarty_md5 . '!Uis', $params['results'], $match); |
|
||||||
list($cached_inserts, $insert_args) = $match; |
|
||||||
|
|
||||||
for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) { |
|
||||||
if ($smarty->debugging) { |
|
||||||
$_params = array(); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); |
|
||||||
$debug_start_time = smarty_core_get_microtime($_params, $smarty); |
|
||||||
} |
|
||||||
|
|
||||||
$args = unserialize($insert_args[$i]); |
|
||||||
$name = $args['name']; |
|
||||||
|
|
||||||
if (isset($args['script'])) { |
|
||||||
$_params = array('resource_name' => $smarty->_dequote($args['script'])); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); |
|
||||||
if (!smarty_core_get_php_resource($_params, $smarty)) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
$resource_type = $_params['resource_type']; |
|
||||||
$php_resource = $_params['php_resource']; |
|
||||||
|
|
||||||
|
|
||||||
if ($resource_type == 'file') { |
|
||||||
$smarty->_include($php_resource, true); |
|
||||||
} else { |
|
||||||
$smarty->_eval($php_resource); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$function_name = $smarty->_plugins['insert'][$name][0]; |
|
||||||
if (empty($args['assign'])) { |
|
||||||
$replace = $function_name($args, $smarty); |
|
||||||
} else { |
|
||||||
$smarty->assign($args['assign'], $function_name($args, $smarty)); |
|
||||||
$replace = ''; |
|
||||||
} |
|
||||||
|
|
||||||
$params['results'] = substr_replace($params['results'], $replace, strpos($params['results'], $cached_inserts[$i]), strlen($cached_inserts[$i])); |
|
||||||
if ($smarty->debugging) { |
|
||||||
$_params = array(); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); |
|
||||||
$smarty->_smarty_debug_info[] = array('type' => 'insert', |
|
||||||
'filename' => 'insert_' . $name, |
|
||||||
'depth' => $smarty->_inclusion_depth, |
|
||||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return $params['results']; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,34 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Replace nocache-tags by results of the corresponding non-cacheable |
|
||||||
* functions and return it |
|
||||||
* |
|
||||||
* @param string $compiled_tpl |
|
||||||
* @param string $cached_source |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_core_process_compiled_include($params, &$smarty) { |
|
||||||
$_cache_including = $smarty->_cache_including; |
|
||||||
$smarty->_cache_including = true; |
|
||||||
|
|
||||||
$_return = $params['results']; |
|
||||||
|
|
||||||
foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path => $_cache_serial) { |
|
||||||
$smarty->_include($_include_file_path, true); |
|
||||||
} |
|
||||||
|
|
||||||
foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path => $_cache_serial) { |
|
||||||
$_return = preg_replace_callback('!(\{nocache\:(' . $_cache_serial . ')#(\d+)\})!s', array(&$smarty, '_process_compiled_include_callback'), $_return); |
|
||||||
} |
|
||||||
$smarty->_cache_including = $_cache_including; |
|
||||||
return $_return; |
|
||||||
} |
|
||||||
|
|
||||||
?> |
|
@ -1,98 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* read a cache file, determine if it needs to be |
|
||||||
* regenerated or not |
|
||||||
* |
|
||||||
* @param string $tpl_file |
|
||||||
* @param string $cache_id |
|
||||||
* @param string $compile_id |
|
||||||
* @param string $results |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
// $tpl_file, $cache_id, $compile_id, &$results |
|
||||||
|
|
||||||
function smarty_core_read_cache_file(&$params, &$smarty) { |
|
||||||
static $content_cache = array(); |
|
||||||
|
|
||||||
if ($smarty->force_compile) { |
|
||||||
// force compile enabled, always regenerate |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($content_cache[$params['tpl_file'] . ',' . $params['cache_id'] . ',' . $params['compile_id']])) { |
|
||||||
list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'] . ',' . $params['cache_id'] . ',' . $params['compile_id']]; |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($smarty->cache_handler_func)) { |
|
||||||
// use cache_handler function |
|
||||||
call_user_func_array($smarty->cache_handler_func, array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); |
|
||||||
} else { |
|
||||||
// use local cache file |
|
||||||
$_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); |
|
||||||
$_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); |
|
||||||
$params['results'] = $smarty->_read_file($_cache_file); |
|
||||||
} |
|
||||||
|
|
||||||
if (empty($params['results'])) { |
|
||||||
// nothing to parse (error?), regenerate cache |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
$_contents = $params['results']; |
|
||||||
$_info_start = strpos($_contents, "\n") + 1; |
|
||||||
$_info_len = (int) substr($_contents, 0, $_info_start - 1); |
|
||||||
$_cache_info = unserialize(substr($_contents, $_info_start, $_info_len)); |
|
||||||
$params['results'] = substr($_contents, $_info_start + $_info_len); |
|
||||||
|
|
||||||
if ($smarty->caching == 2 && isset($_cache_info['expires'])) { |
|
||||||
// caching by expiration time |
|
||||||
if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) { |
|
||||||
// cache expired, regenerate |
|
||||||
return false; |
|
||||||
} |
|
||||||
} else { |
|
||||||
// caching by lifetime |
|
||||||
if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) { |
|
||||||
// cache expired, regenerate |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if ($smarty->compile_check) { |
|
||||||
$_params = array('get_source' => false, 'quiet' => true); |
|
||||||
foreach (array_keys($_cache_info['template']) as $_template_dep) { |
|
||||||
$_params['resource_name'] = $_template_dep; |
|
||||||
if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { |
|
||||||
// template file has changed, regenerate cache |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($_cache_info['config'])) { |
|
||||||
$_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet' => true); |
|
||||||
foreach (array_keys($_cache_info['config']) as $_config_dep) { |
|
||||||
$_params['resource_name'] = $_config_dep; |
|
||||||
if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { |
|
||||||
// config file has changed, regenerate cache |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$content_cache[$params['tpl_file'] . ',' . $params['cache_id'] . ',' . $params['compile_id']] = array($params['results'], $_cache_info); |
|
||||||
|
|
||||||
$smarty->_cache_info = $_cache_info; |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,69 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* delete an automagically created file by name and id |
|
||||||
* |
|
||||||
* @param string $auto_base |
|
||||||
* @param string $auto_source |
|
||||||
* @param string $auto_id |
|
||||||
* @param integer $exp_time |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
// $auto_base, $auto_source = null, $auto_id = null, $exp_time = null |
|
||||||
|
|
||||||
function smarty_core_rm_auto($params, &$smarty) { |
|
||||||
if (!@is_dir($params['auto_base'])) |
|
||||||
return false; |
|
||||||
|
|
||||||
if (!isset($params['auto_id']) && !isset($params['auto_source'])) { |
|
||||||
$_params = array( |
|
||||||
'dirname' => $params['auto_base'], |
|
||||||
'level' => 0, |
|
||||||
'exp_time' => $params['exp_time'] |
|
||||||
); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); |
|
||||||
$_res = smarty_core_rmdir($_params, $smarty); |
|
||||||
} else { |
|
||||||
$_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']); |
|
||||||
|
|
||||||
if (isset($params['auto_source'])) { |
|
||||||
if (isset($params['extensions'])) { |
|
||||||
$_res = false; |
|
||||||
foreach ((array) $params['extensions'] as $_extension) |
|
||||||
$_res |= $smarty->_unlink($_tname . $_extension, $params['exp_time']); |
|
||||||
} else { |
|
||||||
$_res = $smarty->_unlink($_tname, $params['exp_time']); |
|
||||||
} |
|
||||||
} elseif ($smarty->use_sub_dirs) { |
|
||||||
$_params = array( |
|
||||||
'dirname' => $_tname, |
|
||||||
'level' => 1, |
|
||||||
'exp_time' => $params['exp_time'] |
|
||||||
); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); |
|
||||||
$_res = smarty_core_rmdir($_params, $smarty); |
|
||||||
} else { |
|
||||||
// remove matching file names |
|
||||||
$_handle = opendir($params['auto_base']); |
|
||||||
$_res = true; |
|
||||||
while (false !== ($_filename = readdir($_handle))) { |
|
||||||
if ($_filename == '.' || $_filename == '..') { |
|
||||||
continue; |
|
||||||
} elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) { |
|
||||||
$_res &= (bool) $smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return $_res; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,54 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* delete a dir recursively (level=0 -> keep root) |
|
||||||
* WARNING: no tests, it will try to remove what you tell it! |
|
||||||
* |
|
||||||
* @param string $dirname |
|
||||||
* @param integer $level |
|
||||||
* @param integer $exp_time |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
// $dirname, $level = 1, $exp_time = null |
|
||||||
|
|
||||||
function smarty_core_rmdir($params, &$smarty) { |
|
||||||
if (!isset($params['level'])) { |
|
||||||
$params['level'] = 1; |
|
||||||
} |
|
||||||
if (!isset($params['exp_time'])) { |
|
||||||
$params['exp_time'] = null; |
|
||||||
} |
|
||||||
|
|
||||||
if ($_handle = @opendir($params['dirname'])) { |
|
||||||
|
|
||||||
while (false !== ($_entry = readdir($_handle))) { |
|
||||||
if ($_entry != '.' && $_entry != '..') { |
|
||||||
if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) { |
|
||||||
$_params = array( |
|
||||||
'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry, |
|
||||||
'level' => $params['level'] + 1, |
|
||||||
'exp_time' => $params['exp_time'] |
|
||||||
); |
|
||||||
smarty_core_rmdir($_params, $smarty); |
|
||||||
} else { |
|
||||||
$smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
closedir($_handle); |
|
||||||
} |
|
||||||
|
|
||||||
if ($params['level']) { |
|
||||||
return @rmdir($params['dirname']); |
|
||||||
} |
|
||||||
return (bool) $_handle; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,70 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Handle insert tags |
|
||||||
* |
|
||||||
* @param array $args |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_core_run_insert_handler($params, &$smarty) { |
|
||||||
|
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); |
|
||||||
if ($smarty->debugging) { |
|
||||||
$_params = array(); |
|
||||||
$_debug_start_time = smarty_core_get_microtime($_params, $smarty); |
|
||||||
} |
|
||||||
|
|
||||||
if ($smarty->caching) { |
|
||||||
$_arg_string = serialize($params['args']); |
|
||||||
$_name = $params['args']['name']; |
|
||||||
if (!isset($smarty->_cache_info['insert_tags'][$_name])) { |
|
||||||
$smarty->_cache_info['insert_tags'][$_name] = array('insert', |
|
||||||
$_name, |
|
||||||
$smarty->_plugins['insert'][$_name][1], |
|
||||||
$smarty->_plugins['insert'][$_name][2], |
|
||||||
!empty($params['args']['script']) ? true : false); |
|
||||||
} |
|
||||||
return $smarty->_smarty_md5 . "{insert_cache $_arg_string}" . $smarty->_smarty_md5; |
|
||||||
} else { |
|
||||||
if (isset($params['args']['script'])) { |
|
||||||
$_params = array('resource_name' => $smarty->_dequote($params['args']['script'])); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); |
|
||||||
if (!smarty_core_get_php_resource($_params, $smarty)) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
if ($_params['resource_type'] == 'file') { |
|
||||||
$smarty->_include($_params['php_resource'], true); |
|
||||||
} else { |
|
||||||
$smarty->_eval($_params['php_resource']); |
|
||||||
} |
|
||||||
unset($params['args']['script']); |
|
||||||
} |
|
||||||
|
|
||||||
$_funcname = $smarty->_plugins['insert'][$params['args']['name']][0]; |
|
||||||
$_content = $_funcname($params['args'], $smarty); |
|
||||||
if ($smarty->debugging) { |
|
||||||
$_params = array(); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); |
|
||||||
$smarty->_smarty_debug_info[] = array('type' => 'insert', |
|
||||||
'filename' => 'insert_' . $params['args']['name'], |
|
||||||
'depth' => $smarty->_inclusion_depth, |
|
||||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($params['args']["assign"])) { |
|
||||||
$smarty->assign($params['args']["assign"], $_content); |
|
||||||
} else { |
|
||||||
return $_content; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,47 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* called for included php files within templates |
|
||||||
* |
|
||||||
* @param string $smarty_file |
|
||||||
* @param string $smarty_assign variable to assign the included template's |
|
||||||
* output into |
|
||||||
* @param boolean $smarty_once uses include_once if this is true |
|
||||||
* @param array $smarty_include_vars associative array of vars from |
|
||||||
* {include file="blah" var=$var} |
|
||||||
*/ |
|
||||||
// $file, $assign, $once, $_smarty_include_vars |
|
||||||
|
|
||||||
function smarty_core_smarty_include_php($params, &$smarty) { |
|
||||||
$_params = array('resource_name' => $params['smarty_file']); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); |
|
||||||
smarty_core_get_php_resource($_params, $smarty); |
|
||||||
$_smarty_resource_type = $_params['resource_type']; |
|
||||||
$_smarty_php_resource = $_params['php_resource']; |
|
||||||
|
|
||||||
if (!empty($params['smarty_assign'])) { |
|
||||||
ob_start(); |
|
||||||
if ($_smarty_resource_type == 'file') { |
|
||||||
$smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); |
|
||||||
} else { |
|
||||||
$smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); |
|
||||||
} |
|
||||||
$smarty->assign($params['smarty_assign'], ob_get_contents()); |
|
||||||
ob_end_clean(); |
|
||||||
} else { |
|
||||||
if ($_smarty_resource_type == 'file') { |
|
||||||
$smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); |
|
||||||
} else { |
|
||||||
$smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,94 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Prepend the cache information to the cache file |
|
||||||
* and write it |
|
||||||
* |
|
||||||
* @param string $tpl_file |
|
||||||
* @param string $cache_id |
|
||||||
* @param string $compile_id |
|
||||||
* @param string $results |
|
||||||
* @return true|null |
|
||||||
*/ |
|
||||||
// $tpl_file, $cache_id, $compile_id, $results |
|
||||||
|
|
||||||
function smarty_core_write_cache_file($params, &$smarty) { |
|
||||||
|
|
||||||
// put timestamp in cache header |
|
||||||
$smarty->_cache_info['timestamp'] = time(); |
|
||||||
if ($smarty->cache_lifetime > -1) { |
|
||||||
// expiration set |
|
||||||
$smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime; |
|
||||||
} else { |
|
||||||
// cache will never expire |
|
||||||
$smarty->_cache_info['expires'] = -1; |
|
||||||
} |
|
||||||
|
|
||||||
// collapse nocache.../nocache-tags |
|
||||||
if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) { |
|
||||||
// remove everything between every pair of outermost noache.../nocache-tags |
|
||||||
// and replace it by a single nocache-tag |
|
||||||
// this new nocache-tag will be replaced by dynamic contents in |
|
||||||
// smarty_core_process_compiled_includes() on a cache-read |
|
||||||
|
|
||||||
$match_count = count($match[0]); |
|
||||||
$results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE); |
|
||||||
|
|
||||||
$level = 0; |
|
||||||
$j = 0; |
|
||||||
for ($i = 0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) { |
|
||||||
if ($results[$i] == $match[0][$j]) { |
|
||||||
// nocache tag |
|
||||||
if ($match[1][$j]) { // closing tag |
|
||||||
$level--; |
|
||||||
unset($results[$i]); |
|
||||||
} else { // opening tag |
|
||||||
if ($level++ > 0) |
|
||||||
unset($results[$i]); |
|
||||||
} |
|
||||||
$j++; |
|
||||||
} elseif ($level > 0) { |
|
||||||
unset($results[$i]); |
|
||||||
} |
|
||||||
} |
|
||||||
$params['results'] = implode('', $results); |
|
||||||
} |
|
||||||
$smarty->_cache_info['cache_serials'] = $smarty->_cache_serials; |
|
||||||
|
|
||||||
// prepend the cache header info into cache file |
|
||||||
$_cache_info = serialize($smarty->_cache_info); |
|
||||||
$params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results']; |
|
||||||
|
|
||||||
if (!empty($smarty->cache_handler_func)) { |
|
||||||
// use cache_handler function |
|
||||||
call_user_func_array($smarty->cache_handler_func, array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], $smarty->_cache_info['expires'])); |
|
||||||
} else { |
|
||||||
// use local cache file |
|
||||||
|
|
||||||
if (!@is_writable($smarty->cache_dir)) { |
|
||||||
// cache_dir not writable, see if it exists |
|
||||||
if (!@is_dir($smarty->cache_dir)) { |
|
||||||
$smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); |
|
||||||
return false; |
|
||||||
} |
|
||||||
$smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
$_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); |
|
||||||
$_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); |
|
||||||
$_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php'); |
|
||||||
smarty_core_write_file($_params, $smarty); |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,90 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Extract non-cacheable parts out of compiled template and write it |
|
||||||
* |
|
||||||
* @param string $compile_path |
|
||||||
* @param string $template_compiled |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
function smarty_core_write_compiled_include($params, &$smarty) { |
|
||||||
$_tag_start = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{nocache\:(' . $params['cache_serial'] . ')#(\d+)\}\'; endif;'; |
|
||||||
$_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{/nocache\:(\\2)#(\\3)\}\'; endif;'; |
|
||||||
|
|
||||||
preg_match_all('!(' . $_tag_start . '(.*)' . $_tag_end . ')!Us', $params['compiled_content'], $_match_source, PREG_SET_ORDER); |
|
||||||
|
|
||||||
// no nocache-parts found: done |
|
||||||
if (count($_match_source) == 0) |
|
||||||
return; |
|
||||||
|
|
||||||
// convert the matched php-code to functions |
|
||||||
$_include_compiled = "<?php /* Smarty version " . $smarty->_version . ", created on " . strftime_("%Y-%m-%d %H:%M:%S") . "\n";
|
|
||||||
$_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F' => '/', '%3A' => ':')) . " */\n\n"; |
|
||||||
|
|
||||||
$_compile_path = $params['include_file_path']; |
|
||||||
|
|
||||||
$smarty->_cache_serials[$_compile_path] = $params['cache_serial']; |
|
||||||
$_include_compiled .= "\$this->_cache_serials['" . $_compile_path . "'] = '" . $params['cache_serial'] . "';\n\n?>"; |
|
||||||
|
|
||||||
$_include_compiled .= $params['plugins_code']; |
|
||||||
$_include_compiled .= "<?php";
|
|
||||||
|
|
||||||
$this_varname = ((double) phpversion() >= 5.0) ? '_smarty' : 'this'; |
|
||||||
for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) { |
|
||||||
$_match = & $_match_source[$_i]; |
|
||||||
$source = $_match[4]; |
|
||||||
if ($this_varname == '_smarty') { |
|
||||||
/* rename $this to $_smarty in the sourcecode */ |
|
||||||
$tokens = token_get_all('<?php ' . $_match[4]); |
|
||||||
|
|
||||||
/* remove trailing <?php */ |
|
||||||
$open_tag = ''; |
|
||||||
while ($tokens) { |
|
||||||
$token = array_shift($tokens); |
|
||||||
if (is_array($token)) { |
|
||||||
$open_tag .= $token[1]; |
|
||||||
} else { |
|
||||||
$open_tag .= $token; |
|
||||||
} |
|
||||||
if ($open_tag == '<?php ') |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
for ($i = 0, $count = count($tokens); $i < $count; $i++) { |
|
||||||
if (is_array($tokens[$i])) { |
|
||||||
if ($tokens[$i][0] == T_VARIABLE && $tokens[$i][1] == '$this') { |
|
||||||
$tokens[$i] = '$' . $this_varname; |
|
||||||
} else { |
|
||||||
$tokens[$i] = $tokens[$i][1]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
$source = implode('', $tokens); |
|
||||||
} |
|
||||||
|
|
||||||
/* add function to compiled include */ |
|
||||||
$_include_compiled .= " |
|
||||||
function _smarty_tplfunc_$_match[2]_$_match[3](&\$$this_varname) |
|
||||||
{ |
|
||||||
$source |
|
||||||
} |
|
||||||
|
|
||||||
"; |
|
||||||
} |
|
||||||
$_include_compiled .= "\n\n?>\n"; |
|
||||||
|
|
||||||
$_params = array('filename' => $_compile_path, |
|
||||||
'contents' => $_include_compiled, 'create_dirs' => true); |
|
||||||
|
|
||||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php'); |
|
||||||
smarty_core_write_file($_params, $smarty); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
?> |
|
@ -1,34 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* write the compiled resource |
|
||||||
* |
|
||||||
* @param string $compile_path |
|
||||||
* @param string $compiled_content |
|
||||||
* @return true |
|
||||||
*/ |
|
||||||
function smarty_core_write_compiled_resource($params, &$smarty) { |
|
||||||
if (!@is_writable($smarty->compile_dir)) { |
|
||||||
// compile_dir not writable, see if it exists |
|
||||||
if (!@is_dir($smarty->compile_dir)) { |
|
||||||
$smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); |
|
||||||
return false; |
|
||||||
} |
|
||||||
$smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
$_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php'); |
|
||||||
smarty_core_write_file($_params, $smarty); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,53 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* write out a file to disk |
|
||||||
* |
|
||||||
* @param string $filename |
|
||||||
* @param string $contents |
|
||||||
* @param boolean $create_dirs |
|
||||||
* @return boolean |
|
||||||
*/ |
|
||||||
function smarty_core_write_file($params, &$smarty) { |
|
||||||
$_dirname = dirname($params['filename']); |
|
||||||
|
|
||||||
if ($params['create_dirs']) { |
|
||||||
$_params = array('dir' => $_dirname); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php'); |
|
||||||
smarty_core_create_dir_structure($_params, $smarty); |
|
||||||
} |
|
||||||
|
|
||||||
// write to tmp file, then rename it to avoid file locking race condition |
|
||||||
$_tmp_file = tempnam($_dirname, 'wrt'); |
|
||||||
|
|
||||||
if (!($fd = @fopen($_tmp_file, 'wb'))) { |
|
||||||
$_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt'); |
|
||||||
if (!($fd = @fopen($_tmp_file, 'wb'))) { |
|
||||||
$smarty->trigger_error("problem writing temporary file '$_tmp_file'"); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
fwrite($fd, $params['contents']); |
|
||||||
fclose($fd); |
|
||||||
|
|
||||||
if (DIRECTORY_SEPARATOR == '\\' || !@rename($_tmp_file, $params['filename'])) { |
|
||||||
// On platforms and filesystems that cannot overwrite with rename() |
|
||||||
// delete the file before renaming it -- because windows always suffers |
|
||||||
// this, it is short-circuited to avoid the initial rename() attempt |
|
||||||
@unlink($params['filename']); |
|
||||||
@rename($_tmp_file, $params['filename']); |
|
||||||
} |
|
||||||
@chmod($params['filename'], $smarty->_file_perms); |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,101 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {textformat}{/textformat} block plugin |
|
||||||
* |
|
||||||
* Type: block function<br> |
|
||||||
* Name: textformat<br> |
|
||||||
* Purpose: format text a certain way with preset styles |
|
||||||
* or custom wrap/indent settings<br> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} |
|
||||||
* (Smarty online manual) |
|
||||||
* @param array |
|
||||||
* <pre> |
|
||||||
* Params: style: string (email) |
|
||||||
* indent: integer (0) |
|
||||||
* wrap: integer (80) |
|
||||||
* wrap_char string ("\n") |
|
||||||
* indent_char: string (" ") |
|
||||||
* wrap_boundary: boolean (true) |
|
||||||
* </pre> |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param string contents of the block |
|
||||||
* @param Smarty clever simulation of a method |
|
||||||
* @return string string $content re-formatted |
|
||||||
*/ |
|
||||||
function smarty_block_textformat($params, $content, &$smarty) { |
|
||||||
if (is_null($content)) { |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
$style = null; |
|
||||||
$indent = 0; |
|
||||||
$indent_first = 0; |
|
||||||
$indent_char = ' '; |
|
||||||
$wrap = 80; |
|
||||||
$wrap_char = "\n"; |
|
||||||
$wrap_cut = false; |
|
||||||
$assign = null; |
|
||||||
|
|
||||||
foreach ($params as $_key => $_val) { |
|
||||||
switch ($_key) { |
|
||||||
case 'style': |
|
||||||
case 'indent_char': |
|
||||||
case 'wrap_char': |
|
||||||
case 'assign': |
|
||||||
$$_key = (string) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'indent': |
|
||||||
case 'indent_first': |
|
||||||
case 'wrap': |
|
||||||
$$_key = (int) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'wrap_cut': |
|
||||||
$$_key = (bool) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
$smarty->trigger_error("textformat: unknown attribute '$_key'"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if ($style == 'email') { |
|
||||||
$wrap = 72; |
|
||||||
} |
|
||||||
|
|
||||||
// split into paragraphs |
|
||||||
$_paragraphs = preg_split('![\r\n][\r\n]!', $content); |
|
||||||
$_output = ''; |
|
||||||
|
|
||||||
for ($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { |
|
||||||
if ($_paragraphs[$_x] == '') { |
|
||||||
continue; |
|
||||||
} |
|
||||||
// convert mult. spaces & special chars to single space |
|
||||||
$_paragraphs[$_x] = preg_replace(array('!\s+!', '!(^\s+)|(\s+$)!'), array(' ', ''), $_paragraphs[$_x]); |
|
||||||
// indent first line |
|
||||||
if ($indent_first > 0) { |
|
||||||
$_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; |
|
||||||
} |
|
||||||
// wordwrap sentences |
|
||||||
$_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); |
|
||||||
// indent lines |
|
||||||
if ($indent > 0) { |
|
||||||
$_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); |
|
||||||
} |
|
||||||
} |
|
||||||
$_output = implode($wrap_char . $wrap_char, $_paragraphs); |
|
||||||
|
|
||||||
return $assign ? $smarty->assign($assign, $_output) : $_output; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,39 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {assign} compiler function plugin |
|
||||||
* |
|
||||||
* Type: compiler function<br> |
|
||||||
* Name: assign<br> |
|
||||||
* Purpose: assign a value to a template variable |
|
||||||
* @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> (initial author) |
|
||||||
* @author messju mohr <messju at lammfellpuschen dot de> (conversion to compiler function) |
|
||||||
* @param string containing var-attribute and value-attribute |
|
||||||
* @param Smarty_Compiler |
|
||||||
*/ |
|
||||||
function smarty_compiler_assign($tag_attrs, &$compiler) { |
|
||||||
$_params = $compiler->_parse_attrs($tag_attrs); |
|
||||||
|
|
||||||
if (!isset($_params['var'])) { |
|
||||||
$compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($_params['value'])) { |
|
||||||
$compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
return "\$this->assign({$_params['var']}, {$_params['value']});"; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,39 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {assign_debug_info} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: assign_debug_info<br> |
|
||||||
* Purpose: assign debug info to the template<br> |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array unused in this plugin, this plugin uses {@link Smarty::$_config}, |
|
||||||
* {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info} |
|
||||||
* @param Smarty |
|
||||||
*/ |
|
||||||
function smarty_function_assign_debug_info($params, &$smarty) { |
|
||||||
$assigned_vars = $smarty->_tpl_vars; |
|
||||||
ksort($assigned_vars); |
|
||||||
if (@is_array($smarty->_config[0])) { |
|
||||||
$config_vars = $smarty->_config[0]; |
|
||||||
ksort($config_vars); |
|
||||||
$smarty->assign("_debug_config_keys", array_keys($config_vars)); |
|
||||||
$smarty->assign("_debug_config_vals", array_values($config_vars)); |
|
||||||
} |
|
||||||
|
|
||||||
$included_templates = $smarty->_smarty_debug_info; |
|
||||||
|
|
||||||
$smarty->assign("_debug_keys", array_keys($assigned_vars)); |
|
||||||
$smarty->assign("_debug_vals", array_values($assigned_vars)); |
|
||||||
|
|
||||||
$smarty->assign("_debug_tpls", $included_templates); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,139 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {config_load} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: config_load<br> |
|
||||||
* Purpose: load config file vars |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @author messju mohr <messju at lammfellpuschen dot de> (added use of resources) |
|
||||||
* @param array Format: |
|
||||||
* <pre> |
|
||||||
* array('file' => required config file name, |
|
||||||
* 'section' => optional config file section to load |
|
||||||
* 'scope' => local/parent/global |
|
||||||
* 'global' => overrides scope, setting to parent if true) |
|
||||||
* </pre> |
|
||||||
* @param Smarty |
|
||||||
*/ |
|
||||||
function smarty_function_config_load($params, &$smarty) { |
|
||||||
if ($smarty->debugging) { |
|
||||||
$_params = array(); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); |
|
||||||
$_debug_start_time = smarty_core_get_microtime($_params, $smarty); |
|
||||||
} |
|
||||||
|
|
||||||
$_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null; |
|
||||||
$_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null; |
|
||||||
$_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global'; |
|
||||||
$_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false; |
|
||||||
|
|
||||||
if (!isset($_file) || strlen($_file) == 0) { |
|
||||||
$smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__); |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($_scope)) { |
|
||||||
if ($_scope != 'local' && |
|
||||||
$_scope != 'parent' && |
|
||||||
$_scope != 'global') { |
|
||||||
$smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__); |
|
||||||
} |
|
||||||
} else { |
|
||||||
if ($_global) { |
|
||||||
$_scope = 'parent'; |
|
||||||
} else { |
|
||||||
$_scope = 'local'; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$_params = array('resource_name' => $_file, |
|
||||||
'resource_base_path' => $smarty->config_dir, |
|
||||||
'get_source' => false); |
|
||||||
$smarty->_parse_resource_name($_params); |
|
||||||
$_file_path = $_params['resource_type'] . ':' . $_params['resource_name']; |
|
||||||
if (isset($_section)) |
|
||||||
$_compile_file = $smarty->_get_compile_path($_file_path . '|' . $_section); |
|
||||||
else |
|
||||||
$_compile_file = $smarty->_get_compile_path($_file_path); |
|
||||||
|
|
||||||
if ($smarty->force_compile || !file_exists($_compile_file)) { |
|
||||||
$_compile = true; |
|
||||||
} elseif ($smarty->compile_check) { |
|
||||||
$_params = array('resource_name' => $_file, |
|
||||||
'resource_base_path' => $smarty->config_dir, |
|
||||||
'get_source' => false); |
|
||||||
$_compile = $smarty->_fetch_resource_info($_params) && |
|
||||||
$_params['resource_timestamp'] > filemtime($_compile_file); |
|
||||||
} else { |
|
||||||
$_compile = false; |
|
||||||
} |
|
||||||
|
|
||||||
if ($_compile) { |
|
||||||
// compile config file |
|
||||||
if (!is_object($smarty->_conf_obj)) { |
|
||||||
require_once SMARTY_DIR . $smarty->config_class . '.class.php'; |
|
||||||
$smarty->_conf_obj = new $smarty->config_class(); |
|
||||||
$smarty->_conf_obj->overwrite = $smarty->config_overwrite; |
|
||||||
$smarty->_conf_obj->booleanize = $smarty->config_booleanize; |
|
||||||
$smarty->_conf_obj->read_hidden = $smarty->config_read_hidden; |
|
||||||
$smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines; |
|
||||||
} |
|
||||||
|
|
||||||
$_params = array('resource_name' => $_file, |
|
||||||
'resource_base_path' => $smarty->config_dir, |
|
||||||
$_params['get_source'] = true); |
|
||||||
if (!$smarty->_fetch_resource_info($_params)) { |
|
||||||
return; |
|
||||||
} |
|
||||||
$smarty->_conf_obj->set_file_contents($_file, $_params['source_content']); |
|
||||||
$_config_vars = array_merge($smarty->_conf_obj->get($_file), $smarty->_conf_obj->get($_file, $_section)); |
|
||||||
if (function_exists('var_export')) { |
|
||||||
$_output = '<?php $_config_vars = ' . var_export($_config_vars, true) . '; ?>';
|
|
||||||
} else { |
|
||||||
$_output = '<?php $_config_vars = unserialize(\'' . strtr(serialize($_config_vars), array('\'' => '\\\'', '\\' => '\\\\')) . '\'); ?>'; |
|
||||||
} |
|
||||||
$_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp'])); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); |
|
||||||
smarty_core_write_compiled_resource($_params, $smarty); |
|
||||||
} else { |
|
||||||
include($_compile_file); |
|
||||||
} |
|
||||||
|
|
||||||
if ($smarty->caching) { |
|
||||||
$smarty->_cache_info['config'][$_file] = true; |
|
||||||
} |
|
||||||
|
|
||||||
$smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars); |
|
||||||
$smarty->_config[0]['files'][$_file] = true; |
|
||||||
|
|
||||||
if ($_scope == 'parent') { |
|
||||||
$smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars); |
|
||||||
$smarty->_config[1]['files'][$_file] = true; |
|
||||||
} else if ($_scope == 'global') { |
|
||||||
for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) { |
|
||||||
$smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars); |
|
||||||
$smarty->_config[$i]['files'][$_file] = true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if ($smarty->debugging) { |
|
||||||
$_params = array(); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); |
|
||||||
$smarty->_smarty_debug_info[] = array('type' => 'config', |
|
||||||
'filename' => $_file . ' [' . $_section . '] ' . $_scope, |
|
||||||
'depth' => $smarty->_inclusion_depth, |
|
||||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,77 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {counter} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: counter<br> |
|
||||||
* Purpose: print out a counter value |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.counter.php {counter} |
|
||||||
* (Smarty online manual) |
|
||||||
* @param array parameters |
|
||||||
* @param Smarty |
|
||||||
* @return string|null |
|
||||||
*/ |
|
||||||
function smarty_function_counter($params, &$smarty) { |
|
||||||
static $counters = array(); |
|
||||||
|
|
||||||
$name = (isset($params['name'])) ? $params['name'] : 'default'; |
|
||||||
if (!isset($counters[$name])) { |
|
||||||
$counters[$name] = array( |
|
||||||
'start' => 1, |
|
||||||
'skip' => 1, |
|
||||||
'direction' => 'up', |
|
||||||
'count' => 1 |
|
||||||
); |
|
||||||
} |
|
||||||
$counter = & $counters[$name]; |
|
||||||
|
|
||||||
if (isset($params['start'])) { |
|
||||||
$counter['start'] = $counter['count'] = (int) $params['start']; |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($params['assign'])) { |
|
||||||
$counter['assign'] = $params['assign']; |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($counter['assign'])) { |
|
||||||
$smarty->assign($counter['assign'], $counter['count']); |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($params['print'])) { |
|
||||||
$print = (bool) $params['print']; |
|
||||||
} else { |
|
||||||
$print = empty($counter['assign']); |
|
||||||
} |
|
||||||
|
|
||||||
if ($print) { |
|
||||||
$retval = $counter['count']; |
|
||||||
} else { |
|
||||||
$retval = null; |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($params['skip'])) { |
|
||||||
$counter['skip'] = $params['skip']; |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($params['direction'])) { |
|
||||||
$counter['direction'] = $params['direction']; |
|
||||||
} |
|
||||||
|
|
||||||
if ($counter['direction'] == "down") |
|
||||||
$counter['count'] -= $counter['skip']; |
|
||||||
else |
|
||||||
$counter['count'] += $counter['skip']; |
|
||||||
|
|
||||||
return $retval; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,100 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {cycle} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: cycle<br> |
|
||||||
* Date: May 3, 2002<br> |
|
||||||
* Purpose: cycle through given values<br> |
|
||||||
* Input: |
|
||||||
* - name = name of cycle (optional) |
|
||||||
* - values = comma separated list of values to cycle, |
|
||||||
* or an array of values to cycle |
|
||||||
* (this can be left out for subsequent calls) |
|
||||||
* - reset = boolean - resets given var to true |
|
||||||
* - print = boolean - print var or not. default is true |
|
||||||
* - advance = boolean - whether or not to advance the cycle |
|
||||||
* - delimiter = the value delimiter, default is "," |
|
||||||
* - assign = boolean, assigns to template var instead of |
|
||||||
* printed. |
|
||||||
* |
|
||||||
* Examples:<br> |
|
||||||
* <pre> |
|
||||||
* {cycle values="#eeeeee,#d0d0d0d"} |
|
||||||
* {cycle name=row values="one,two,three" reset=true} |
|
||||||
* {cycle name=row} |
|
||||||
* </pre> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @author credit to Mark Priatel <mpriatel@rogers.com> |
|
||||||
* @author credit to Gerard <gerard@interfold.com> |
|
||||||
* @author credit to Jason Sweat <jsweat_php@yahoo.com> |
|
||||||
* @version 1.3 |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string|null |
|
||||||
*/ |
|
||||||
function smarty_function_cycle($params, &$smarty) { |
|
||||||
static $cycle_vars; |
|
||||||
|
|
||||||
$name = (empty($params['name'])) ? 'default' : $params['name']; |
|
||||||
$print = (isset($params['print'])) ? (bool) $params['print'] : true; |
|
||||||
$advance = (isset($params['advance'])) ? (bool) $params['advance'] : true; |
|
||||||
$reset = (isset($params['reset'])) ? (bool) $params['reset'] : false; |
|
||||||
|
|
||||||
if (!in_array('values', array_keys($params))) { |
|
||||||
if (!isset($cycle_vars[$name]['values'])) { |
|
||||||
$smarty->trigger_error("cycle: missing 'values' parameter"); |
|
||||||
return; |
|
||||||
} |
|
||||||
} else { |
|
||||||
if (isset($cycle_vars[$name]['values']) && $cycle_vars[$name]['values'] != $params['values']) { |
|
||||||
$cycle_vars[$name]['index'] = 0; |
|
||||||
} |
|
||||||
$cycle_vars[$name]['values'] = $params['values']; |
|
||||||
} |
|
||||||
|
|
||||||
$cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ','; |
|
||||||
|
|
||||||
if (is_array($cycle_vars[$name]['values'])) { |
|
||||||
$cycle_array = $cycle_vars[$name]['values']; |
|
||||||
} else { |
|
||||||
$cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']); |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($cycle_vars[$name]['index']) || $reset) { |
|
||||||
$cycle_vars[$name]['index'] = 0; |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($params['assign'])) { |
|
||||||
$print = false; |
|
||||||
$smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); |
|
||||||
} |
|
||||||
|
|
||||||
if ($print) { |
|
||||||
$retval = $cycle_array[$cycle_vars[$name]['index']]; |
|
||||||
} else { |
|
||||||
$retval = null; |
|
||||||
} |
|
||||||
|
|
||||||
if ($advance) { |
|
||||||
if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) { |
|
||||||
$cycle_vars[$name]['index'] = 0; |
|
||||||
} else { |
|
||||||
$cycle_vars[$name]['index'] ++; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return $retval; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,33 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {debug} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: debug<br> |
|
||||||
* Date: July 1, 2002<br> |
|
||||||
* Purpose: popup debug window |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.debug.php {debug} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @version 1.0 |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string output from {@link Smarty::_generate_debug_output()} |
|
||||||
*/ |
|
||||||
function smarty_function_debug($params, &$smarty) { |
|
||||||
if (isset($params['output'])) { |
|
||||||
$smarty->assign('_smarty_debug_output', $params['output']); |
|
||||||
} |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); |
|
||||||
return smarty_core_display_debug_console(null, $smarty); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,47 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {eval} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: eval<br> |
|
||||||
* Purpose: evaluate a template variable as a template<br> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.eval.php {eval} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
*/ |
|
||||||
function smarty_function_eval($params, &$smarty) { |
|
||||||
|
|
||||||
if (!isset($params['var'])) { |
|
||||||
$smarty->trigger_error("eval: missing 'var' parameter"); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if ($params['var'] == '') { |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
$smarty->_compile_source('evaluated template', $params['var'], $_var_compiled); |
|
||||||
|
|
||||||
ob_start(); |
|
||||||
$smarty->_eval('?>' . $_var_compiled); |
|
||||||
$_contents = ob_get_contents(); |
|
||||||
ob_end_clean(); |
|
||||||
|
|
||||||
if (!empty($params['assign'])) { |
|
||||||
$smarty->assign($params['assign'], $_contents); |
|
||||||
} else { |
|
||||||
return $_contents; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,218 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {fetch} plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: fetch<br> |
|
||||||
* Purpose: fetch file, web or ftp data and display results |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string|null if the assign parameter is passed, Smarty assigns the |
|
||||||
* result to a template variable |
|
||||||
*/ |
|
||||||
function smarty_function_fetch($params, &$smarty) { |
|
||||||
if (empty($params['file'])) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
$content = ''; |
|
||||||
if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { |
|
||||||
$_params = array('resource_type' => 'file', 'resource_name' => $params['file']); |
|
||||||
require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); |
|
||||||
if (!smarty_core_is_secure($_params, $smarty)) { |
|
||||||
$smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
// fetch the file |
|
||||||
if ($fp = @fopen($params['file'], 'r')) { |
|
||||||
while (!feof($fp)) { |
|
||||||
$content .= fgets($fp, 4096); |
|
||||||
} |
|
||||||
fclose($fp); |
|
||||||
} else { |
|
||||||
$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); |
|
||||||
return; |
|
||||||
} |
|
||||||
} else { |
|
||||||
// not a local file |
|
||||||
if (preg_match('!^http://!i', $params['file'])) { |
|
||||||
// http fetch |
|
||||||
if ($uri_parts = parse_url($params['file'])) { |
|
||||||
// set defaults |
|
||||||
$host = $server_name = $uri_parts['host']; |
|
||||||
$timeout = 30; |
|
||||||
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; |
|
||||||
$agent = "Smarty Template Engine " . $smarty->_version; |
|
||||||
$referer = ""; |
|
||||||
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; |
|
||||||
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; |
|
||||||
$_is_proxy = false; |
|
||||||
if (empty($uri_parts['port'])) { |
|
||||||
$port = 80; |
|
||||||
} else { |
|
||||||
$port = $uri_parts['port']; |
|
||||||
} |
|
||||||
if (!empty($uri_parts['user'])) { |
|
||||||
$user = $uri_parts['user']; |
|
||||||
} |
|
||||||
if (!empty($uri_parts['pass'])) { |
|
||||||
$pass = $uri_parts['pass']; |
|
||||||
} |
|
||||||
// loop through parameters, setup headers |
|
||||||
foreach ($params as $param_key => $param_value) { |
|
||||||
switch ($param_key) { |
|
||||||
case "file": |
|
||||||
case "assign": |
|
||||||
case "assign_headers": |
|
||||||
break; |
|
||||||
case "user": |
|
||||||
if (!empty($param_value)) { |
|
||||||
$user = $param_value; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "pass": |
|
||||||
if (!empty($param_value)) { |
|
||||||
$pass = $param_value; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "accept": |
|
||||||
if (!empty($param_value)) { |
|
||||||
$accept = $param_value; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "header": |
|
||||||
if (!empty($param_value)) { |
|
||||||
if (!preg_match('![\w\d-]+: .+!', $param_value)) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] invalid header format '" . $param_value . "'"); |
|
||||||
return; |
|
||||||
} else { |
|
||||||
$extra_headers[] = $param_value; |
|
||||||
} |
|
||||||
} |
|
||||||
break; |
|
||||||
case "proxy_host": |
|
||||||
if (!empty($param_value)) { |
|
||||||
$proxy_host = $param_value; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "proxy_port": |
|
||||||
if (!preg_match('!\D!', $param_value)) { |
|
||||||
$proxy_port = (int) $param_value; |
|
||||||
} else { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '" . $param_key . "'"); |
|
||||||
return; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "agent": |
|
||||||
if (!empty($param_value)) { |
|
||||||
$agent = $param_value; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "referer": |
|
||||||
if (!empty($param_value)) { |
|
||||||
$referer = $param_value; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "timeout": |
|
||||||
if (!preg_match('!\D!', $param_value)) { |
|
||||||
$timeout = (int) $param_value; |
|
||||||
} else { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '" . $param_key . "'"); |
|
||||||
return; |
|
||||||
} |
|
||||||
break; |
|
||||||
default: |
|
||||||
$smarty->_trigger_fatal_error("[plugin] unrecognized attribute '" . $param_key . "'"); |
|
||||||
return; |
|
||||||
} |
|
||||||
} |
|
||||||
if (!empty($proxy_host) && !empty($proxy_port)) { |
|
||||||
$_is_proxy = true; |
|
||||||
$fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout); |
|
||||||
} else { |
|
||||||
$fp = fsockopen($server_name, $port, $errno, $errstr, $timeout); |
|
||||||
} |
|
||||||
|
|
||||||
if (!$fp) { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); |
|
||||||
return; |
|
||||||
} else { |
|
||||||
if ($_is_proxy) { |
|
||||||
fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); |
|
||||||
} else { |
|
||||||
fputs($fp, "GET $uri HTTP/1.0\r\n"); |
|
||||||
} |
|
||||||
if (!empty($host)) { |
|
||||||
fputs($fp, "Host: $host\r\n"); |
|
||||||
} |
|
||||||
if (!empty($accept)) { |
|
||||||
fputs($fp, "Accept: $accept\r\n"); |
|
||||||
} |
|
||||||
if (!empty($agent)) { |
|
||||||
fputs($fp, "User-Agent: $agent\r\n"); |
|
||||||
} |
|
||||||
if (!empty($referer)) { |
|
||||||
fputs($fp, "Referer: $referer\r\n"); |
|
||||||
} |
|
||||||
if (isset($extra_headers) && is_array($extra_headers)) { |
|
||||||
foreach ($extra_headers as $curr_header) { |
|
||||||
fputs($fp, $curr_header . "\r\n"); |
|
||||||
} |
|
||||||
} |
|
||||||
if (!empty($user) && !empty($pass)) { |
|
||||||
fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n"); |
|
||||||
} |
|
||||||
|
|
||||||
fputs($fp, "\r\n"); |
|
||||||
while (!feof($fp)) { |
|
||||||
$content .= fgets($fp, 4096); |
|
||||||
} |
|
||||||
fclose($fp); |
|
||||||
$csplit = explode("\r\n\r\n", $content, 2); |
|
||||||
|
|
||||||
$content = $csplit[1]; |
|
||||||
|
|
||||||
if (!empty($params['assign_headers'])) { |
|
||||||
$smarty->assign($params['assign_headers'], split("\r\n", $csplit[0])); |
|
||||||
} |
|
||||||
} |
|
||||||
} else { |
|
||||||
$smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); |
|
||||||
return; |
|
||||||
} |
|
||||||
} else { |
|
||||||
// ftp fetch |
|
||||||
if ($fp = @fopen($params['file'], 'r')) { |
|
||||||
while (!feof($fp)) { |
|
||||||
$content .= fgets($fp, 4096); |
|
||||||
} |
|
||||||
fclose($fp); |
|
||||||
} else { |
|
||||||
$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); |
|
||||||
return; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
if (!empty($params['assign'])) { |
|
||||||
$smarty->assign($params['assign'], $content); |
|
||||||
} else { |
|
||||||
return $content; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,140 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_checkboxes} function plugin |
|
||||||
* |
|
||||||
* File: function.html_checkboxes.php<br> |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_checkboxes<br> |
|
||||||
* Date: 24.Feb.2003<br> |
|
||||||
* Purpose: Prints out a list of checkbox input types<br> |
|
||||||
* Input:<br> |
|
||||||
* - name (optional) - string default "checkbox" |
|
||||||
* - values (required) - array |
|
||||||
* - options (optional) - associative array |
|
||||||
* - checked (optional) - array default not set |
|
||||||
* - separator (optional) - ie <br> or |
|
||||||
* - output (optional) - the output next to each checkbox |
|
||||||
* - assign (optional) - assign the output as an array to this variable |
|
||||||
* Examples: |
|
||||||
* <pre> |
|
||||||
* {html_checkboxes values=$ids output=$names} |
|
||||||
* {html_checkboxes values=$ids name='box' separator='<br>' output=$names} |
|
||||||
* {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names} |
|
||||||
* </pre> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com> |
|
||||||
* @author credits to Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @version 1.0 |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
* @uses smarty_function_escape_special_chars() |
|
||||||
*/ |
|
||||||
function smarty_function_html_checkboxes($params, &$smarty) { |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars'); |
|
||||||
|
|
||||||
$name = 'checkbox'; |
|
||||||
$values = null; |
|
||||||
$options = null; |
|
||||||
$selected = null; |
|
||||||
$separator = ''; |
|
||||||
$labels = true; |
|
||||||
$output = null; |
|
||||||
|
|
||||||
$extra = ''; |
|
||||||
|
|
||||||
foreach ($params as $_key => $_val) { |
|
||||||
switch ($_key) { |
|
||||||
case 'name': |
|
||||||
case 'separator': |
|
||||||
$$_key = $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'labels': |
|
||||||
$$_key = (bool) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'options': |
|
||||||
$$_key = (array) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'values': |
|
||||||
case 'output': |
|
||||||
$$_key = array_values((array) $_val); |
|
||||||
break; |
|
||||||
|
|
||||||
case 'checked': |
|
||||||
case 'selected': |
|
||||||
$selected = array_map('strval', array_values((array) $_val)); |
|
||||||
break; |
|
||||||
|
|
||||||
case 'checkboxes': |
|
||||||
$smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); |
|
||||||
$options = (array) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'assign': |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
if (!is_array($_val)) { |
|
||||||
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($options) && !isset($values)) |
|
||||||
return ''; /* raise error here? */ |
|
||||||
|
|
||||||
settype($selected, 'array'); |
|
||||||
$_html_result = array(); |
|
||||||
|
|
||||||
if (isset($options)) { |
|
||||||
|
|
||||||
foreach ($options as $_key => $_val) |
|
||||||
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); |
|
||||||
} else { |
|
||||||
foreach ($values as $_i => $_key) { |
|
||||||
$_val = isset($output[$_i]) ? $output[$_i] : ''; |
|
||||||
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($params['assign'])) { |
|
||||||
$smarty->assign($params['assign'], $_html_result); |
|
||||||
} else { |
|
||||||
return implode("\n", $_html_result); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) { |
|
||||||
$_output = ''; |
|
||||||
if ($labels) |
|
||||||
$_output .= '<label>'; |
|
||||||
$_output .= '<input type="checkbox" name="' |
|
||||||
. smarty_function_escape_special_chars($name) . '[]" value="' |
|
||||||
. smarty_function_escape_special_chars($value) . '"'; |
|
||||||
|
|
||||||
if (in_array((string) $value, $selected)) { |
|
||||||
$_output .= ' checked="checked"'; |
|
||||||
} |
|
||||||
$_output .= $extra . ' />' . $output; |
|
||||||
if ($labels) |
|
||||||
$_output .= '</label>'; |
|
||||||
$_output .= $separator; |
|
||||||
|
|
||||||
return $_output; |
|
||||||
} |
|
||||||
|
|
||||||
?> |
|
@ -1,139 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_image} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_image<br> |
|
||||||
* Date: Feb 24, 2003<br> |
|
||||||
* Purpose: format HTML tags for the image<br> |
|
||||||
* Input:<br> |
|
||||||
* - file = file (and path) of image (required) |
|
||||||
* - height = image height (optional, default actual height) |
|
||||||
* - width = image width (optional, default actual width) |
|
||||||
* - basedir = base directory for absolute paths, default |
|
||||||
* is environment variable DOCUMENT_ROOT |
|
||||||
* - path_prefix = prefix for path output (optional, default empty) |
|
||||||
* |
|
||||||
* Examples: {html_image file="/images/masthead.gif"} |
|
||||||
* Output: <img src="/images/masthead.gif" width=400 height=23> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @author credits to Duda <duda@big.hu> - wrote first image function |
|
||||||
* in repository, helped with lots of functionality |
|
||||||
* @version 1.0 |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
* @uses smarty_function_escape_special_chars() |
|
||||||
*/ |
|
||||||
function smarty_function_html_image($params, &$smarty) { |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars'); |
|
||||||
|
|
||||||
$alt = ''; |
|
||||||
$file = ''; |
|
||||||
$height = ''; |
|
||||||
$width = ''; |
|
||||||
$extra = ''; |
|
||||||
$prefix = ''; |
|
||||||
$suffix = ''; |
|
||||||
$path_prefix = ''; |
|
||||||
$server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; |
|
||||||
$basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; |
|
||||||
foreach ($params as $_key => $_val) { |
|
||||||
switch ($_key) { |
|
||||||
case 'file': |
|
||||||
case 'height': |
|
||||||
case 'width': |
|
||||||
case 'dpi': |
|
||||||
case 'path_prefix': |
|
||||||
case 'basedir': |
|
||||||
$$_key = $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'alt': |
|
||||||
if (!is_array($_val)) { |
|
||||||
$$_key = smarty_function_escape_special_chars($_val); |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
||||||
} |
|
||||||
break; |
|
||||||
|
|
||||||
case 'link': |
|
||||||
case 'href': |
|
||||||
$prefix = '<a href="' . $_val . '">'; |
|
||||||
$suffix = '</a>'; |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
if (!is_array($_val)) { |
|
||||||
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (empty($file)) { |
|
||||||
$smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if (substr($file, 0, 1) == '/') { |
|
||||||
$_image_path = $basedir . $file; |
|
||||||
} else { |
|
||||||
$_image_path = $file; |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($params['width']) || !isset($params['height'])) { |
|
||||||
if (!$_image_data = @getimagesize($_image_path)) { |
|
||||||
if (!file_exists($_image_path)) { |
|
||||||
$smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); |
|
||||||
return; |
|
||||||
} else if (!is_readable($_image_path)) { |
|
||||||
$smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); |
|
||||||
return; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); |
|
||||||
return; |
|
||||||
} |
|
||||||
} |
|
||||||
if ($smarty->security && |
|
||||||
($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) && |
|
||||||
(require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) && |
|
||||||
(!smarty_core_is_secure($_params, $smarty))) { |
|
||||||
$smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($params['width'])) { |
|
||||||
$width = $_image_data[0]; |
|
||||||
} |
|
||||||
if (!isset($params['height'])) { |
|
||||||
$height = $_image_data[1]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($params['dpi'])) { |
|
||||||
if (strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) { |
|
||||||
$dpi_default = 72; |
|
||||||
} else { |
|
||||||
$dpi_default = 96; |
|
||||||
} |
|
||||||
$_resize = $dpi_default / $params['dpi']; |
|
||||||
$width = round($width * $_resize); |
|
||||||
$height = round($height * $_resize); |
|
||||||
} |
|
||||||
|
|
||||||
return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,117 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_options} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_options<br> |
|
||||||
* Input:<br> |
|
||||||
* - name (optional) - string default "select" |
|
||||||
* - values (required if no options supplied) - array |
|
||||||
* - options (required if no values supplied) - associative array |
|
||||||
* - selected (optional) - string default not set |
|
||||||
* - output (required if not options supplied) - array |
|
||||||
* Purpose: Prints the list of <option> tags generated from |
|
||||||
* the passed parameters |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
* @uses smarty_function_escape_special_chars() |
|
||||||
*/ |
|
||||||
function smarty_function_html_options($params, &$smarty) { |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars'); |
|
||||||
|
|
||||||
$name = null; |
|
||||||
$values = null; |
|
||||||
$options = null; |
|
||||||
$selected = array(); |
|
||||||
$output = null; |
|
||||||
|
|
||||||
$extra = ''; |
|
||||||
|
|
||||||
foreach ($params as $_key => $_val) { |
|
||||||
switch ($_key) { |
|
||||||
case 'name': |
|
||||||
$$_key = (string) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'options': |
|
||||||
$$_key = (array) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'values': |
|
||||||
case 'output': |
|
||||||
$$_key = array_values((array) $_val); |
|
||||||
break; |
|
||||||
|
|
||||||
case 'selected': |
|
||||||
$$_key = array_map('strval', array_values((array) $_val)); |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
if (!is_array($_val)) { |
|
||||||
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($options) && !isset($values)) |
|
||||||
return ''; /* raise error here? */ |
|
||||||
|
|
||||||
$_html_result = ''; |
|
||||||
|
|
||||||
if (isset($options)) { |
|
||||||
|
|
||||||
foreach ($options as $_key => $_val) |
|
||||||
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected); |
|
||||||
} else { |
|
||||||
|
|
||||||
foreach ($values as $_i => $_key) { |
|
||||||
$_val = isset($output[$_i]) ? $output[$_i] : ''; |
|
||||||
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($name)) { |
|
||||||
$_html_result = '<select name="' . $name . '"' . $extra . '>' . "\n" . $_html_result . '</select>' . "\n"; |
|
||||||
} |
|
||||||
|
|
||||||
return $_html_result; |
|
||||||
} |
|
||||||
|
|
||||||
function smarty_function_html_options_optoutput($key, $value, $selected) { |
|
||||||
if (!is_array($value)) { |
|
||||||
$_html_result = '<option label="' . smarty_function_escape_special_chars($value) . '" value="' . |
|
||||||
smarty_function_escape_special_chars($key) . '"'; |
|
||||||
if (in_array((string) $key, $selected)) |
|
||||||
$_html_result .= ' selected="selected"'; |
|
||||||
$_html_result .= '>' . smarty_function_escape_special_chars($value) . '</option>' . "\n"; |
|
||||||
} else { |
|
||||||
$_html_result = smarty_function_html_options_optgroup($key, $value, $selected); |
|
||||||
} |
|
||||||
return $_html_result; |
|
||||||
} |
|
||||||
|
|
||||||
function smarty_function_html_options_optgroup($key, $values, $selected) { |
|
||||||
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n"; |
|
||||||
foreach ($values as $key => $value) { |
|
||||||
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected); |
|
||||||
} |
|
||||||
$optgroup_html .= "</optgroup>\n"; |
|
||||||
return $optgroup_html; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,154 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_radios} function plugin |
|
||||||
* |
|
||||||
* File: function.html_radios.php<br> |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_radios<br> |
|
||||||
* Date: 24.Feb.2003<br> |
|
||||||
* Purpose: Prints out a list of radio input types<br> |
|
||||||
* Input:<br> |
|
||||||
* - name (optional) - string default "radio" |
|
||||||
* - values (required) - array |
|
||||||
* - options (optional) - associative array |
|
||||||
* - checked (optional) - array default not set |
|
||||||
* - separator (optional) - ie <br> or |
|
||||||
* - output (optional) - the output next to each radio button |
|
||||||
* - assign (optional) - assign the output as an array to this variable |
|
||||||
* Examples: |
|
||||||
* <pre> |
|
||||||
* {html_radios values=$ids output=$names} |
|
||||||
* {html_radios values=$ids name='box' separator='<br>' output=$names} |
|
||||||
* {html_radios values=$ids checked=$checked separator='<br>' output=$names} |
|
||||||
* </pre> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com> |
|
||||||
* @author credits to Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @version 1.0 |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
* @uses smarty_function_escape_special_chars() |
|
||||||
*/ |
|
||||||
function smarty_function_html_radios($params, &$smarty) { |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars'); |
|
||||||
|
|
||||||
$name = 'radio'; |
|
||||||
$values = null; |
|
||||||
$options = null; |
|
||||||
$selected = null; |
|
||||||
$separator = ''; |
|
||||||
$labels = true; |
|
||||||
$label_ids = false; |
|
||||||
$output = null; |
|
||||||
$extra = ''; |
|
||||||
|
|
||||||
foreach ($params as $_key => $_val) { |
|
||||||
switch ($_key) { |
|
||||||
case 'name': |
|
||||||
case 'separator': |
|
||||||
$$_key = (string) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'checked': |
|
||||||
case 'selected': |
|
||||||
if (is_array($_val)) { |
|
||||||
$smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); |
|
||||||
} else { |
|
||||||
$selected = (string) $_val; |
|
||||||
} |
|
||||||
break; |
|
||||||
|
|
||||||
case 'labels': |
|
||||||
case 'label_ids': |
|
||||||
$$_key = (bool) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'options': |
|
||||||
$$_key = (array) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'values': |
|
||||||
case 'output': |
|
||||||
$$_key = array_values((array) $_val); |
|
||||||
break; |
|
||||||
|
|
||||||
case 'radios': |
|
||||||
$smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); |
|
||||||
$options = (array) $_val; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'assign': |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
if (!is_array($_val)) { |
|
||||||
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!isset($options) && !isset($values)) |
|
||||||
return ''; /* raise error here? */ |
|
||||||
|
|
||||||
$_html_result = array(); |
|
||||||
|
|
||||||
if (isset($options)) { |
|
||||||
|
|
||||||
foreach ($options as $_key => $_val) |
|
||||||
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids); |
|
||||||
} else { |
|
||||||
|
|
||||||
foreach ($values as $_i => $_key) { |
|
||||||
$_val = isset($output[$_i]) ? $output[$_i] : ''; |
|
||||||
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($params['assign'])) { |
|
||||||
$smarty->assign($params['assign'], $_html_result); |
|
||||||
} else { |
|
||||||
return implode("\n", $_html_result); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids) { |
|
||||||
$_output = ''; |
|
||||||
if ($labels) { |
|
||||||
if ($label_ids) { |
|
||||||
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!', '_', $name . '_' . $value)); |
|
||||||
$_output .= '<label for="' . $_id . '">'; |
|
||||||
} else { |
|
||||||
$_output .= '<label>'; |
|
||||||
} |
|
||||||
} |
|
||||||
$_output .= '<input type="radio" name="' |
|
||||||
. smarty_function_escape_special_chars($name) . '" value="' |
|
||||||
. smarty_function_escape_special_chars($value) . '"'; |
|
||||||
|
|
||||||
if ($labels && $label_ids) |
|
||||||
$_output .= ' id="' . $_id . '"'; |
|
||||||
|
|
||||||
if ((string) $value == $selected) { |
|
||||||
$_output .= ' checked="checked"'; |
|
||||||
} |
|
||||||
$_output .= $extra . ' />' . $output; |
|
||||||
if ($labels) |
|
||||||
$_output .= '</label>'; |
|
||||||
$_output .= $separator; |
|
||||||
|
|
||||||
return $_output; |
|
||||||
} |
|
||||||
|
|
||||||
?> |
|
@ -1,327 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_select_date} plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_select_date<br> |
|
||||||
* Purpose: Prints the dropdowns for date selection. |
|
||||||
* |
|
||||||
* ChangeLog:<br> |
|
||||||
* - 1.0 initial release |
|
||||||
* - 1.1 added support for +/- N syntax for begin |
|
||||||
* and end year values. (Monte) |
|
||||||
* - 1.2 added support for yyyy-mm-dd syntax for |
|
||||||
* time value. (Jan Rosier) |
|
||||||
* - 1.3 added support for choosing format for |
|
||||||
* month values (Gary Loescher) |
|
||||||
* - 1.3.1 added support for choosing format for |
|
||||||
* day values (Marcus Bointon) |
|
||||||
* - 1.3.2 support negative timestamps, force year |
|
||||||
* dropdown to include given date unless explicitly set (Monte) |
|
||||||
* - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that |
|
||||||
* of 0000-00-00 dates (cybot, boots) |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date} |
|
||||||
* (Smarty online manual) |
|
||||||
* @version 1.3.4 |
|
||||||
* @author Andrei Zmievski |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_function_html_select_date($params, &$smarty) { |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars'); |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp'); |
|
||||||
require_once $smarty->_get_plugin_filepath('function', 'html_options'); |
|
||||||
/* Default values. */ |
|
||||||
$prefix = "Date_"; |
|
||||||
$start_year = date("Y"); |
|
||||||
$end_year = $start_year; |
|
||||||
$display_days = true; |
|
||||||
$display_months = true; |
|
||||||
$display_years = true; |
|
||||||
$month_format = "%B"; |
|
||||||
/* Write months as numbers by default GL */ |
|
||||||
$month_value_format = "%m"; |
|
||||||
$day_format = "%02d"; |
|
||||||
/* Write day values using this format MB */ |
|
||||||
$day_value_format = "%d"; |
|
||||||
$year_as_text = false; |
|
||||||
/* Display years in reverse order? Ie. 2000,1999,.... */ |
|
||||||
$reverse_years = false; |
|
||||||
/* Should the select boxes be part of an array when returned from PHP? |
|
||||||
e.g. setting it to "birthday", would create "birthday[Day]", |
|
||||||
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */ |
|
||||||
$field_array = null; |
|
||||||
/* <select size>'s of the different <select> tags. |
|
||||||
If not set, uses default dropdown. */ |
|
||||||
$day_size = null; |
|
||||||
$month_size = null; |
|
||||||
$year_size = null; |
|
||||||
/* Unparsed attributes common to *ALL* the <select>/<input> tags. |
|
||||||
An example might be in the template: all_extra ='class ="foo"'. */ |
|
||||||
$all_extra = null; |
|
||||||
/* Separate attributes for the tags. */ |
|
||||||
$day_extra = null; |
|
||||||
$month_extra = null; |
|
||||||
$year_extra = null; |
|
||||||
/* Order in which to display the fields. |
|
||||||
"D" -> day, "M" -> month, "Y" -> year. */ |
|
||||||
$field_order = 'MDY'; |
|
||||||
/* String printed between the different fields. */ |
|
||||||
$field_separator = "\n"; |
|
||||||
$time = time(); |
|
||||||
$all_empty = null; |
|
||||||
$day_empty = null; |
|
||||||
$month_empty = null; |
|
||||||
$year_empty = null; |
|
||||||
$extra_attrs = ''; |
|
||||||
|
|
||||||
foreach ($params as $_key => $_value) { |
|
||||||
switch ($_key) { |
|
||||||
case 'prefix': |
|
||||||
case 'time': |
|
||||||
case 'start_year': |
|
||||||
case 'end_year': |
|
||||||
case 'month_format': |
|
||||||
case 'day_format': |
|
||||||
case 'day_value_format': |
|
||||||
case 'field_array': |
|
||||||
case 'day_size': |
|
||||||
case 'month_size': |
|
||||||
case 'year_size': |
|
||||||
case 'all_extra': |
|
||||||
case 'day_extra': |
|
||||||
case 'month_extra': |
|
||||||
case 'year_extra': |
|
||||||
case 'field_order': |
|
||||||
case 'field_separator': |
|
||||||
case 'month_value_format': |
|
||||||
case 'month_empty': |
|
||||||
case 'day_empty': |
|
||||||
case 'year_empty': |
|
||||||
$$_key = (string) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'all_empty': |
|
||||||
$$_key = (string) $_value; |
|
||||||
$day_empty = $month_empty = $year_empty = $all_empty; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'display_days': |
|
||||||
case 'display_months': |
|
||||||
case 'display_years': |
|
||||||
case 'year_as_text': |
|
||||||
case 'reverse_years': |
|
||||||
$$_key = (bool) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
if (!is_array($_value)) { |
|
||||||
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"'; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (preg_match('!^-\d+$!', $time)) { |
|
||||||
// negative timestamp, use date() |
|
||||||
$time = date('Y-m-d', $time); |
|
||||||
} |
|
||||||
// If $time is not in format yyyy-mm-dd |
|
||||||
if (preg_match('/^(\d{0,4}-\d{0,2}-\d{0,2})/', $time, $found)) { |
|
||||||
$time = $found[1]; |
|
||||||
} else { |
|
||||||
// use smarty_make_timestamp to get an unix timestamp and |
|
||||||
// strftime to make yyyy-mm-dd |
|
||||||
$time = strftime_('%Y-%m-%d', smarty_make_timestamp($time)); |
|
||||||
} |
|
||||||
// Now split this in pieces, which later can be used to set the select |
|
||||||
$time = explode("-", $time); |
|
||||||
|
|
||||||
// make syntax "+N" or "-N" work with start_year and end_year |
|
||||||
if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) { |
|
||||||
if ($match[1] == '+') { |
|
||||||
$end_year = date('Y') + $match[2]; |
|
||||||
} else { |
|
||||||
$end_year = date('Y') - $match[2]; |
|
||||||
} |
|
||||||
} |
|
||||||
if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) { |
|
||||||
if ($match[1] == '+') { |
|
||||||
$start_year = date('Y') + $match[2]; |
|
||||||
} else { |
|
||||||
$start_year = date('Y') - $match[2]; |
|
||||||
} |
|
||||||
} |
|
||||||
if (strlen($time[0]) > 0) { |
|
||||||
if ($start_year > $time[0] && !isset($params['start_year'])) { |
|
||||||
// force start year to include given date if not explicitly set |
|
||||||
$start_year = $time[0]; |
|
||||||
} |
|
||||||
if ($end_year < $time[0] && !isset($params['end_year'])) { |
|
||||||
// force end year to include given date if not explicitly set |
|
||||||
$end_year = $time[0]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$field_order = strtoupper($field_order); |
|
||||||
|
|
||||||
$html_result = $month_result = $day_result = $year_result = ""; |
|
||||||
|
|
||||||
$field_separator_count = -1; |
|
||||||
if ($display_months) { |
|
||||||
$field_separator_count++; |
|
||||||
$month_names = array(); |
|
||||||
$month_values = array(); |
|
||||||
if (isset($month_empty)) { |
|
||||||
$month_names[''] = $month_empty; |
|
||||||
$month_values[''] = ''; |
|
||||||
} |
|
||||||
for ($i = 1; $i <= 12; $i++) { |
|
||||||
$month_names[$i] = strftime_($month_format, mktime(0, 0, 0, $i, 1, 2000)); |
|
||||||
$month_values[$i] = strftime_($month_value_format, mktime(0, 0, 0, $i, 1, 2000)); |
|
||||||
} |
|
||||||
|
|
||||||
$month_result .= '<select name='; |
|
||||||
if (null !== $field_array) { |
|
||||||
$month_result .= '"' . $field_array . '[' . $prefix . 'Month]"'; |
|
||||||
} else { |
|
||||||
$month_result .= '"' . $prefix . 'Month"'; |
|
||||||
} |
|
||||||
if (null !== $month_size) { |
|
||||||
$month_result .= ' size="' . $month_size . '"'; |
|
||||||
} |
|
||||||
if (null !== $month_extra) { |
|
||||||
$month_result .= ' ' . $month_extra; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$month_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
$month_result .= $extra_attrs . '>' . "\n"; |
|
||||||
|
|
||||||
$month_result .= smarty_function_html_options(array('output' => $month_names, |
|
||||||
'values' => $month_values, |
|
||||||
'selected' => (int) $time[1] ? strftime_($month_value_format, mktime(0, 0, 0, (int) $time[1], 1, 2000)) : '', |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$month_result .= '</select>'; |
|
||||||
} |
|
||||||
|
|
||||||
if ($display_days) { |
|
||||||
$field_separator_count++; |
|
||||||
$days = array(); |
|
||||||
if (isset($day_empty)) { |
|
||||||
$days[''] = $day_empty; |
|
||||||
$day_values[''] = ''; |
|
||||||
} |
|
||||||
for ($i = 1; $i <= 31; $i++) { |
|
||||||
$days[] = sprintf($day_format, $i); |
|
||||||
$day_values[] = sprintf($day_value_format, $i); |
|
||||||
} |
|
||||||
|
|
||||||
$day_result .= '<select name='; |
|
||||||
if (null !== $field_array) { |
|
||||||
$day_result .= '"' . $field_array . '[' . $prefix . 'Day]"'; |
|
||||||
} else { |
|
||||||
$day_result .= '"' . $prefix . 'Day"'; |
|
||||||
} |
|
||||||
if (null !== $day_size) { |
|
||||||
$day_result .= ' size="' . $day_size . '"'; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$day_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
if (null !== $day_extra) { |
|
||||||
$day_result .= ' ' . $day_extra; |
|
||||||
} |
|
||||||
$day_result .= $extra_attrs . '>' . "\n"; |
|
||||||
$day_result .= smarty_function_html_options(array('output' => $days, |
|
||||||
'values' => $day_values, |
|
||||||
'selected' => $time[2], |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$day_result .= '</select>'; |
|
||||||
} |
|
||||||
|
|
||||||
if ($display_years) { |
|
||||||
$field_separator_count++; |
|
||||||
if (null !== $field_array) { |
|
||||||
$year_name = $field_array . '[' . $prefix . 'Year]'; |
|
||||||
} else { |
|
||||||
$year_name = $prefix . 'Year'; |
|
||||||
} |
|
||||||
if ($year_as_text) { |
|
||||||
$year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"'; |
|
||||||
if (null !== $all_extra) { |
|
||||||
$year_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
if (null !== $year_extra) { |
|
||||||
$year_result .= ' ' . $year_extra; |
|
||||||
} |
|
||||||
$year_result .= ' />'; |
|
||||||
} else { |
|
||||||
$years = range((int) $start_year, (int) $end_year); |
|
||||||
if ($reverse_years) { |
|
||||||
rsort($years, SORT_NUMERIC); |
|
||||||
} else { |
|
||||||
sort($years, SORT_NUMERIC); |
|
||||||
} |
|
||||||
$yearvals = $years; |
|
||||||
if (isset($year_empty)) { |
|
||||||
array_unshift($years, $year_empty); |
|
||||||
array_unshift($yearvals, ''); |
|
||||||
} |
|
||||||
$year_result .= '<select name="' . $year_name . '"'; |
|
||||||
if (null !== $year_size) { |
|
||||||
$year_result .= ' size="' . $year_size . '"'; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$year_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
if (null !== $year_extra) { |
|
||||||
$year_result .= ' ' . $year_extra; |
|
||||||
} |
|
||||||
$year_result .= $extra_attrs . '>' . "\n"; |
|
||||||
$year_result .= smarty_function_html_options(array('output' => $years, |
|
||||||
'values' => $yearvals, |
|
||||||
'selected' => $time[0], |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$year_result .= '</select>'; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// Loop thru the field_order field |
|
||||||
for ($i = 0; $i <= 2; $i++) { |
|
||||||
$c = substr($field_order, $i, 1); |
|
||||||
switch ($c) { |
|
||||||
case 'D': |
|
||||||
$html_result .= $day_result; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'M': |
|
||||||
$html_result .= $month_result; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'Y': |
|
||||||
$html_result .= $year_result; |
|
||||||
break; |
|
||||||
} |
|
||||||
// Add the field seperator |
|
||||||
if ($i < $field_separator_count) { |
|
||||||
$html_result .= $field_separator; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return $html_result; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,188 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_select_time} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_select_time<br> |
|
||||||
* Purpose: Prints the dropdowns for time selection |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Roberto Berto <roberto@berto.net> |
|
||||||
* @credits Monte Ohrt <monte AT ohrt DOT com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
* @uses smarty_make_timestamp() |
|
||||||
*/ |
|
||||||
function smarty_function_html_select_time($params, &$smarty) { |
|
||||||
require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp'); |
|
||||||
require_once $smarty->_get_plugin_filepath('function', 'html_options'); |
|
||||||
/* Default values. */ |
|
||||||
$prefix = "Time_"; |
|
||||||
$time = time(); |
|
||||||
$display_hours = true; |
|
||||||
$display_minutes = true; |
|
||||||
$display_seconds = true; |
|
||||||
$display_meridian = true; |
|
||||||
$use_24_hours = true; |
|
||||||
$minute_interval = 1; |
|
||||||
$second_interval = 1; |
|
||||||
/* Should the select boxes be part of an array when returned from PHP? |
|
||||||
e.g. setting it to "birthday", would create "birthday[Hour]", |
|
||||||
"birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]". |
|
||||||
Can be combined with prefix. */ |
|
||||||
$field_array = null; |
|
||||||
$all_extra = null; |
|
||||||
$hour_extra = null; |
|
||||||
$minute_extra = null; |
|
||||||
$second_extra = null; |
|
||||||
$meridian_extra = null; |
|
||||||
|
|
||||||
foreach ($params as $_key => $_value) { |
|
||||||
switch ($_key) { |
|
||||||
case 'prefix': |
|
||||||
case 'time': |
|
||||||
case 'field_array': |
|
||||||
case 'all_extra': |
|
||||||
case 'hour_extra': |
|
||||||
case 'minute_extra': |
|
||||||
case 'second_extra': |
|
||||||
case 'meridian_extra': |
|
||||||
$$_key = (string) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'display_hours': |
|
||||||
case 'display_minutes': |
|
||||||
case 'display_seconds': |
|
||||||
case 'display_meridian': |
|
||||||
case 'use_24_hours': |
|
||||||
$$_key = (bool) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'minute_interval': |
|
||||||
case 'second_interval': |
|
||||||
$$_key = (int) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
$smarty->trigger_error("[html_select_time] unknown parameter $_key", E_USER_WARNING); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$time = smarty_make_timestamp($time); |
|
||||||
|
|
||||||
$html_result = ''; |
|
||||||
|
|
||||||
if ($display_hours) { |
|
||||||
$hours = $use_24_hours ? range(0, 23) : range(1, 12); |
|
||||||
$hour_fmt = $use_24_hours ? '%H' : '%I'; |
|
||||||
for ($i = 0, $for_max = count($hours); $i < $for_max; $i++) |
|
||||||
$hours[$i] = sprintf('%02d', $hours[$i]); |
|
||||||
$html_result .= '<select name='; |
|
||||||
if (null !== $field_array) { |
|
||||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Hour]"'; |
|
||||||
} else { |
|
||||||
$html_result .= '"' . $prefix . 'Hour"'; |
|
||||||
} |
|
||||||
if (null !== $hour_extra) { |
|
||||||
$html_result .= ' ' . $hour_extra; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$html_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
$html_result .= '>' . "\n"; |
|
||||||
$html_result .= smarty_function_html_options(array('output' => $hours, |
|
||||||
'values' => $hours, |
|
||||||
'selected' => strftime_($hour_fmt, $time), |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$html_result .= "</select>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
if ($display_minutes) { |
|
||||||
$all_minutes = range(0, 59); |
|
||||||
for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i += $minute_interval) |
|
||||||
$minutes[] = sprintf('%02d', $all_minutes[$i]); |
|
||||||
$selected = intval(floor(strftime_('%M', $time) / $minute_interval) * $minute_interval); |
|
||||||
$html_result .= '<select name='; |
|
||||||
if (null !== $field_array) { |
|
||||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Minute]"'; |
|
||||||
} else { |
|
||||||
$html_result .= '"' . $prefix . 'Minute"'; |
|
||||||
} |
|
||||||
if (null !== $minute_extra) { |
|
||||||
$html_result .= ' ' . $minute_extra; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$html_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
$html_result .= '>' . "\n"; |
|
||||||
|
|
||||||
$html_result .= smarty_function_html_options(array('output' => $minutes, |
|
||||||
'values' => $minutes, |
|
||||||
'selected' => $selected, |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$html_result .= "</select>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
if ($display_seconds) { |
|
||||||
$all_seconds = range(0, 59); |
|
||||||
for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i += $second_interval) |
|
||||||
$seconds[] = sprintf('%02d', $all_seconds[$i]); |
|
||||||
$selected = intval(floor(strftime_('%S', $time) / $second_interval) * $second_interval); |
|
||||||
$html_result .= '<select name='; |
|
||||||
if (null !== $field_array) { |
|
||||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Second]"'; |
|
||||||
} else { |
|
||||||
$html_result .= '"' . $prefix . 'Second"'; |
|
||||||
} |
|
||||||
|
|
||||||
if (null !== $second_extra) { |
|
||||||
$html_result .= ' ' . $second_extra; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$html_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
$html_result .= '>' . "\n"; |
|
||||||
|
|
||||||
$html_result .= smarty_function_html_options(array('output' => $seconds, |
|
||||||
'values' => $seconds, |
|
||||||
'selected' => $selected, |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$html_result .= "</select>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
if ($display_meridian && !$use_24_hours) { |
|
||||||
$html_result .= '<select name='; |
|
||||||
if (null !== $field_array) { |
|
||||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]"'; |
|
||||||
} else { |
|
||||||
$html_result .= '"' . $prefix . 'Meridian"'; |
|
||||||
} |
|
||||||
|
|
||||||
if (null !== $meridian_extra) { |
|
||||||
$html_result .= ' ' . $meridian_extra; |
|
||||||
} |
|
||||||
if (null !== $all_extra) { |
|
||||||
$html_result .= ' ' . $all_extra; |
|
||||||
} |
|
||||||
$html_result .= '>' . "\n"; |
|
||||||
|
|
||||||
$html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'), |
|
||||||
'values' => array('am', 'pm'), |
|
||||||
'selected' => strtolower(strftime_('%p', $time)), |
|
||||||
'print_result' => false), $smarty); |
|
||||||
$html_result .= "</select>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
return $html_result; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,174 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {html_table} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: html_table<br> |
|
||||||
* Date: Feb 17, 2003<br> |
|
||||||
* Purpose: make an html table from an array of data<br> |
|
||||||
* Input:<br> |
|
||||||
* - loop = array to loop through |
|
||||||
* - cols = number of columns, comma separated list of column names |
|
||||||
* or array of column names |
|
||||||
* - rows = number of rows |
|
||||||
* - table_attr = table attributes |
|
||||||
* - th_attr = table heading attributes (arrays are cycled) |
|
||||||
* - tr_attr = table row attributes (arrays are cycled) |
|
||||||
* - td_attr = table cell attributes (arrays are cycled) |
|
||||||
* - trailpad = value to pad trailing cells with |
|
||||||
* - caption = text for caption element |
|
||||||
* - vdir = vertical direction (default: "down", means top-to-bottom) |
|
||||||
* - hdir = horizontal direction (default: "right", means left-to-right) |
|
||||||
* - inner = inner loop (default "cols": print $loop line by line, |
|
||||||
* $loop will be printed column by column otherwise) |
|
||||||
* |
|
||||||
* |
|
||||||
* Examples: |
|
||||||
* <pre> |
|
||||||
* {table loop=$data} |
|
||||||
* {table loop=$data cols=4 tr_attr='"bgcolor=red"'} |
|
||||||
* {table loop=$data cols="first,second,third" tr_attr=$colors} |
|
||||||
* </pre> |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @author credit to Messju Mohr <messju at lammfellpuschen dot de> |
|
||||||
* @author credit to boots <boots dot smarty at yahoo dot com> |
|
||||||
* @version 1.1 |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table} |
|
||||||
* (Smarty online manual) |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_function_html_table($params, &$smarty) { |
|
||||||
$table_attr = 'border="1"'; |
|
||||||
$tr_attr = ''; |
|
||||||
$th_attr = ''; |
|
||||||
$td_attr = ''; |
|
||||||
$cols = $cols_count = 3; |
|
||||||
$rows = 3; |
|
||||||
$trailpad = ' '; |
|
||||||
$vdir = 'down'; |
|
||||||
$hdir = 'right'; |
|
||||||
$inner = 'cols'; |
|
||||||
$caption = ''; |
|
||||||
|
|
||||||
if (!isset($params['loop'])) { |
|
||||||
$smarty->trigger_error("html_table: missing 'loop' parameter"); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
foreach ($params as $_key => $_value) { |
|
||||||
switch ($_key) { |
|
||||||
case 'loop': |
|
||||||
$$_key = (array) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'cols': |
|
||||||
if (is_array($_value) && !empty($_value)) { |
|
||||||
$cols = $_value; |
|
||||||
$cols_count = count($_value); |
|
||||||
} elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) { |
|
||||||
$cols = explode(',', $_value); |
|
||||||
$cols_count = count($cols); |
|
||||||
} elseif (!empty($_value)) { |
|
||||||
$cols_count = (int) $_value; |
|
||||||
} else { |
|
||||||
$cols_count = $cols; |
|
||||||
} |
|
||||||
break; |
|
||||||
|
|
||||||
case 'rows': |
|
||||||
$$_key = (int) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'table_attr': |
|
||||||
case 'trailpad': |
|
||||||
case 'hdir': |
|
||||||
case 'vdir': |
|
||||||
case 'inner': |
|
||||||
case 'caption': |
|
||||||
$$_key = (string) $_value; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'tr_attr': |
|
||||||
case 'td_attr': |
|
||||||
case 'th_attr': |
|
||||||
$$_key = $_value; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$loop_count = count($loop); |
|
||||||
if (empty($params['rows'])) { |
|
||||||
/* no rows specified */ |
|
||||||
$rows = ceil($loop_count / $cols_count); |
|
||||||
} elseif (empty($params['cols'])) { |
|
||||||
if (!empty($params['rows'])) { |
|
||||||
/* no cols specified, but rows */ |
|
||||||
$cols_count = ceil($loop_count / $rows); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$output = "<table $table_attr>\n"; |
|
||||||
|
|
||||||
if (!empty($caption)) { |
|
||||||
$output .= '<caption>' . $caption . "</caption>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
if (is_array($cols)) { |
|
||||||
$cols = ($hdir == 'right') ? $cols : array_reverse($cols); |
|
||||||
$output .= "<thead><tr>\n"; |
|
||||||
|
|
||||||
for ($r = 0; $r < $cols_count; $r++) { |
|
||||||
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>'; |
|
||||||
$output .= $cols[$r]; |
|
||||||
$output .= "</th>\n"; |
|
||||||
} |
|
||||||
$output .= "</tr></thead>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
$output .= "<tbody>\n"; |
|
||||||
for ($r = 0; $r < $rows; $r++) { |
|
||||||
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; |
|
||||||
$rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count; |
|
||||||
|
|
||||||
for ($c = 0; $c < $cols_count; $c++) { |
|
||||||
$x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c; |
|
||||||
if ($inner != 'cols') { |
|
||||||
/* shuffle x to loop over rows */ |
|
||||||
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows; |
|
||||||
} |
|
||||||
|
|
||||||
if ($x < $loop_count) { |
|
||||||
$output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n"; |
|
||||||
} else { |
|
||||||
$output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
$output .= "</tr>\n"; |
|
||||||
} |
|
||||||
$output .= "</tbody>\n"; |
|
||||||
$output .= "</table>\n"; |
|
||||||
|
|
||||||
return $output; |
|
||||||
} |
|
||||||
|
|
||||||
function smarty_function_html_table_cycle($name, $var, $no) { |
|
||||||
if (!is_array($var)) { |
|
||||||
$ret = $var; |
|
||||||
} else { |
|
||||||
$ret = $var[$no % count($var)]; |
|
||||||
} |
|
||||||
|
|
||||||
return ($ret) ? ' ' . $ret : ''; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,157 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {mailto} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: mailto<br> |
|
||||||
* Date: May 21, 2002 |
|
||||||
* Purpose: automate mailto address link creation, and optionally |
|
||||||
* encode them.<br> |
|
||||||
* Input:<br> |
|
||||||
* - address = e-mail address |
|
||||||
* - text = (optional) text to display, default is address |
|
||||||
* - encode = (optional) can be one of: |
|
||||||
* * none : no encoding (default) |
|
||||||
* * javascript : encode with javascript |
|
||||||
* * javascript_charcode : encode with javascript charcode |
|
||||||
* * hex : encode with hexidecimal (no javascript) |
|
||||||
* - cc = (optional) address(es) to carbon copy |
|
||||||
* - bcc = (optional) address(es) to blind carbon copy |
|
||||||
* - subject = (optional) e-mail subject |
|
||||||
* - newsgroups = (optional) newsgroup(s) to post to |
|
||||||
* - followupto = (optional) address(es) to follow up to |
|
||||||
* - extra = (optional) extra tags for the href link |
|
||||||
* |
|
||||||
* Examples: |
|
||||||
* <pre> |
|
||||||
* {mailto address="me@domain.com"} |
|
||||||
* {mailto address="me@domain.com" encode="javascript"} |
|
||||||
* {mailto address="me@domain.com" encode="hex"} |
|
||||||
* {mailto address="me@domain.com" subject="Hello to you!"} |
|
||||||
* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"} |
|
||||||
* {mailto address="me@domain.com" extra='class="mailto"'} |
|
||||||
* </pre> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto} |
|
||||||
* (Smarty online manual) |
|
||||||
* @version 1.2 |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @author credits to Jason Sweat (added cc, bcc and subject functionality) |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_function_mailto($params, &$smarty) { |
|
||||||
$extra = ''; |
|
||||||
|
|
||||||
if (empty($params['address'])) { |
|
||||||
$smarty->trigger_error("mailto: missing 'address' parameter"); |
|
||||||
return; |
|
||||||
} else { |
|
||||||
$address = $params['address']; |
|
||||||
} |
|
||||||
|
|
||||||
$text = $address; |
|
||||||
|
|
||||||
// netscape and mozilla do not decode %40 (@) in BCC field (bug?) |
|
||||||
// so, don't encode it. |
|
||||||
$search = array('%40', '%2C'); |
|
||||||
$replace = array('@', ','); |
|
||||||
$mail_parms = array(); |
|
||||||
foreach ($params as $var => $value) { |
|
||||||
switch ($var) { |
|
||||||
case 'cc': |
|
||||||
case 'bcc': |
|
||||||
case 'followupto': |
|
||||||
if (!empty($value)) |
|
||||||
$mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value)); |
|
||||||
break; |
|
||||||
|
|
||||||
case 'subject': |
|
||||||
case 'newsgroups': |
|
||||||
$mail_parms[] = $var . '=' . rawurlencode($value); |
|
||||||
break; |
|
||||||
|
|
||||||
case 'extra': |
|
||||||
case 'text': |
|
||||||
$$var = $value; |
|
||||||
|
|
||||||
default: |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$mail_parm_vals = ''; |
|
||||||
for ($i = 0; $i < count($mail_parms); $i++) { |
|
||||||
$mail_parm_vals .= (0 == $i) ? '?' : '&'; |
|
||||||
$mail_parm_vals .= $mail_parms[$i]; |
|
||||||
} |
|
||||||
$address .= $mail_parm_vals; |
|
||||||
|
|
||||||
$encode = (empty($params['encode'])) ? 'none' : $params['encode']; |
|
||||||
if (!in_array($encode, array('javascript', 'javascript_charcode', 'hex', 'none'))) { |
|
||||||
$smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex"); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if ($encode == 'javascript') { |
|
||||||
$string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; |
|
||||||
|
|
||||||
$js_encode = ''; |
|
||||||
for ($x = 0; $x < strlen($string); $x++) { |
|
||||||
$js_encode .= '%' . bin2hex($string[$x]); |
|
||||||
} |
|
||||||
|
|
||||||
return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>'; |
|
||||||
} elseif ($encode == 'javascript_charcode') { |
|
||||||
$string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; |
|
||||||
|
|
||||||
for ($x = 0, $y = strlen($string); $x < $y; $x++) { |
|
||||||
$ord[] = ord($string[$x]); |
|
||||||
} |
|
||||||
|
|
||||||
$_ret = "<script type=\"text/javascript\" language=\"javascript\">\n"; |
|
||||||
$_ret .= "<!--\n"; |
|
||||||
$_ret .= "{document.write(String.fromCharCode("; |
|
||||||
$_ret .= implode(',', $ord); |
|
||||||
$_ret .= "))"; |
|
||||||
$_ret .= "}\n"; |
|
||||||
$_ret .= "//-->\n"; |
|
||||||
$_ret .= "</script>\n"; |
|
||||||
|
|
||||||
return $_ret; |
|
||||||
} elseif ($encode == 'hex') { |
|
||||||
|
|
||||||
preg_match('!^(.*)(\?.*)$!', $address, $match); |
|
||||||
if (!empty($match[2])) { |
|
||||||
$smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript."); |
|
||||||
return; |
|
||||||
} |
|
||||||
$address_encode = ''; |
|
||||||
for ($x = 0; $x < strlen($address); $x++) { |
|
||||||
if (preg_match('!\w!', $address[$x])) { |
|
||||||
$address_encode .= '%' . bin2hex($address[$x]); |
|
||||||
} else { |
|
||||||
$address_encode .= $address[$x]; |
|
||||||
} |
|
||||||
} |
|
||||||
$text_encode = ''; |
|
||||||
for ($x = 0; $x < strlen($text); $x++) { |
|
||||||
$text_encode .= '&#x' . bin2hex($text[$x]) . ';'; |
|
||||||
} |
|
||||||
|
|
||||||
$mailto = "mailto:"; |
|
||||||
return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>'; |
|
||||||
} else { |
|
||||||
// no encoding |
|
||||||
return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,83 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {math} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: math<br> |
|
||||||
* Purpose: handle math computations in template<br> |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.math.php {math} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_function_math($params, &$smarty) { |
|
||||||
// be sure equation parameter is present |
|
||||||
if (empty($params['equation'])) { |
|
||||||
$smarty->trigger_error("math: missing equation parameter"); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
// strip out backticks, not necessary for math |
|
||||||
$equation = str_replace('`', '', $params['equation']); |
|
||||||
|
|
||||||
// make sure parenthesis are balanced |
|
||||||
if (substr_count($equation, "(") != substr_count($equation, ")")) { |
|
||||||
$smarty->trigger_error("math: unbalanced parenthesis"); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
// match all vars in equation, make sure all are passed |
|
||||||
preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]+)!", $equation, $match); |
|
||||||
$allowed_funcs = array('int', 'abs', 'ceil', 'cos', 'exp', 'floor', 'log', 'log10', |
|
||||||
'max', 'min', 'pi', 'pow', 'rand', 'round', 'sin', 'sqrt', 'srand', 'tan'); |
|
||||||
|
|
||||||
foreach ($match[1] as $curr_var) { |
|
||||||
if ($curr_var && !in_array($curr_var, array_keys($params)) && !in_array($curr_var, $allowed_funcs)) { |
|
||||||
$smarty->trigger_error("math: function call $curr_var not allowed"); |
|
||||||
return; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
foreach ($params as $key => $val) { |
|
||||||
if ($key != "equation" && $key != "format" && $key != "assign") { |
|
||||||
// make sure value is not empty |
|
||||||
if (strlen($val) == 0) { |
|
||||||
$smarty->trigger_error("math: parameter $key is empty"); |
|
||||||
return; |
|
||||||
} |
|
||||||
if (!is_numeric($val)) { |
|
||||||
$smarty->trigger_error("math: parameter $key: is not numeric"); |
|
||||||
return; |
|
||||||
} |
|
||||||
$equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
eval("\$smarty_math_result = " . $equation . ";"); |
|
||||||
|
|
||||||
if (empty($params['format'])) { |
|
||||||
if (empty($params['assign'])) { |
|
||||||
return $smarty_math_result; |
|
||||||
} else { |
|
||||||
$smarty->assign($params['assign'], $smarty_math_result); |
|
||||||
} |
|
||||||
} else { |
|
||||||
if (empty($params['assign'])) { |
|
||||||
printf($params['format'], $smarty_math_result); |
|
||||||
} else { |
|
||||||
$smarty->assign($params['assign'], sprintf($params['format'], $smarty_math_result)); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,120 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {popup} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: popup<br> |
|
||||||
* Purpose: make text pop up in windows via overlib |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.popup.php {popup} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_function_popup($params, &$smarty) { |
|
||||||
$append = ''; |
|
||||||
foreach ($params as $_key => $_value) { |
|
||||||
switch ($_key) { |
|
||||||
case 'text': |
|
||||||
case 'trigger': |
|
||||||
case 'function': |
|
||||||
case 'inarray': |
|
||||||
$$_key = (string) $_value; |
|
||||||
if ($_key == 'function' || $_key == 'inarray') |
|
||||||
$append .= ',' . strtoupper($_key) . ",'$_value'"; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'caption': |
|
||||||
case 'closetext': |
|
||||||
case 'status': |
|
||||||
$append .= ',' . strtoupper($_key) . ",'" . str_replace("'", "\'", $_value) . "'"; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'fgcolor': |
|
||||||
case 'bgcolor': |
|
||||||
case 'textcolor': |
|
||||||
case 'capcolor': |
|
||||||
case 'closecolor': |
|
||||||
case 'textfont': |
|
||||||
case 'captionfont': |
|
||||||
case 'closefont': |
|
||||||
case 'fgbackground': |
|
||||||
case 'bgbackground': |
|
||||||
case 'caparray': |
|
||||||
case 'capicon': |
|
||||||
case 'background': |
|
||||||
case 'frame': |
|
||||||
$append .= ',' . strtoupper($_key) . ",'$_value'"; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'textsize': |
|
||||||
case 'captionsize': |
|
||||||
case 'closesize': |
|
||||||
case 'width': |
|
||||||
case 'height': |
|
||||||
case 'border': |
|
||||||
case 'offsetx': |
|
||||||
case 'offsety': |
|
||||||
case 'snapx': |
|
||||||
case 'snapy': |
|
||||||
case 'fixx': |
|
||||||
case 'fixy': |
|
||||||
case 'padx': |
|
||||||
case 'pady': |
|
||||||
case 'timeout': |
|
||||||
case 'delay': |
|
||||||
$append .= ',' . strtoupper($_key) . ",$_value"; |
|
||||||
break; |
|
||||||
|
|
||||||
case 'sticky': |
|
||||||
case 'left': |
|
||||||
case 'right': |
|
||||||
case 'center': |
|
||||||
case 'above': |
|
||||||
case 'below': |
|
||||||
case 'noclose': |
|
||||||
case 'autostatus': |
|
||||||
case 'autostatuscap': |
|
||||||
case 'fullhtml': |
|
||||||
case 'hauto': |
|
||||||
case 'vauto': |
|
||||||
case 'mouseoff': |
|
||||||
case 'followmouse': |
|
||||||
case 'closeclick': |
|
||||||
if ($_value) |
|
||||||
$append .= ',' . strtoupper($_key); |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
$smarty->trigger_error("[popup] unknown parameter $_key", E_USER_WARNING); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (empty($text) && !isset($inarray) && empty($function)) { |
|
||||||
$smarty->trigger_error("overlib: attribute 'text' or 'inarray' or 'function' required"); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
if (empty($trigger)) { |
|
||||||
$trigger = "onmouseover"; |
|
||||||
} |
|
||||||
|
|
||||||
$retval = $trigger . '="return overlib(\'' . preg_replace(array("!'!", "![\r\n]!"), array("\'", '\r'), $text) . '\''; |
|
||||||
$retval .= $append . ');"'; |
|
||||||
if ($trigger == 'onmouseover') |
|
||||||
$retval .= ' onmouseout="nd();"'; |
|
||||||
|
|
||||||
|
|
||||||
return $retval; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,38 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty {popup_init} function plugin |
|
||||||
* |
|
||||||
* Type: function<br> |
|
||||||
* Name: popup_init<br> |
|
||||||
* Purpose: initialize overlib |
|
||||||
* @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init} |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param array |
|
||||||
* @param Smarty |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_function_popup_init($params, &$smarty) { |
|
||||||
$zindex = 1000; |
|
||||||
|
|
||||||
if (!empty($params['zindex'])) { |
|
||||||
$zindex = $params['zindex']; |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($params['src'])) { |
|
||||||
return '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:' . $zindex . ';"></div>' . "\n" |
|
||||||
. '<script type="text/javascript" language="JavaScript" src="' . $params['src'] . '"></script>' . "\n"; |
|
||||||
} else { |
|
||||||
$smarty->trigger_error("popup_init: missing src parameter"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,40 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty capitalize modifier plugin |
|
||||||
* |
|
||||||
* Type: modifier<br> |
|
||||||
* Name: capitalize<br> |
|
||||||
* Purpose: capitalize words in the string |
|
||||||
* @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE |
|
||||||
* capitalize (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param string |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_modifier_capitalize($string, $uc_digits = false) { |
|
||||||
smarty_modifier_capitalize_ucfirst(null, $uc_digits); |
|
||||||
return preg_replace_callback('!\'?\b\w(\w|\')*\b!', 'smarty_modifier_capitalize_ucfirst', $string); |
|
||||||
} |
|
||||||
|
|
||||||
function smarty_modifier_capitalize_ucfirst($string, $uc_digits = null) { |
|
||||||
static $_uc_digits = false; |
|
||||||
|
|
||||||
if (isset($uc_digits)) { |
|
||||||
$_uc_digits = $uc_digits; |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if (substr($string[0], 0, 1) != "'" && !preg_match("!\d!", $string[0]) || $_uc_digits) |
|
||||||
return ucfirst($string[0]); |
|
||||||
else |
|
||||||
return $string[0]; |
|
||||||
} |
|
||||||
|
|
||||||
?> |
|
@ -1,31 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty cat modifier plugin |
|
||||||
* |
|
||||||
* Type: modifier<br> |
|
||||||
* Name: cat<br> |
|
||||||
* Date: Feb 24, 2003 |
|
||||||
* Purpose: catenate a value to a variable |
|
||||||
* Input: string to catenate |
|
||||||
* Example: {$var|cat:"foo"} |
|
||||||
* @link http://smarty.php.net/manual/en/language.modifier.cat.php cat |
|
||||||
* (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @version 1.0 |
|
||||||
* @param string |
|
||||||
* @param string |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
function smarty_modifier_cat($string, $cat) { |
|
||||||
return $string . $cat; |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,30 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty count_characters modifier plugin |
|
||||||
* |
|
||||||
* Type: modifier<br> |
|
||||||
* Name: count_characteres<br> |
|
||||||
* Purpose: count the number of characters in a text |
|
||||||
* @link http://smarty.php.net/manual/en/language.modifier.count.characters.php |
|
||||||
* count_characters (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param string |
|
||||||
* @param boolean include whitespace in the character count |
|
||||||
* @return integer |
|
||||||
*/ |
|
||||||
function smarty_modifier_count_characters($string, $include_spaces = false) { |
|
||||||
if ($include_spaces) |
|
||||||
return(strlen($string)); |
|
||||||
|
|
||||||
return preg_match_all("/[^\s]/", $string, $match); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,27 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty count_paragraphs modifier plugin |
|
||||||
* |
|
||||||
* Type: modifier<br> |
|
||||||
* Name: count_paragraphs<br> |
|
||||||
* Purpose: count the number of paragraphs in a text |
|
||||||
* @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php |
|
||||||
* count_paragraphs (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param string |
|
||||||
* @return integer |
|
||||||
*/ |
|
||||||
function smarty_modifier_count_paragraphs($string) { |
|
||||||
// count \r or \n characters |
|
||||||
return count(preg_split('/[\r\n]+/', $string)); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,27 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty count_sentences modifier plugin |
|
||||||
* |
|
||||||
* Type: modifier<br> |
|
||||||
* Name: count_sentences |
|
||||||
* Purpose: count the number of sentences in a text |
|
||||||
* @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php |
|
||||||
* count_sentences (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param string |
|
||||||
* @return integer |
|
||||||
*/ |
|
||||||
function smarty_modifier_count_sentences($string) { |
|
||||||
// find periods with a word before but not after. |
|
||||||
return preg_match_all('/[^\s]\.(?!\w)/', $string, $match); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
@ -1,31 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty plugin |
|
||||||
* @package Smarty |
|
||||||
* @subpackage plugins |
|
||||||
*/ |
|
||||||
|
|
||||||
/** |
|
||||||
* Smarty count_words modifier plugin |
|
||||||
* |
|
||||||
* Type: modifier<br> |
|
||||||
* Name: count_words<br> |
|
||||||
* Purpose: count the number of words in a text |
|
||||||
* @link http://smarty.php.net/manual/en/language.modifier.count.words.php |
|
||||||
* count_words (Smarty online manual) |
|
||||||
* @author Monte Ohrt <monte at ohrt dot com> |
|
||||||
* @param string |
|
||||||
* @return integer |
|
||||||
*/ |
|
||||||
function smarty_modifier_count_words($string) { |
|
||||||
// split text by ' ',\r,\n,\f,\t |
|
||||||
$split_array = preg_split('/\s+/', $string); |
|
||||||
// count matches that contain alphanumerics |
|
||||||
$word_count = preg_grep('/[a-zA-Z0-9\\x80-\\xff]/', $split_array); |
|
||||||
|
|
||||||
return count($word_count); |
|
||||||
} |
|
||||||
|
|
||||||
/* vim: set expandtab: */ |
|
||||||
?> |
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue