Browse Source

atualização da tela de login e criação da nova API

1.9
Lucas Awade 8 months ago committed by Rodgger
parent
commit
a2a48d2c8b
  1. 121
      admin/codeworxtech.html
  2. 5
      admin/images/_notes/index_r1_c1.gif.mno
  3. 5
      admin/images/_notes/index_r2_c1.gif.mno
  4. 5
      admin/images/_notes/index_r2_c2.gif.mno
  5. 5
      admin/images/_notes/index_r2_c3.gif.mno
  6. 5
      admin/images/_notes/index_r2_c4.gif.mno
  7. 5
      admin/images/_notes/index_r2_c5.gif.mno
  8. 5
      admin/images/_notes/index_r3_c1.gif.mno
  9. 113
      app/controllers/AuthController.php
  10. 102
      app/controllers/CallController.php
  11. 46
      app/controllers/QueueController.php
  12. 37
      app/core/Connection.php
  13. 90
      app/core/Database.php
  14. 318
      app/core/Repository.php
  15. 30
      app/middleware/AuthMiddleware.php
  16. 31
      app/models/Audita.php
  17. 10
      app/models/AuditaFull.php
  18. 10
      app/models/Bilhetes.php
  19. 10
      app/models/Organizacao.php
  20. 10
      app/models/OrganizacaoUsuario.php
  21. 10
      app/models/Parametro.php
  22. 10
      app/models/Queue.php
  23. 10
      app/models/Token.php
  24. 10
      app/models/Usuario.php
  25. 173
      app/shared/Logger.php
  26. 46
      app/traits/AuthToken.php
  27. 51
      app/traits/Validate.php
  28. 0
      cadOrganizacao.log
  29. 24
      composer.json
  30. 1095
      composer.lock
  31. 67
      doc/Atendimento.rtf
  32. 68
      doc/Perfil/perfil-apl.txt
  33. 42
      doc/backup/default.sql
  34. BIN
      doc/changelog.docx
  35. BIN
      doc/changelog.pdf
  36. 58
      doc/changelog.txt
  37. 21
      doc/chatMidia/altera-parametros-midia.sql
  38. 5
      doc/correcoes-1711.txt
  39. 2
      doc/correcoes-1711.txt~
  40. 2
      doc/funcoes-internas.sql
  41. BIN
      doc/lgpd/TERMO_DE_USO_E_PRIVACIDADE_APLICACAO_SIMPLES.pdf
  42. 12
      doc/pre-venda/alteracoes-banco.sql
  43. 89
      doc/pre-venda/configura-prevenda
  44. 30
      doc/pre-venda/corrige_cliente.sql
  45. 33
      doc/pre-venda/recicla-base-clientes
  46. 5
      images/_notes/index_r1_c1.gif.mno
  47. 5
      images/_notes/index_r2_c1.gif.mno
  48. 5
      images/_notes/index_r2_c2.gif.mno
  49. 5
      images/_notes/index_r2_c3.gif.mno
  50. 5
      images/_notes/index_r2_c4.gif.mno
  51. 5
      images/_notes/index_r2_c5.gif.mno
  52. 5
      images/_notes/index_r3_c1.gif.mno
  53. 66
      img/libs/internals/core.assemble_plugin_filepath.php
  54. 42
      img/libs/internals/core.assign_smarty_interface.php
  55. 74
      img/libs/internals/core.create_dir_structure.php
  56. 59
      img/libs/internals/core.display_debug_console.php
  57. 42
      img/libs/internals/core.get_include_path.php
  58. 21
      img/libs/internals/core.get_microtime.php
  59. 76
      img/libs/internals/core.get_php_resource.php
  60. 56
      img/libs/internals/core.is_secure.php
  61. 42
      img/libs/internals/core.is_trusted.php
  62. 123
      img/libs/internals/core.load_plugins.php
  63. 72
      img/libs/internals/core.load_resource_plugin.php
  64. 69
      img/libs/internals/core.process_cached_inserts.php
  65. 34
      img/libs/internals/core.process_compiled_include.php
  66. 98
      img/libs/internals/core.read_cache_file.php
  67. 69
      img/libs/internals/core.rm_auto.php
  68. 54
      img/libs/internals/core.rmdir.php
  69. 70
      img/libs/internals/core.run_insert_handler.php
  70. 47
      img/libs/internals/core.smarty_include_php.php
  71. 94
      img/libs/internals/core.write_cache_file.php
  72. 90
      img/libs/internals/core.write_compiled_include.php
  73. 34
      img/libs/internals/core.write_compiled_resource.php
  74. 53
      img/libs/internals/core.write_file.php
  75. 101
      img/libs/plugins/block.textformat.php
  76. 39
      img/libs/plugins/compiler.assign.php
  77. 39
      img/libs/plugins/function.assign_debug_info.php
  78. 139
      img/libs/plugins/function.config_load.php
  79. 77
      img/libs/plugins/function.counter.php
  80. 100
      img/libs/plugins/function.cycle.php
  81. 33
      img/libs/plugins/function.debug.php
  82. 47
      img/libs/plugins/function.eval.php
  83. 218
      img/libs/plugins/function.fetch.php
  84. 140
      img/libs/plugins/function.html_checkboxes.php
  85. 139
      img/libs/plugins/function.html_image.php
  86. 117
      img/libs/plugins/function.html_options.php
  87. 154
      img/libs/plugins/function.html_radios.php
  88. 327
      img/libs/plugins/function.html_select_date.php
  89. 188
      img/libs/plugins/function.html_select_time.php
  90. 174
      img/libs/plugins/function.html_table.php
  91. 157
      img/libs/plugins/function.mailto.php
  92. 83
      img/libs/plugins/function.math.php
  93. 120
      img/libs/plugins/function.popup.php
  94. 38
      img/libs/plugins/function.popup_init.php
  95. 40
      img/libs/plugins/modifier.capitalize.php
  96. 31
      img/libs/plugins/modifier.cat.php
  97. 30
      img/libs/plugins/modifier.count_characters.php
  98. 27
      img/libs/plugins/modifier.count_paragraphs.php
  99. 27
      img/libs/plugins/modifier.count_sentences.php
  100. 31
      img/libs/plugins/modifier.count_words.php
  101. Some files were not shown because too many files have changed in this diff Show More

121
admin/codeworxtech.html

@ -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 &amp; WHAT&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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>

5
admin/images/_notes/index_r1_c1.gif.mno

@ -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>

5
admin/images/_notes/index_r2_c1.gif.mno

@ -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>

5
admin/images/_notes/index_r2_c2.gif.mno

@ -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>

5
admin/images/_notes/index_r2_c3.gif.mno

@ -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>

5
admin/images/_notes/index_r2_c4.gif.mno

@ -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>

5
admin/images/_notes/index_r2_c5.gif.mno

@ -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>

5
admin/images/_notes/index_r3_c1.gif.mno

@ -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>

113
app/controllers/AuthController.php

@ -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;
}
}

102
app/controllers/CallController.php

@ -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;
}
}

46
app/controllers/QueueController.php

@ -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;
}
}

37
app/core/Connection.php

@ -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;
}
}

90
app/core/Database.php

@ -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;
}
}

318
app/core/Repository.php

@ -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) {
// }
// }
}

30
app/middleware/AuthMiddleware.php

@ -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;
}
}

31
app/models/Audita.php

@ -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();
}
}

10
app/models/AuditaFull.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class AuditaFull extends Repository
{
protected static $table = 'pbx_audita_full';
}

10
app/models/Bilhetes.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Bilhetes extends Repository
{
protected static $table = 'pbx_bilhetes';
}

10
app/models/Organizacao.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Organizacao extends Repository
{
protected static $table = 'pbx_organizacao';
}

10
app/models/OrganizacaoUsuario.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class OrganizacaoUsuario extends Repository
{
protected static $table = 'pbx_organizacao_usuarios';
}

10
app/models/Parametro.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Parametro extends Repository
{
protected static $table = 'pbx_parametros';
}

10
app/models/Queue.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Queue extends Repository
{
protected static $table = 'pbx_queues_grupos';
}

10
app/models/Token.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Token extends Repository
{
protected static $table = 'pbx_tokens';
}

10
app/models/Usuario.php

@ -0,0 +1,10 @@
<?php
namespace app\models;
use app\core\Repository;
class Usuario extends Repository
{
protected static $table = 'pbx_usuarios';
}

173
app/shared/Logger.php

@ -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;
}
}
}

46
app/traits/AuthToken.php

@ -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;
}
}

51
app/traits/Validate.php

@ -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
cadOrganizacao.log

24
composer.json

@ -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
}
}

1095
composer.lock generated

File diff suppressed because it is too large Load Diff

67
doc/Atendimento.rtf

@ -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 }

68
doc/Perfil/perfil-apl.txt

@ -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.

42
doc/backup/default.sql

@ -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);

BIN
doc/changelog.docx

Binary file not shown.

BIN
doc/changelog.pdf

Binary file not shown.

58
doc/changelog.txt

@ -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".

21
doc/chatMidia/altera-parametros-midia.sql

@ -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;

5
doc/correcoes-1711.txt

@ -1,5 +0,0 @@
Manutenção de Sites -> http://localhost/index.php?idProg=105
Mostra senha no código

2
doc/correcoes-1711.txt~

@ -1,2 +0,0 @@
Manutenção de Sites
Mostra senha no código

2
doc/funcoes-internas.sql

@ -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);

BIN
doc/lgpd/TERMO_DE_USO_E_PRIVACIDADE_APLICACAO_SIMPLES.pdf

Binary file not shown.

12
doc/pre-venda/alteracoes-banco.sql

@ -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);

89
doc/pre-venda/configura-prevenda

@ -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;
*/

30
doc/pre-venda/corrige_cliente.sql

@ -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;
*/

33
doc/pre-venda/recicla-base-clientes

@ -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);
/*
*/

5
images/_notes/index_r1_c1.gif.mno

@ -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>

5
images/_notes/index_r2_c1.gif.mno

@ -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>

5
images/_notes/index_r2_c2.gif.mno

@ -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>

5
images/_notes/index_r2_c3.gif.mno

@ -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>

5
images/_notes/index_r2_c4.gif.mno

@ -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>

5
images/_notes/index_r2_c5.gif.mno

@ -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>

5
images/_notes/index_r3_c1.gif.mno

@ -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>

66
img/libs/internals/core.assemble_plugin_filepath.php

@ -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: */
?>

42
img/libs/internals/core.assign_smarty_interface.php

@ -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: */
?>

74
img/libs/internals/core.create_dir_structure.php

@ -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: */
?>

59
img/libs/internals/core.display_debug_console.php

@ -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: */
?>

42
img/libs/internals/core.get_include_path.php

@ -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: */
?>

21
img/libs/internals/core.get_microtime.php

@ -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: */
?>

76
img/libs/internals/core.get_php_resource.php

@ -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: */
?>

56
img/libs/internals/core.is_secure.php

@ -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: */
?>

42
img/libs/internals/core.is_trusted.php

@ -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: */
?>

123
img/libs/internals/core.load_plugins.php

@ -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: */
?>

72
img/libs/internals/core.load_resource_plugin.php

@ -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: */
?>

69
img/libs/internals/core.process_cached_inserts.php

@ -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: */
?>

34
img/libs/internals/core.process_compiled_include.php

@ -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;
}
?>

98
img/libs/internals/core.read_cache_file.php

@ -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: */
?>

69
img/libs/internals/core.rm_auto.php

@ -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: */
?>

54
img/libs/internals/core.rmdir.php

@ -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: */
?>

70
img/libs/internals/core.run_insert_handler.php

@ -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: */
?>

47
img/libs/internals/core.smarty_include_php.php

@ -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: */
?>

94
img/libs/internals/core.write_cache_file.php

@ -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: */
?>

90
img/libs/internals/core.write_compiled_include.php

@ -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;
}
?>

34
img/libs/internals/core.write_compiled_resource.php

@ -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: */
?>

53
img/libs/internals/core.write_file.php

@ -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: */
?>

101
img/libs/plugins/block.textformat.php

@ -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: */
?>

39
img/libs/plugins/compiler.assign.php

@ -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: */
?>

39
img/libs/plugins/function.assign_debug_info.php

@ -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: */
?>

139
img/libs/plugins/function.config_load.php

@ -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: */
?>

77
img/libs/plugins/function.counter.php

@ -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: */
?>

100
img/libs/plugins/function.cycle.php

@ -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: */
?>

33
img/libs/plugins/function.debug.php

@ -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: */
?>

47
img/libs/plugins/function.eval.php

@ -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: */
?>

218
img/libs/plugins/function.fetch.php

@ -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: */
?>

140
img/libs/plugins/function.html_checkboxes.php

@ -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 &nbsp;
* - 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;
}
?>

139
img/libs/plugins/function.html_image.php

@ -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: */
?>

117
img/libs/plugins/function.html_options.php

@ -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: */
?>

154
img/libs/plugins/function.html_radios.php

@ -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 &nbsp;
* - 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;
}
?>

327
img/libs/plugins/function.html_select_date.php

@ -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: */
?>

188
img/libs/plugins/function.html_select_time.php

@ -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: */
?>

174
img/libs/plugins/function.html_table.php

@ -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 = '&nbsp;';
$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: */
?>

157
img/libs/plugins/function.mailto.php

@ -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 = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
} else {
// no encoding
return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
}
}
/* vim: set expandtab: */
?>

83
img/libs/plugins/function.math.php

@ -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: */
?>

120
img/libs/plugins/function.popup.php

@ -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: */
?>

38
img/libs/plugins/function.popup_init.php

@ -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: */
?>

40
img/libs/plugins/modifier.capitalize.php

@ -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];
}
?>

31
img/libs/plugins/modifier.cat.php

@ -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: */
?>

30
img/libs/plugins/modifier.count_characters.php

@ -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: */
?>

27
img/libs/plugins/modifier.count_paragraphs.php

@ -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: */
?>

27
img/libs/plugins/modifier.count_sentences.php

@ -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: */
?>

31
img/libs/plugins/modifier.count_words.php

@ -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…
Cancel
Save