Merge branch 'develop' into ent-3259-Errata-en-boton-de-ayuda-en-Modulos-WMI
Conflicts: pandora_console/godmode/agentes/module_manager_editor_wmi.php Former-commit-id: ec88c5b6ff36318db9a1f9ca98651bb49aa6eb9d
This commit is contained in:
commit
40419ea587
|
@ -16,7 +16,7 @@ else
|
|||
fi
|
||||
VERSION=$2
|
||||
if [ $# == 2 ]; then
|
||||
BUILD=`date +%g%m%d`
|
||||
BUILD=`date +%y%m%d`
|
||||
else
|
||||
BUILD=$3
|
||||
fi
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, AIX version
|
||||
# Version 7.0NG.731, AIX version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, FreeBSD Version
|
||||
# Version 7.0NG.731, FreeBSD Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, HP-UX Version
|
||||
# Version 7.0NG.731, HP-UX Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, GNU/Linux
|
||||
# Version 7.0NG.731, GNU/Linux
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, GNU/Linux
|
||||
# Version 7.0NG.731, GNU/Linux
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, Solaris Version
|
||||
# Version 7.0NG.731, Solaris Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Base config file for Pandora FMS Windows Agent
|
||||
# (c) 2006-2010 Artica Soluciones Tecnologicas
|
||||
# Version 7.0NG.730
|
||||
# Version 7.0NG.731
|
||||
|
||||
# This program is Free Software, you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public Licence as published by the Free Software
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Fichero de configuracion base de agentes de Pandora
|
||||
# Base config file for Pandora agents
|
||||
# Version 7.0NG.730, AIX version
|
||||
# Version 7.0NG.731, AIX version
|
||||
|
||||
# General Parameters
|
||||
# ==================
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Fichero de configuracion base de agentes de Pandora
|
||||
# Base config file for Pandora agents
|
||||
# Version 7.0NG.730
|
||||
# Version 7.0NG.731
|
||||
# FreeBSD/IPSO version
|
||||
# Licenced under GPL licence, 2003-2007 Sancho Lerena
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Fichero de configuracion base de agentes de Pandora
|
||||
# Base config file for Pandora agents
|
||||
# Version 7.0NG.730, HPUX Version
|
||||
# Version 7.0NG.731, HPUX Version
|
||||
|
||||
# General Parameters
|
||||
# ==================
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730
|
||||
# Version 7.0NG.731
|
||||
# Licensed under GPL license v2,
|
||||
# (c) 2003-2010 Artica Soluciones Tecnologicas
|
||||
# please visit http://pandora.sourceforge.net
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730
|
||||
# Version 7.0NG.731
|
||||
# Licensed under GPL license v2,
|
||||
# (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# please visit http://pandora.sourceforge.net
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730
|
||||
# Version 7.0NG.731
|
||||
# Licensed under GPL license v2,
|
||||
# please visit http://pandora.sourceforge.net
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Fichero de configuracion base de agentes de Pandora
|
||||
# Base config file for Pandora agents
|
||||
# Version 7.0NG.730, Solaris version
|
||||
# Version 7.0NG.731, Solaris version
|
||||
|
||||
# General Parameters
|
||||
# ==================
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, AIX version
|
||||
# Version 7.0NG.731, AIX version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
package: pandorafms-agent-unix
|
||||
Version: 7.0NG.730-181228
|
||||
Version: 7.0NG.731-190213
|
||||
Architecture: all
|
||||
Priority: optional
|
||||
Section: admin
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
pandora_version="7.0NG.730-181228"
|
||||
pandora_version="7.0NG.731-190213"
|
||||
|
||||
echo "Test if you has the tools for to make the packages."
|
||||
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, GNU/Linux
|
||||
# Version 7.0NG.731, GNU/Linux
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2012 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, FreeBSD Version
|
||||
# Version 7.0NG.731, FreeBSD Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2016 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, HP-UX Version
|
||||
# Version 7.0NG.731, HP-UX Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, GNU/Linux
|
||||
# Version 7.0NG.731, GNU/Linux
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2014 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, GNU/Linux
|
||||
# Version 7.0NG.731, GNU/Linux
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, NetBSD Version
|
||||
# Version 7.0NG.731, NetBSD Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Base config file for Pandora FMS agents
|
||||
# Version 7.0NG.730, Solaris Version
|
||||
# Version 7.0NG.731, Solaris Version
|
||||
# Licensed under GPL license v2,
|
||||
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
|
||||
# http://www.pandorafms.com
|
||||
|
|
|
@ -41,8 +41,8 @@ my $Sem = undef;
|
|||
# Semaphore used to control the number of threads
|
||||
my $ThreadSem = undef;
|
||||
|
||||
use constant AGENT_VERSION => '7.0NG.730';
|
||||
use constant AGENT_BUILD => '181228';
|
||||
use constant AGENT_VERSION => '7.0NG.731';
|
||||
use constant AGENT_BUILD => '190213';
|
||||
|
||||
# Agent log default file size maximum and instances
|
||||
use constant DEFAULT_MAX_LOG_SIZE => 600000;
|
||||
|
@ -516,11 +516,18 @@ sub parse_conf_modules($) {
|
|||
log_message ('setup', "Invalid regular expression in intensive condition: $line");
|
||||
}
|
||||
}
|
||||
} elsif ($line =~ /^\s*module_crontab\s+(((\*|(\d+(-\d+){0,1}))\s*){5}).*$/) {
|
||||
} elsif ($line =~ /^\s*module_crontab\s+(.*)$/) {
|
||||
my $cron_text = $1;
|
||||
chomp ($cron_text);
|
||||
$cron_text =~ s/\s+$//;
|
||||
# Get module name if is already read.
|
||||
my $module_name_message = "";
|
||||
$module_name_message = " (module $module->{'name'})" if defined($module->{'name'});
|
||||
if (cron_check_syntax($cron_text)) {
|
||||
$module->{'cron'} = $cron_text;
|
||||
log_message('debug', "Cron '$module->{'cron'}' configured $module_name_message.");
|
||||
} else {
|
||||
log_message('setup', "Incorrect cron syntax '$cron_text'. This module$module_name_message will be executed always.");
|
||||
}
|
||||
} elsif ($line =~ /^\s*module_end\s*$/) {
|
||||
|
||||
|
@ -2397,6 +2404,7 @@ sub check_module_cron {
|
|||
$interval
|
||||
);
|
||||
|
||||
my $is_first = ($module->{'cron_utimestamp'} == 0) ? 1 : 0;
|
||||
$module->{'cron_utimestamp'} = $now + $time_to_next_execution;
|
||||
$module->{'cron_interval'} = $time_to_next_execution;
|
||||
|
||||
|
@ -2405,7 +2413,7 @@ sub check_module_cron {
|
|||
}
|
||||
|
||||
# On first execution checking if cron is valid is required
|
||||
return 1 unless ($module->{'cron_utimestamp'} == 0);
|
||||
return 1 unless ($is_first);
|
||||
|
||||
# Check if current timestamp is a valid cron date
|
||||
my $next_execution = cron_next_execution_date(
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
#Pandora FMS Linux Agent
|
||||
#
|
||||
%define name pandorafms_agent_unix
|
||||
%define version 7.0NG.730
|
||||
%define release 181228
|
||||
%define version 7.0NG.731
|
||||
%define release 190213
|
||||
|
||||
Summary: Pandora FMS Linux agent, PERL version
|
||||
Name: %{name}
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
#Pandora FMS Linux Agent
|
||||
#
|
||||
%define name pandorafms_agent_unix
|
||||
%define version 7.0NG.730
|
||||
%define release 181228
|
||||
%define version 7.0NG.731
|
||||
%define release 190213
|
||||
|
||||
Summary: Pandora FMS Linux agent, PERL version
|
||||
Name: %{name}
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
# Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license.
|
||||
# **********************************************************************
|
||||
|
||||
PI_VERSION="7.0NG.730"
|
||||
PI_BUILD="181228"
|
||||
PI_VERSION="7.0NG.731"
|
||||
PI_BUILD="190213"
|
||||
OS_NAME=`uname -s`
|
||||
|
||||
FORCE=0
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Base config file for Pandora FMS Windows Agent
|
||||
# (c) 2006-2017 Artica Soluciones Tecnologicas
|
||||
# Version 7.0NG.730
|
||||
# Version 7.0NG.731
|
||||
|
||||
# This program is Free Software, you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public Licence as published by the Free Software
|
||||
|
|
|
@ -3,7 +3,7 @@ AllowLanguageSelection
|
|||
{Yes}
|
||||
|
||||
AppName
|
||||
{Pandora FMS Windows Agent v7.0NG.730}
|
||||
{Pandora FMS Windows Agent v7.0NG.731}
|
||||
|
||||
ApplicationID
|
||||
{17E3D2CF-CA02-406B-8A80-9D31C17BD08F}
|
||||
|
@ -186,7 +186,7 @@ UpgradeApplicationID
|
|||
{}
|
||||
|
||||
Version
|
||||
{181228}
|
||||
{190213}
|
||||
|
||||
ViewReadme
|
||||
{Yes}
|
||||
|
|
|
@ -30,7 +30,7 @@ using namespace Pandora;
|
|||
using namespace Pandora_Strutils;
|
||||
|
||||
#define PATH_SIZE _MAX_PATH+1
|
||||
#define PANDORA_VERSION ("7.0NG.730(Build 181228)")
|
||||
#define PANDORA_VERSION ("7.0NG.731(Build 190213)")
|
||||
|
||||
string pandora_path;
|
||||
string pandora_dir;
|
||||
|
|
|
@ -11,7 +11,7 @@ BEGIN
|
|||
VALUE "LegalCopyright", "Artica ST"
|
||||
VALUE "OriginalFilename", "PandoraAgent.exe"
|
||||
VALUE "ProductName", "Pandora FMS Windows Agent"
|
||||
VALUE "ProductVersion", "(7.0NG.730(Build 181228))"
|
||||
VALUE "ProductVersion", "(7.0NG.731(Build 190213))"
|
||||
VALUE "FileVersion", "1.0.0.0"
|
||||
END
|
||||
END
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
package: pandorafms-console
|
||||
Version: 7.0NG.730-181228
|
||||
Version: 7.0NG.731-190213
|
||||
Architecture: all
|
||||
Priority: optional
|
||||
Section: admin
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
pandora_version="7.0NG.730-181228"
|
||||
pandora_version="7.0NG.731-190213"
|
||||
|
||||
package_pear=0
|
||||
package_pandora=1
|
||||
|
|
|
@ -4,88 +4,101 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
// Enable profiler for testing
|
||||
if (!defined('__PAN_XHPROF__')) {
|
||||
define('__PAN_XHPROF__', 0);
|
||||
}
|
||||
|
||||
if ((! file_exists("include/config.php")) || (! is_readable("include/config.php"))) {
|
||||
exit;
|
||||
if (__PAN_XHPROF__ === 1) {
|
||||
if (function_exists('tideways_xhprof_enable')) {
|
||||
tideways_xhprof_enable();
|
||||
}
|
||||
}
|
||||
|
||||
if ((! file_exists('include/config.php')) || (! is_readable('include/config.php'))) {
|
||||
exit;
|
||||
}
|
||||
|
||||
// Don't start a session before this import.
|
||||
// The session is configured and started inside the config process.
|
||||
require_once ('include/config.php');
|
||||
require_once ('include/functions.php');
|
||||
require_once ('include/functions_db.php');
|
||||
require_once ('include/auth/mysql.php');
|
||||
require_once 'include/config.php';
|
||||
require_once 'include/functions.php';
|
||||
require_once 'include/functions_db.php';
|
||||
require_once 'include/auth/mysql.php';
|
||||
|
||||
// Hash login process
|
||||
if (isset ($_GET["loginhash"])) {
|
||||
|
||||
$loginhash_data = get_parameter("loginhash_data", "");
|
||||
$loginhash_user = str_rot13(get_parameter("loginhash_user", ""));
|
||||
|
||||
if ($config["loginhash_pwd"] != ""
|
||||
&& $loginhash_data == md5($loginhash_user.io_output_password($config["loginhash_pwd"]))) {
|
||||
db_logon ($loginhash_user, $_SERVER['REMOTE_ADDR']);
|
||||
$_SESSION['id_usuario'] = $loginhash_user;
|
||||
$config["id_user"] = $loginhash_user;
|
||||
}
|
||||
else {
|
||||
require_once ('general/login_page.php');
|
||||
db_pandora_audit("Logon Failed (loginhash", "", "system");
|
||||
while (@ob_end_flush ());
|
||||
exit ("</html>");
|
||||
}
|
||||
if (isset($_GET['loginhash'])) {
|
||||
$loginhash_data = get_parameter('loginhash_data', '');
|
||||
$loginhash_user = str_rot13(get_parameter('loginhash_user', ''));
|
||||
|
||||
if ($config['loginhash_pwd'] != ''
|
||||
&& $loginhash_data == md5($loginhash_user.io_output_password($config['loginhash_pwd']))
|
||||
) {
|
||||
db_logon($loginhash_user, $_SERVER['REMOTE_ADDR']);
|
||||
$_SESSION['id_usuario'] = $loginhash_user;
|
||||
$config['id_user'] = $loginhash_user;
|
||||
} else {
|
||||
include_once 'general/login_page.php';
|
||||
db_pandora_audit('Logon Failed (loginhash', '', 'system');
|
||||
while (@ob_end_flush()) {
|
||||
}
|
||||
|
||||
exit('</html>');
|
||||
}
|
||||
}
|
||||
|
||||
$public_hash = get_parameter('hash', false);
|
||||
|
||||
// Check user
|
||||
if ($public_hash == false) {
|
||||
check_login();
|
||||
check_login();
|
||||
} else {
|
||||
enterprise_include_once('include/functions_dashboard.php');
|
||||
if (dashboard_check_public_hash($public_hash) === false) {
|
||||
db_pandora_audit("Invalid public hash", "Trying to access public dashboard");
|
||||
require ("general/noaccess.php");
|
||||
exit;
|
||||
}
|
||||
enterprise_include_once('include/functions_dashboard.php');
|
||||
if (dashboard_check_public_hash($public_hash) === false) {
|
||||
db_pandora_audit('Invalid public hash', 'Trying to access public dashboard');
|
||||
include 'general/noaccess.php';
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
define ('AJAX', true);
|
||||
define('AJAX', true);
|
||||
|
||||
/* Enterprise support */
|
||||
if (file_exists (ENTERPRISE_DIR."/load_enterprise.php")) {
|
||||
include_once (ENTERPRISE_DIR."/load_enterprise.php");
|
||||
// Enterprise support
|
||||
if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) {
|
||||
include_once ENTERPRISE_DIR.'/load_enterprise.php';
|
||||
}
|
||||
|
||||
$config["remote_addr"] = $_SERVER['REMOTE_ADDR'];
|
||||
$config['remote_addr'] = $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
$page = (string) get_parameter ('page');
|
||||
$page = safe_url_extraclean ($page);
|
||||
$page = (string) get_parameter('page');
|
||||
$page = safe_url_extraclean($page);
|
||||
$page .= '.php';
|
||||
$config["id_user"] = $_SESSION["id_usuario"];
|
||||
$isFunctionSkins = enterprise_include_once ('include/functions_skins.php');
|
||||
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK)
|
||||
$config["relative_path"] = enterprise_hook('skins_set_image_skin_path',array($config['id_user']));
|
||||
$config['id_user'] = $_SESSION['id_usuario'];
|
||||
$isFunctionSkins = enterprise_include_once('include/functions_skins.php');
|
||||
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
|
||||
$config['relative_path'] = enterprise_hook('skins_set_image_skin_path', [$config['id_user']]);
|
||||
}
|
||||
|
||||
if (isset($config['metaconsole'])) {
|
||||
// Not cool way of know if we are executing from metaconsole or normal console
|
||||
if ($config['metaconsole'])
|
||||
define ('METACONSOLE', true);
|
||||
// Not cool way of know if we are executing from metaconsole or normal console
|
||||
if ($config['metaconsole']) {
|
||||
define('METACONSOLE', true);
|
||||
}
|
||||
}
|
||||
|
||||
if (file_exists ($page)) {
|
||||
require_once ($page);
|
||||
if (file_exists($page)) {
|
||||
include_once $page;
|
||||
} else {
|
||||
echo '<br /><b class="error">Sorry! I can\'t find the page '.$page.'!</b>';
|
||||
}
|
||||
else {
|
||||
echo '<br /><b class="error">Sorry! I can\'t find the page '.$page.'!</b>';
|
||||
|
||||
if (__PAN_XHPROF__ === 1) {
|
||||
pandora_xhprof_display_result('ajax', 'console');
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<html>
|
||||
<!-- Blank file -->
|
||||
<!-- Blank file -->
|
||||
</html>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<html>
|
||||
<!-- Blank file -->
|
||||
<!-- Blank file -->
|
||||
</html>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<html>
|
||||
<!-- Blank file -->
|
||||
<!-- Blank file -->
|
||||
</html>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
"name": "Pandora FMS",
|
||||
"description": "Pandora Flexible Monitoring System ",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Artica",
|
||||
"email": "info@artica.es"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"mpdf/mpdf": "^7.1",
|
||||
"swiftmailer/swiftmailer": "^6.0"
|
||||
"name": "Pandora FMS",
|
||||
"description": "Pandora Flexible Monitoring System ",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Artica",
|
||||
"email": "info@artica.es"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"mpdf/mpdf": "^7.1",
|
||||
"swiftmailer/swiftmailer": "^6.0"
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -4,226 +4,250 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function api_execute($url, $ip, $pandora_url, $apipass, $user, $password, $op, $op2, $id, $id2, $return_type, $other, $other_mode)
|
||||
{
|
||||
if (empty($url)) {
|
||||
$url = 'http://'.$ip.$pandora_url.'/include/api.php';
|
||||
|
||||
function api_execute($url, $ip, $pandora_url, $apipass, $user, $password, $op, $op2, $id, $id2, $return_type, $other, $other_mode) {
|
||||
|
||||
if (empty($url)) {
|
||||
$url = "http://" . $ip . $pandora_url . "/include/api.php";
|
||||
|
||||
$url .= "?";
|
||||
$url .= "apipass=" . $apipass;
|
||||
$url .= "&user=" . $user;
|
||||
$url .= "&pass=" . $password;
|
||||
$url .= "&op=" . $op;
|
||||
$url .= "&op2=" . $op2;
|
||||
if ($id !== '') {
|
||||
$url .= "&id=" . $id;
|
||||
}
|
||||
if ($id2 !== '') {
|
||||
$url .= "&id2=" . $id2;
|
||||
}
|
||||
if ($return_type !== '') {
|
||||
$url .= "&return_type=" . $return_type;
|
||||
}
|
||||
if ($other !== '') {
|
||||
$url .= "&other_mode=" . $other_mode;
|
||||
$url .= "&other=" . $other;
|
||||
}
|
||||
}
|
||||
|
||||
$curlObj = curl_init();
|
||||
curl_setopt($curlObj, CURLOPT_URL, $url);
|
||||
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
|
||||
$result = curl_exec($curlObj);
|
||||
curl_close($curlObj);
|
||||
|
||||
$return = array('url' => $url, 'result' => $result);
|
||||
|
||||
return $return;
|
||||
$url .= '?';
|
||||
$url .= 'apipass='.$apipass;
|
||||
$url .= '&user='.$user;
|
||||
$url .= '&pass='.$password;
|
||||
$url .= '&op='.$op;
|
||||
$url .= '&op2='.$op2;
|
||||
if ($id !== '') {
|
||||
$url .= '&id='.$id;
|
||||
}
|
||||
|
||||
if ($id2 !== '') {
|
||||
$url .= '&id2='.$id2;
|
||||
}
|
||||
|
||||
if ($return_type !== '') {
|
||||
$url .= '&return_type='.$return_type;
|
||||
}
|
||||
|
||||
if ($other !== '') {
|
||||
$url .= '&other_mode='.$other_mode;
|
||||
$url .= '&other='.$other;
|
||||
}
|
||||
}
|
||||
|
||||
$curlObj = curl_init();
|
||||
curl_setopt($curlObj, CURLOPT_URL, $url);
|
||||
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
|
||||
$result = curl_exec($curlObj);
|
||||
curl_close($curlObj);
|
||||
|
||||
$return = [
|
||||
'url' => $url,
|
||||
'result' => $result,
|
||||
];
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
function extension_api_checker() {
|
||||
global $config;
|
||||
|
||||
check_login ();
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM")) {
|
||||
db_pandora_audit("ACL Violation",
|
||||
"Trying to access Profile Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
$url = io_safe_output(get_parameter('url', ''));
|
||||
|
||||
$ip = io_safe_output(get_parameter('ip', '127.0.0.1'));
|
||||
$pandora_url = io_safe_output(get_parameter('pandora_url', $config['homeurl_static']));
|
||||
$apipass = io_safe_output(get_parameter('apipass', ''));
|
||||
$user = io_safe_output(get_parameter('user', $config['id_user']));
|
||||
$password = io_safe_output(get_parameter('password', ''));
|
||||
|
||||
$op = io_safe_output(get_parameter('op', 'get'));
|
||||
$op2 = io_safe_output(get_parameter('op2', 'test'));
|
||||
$id = io_safe_output(get_parameter('id', ''));
|
||||
$id2 = io_safe_output(get_parameter('id2', ''));
|
||||
$return_type = io_safe_output(get_parameter('return_type', ''));
|
||||
$other = io_safe_output(get_parameter('other', ''));
|
||||
$other_mode = io_safe_output(get_parameter('other_mode', 'url_encode_separator_|'));
|
||||
|
||||
$api_execute = get_parameter('api_execute', 0);
|
||||
|
||||
$return_call_api = '';
|
||||
if ($api_execute) {
|
||||
$return_call_api =
|
||||
api_execute($url, $ip, $pandora_url, $apipass, $user, $password,
|
||||
$op, $op2, urlencode($id), urlencode($id2),
|
||||
$return_type, urlencode($other), $other_mode);
|
||||
}
|
||||
|
||||
ui_print_page_header (__("API checker"),
|
||||
"images/extensions.png", false, "", true, "");
|
||||
|
||||
$table = null;
|
||||
$table->data = array();
|
||||
|
||||
$row = array();
|
||||
$row[] = __("IP");
|
||||
$row[] = html_print_input_text('ip', $ip, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("%s Console URL", get_product_name());
|
||||
$row[] = html_print_input_text('pandora_url', $pandora_url, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("API Pass");
|
||||
$row[] = html_print_input_password('apipass', $apipass, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("User");
|
||||
$row[] = html_print_input_text('user', $user, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Password");
|
||||
$row[] = html_print_input_password('password', $password, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$table2 = null;
|
||||
$table2->data = array();
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Action (get or set)");
|
||||
$row[] = html_print_input_text('op', $op, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Operation");
|
||||
$row[] = html_print_input_text('op2', $op2, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("ID");
|
||||
$row[] = html_print_input_text('id', $id, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("ID 2");
|
||||
$row[] = html_print_input_text('id2', $id2, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Return Type");
|
||||
$row[] = html_print_input_text('return_type', $return_type, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Other");
|
||||
$row[] = html_print_input_text('other', $other, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Other Mode");
|
||||
$row[] = html_print_input_text('other_mode', $other_mode, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$table3 = null;
|
||||
$table3->data = array();
|
||||
|
||||
$row = array();
|
||||
$row[] = __("Raw URL");
|
||||
$row[] = html_print_input_text('url', $url, '', 150, 2048, true);
|
||||
$table3->data[] = $row;
|
||||
|
||||
echo "<form method='post'>";
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . __('Credentials') . "</legend>";
|
||||
html_print_table($table);
|
||||
echo "</fieldset>";
|
||||
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . __('Call parameters') . "</legend>";
|
||||
html_print_table($table2);
|
||||
echo "</fieldset>";
|
||||
echo "<div style='text-align: right;'>";
|
||||
html_print_input_hidden('api_execute', 1);
|
||||
html_print_submit_button(__('Call'), 'submit', false, 'class="sub next"');
|
||||
echo "</div>";
|
||||
echo "</form>";
|
||||
|
||||
|
||||
echo "<form method='post'>";
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . __('Custom URL') . "</legend>";
|
||||
html_print_table($table3);
|
||||
echo "</fieldset>";
|
||||
|
||||
echo "<div style='text-align: right;'>";
|
||||
html_print_input_hidden('api_execute', 1);
|
||||
html_print_submit_button(__('Call'), 'submit', false, 'class="sub next"');
|
||||
echo "</div>";
|
||||
echo "</form>";
|
||||
|
||||
if ($api_execute) {
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . __('Result') . "</legend>";
|
||||
echo __('URL') . "<br />";
|
||||
html_print_input_password('url', $return_call_api['url'], '', 150, 255, false, true);
|
||||
echo " <a id='show_icon' title='" . __('Show URL') . "' href='javascript: show_url();'>";
|
||||
html_print_image("images/input_zoom.png");
|
||||
echo "</a>";
|
||||
echo "<br />";
|
||||
echo __('Result') . "<br />";
|
||||
html_print_textarea('result', 30, 20, $return_call_api['result'], 'readonly="readonly"');
|
||||
echo "</fieldset>";
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
function show_url() {
|
||||
if ($("#password-url").attr('type') == 'password') {
|
||||
$("#password-url").attr('type', 'text');
|
||||
$("#show_icon").attr('title', '<?php echo __('Hide URL'); ?>');
|
||||
}
|
||||
else {
|
||||
$("#password-url").attr('type', 'password');
|
||||
$("#show_icon").attr('title', '<?php echo __('Show URL'); ?>');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
|
||||
function extension_api_checker()
|
||||
{
|
||||
global $config;
|
||||
|
||||
check_login();
|
||||
|
||||
if (! check_acl($config['id_user'], 0, 'PM')) {
|
||||
db_pandora_audit(
|
||||
'ACL Violation',
|
||||
'Trying to access Profile Management'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
$url = io_safe_output(get_parameter('url', ''));
|
||||
|
||||
$ip = io_safe_output(get_parameter('ip', '127.0.0.1'));
|
||||
$pandora_url = io_safe_output(get_parameter('pandora_url', $config['homeurl_static']));
|
||||
$apipass = io_safe_output(get_parameter('apipass', ''));
|
||||
$user = io_safe_output(get_parameter('user', $config['id_user']));
|
||||
$password = io_safe_output(get_parameter('password', ''));
|
||||
|
||||
$op = io_safe_output(get_parameter('op', 'get'));
|
||||
$op2 = io_safe_output(get_parameter('op2', 'test'));
|
||||
$id = io_safe_output(get_parameter('id', ''));
|
||||
$id2 = io_safe_output(get_parameter('id2', ''));
|
||||
$return_type = io_safe_output(get_parameter('return_type', ''));
|
||||
$other = io_safe_output(get_parameter('other', ''));
|
||||
$other_mode = io_safe_output(get_parameter('other_mode', 'url_encode_separator_|'));
|
||||
|
||||
$api_execute = get_parameter('api_execute', 0);
|
||||
|
||||
$return_call_api = '';
|
||||
if ($api_execute) {
|
||||
$return_call_api = api_execute(
|
||||
$url,
|
||||
$ip,
|
||||
$pandora_url,
|
||||
$apipass,
|
||||
$user,
|
||||
$password,
|
||||
$op,
|
||||
$op2,
|
||||
urlencode($id),
|
||||
urlencode($id2),
|
||||
$return_type,
|
||||
urlencode($other),
|
||||
$other_mode
|
||||
);
|
||||
}
|
||||
|
||||
ui_print_page_header(
|
||||
__('API checker'),
|
||||
'images/extensions.png',
|
||||
false,
|
||||
'',
|
||||
true,
|
||||
''
|
||||
);
|
||||
|
||||
$table = null;
|
||||
$table->data = [];
|
||||
|
||||
$row = [];
|
||||
$row[] = __('IP');
|
||||
$row[] = html_print_input_text('ip', $ip, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('%s Console URL', get_product_name());
|
||||
$row[] = html_print_input_text('pandora_url', $pandora_url, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('API Pass');
|
||||
$row[] = html_print_input_password('apipass', $apipass, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('User');
|
||||
$row[] = html_print_input_text('user', $user, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Password');
|
||||
$row[] = html_print_input_password('password', $password, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
|
||||
$table2 = null;
|
||||
$table2->data = [];
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Action (get or set)');
|
||||
$row[] = html_print_input_text('op', $op, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Operation');
|
||||
$row[] = html_print_input_text('op2', $op2, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('ID');
|
||||
$row[] = html_print_input_text('id', $id, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('ID 2');
|
||||
$row[] = html_print_input_text('id2', $id2, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Return Type');
|
||||
$row[] = html_print_input_text('return_type', $return_type, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Other');
|
||||
$row[] = html_print_input_text('other', $other, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Other Mode');
|
||||
$row[] = html_print_input_text('other_mode', $other_mode, '', 50, 255, true);
|
||||
$table2->data[] = $row;
|
||||
|
||||
$table3 = null;
|
||||
$table3->data = [];
|
||||
|
||||
$row = [];
|
||||
$row[] = __('Raw URL');
|
||||
$row[] = html_print_input_text('url', $url, '', 150, 2048, true);
|
||||
$table3->data[] = $row;
|
||||
|
||||
echo "<form method='post'>";
|
||||
echo '<fieldset>';
|
||||
echo '<legend>'.__('Credentials').'</legend>';
|
||||
html_print_table($table);
|
||||
echo '</fieldset>';
|
||||
|
||||
echo '<fieldset>';
|
||||
echo '<legend>'.__('Call parameters').'</legend>';
|
||||
html_print_table($table2);
|
||||
echo '</fieldset>';
|
||||
echo "<div style='text-align: right;'>";
|
||||
html_print_input_hidden('api_execute', 1);
|
||||
html_print_submit_button(__('Call'), 'submit', false, 'class="sub next"');
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
|
||||
echo "<form method='post'>";
|
||||
echo '<fieldset>';
|
||||
echo '<legend>'.__('Custom URL').'</legend>';
|
||||
html_print_table($table3);
|
||||
echo '</fieldset>';
|
||||
|
||||
echo "<div style='text-align: right;'>";
|
||||
html_print_input_hidden('api_execute', 1);
|
||||
html_print_submit_button(__('Call'), 'submit', false, 'class="sub next"');
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
|
||||
if ($api_execute) {
|
||||
echo '<fieldset>';
|
||||
echo '<legend>'.__('Result').'</legend>';
|
||||
echo __('URL').'<br />';
|
||||
html_print_input_password('url', $return_call_api['url'], '', 150, 255, false, true);
|
||||
echo " <a id='show_icon' title='".__('Show URL')."' href='javascript: show_url();'>";
|
||||
html_print_image('images/input_zoom.png');
|
||||
echo '</a>';
|
||||
echo '<br />';
|
||||
echo __('Result').'<br />';
|
||||
html_print_textarea('result', 30, 20, $return_call_api['result'], 'readonly="readonly"');
|
||||
echo '</fieldset>';
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
function show_url() {
|
||||
if ($("#password-url").attr('type') == 'password') {
|
||||
$("#password-url").attr('type', 'text');
|
||||
$("#show_icon").attr('title', '<?php echo __('Hide URL'); ?>');
|
||||
}
|
||||
else {
|
||||
$("#password-url").attr('type', 'password');
|
||||
$("#show_icon").attr('title', '<?php echo __('Show URL'); ?>');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
extensions_add_godmode_function('extension_api_checker');
|
||||
extensions_add_godmode_menu_option(__('API checker'), 'PM', 'gextensions', null, "v1r1");
|
||||
?>
|
||||
extensions_add_godmode_menu_option(__('API checker'), 'PM', 'gextensions', null, 'v1r1');
|
||||
|
||||
|
|
|
@ -4,423 +4,450 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function extension_db_status()
|
||||
{
|
||||
global $config;
|
||||
|
||||
function extension_db_status() {
|
||||
global $config;
|
||||
$db_user = get_parameter('db_user', '');
|
||||
$db_password = get_parameter('db_password', '');
|
||||
$db_host = get_parameter('db_host', '');
|
||||
$db_name = get_parameter('db_name', '');
|
||||
$db_status_execute = (bool) get_parameter('db_status_execute', false);
|
||||
|
||||
$db_user = get_parameter('db_user', '');
|
||||
$db_password = get_parameter('db_password', '');
|
||||
$db_host = get_parameter('db_host', '');
|
||||
$db_name = get_parameter('db_name', '');
|
||||
$db_status_execute = (bool)get_parameter('db_status_execute', false);
|
||||
ui_print_page_header(
|
||||
__('DB Schema check'),
|
||||
'images/extensions.png',
|
||||
false,
|
||||
'',
|
||||
true,
|
||||
''
|
||||
);
|
||||
|
||||
ui_print_page_header (__("DB Schema check"),
|
||||
"images/extensions.png", false, "", true, "");
|
||||
if (!is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit(
|
||||
'ACL Violation',
|
||||
'Trying to access db status'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
if (!is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation",
|
||||
"Trying to access db status");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
ui_print_info_message(
|
||||
__('This extension checks the DB is correct. Because sometimes the old DB from a migration has not some fields in the tables or the data is changed.')
|
||||
);
|
||||
ui_print_info_message(
|
||||
__('At the moment the checks is for MySQL/MariaDB.')
|
||||
);
|
||||
|
||||
ui_print_info_message(
|
||||
__('This extension checks the DB is correct. Because sometimes the old DB from a migration has not some fields in the tables or the data is changed.'));
|
||||
ui_print_info_message(
|
||||
__('At the moment the checks is for MySQL/MariaDB.'));
|
||||
echo "<form method='post'>";
|
||||
|
||||
echo "<form method='post'>";
|
||||
echo '<fieldset>';
|
||||
echo '<legend>'.__('DB settings').'</legend>';
|
||||
$table = new stdClass();
|
||||
$table->data = [];
|
||||
$row = [];
|
||||
$row[] = __('DB User with privileges');
|
||||
$row[] = html_print_input_text('db_user', $db_user, '', 50, 255, true);
|
||||
$row[] = __('DB Password for this user');
|
||||
$row[] = html_print_input_password('db_password', $db_password, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
$row = [];
|
||||
$row[] = __('DB Hostname');
|
||||
$row[] = html_print_input_text('db_host', $db_host, '', 50, 255, true);
|
||||
$row[] = __('DB Name (temporal for testing)');
|
||||
$row[] = html_print_input_text('db_name', $db_name, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
html_print_table($table);
|
||||
echo '</fieldset>';
|
||||
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . __('DB settings') . "</legend>";
|
||||
$table = new stdClass();
|
||||
$table->data = array();
|
||||
$row = array();
|
||||
$row[] = __("DB User with privileges");
|
||||
$row[] = html_print_input_text('db_user', $db_user, '', 50, 255, true);
|
||||
$row[] = __("DB Password for this user");
|
||||
$row[] = html_print_input_password('db_password', $db_password, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
$row = array();
|
||||
$row[] = __("DB Hostname");
|
||||
$row[] = html_print_input_text('db_host', $db_host, '', 50, 255, true);
|
||||
$row[] = __("DB Name (temporal for testing)");
|
||||
$row[] = html_print_input_text('db_name', $db_name, '', 50, 255, true);
|
||||
$table->data[] = $row;
|
||||
html_print_table($table);
|
||||
echo "</fieldset>";
|
||||
echo "<div style='text-align: right;'>";
|
||||
html_print_input_hidden('db_status_execute', 1);
|
||||
html_print_submit_button(__('Execute Test'), 'submit', false, 'class="sub"');
|
||||
echo '</div>';
|
||||
|
||||
echo "<div style='text-align: right;'>";
|
||||
html_print_input_hidden('db_status_execute', 1);
|
||||
html_print_submit_button(__('Execute Test'), 'submit', false, 'class="sub"');
|
||||
echo "</div>";
|
||||
echo '</form>';
|
||||
|
||||
echo "</form>";
|
||||
|
||||
if ($db_status_execute) {
|
||||
extension_db_status_execute_checks($db_user, $db_password,
|
||||
$db_host, $db_name);
|
||||
}
|
||||
if ($db_status_execute) {
|
||||
extension_db_status_execute_checks(
|
||||
$db_user,
|
||||
$db_password,
|
||||
$db_host,
|
||||
$db_name
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function extension_db_status_execute_checks($db_user, $db_password, $db_host, $db_name) {
|
||||
global $config;
|
||||
|
||||
$connection_system = $config['dbconnection'];
|
||||
function extension_db_status_execute_checks($db_user, $db_password, $db_host, $db_name)
|
||||
{
|
||||
global $config;
|
||||
|
||||
// Avoid SQL injection
|
||||
$db_name = io_safe_output($db_name);
|
||||
$db_name = str_replace(';', ' ', $db_name);
|
||||
$db_name = explode(" ", $db_name);
|
||||
$db_name = $db_name[0];
|
||||
$connection_system = $config['dbconnection'];
|
||||
|
||||
if ($config["mysqli"] === true) {
|
||||
$connection_test = mysqli_connect($db_host, $db_user, $db_password);
|
||||
}
|
||||
else{
|
||||
$connection_test = mysql_connect($db_host, $db_user, $db_password);
|
||||
}
|
||||
// Avoid SQL injection
|
||||
$db_name = io_safe_output($db_name);
|
||||
$db_name = str_replace(';', ' ', $db_name);
|
||||
$db_name = explode(' ', $db_name);
|
||||
$db_name = $db_name[0];
|
||||
|
||||
if (!$connection_test) {
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful connected to the DB'));
|
||||
}
|
||||
else {
|
||||
if($config["mysqli"] === true){
|
||||
$create_db = mysqli_query($connection_test, "CREATE DATABASE `$db_name`");
|
||||
}else{
|
||||
$create_db = mysql_query("CREATE DATABASE `$db_name`");
|
||||
}
|
||||
if ($config['mysqli'] === true) {
|
||||
$connection_test = mysqli_connect($db_host, $db_user, $db_password);
|
||||
} else {
|
||||
$connection_test = mysql_connect($db_host, $db_user, $db_password);
|
||||
}
|
||||
|
||||
if (!$create_db) {
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful created the testing DB'));
|
||||
}
|
||||
else {
|
||||
if ($config["mysqli"] === true) {
|
||||
mysqli_select_db($connection_test, $db_name);
|
||||
}
|
||||
else{
|
||||
mysql_select_db($db_name, $connection_test);
|
||||
}
|
||||
if (!$connection_test) {
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful connected to the DB')
|
||||
);
|
||||
} else {
|
||||
if ($config['mysqli'] === true) {
|
||||
$create_db = mysqli_query($connection_test, "CREATE DATABASE `$db_name`");
|
||||
} else {
|
||||
$create_db = mysql_query("CREATE DATABASE `$db_name`");
|
||||
}
|
||||
|
||||
$install_tables = extension_db_status_execute_sql_file(
|
||||
$config['homedir'] . "/pandoradb.sql",
|
||||
$connection_test);
|
||||
if (!$create_db) {
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful created the testing DB')
|
||||
);
|
||||
} else {
|
||||
if ($config['mysqli'] === true) {
|
||||
mysqli_select_db($connection_test, $db_name);
|
||||
} else {
|
||||
mysql_select_db($db_name, $connection_test);
|
||||
}
|
||||
|
||||
if (!$install_tables) {
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful installed tables into the testing DB'));
|
||||
}
|
||||
else {
|
||||
extension_db_check_tables_differences(
|
||||
$connection_test,
|
||||
$connection_system,
|
||||
$db_name,
|
||||
$config['dbname']);
|
||||
}
|
||||
$install_tables = extension_db_status_execute_sql_file(
|
||||
$config['homedir'].'/pandoradb.sql',
|
||||
$connection_test
|
||||
);
|
||||
|
||||
if ($config["mysqli"] === true) {
|
||||
mysqli_select_db($connection_test, $db_name);
|
||||
mysqli_query($connection_test, "DROP DATABASE IF EXISTS `$db_name`");
|
||||
}
|
||||
else{
|
||||
mysql_select_db($db_name, $connection_test);
|
||||
mysql_query("DROP DATABASE IF EXISTS `$db_name`", $connection_test);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$install_tables) {
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful installed tables into the testing DB')
|
||||
);
|
||||
} else {
|
||||
extension_db_check_tables_differences(
|
||||
$connection_test,
|
||||
$connection_system,
|
||||
$db_name,
|
||||
$config['dbname']
|
||||
);
|
||||
}
|
||||
|
||||
if ($config['mysqli'] === true) {
|
||||
mysqli_select_db($connection_test, $db_name);
|
||||
mysqli_query($connection_test, "DROP DATABASE IF EXISTS `$db_name`");
|
||||
} else {
|
||||
mysql_select_db($db_name, $connection_test);
|
||||
mysql_query("DROP DATABASE IF EXISTS `$db_name`", $connection_test);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function extension_db_check_tables_differences($connection_test,
|
||||
$connection_system, $db_name_test, $db_name_system) {
|
||||
|
||||
global $config;
|
||||
function extension_db_check_tables_differences(
|
||||
$connection_test,
|
||||
$connection_system,
|
||||
$db_name_test,
|
||||
$db_name_system
|
||||
) {
|
||||
global $config;
|
||||
|
||||
// --------- Check the tables --------------------------------------
|
||||
if ($config["mysqli"] === true) {
|
||||
mysqli_select_db($connection_test, $db_name_test);
|
||||
$result = mysqli_query($connection_test, "SHOW TABLES");
|
||||
}else{
|
||||
mysql_select_db($db_name_test, $connection_test);
|
||||
$result = mysql_query("SHOW TABLES", $connection_test);
|
||||
}
|
||||
// --------- Check the tables --------------------------------------
|
||||
if ($config['mysqli'] === true) {
|
||||
mysqli_select_db($connection_test, $db_name_test);
|
||||
$result = mysqli_query($connection_test, 'SHOW TABLES');
|
||||
} else {
|
||||
mysql_select_db($db_name_test, $connection_test);
|
||||
$result = mysql_query('SHOW TABLES', $connection_test);
|
||||
}
|
||||
|
||||
$tables_test = array();
|
||||
$tables_test = [];
|
||||
|
||||
if ($config["mysqli"] === true) {
|
||||
while ($row = mysqli_fetch_array($result)) {
|
||||
$tables_test[] = $row[0];
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
if ($config['mysqli'] === true) {
|
||||
while ($row = mysqli_fetch_array($result)) {
|
||||
$tables_test[] = $row[0];
|
||||
}
|
||||
|
||||
mysqli_select_db($connection_test, $db_name_system);
|
||||
mysqli_free_result($result);
|
||||
|
||||
$result = mysqli_query( $connection_test, "SHOW TABLES");
|
||||
}
|
||||
else{
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
$tables_test[] = $row[0];
|
||||
}
|
||||
mysql_free_result($result);
|
||||
mysqli_select_db($connection_test, $db_name_system);
|
||||
|
||||
mysql_select_db($db_name_system, $connection_test);
|
||||
$result = mysqli_query($connection_test, 'SHOW TABLES');
|
||||
} else {
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
$tables_test[] = $row[0];
|
||||
}
|
||||
|
||||
$result = mysql_query("SHOW TABLES", $connection_test);
|
||||
}
|
||||
mysql_free_result($result);
|
||||
|
||||
$tables_system = array();
|
||||
mysql_select_db($db_name_system, $connection_test);
|
||||
|
||||
if ($config["mysqli"] === true) {
|
||||
while ($row = mysqli_fetch_array ($result)) {
|
||||
$tables_system[] = $row[0];
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
else{
|
||||
while ($row = mysql_fetch_array ($result)) {
|
||||
$tables_system[] = $row[0];
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
$result = mysql_query('SHOW TABLES', $connection_test);
|
||||
}
|
||||
|
||||
$diff_tables = array_diff($tables_test, $tables_system);
|
||||
$tables_system = [];
|
||||
|
||||
ui_print_result_message(
|
||||
!empty($diff_tables),
|
||||
__('Success! %s DB contains all tables', get_product_name()),
|
||||
__('%s DB could not retrieve all tables. The missing tables are (%s)',
|
||||
get_product_name(), implode(", ", $diff_tables)));
|
||||
if ($config['mysqli'] === true) {
|
||||
while ($row = mysqli_fetch_array($result)) {
|
||||
$tables_system[] = $row[0];
|
||||
}
|
||||
|
||||
if (!empty($diff_tables)) {
|
||||
foreach ($diff_tables as $table) {
|
||||
if ($config["mysqli"] === true) {
|
||||
mysqli_select_db($connection_test, $db_name_test);
|
||||
$result = mysqli_query($connection_test, "SHOW CREATE TABLE " . $table);
|
||||
$tables_test = array();
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
ui_print_info_message(
|
||||
__('You can execute this SQL query for to fix.') . "<br />" .
|
||||
'<pre>' .
|
||||
$row[1] .
|
||||
'</pre>'
|
||||
);
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
else{
|
||||
mysql_select_db($db_name_test, $connection_test);
|
||||
$result = mysql_query("SHOW CREATE TABLE " . $table, $connection_test);
|
||||
$tables_test = array();
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
ui_print_info_message(
|
||||
__('You can execute this SQL query for to fix.') . "<br />" .
|
||||
'<pre>' .
|
||||
$row[1] .
|
||||
'</pre>'
|
||||
);
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
} else {
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
$tables_system[] = $row[0];
|
||||
}
|
||||
|
||||
// --------------- Check the fields -------------------------------
|
||||
$correct_fields = true;
|
||||
mysql_free_result($result);
|
||||
}
|
||||
|
||||
foreach ($tables_system as $table) {
|
||||
if ($config["mysqli"] === true) {
|
||||
mysqli_select_db($connection_test, $db_name_test);
|
||||
$result = mysqli_query($connection_test, "EXPLAIN " . $table);
|
||||
}
|
||||
else{
|
||||
mysql_select_db($db_name_test, $connection_test);
|
||||
$result = mysql_query("EXPLAIN " . $table, $connection_test);
|
||||
}
|
||||
$diff_tables = array_diff($tables_test, $tables_system);
|
||||
|
||||
$fields_test = array();
|
||||
if (!empty($result)) {
|
||||
if ($config["mysqli"] === true) {
|
||||
while ($row = mysqli_fetch_array ($result)) {
|
||||
$fields_test[$row[0]] = array(
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5]);
|
||||
}
|
||||
mysqli_free_result ($result);
|
||||
mysqli_select_db($connection_test, $db_name_system);
|
||||
}
|
||||
else{
|
||||
while ($row = mysql_fetch_array ($result)) {
|
||||
$fields_test[$row[0]] = array(
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5]);
|
||||
}
|
||||
mysql_free_result ($result);
|
||||
mysql_select_db($db_name_system, $connection_test);
|
||||
}
|
||||
}
|
||||
ui_print_result_message(
|
||||
!empty($diff_tables),
|
||||
__('Success! %s DB contains all tables', get_product_name()),
|
||||
__(
|
||||
'%s DB could not retrieve all tables. The missing tables are (%s)',
|
||||
get_product_name(),
|
||||
implode(', ', $diff_tables)
|
||||
)
|
||||
);
|
||||
|
||||
if($config["mysqli"] === true){
|
||||
$result = mysqli_query($connection_test, "EXPLAIN " . $table);
|
||||
}
|
||||
else{
|
||||
$result = mysql_query("EXPLAIN " . $table, $connection_test);
|
||||
}
|
||||
if (!empty($diff_tables)) {
|
||||
foreach ($diff_tables as $table) {
|
||||
if ($config['mysqli'] === true) {
|
||||
mysqli_select_db($connection_test, $db_name_test);
|
||||
$result = mysqli_query($connection_test, 'SHOW CREATE TABLE '.$table);
|
||||
$tables_test = [];
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
ui_print_info_message(
|
||||
__('You can execute this SQL query for to fix.').'<br />'.'<pre>'.$row[1].'</pre>'
|
||||
);
|
||||
}
|
||||
|
||||
$fields_system = array();
|
||||
if (!empty($result)) {
|
||||
if ($config["mysqli"] === true) {
|
||||
while ($row = mysqli_fetch_array ($result)) {
|
||||
$fields_system[$row[0]] = array(
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5]);
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
else{
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
$fields_system[$row[0]] = array(
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5]);
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
foreach ($fields_test as $name_field => $field_test) {
|
||||
if (!isset($fields_system[$name_field])) {
|
||||
$correct_fields = false;
|
||||
mysqli_free_result($result);
|
||||
} else {
|
||||
mysql_select_db($db_name_test, $connection_test);
|
||||
$result = mysql_query('SHOW CREATE TABLE '.$table, $connection_test);
|
||||
$tables_test = [];
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
ui_print_info_message(
|
||||
__('You can execute this SQL query for to fix.').'<br />'.'<pre>'.$row[1].'</pre>'
|
||||
);
|
||||
}
|
||||
|
||||
ui_print_error_message(
|
||||
__('Unsuccessful the table %s has not the field %s',
|
||||
$table, $name_field));
|
||||
ui_print_info_message(
|
||||
__('You can execute this SQL query for to fix.') . "<br />" .
|
||||
'<pre>' .
|
||||
"ALTER TABLE " . $table . " ADD COLUMN " . $name_field . " text;" .
|
||||
'</pre>'
|
||||
);
|
||||
}
|
||||
else {
|
||||
$correct_fields = false;
|
||||
$field_system = $fields_system[$name_field];
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$diff = array_diff($field_test, $field_system);
|
||||
// --------------- Check the fields -------------------------------
|
||||
$correct_fields = true;
|
||||
|
||||
if (!empty($diff)) {
|
||||
$info_message = "";
|
||||
$error_message = "";
|
||||
if($diff['type']){
|
||||
$error_message .= "Unsuccessful the field ".$name_field." in the table ".$table." must be set the type with ".$diff['type']."<br>";
|
||||
}
|
||||
foreach ($tables_system as $table) {
|
||||
if ($config['mysqli'] === true) {
|
||||
mysqli_select_db($connection_test, $db_name_test);
|
||||
$result = mysqli_query($connection_test, 'EXPLAIN '.$table);
|
||||
} else {
|
||||
mysql_select_db($db_name_test, $connection_test);
|
||||
$result = mysql_query('EXPLAIN '.$table, $connection_test);
|
||||
}
|
||||
|
||||
if($diff['null']){
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be null: (".$diff['null'].").<br>";
|
||||
}
|
||||
$fields_test = [];
|
||||
if (!empty($result)) {
|
||||
if ($config['mysqli'] === true) {
|
||||
while ($row = mysqli_fetch_array($result)) {
|
||||
$fields_test[$row[0]] = [
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5],
|
||||
];
|
||||
}
|
||||
|
||||
if($diff['default']){
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be set ".$diff['default']." as default value.<br>";
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
mysqli_select_db($connection_test, $db_name_system);
|
||||
} else {
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
$fields_test[$row[0]] = [
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5],
|
||||
];
|
||||
}
|
||||
|
||||
if($field_test['null'] == "YES" || !isset($field_test['null']) || $field_test['null'] == ""){
|
||||
$null_defect = " NULL";
|
||||
}
|
||||
else{
|
||||
$null_defect = " NOT NULL";
|
||||
}
|
||||
mysql_free_result($result);
|
||||
mysql_select_db($db_name_system, $connection_test);
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($field_test['default']) || $field_test['default'] == ""){
|
||||
$default_value = "";
|
||||
}
|
||||
else{
|
||||
$default_value = " DEFAULT ".$field_test['default'];
|
||||
}
|
||||
if ($config['mysqli'] === true) {
|
||||
$result = mysqli_query($connection_test, 'EXPLAIN '.$table);
|
||||
} else {
|
||||
$result = mysql_query('EXPLAIN '.$table, $connection_test);
|
||||
}
|
||||
|
||||
if($diff['type'] || $diff['null'] || $diff['default']){
|
||||
$info_message .= "ALTER TABLE " . $table . " MODIFY COLUMN " . $name_field . " " . $field_test['type'] . $null_defect . $default_value.";";
|
||||
}
|
||||
$fields_system = [];
|
||||
if (!empty($result)) {
|
||||
if ($config['mysqli'] === true) {
|
||||
while ($row = mysqli_fetch_array($result)) {
|
||||
$fields_system[$row[0]] = [
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5],
|
||||
];
|
||||
}
|
||||
|
||||
if($diff['key']){
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be set the key as defined in the SQL file.<br>";
|
||||
$info_message .= "<br><br>Please check the SQL file for to know the kind of key needed.";
|
||||
}
|
||||
mysqli_free_result($result);
|
||||
} else {
|
||||
while ($row = mysql_fetch_array($result)) {
|
||||
$fields_system[$row[0]] = [
|
||||
'field ' => $row[0],
|
||||
'type' => $row[1],
|
||||
'null' => $row[2],
|
||||
'key' => $row[3],
|
||||
'default' => $row[4],
|
||||
'extra' => $row[5],
|
||||
];
|
||||
}
|
||||
|
||||
if($diff['extra']){
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be set as defined in the SQL file.<br>";
|
||||
$info_message .= "<br><br>Please check the SQL file for to know the kind of extra config needed.";
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
|
||||
ui_print_error_message(__($error_message));
|
||||
foreach ($fields_test as $name_field => $field_test) {
|
||||
if (!isset($fields_system[$name_field])) {
|
||||
$correct_fields = false;
|
||||
|
||||
ui_print_info_message(__($info_message));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($correct_fields) {
|
||||
ui_print_success_message(
|
||||
__('Successful all the tables have the correct fields')
|
||||
);
|
||||
}
|
||||
ui_print_error_message(
|
||||
__(
|
||||
'Unsuccessful the table %s has not the field %s',
|
||||
$table,
|
||||
$name_field
|
||||
)
|
||||
);
|
||||
ui_print_info_message(
|
||||
__('You can execute this SQL query for to fix.').'<br />'.'<pre>'.'ALTER TABLE '.$table.' ADD COLUMN '.$name_field.' text;'.'</pre>'
|
||||
);
|
||||
} else {
|
||||
$correct_fields = false;
|
||||
$field_system = $fields_system[$name_field];
|
||||
|
||||
$diff = array_diff($field_test, $field_system);
|
||||
|
||||
if (!empty($diff)) {
|
||||
$info_message = '';
|
||||
$error_message = '';
|
||||
if ($diff['type']) {
|
||||
$error_message .= 'Unsuccessful the field '.$name_field.' in the table '.$table.' must be set the type with '.$diff['type'].'<br>';
|
||||
}
|
||||
|
||||
if ($diff['null']) {
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be null: (".$diff['null'].').<br>';
|
||||
}
|
||||
|
||||
if ($diff['default']) {
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be set ".$diff['default'].' as default value.<br>';
|
||||
}
|
||||
|
||||
if ($field_test['null'] == 'YES' || !isset($field_test['null']) || $field_test['null'] == '') {
|
||||
$null_defect = ' NULL';
|
||||
} else {
|
||||
$null_defect = ' NOT NULL';
|
||||
}
|
||||
|
||||
if (!isset($field_test['default']) || $field_test['default'] == '') {
|
||||
$default_value = '';
|
||||
} else {
|
||||
$default_value = ' DEFAULT '.$field_test['default'];
|
||||
}
|
||||
|
||||
if ($diff['type'] || $diff['null'] || $diff['default']) {
|
||||
$info_message .= 'ALTER TABLE '.$table.' MODIFY COLUMN '.$name_field.' '.$field_test['type'].$null_defect.$default_value.';';
|
||||
}
|
||||
|
||||
if ($diff['key']) {
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be set the key as defined in the SQL file.<br>";
|
||||
$info_message .= '<br><br>Please check the SQL file for to know the kind of key needed.';
|
||||
}
|
||||
|
||||
if ($diff['extra']) {
|
||||
$error_message .= "Unsuccessful the field $name_field in the table $table must be set as defined in the SQL file.<br>";
|
||||
$info_message .= '<br><br>Please check the SQL file for to know the kind of extra config needed.';
|
||||
}
|
||||
|
||||
ui_print_error_message(__($error_message));
|
||||
|
||||
ui_print_info_message(__($info_message));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($correct_fields) {
|
||||
ui_print_success_message(
|
||||
__('Successful all the tables have the correct fields')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function extension_db_status_execute_sql_file($url, $connection) {
|
||||
global $config;
|
||||
if (file_exists($url)) {
|
||||
$file_content = file($url);
|
||||
$query = "";
|
||||
foreach ($file_content as $sql_line) {
|
||||
if (trim($sql_line) != "" && strpos($sql_line, "--") === false) {
|
||||
$query .= $sql_line;
|
||||
if (preg_match("/;[\040]*\$/", $sql_line)) {
|
||||
if ($config["mysqli"] === true) {
|
||||
if (!$result = mysqli_query($connection, $query)) {
|
||||
echo mysqli_error(); //Uncomment for debug
|
||||
echo "<i><br>$query<br></i>";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (!$result = mysql_query($query, $connection)) {
|
||||
echo mysql_error(); //Uncomment for debug
|
||||
echo "<i><br>$query<br></i>";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
$query = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
|
||||
function extension_db_status_execute_sql_file($url, $connection)
|
||||
{
|
||||
global $config;
|
||||
if (file_exists($url)) {
|
||||
$file_content = file($url);
|
||||
$query = '';
|
||||
foreach ($file_content as $sql_line) {
|
||||
if (trim($sql_line) != '' && strpos($sql_line, '--') === false) {
|
||||
$query .= $sql_line;
|
||||
if (preg_match("/;[\040]*\$/", $sql_line)) {
|
||||
if ($config['mysqli'] === true) {
|
||||
if (!$result = mysqli_query($connection, $query)) {
|
||||
echo mysqli_error();
|
||||
// Uncomment for debug
|
||||
echo "<i><br>$query<br></i>";
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
if (!$result = mysql_query($query, $connection)) {
|
||||
echo mysql_error();
|
||||
// Uncomment for debug
|
||||
echo "<i><br>$query<br></i>";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
$query = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extensions_add_godmode_function('extension_db_status');
|
||||
extensions_add_godmode_menu_option(__('DB Schema check'), 'DM', 'gextensions', null, "v1r1", 'gdbman');
|
||||
?>
|
||||
extensions_add_godmode_menu_option(__('DB Schema check'), 'DM', 'gextensions', null, 'v1r1', 'gdbman');
|
||||
|
|
|
@ -4,160 +4,162 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function dbmanager_query($sql, &$error, $dbconnection)
|
||||
{
|
||||
global $config;
|
||||
|
||||
function dbmanager_query ($sql, &$error, $dbconnection) {
|
||||
global $config;
|
||||
$retval = [];
|
||||
|
||||
$retval = array();
|
||||
if ($sql == '') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($sql == '')
|
||||
return false;
|
||||
$sql = html_entity_decode($sql, ENT_QUOTES);
|
||||
if ($config['mysqli']) {
|
||||
$result = mysqli_query($dbconnection, $sql);
|
||||
if ($result === false) {
|
||||
$backtrace = debug_backtrace();
|
||||
$error = mysqli_error($dbconnection);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$result = mysql_query($sql, $dbconnection);
|
||||
if ($result === false) {
|
||||
$backtrace = debug_backtrace();
|
||||
$error = mysql_error();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$sql = html_entity_decode($sql, ENT_QUOTES);
|
||||
if ($config["mysqli"]) {
|
||||
$result = mysqli_query ($dbconnection, $sql);
|
||||
if ($result === false) {
|
||||
$backtrace = debug_backtrace ();
|
||||
$error = mysqli_error ($dbconnection);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else{
|
||||
$result = mysql_query ($sql, $dbconnection);
|
||||
if ($result === false) {
|
||||
$backtrace = debug_backtrace ();
|
||||
$error = mysql_error ();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($result === true) {
|
||||
if ($config['mysqli']) {
|
||||
return mysqli_affected_rows($dbconnection);
|
||||
} else {
|
||||
return mysql_affected_rows();
|
||||
}
|
||||
}
|
||||
|
||||
if ($result === true) {
|
||||
if($config["mysqli"]){
|
||||
return mysqli_affected_rows ($dbconnection);
|
||||
}
|
||||
else{
|
||||
return mysql_affected_rows ();
|
||||
}
|
||||
}
|
||||
if ($config['mysqli']) {
|
||||
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
||||
array_push($retval, $row);
|
||||
}
|
||||
} else {
|
||||
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
|
||||
array_push($retval, $row);
|
||||
}
|
||||
}
|
||||
|
||||
if($config["mysqli"]){
|
||||
while ($row = mysqli_fetch_array ($result, MYSQLI_ASSOC)) {
|
||||
array_push ($retval, $row);
|
||||
}
|
||||
}
|
||||
else{
|
||||
while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {
|
||||
array_push ($retval, $row);
|
||||
}
|
||||
}
|
||||
if ($config['mysqli']) {
|
||||
mysqli_free_result($result);
|
||||
} else {
|
||||
mysql_free_result($result);
|
||||
}
|
||||
|
||||
if($config["mysqli"]){
|
||||
mysqli_free_result ($result);
|
||||
}
|
||||
else{
|
||||
mysql_free_result ($result);
|
||||
}
|
||||
if (! empty($retval)) {
|
||||
return $retval;
|
||||
}
|
||||
|
||||
if (! empty ($retval))
|
||||
return $retval;
|
||||
|
||||
//Return false, check with === or !==
|
||||
return "Empty";
|
||||
// Return false, check with === or !==
|
||||
return 'Empty';
|
||||
}
|
||||
|
||||
|
||||
function dbmgr_extension_main () {
|
||||
ui_require_css_file ('dbmanager', 'extensions/dbmanager/');
|
||||
function dbmgr_extension_main()
|
||||
{
|
||||
ui_require_css_file('dbmanager', 'extensions/dbmanager/');
|
||||
|
||||
global $config;
|
||||
global $config;
|
||||
|
||||
if (!is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
if (!is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = (string) get_parameter ('sql');
|
||||
$sql = (string) get_parameter('sql');
|
||||
|
||||
ui_print_page_header (__('Database interface'), "images/gm_db.png", false, false, true);
|
||||
ui_print_page_header(__('Database interface'), 'images/gm_db.png', false, false, true);
|
||||
|
||||
echo '<div class="notify">';
|
||||
echo __("This is an advanced extension to interface with %s database directly from WEB console
|
||||
echo '<div class="notify">';
|
||||
echo __(
|
||||
"This is an advanced extension to interface with %s database directly from WEB console
|
||||
using native SQL sentences. Please note that <b>you can damage</b> your %s installation
|
||||
if you don't know </b>exactly</b> what are you are doing,
|
||||
this means that you can severily damage your setup using this extension.
|
||||
This extension is intended to be used <b>only by experienced users</b>
|
||||
with a depth knowledge of %s internals.",
|
||||
get_product_name(), get_product_name(), get_product_name());
|
||||
echo '</div>';
|
||||
get_product_name(),
|
||||
get_product_name(),
|
||||
get_product_name()
|
||||
);
|
||||
echo '</div>';
|
||||
|
||||
echo "<br />";
|
||||
echo "Some samples of usage: <blockquote><em>SHOW STATUS;<br />DESCRIBE tagente<br />SELECT * FROM tserver<br />UPDATE tagente SET id_grupo = 15 WHERE nombre LIKE '%194.179%'</em></blockquote>";
|
||||
echo '<br />';
|
||||
echo "Some samples of usage: <blockquote><em>SHOW STATUS;<br />DESCRIBE tagente<br />SELECT * FROM tserver<br />UPDATE tagente SET id_grupo = 15 WHERE nombre LIKE '%194.179%'</em></blockquote>";
|
||||
|
||||
echo "<br /><br />";
|
||||
echo "<form method='post' action=''>";
|
||||
html_print_textarea ('sql', 5, 50, html_entity_decode($sql, ENT_QUOTES));
|
||||
echo '<br />';
|
||||
echo '<div class="action-buttons" style="width: 100%">';
|
||||
echo '<br />';
|
||||
html_print_submit_button (__('Execute SQL'), '', false, 'class="sub next"');
|
||||
echo '</div>';
|
||||
echo "</form>";
|
||||
echo '<br /><br />';
|
||||
echo "<form method='post' action=''>";
|
||||
html_print_textarea('sql', 5, 50, html_entity_decode($sql, ENT_QUOTES));
|
||||
echo '<br />';
|
||||
echo '<div class="action-buttons" style="width: 100%">';
|
||||
echo '<br />';
|
||||
html_print_submit_button(__('Execute SQL'), '', false, 'class="sub next"');
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
|
||||
// Processing SQL Code
|
||||
if ($sql == '')
|
||||
return;
|
||||
// Processing SQL Code
|
||||
if ($sql == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
echo "<br />";
|
||||
echo "<hr />";
|
||||
echo "<br />";
|
||||
echo '<br />';
|
||||
echo '<hr />';
|
||||
echo '<br />';
|
||||
|
||||
$dbconnection = $config['dbconnection'];
|
||||
$error = '';
|
||||
$dbconnection = $config['dbconnection'];
|
||||
$error = '';
|
||||
|
||||
$result = dbmanager_query ($sql, $error, $dbconnection);
|
||||
$result = dbmanager_query($sql, $error, $dbconnection);
|
||||
|
||||
if ($result === false) {
|
||||
echo '<strong>An error has occured when querying the database.</strong><br />';
|
||||
echo $error;
|
||||
if ($result === false) {
|
||||
echo '<strong>An error has occured when querying the database.</strong><br />';
|
||||
echo $error;
|
||||
|
||||
db_pandora_audit("DB Interface Extension", "Error in SQL", false, false, $sql);
|
||||
db_pandora_audit('DB Interface Extension', 'Error in SQL', false, false, $sql);
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (! is_array ($result)) {
|
||||
echo "<strong>Output: <strong>".$result;
|
||||
if (! is_array($result)) {
|
||||
echo '<strong>Output: <strong>'.$result;
|
||||
|
||||
db_pandora_audit("DB Interface Extension", "SQL", false, false, $sql);
|
||||
db_pandora_audit('DB Interface Extension', 'SQL', false, false, $sql);
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
echo "<div style='overflow: auto;'>";
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox data';
|
||||
$table->head = array_keys ($result[0]);
|
||||
echo "<div style='overflow: auto;'>";
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox data';
|
||||
$table->head = array_keys($result[0]);
|
||||
|
||||
$table->data = $result;
|
||||
$table->data = $result;
|
||||
|
||||
html_print_table ($table);
|
||||
echo "</div>";
|
||||
html_print_table($table);
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
/* This adds a option in the operation menu */
|
||||
extensions_add_godmode_menu_option (__('DB interface'), 'PM','gextensions',"dbmanager/icon.png","v1r1", 'gdbman');
|
||||
|
||||
/* This sets the function to be called when the extension is selected in the operation menu */
|
||||
extensions_add_godmode_function ('dbmgr_extension_main');
|
||||
?>
|
||||
// This adds a option in the operation menu
|
||||
extensions_add_godmode_menu_option(__('DB interface'), 'PM', 'gextensions', 'dbmanager/icon.png', 'v1r1', 'gdbman');
|
||||
|
||||
// This sets the function to be called when the extension is selected in the operation menu
|
||||
extensions_add_godmode_function('dbmgr_extension_main');
|
||||
|
|
|
@ -1,29 +1,30 @@
|
|||
|
||||
table.dbmanager, table.dbmanager td, table.dbmanager th {
|
||||
border:1px solid #888;
|
||||
border-collapse: collapse;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
table.dbmanager,
|
||||
table.dbmanager td,
|
||||
table.dbmanager th {
|
||||
border: 1px solid #888;
|
||||
border-collapse: collapse;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table.dbmanager td, table.dbmanager th {
|
||||
padding:.2em .5em;
|
||||
vertical-align: top;
|
||||
font-weight: normal;
|
||||
background: #fafafa;
|
||||
color: #000;
|
||||
font-size: 9px;
|
||||
table.dbmanager td,
|
||||
table.dbmanager th {
|
||||
padding: 0.2em 0.5em;
|
||||
vertical-align: top;
|
||||
font-weight: normal;
|
||||
background: #fafafa;
|
||||
color: #000;
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
table.dbmanager th {
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
background: #888;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
background: #888;
|
||||
}
|
||||
|
||||
textarea {
|
||||
min-height: 50px;
|
||||
height: 50px;
|
||||
width: 95%;
|
||||
min-height: 50px;
|
||||
height: 50px;
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,262 +4,259 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function load_matrix_console()
|
||||
{
|
||||
global $config;
|
||||
|
||||
function load_matrix_console() {
|
||||
global $config;
|
||||
|
||||
if (! check_acl ($config["id_user"], 0, "ER")) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access event viewer");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
if (! check_acl($config['id_user'], 0, 'ER')) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access event viewer');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
$pure = (bool) get_parameter('pure');
|
||||
$pure = (bool) get_parameter('pure');
|
||||
|
||||
if (! $pure) {
|
||||
$title_menu = __("Matrix events");
|
||||
$fullscreen['text'] = '<a href="index.php?extension_in_menu=eventos&sec=extensions&sec2=extensions/matrix_events&pure=1">'
|
||||
. html_print_image ("images/full_screen.png", true, array ("title" => __('Full screen mode')))
|
||||
. "</a>";
|
||||
$onheader = array('fullscreen' => $fullscreen);
|
||||
ui_print_page_header ($title_menu, "images/op_monitoring.png", false, "", false, $onheader);
|
||||
}
|
||||
if (! $pure) {
|
||||
$title_menu = __('Matrix events');
|
||||
$fullscreen['text'] = '<a href="index.php?extension_in_menu=eventos&sec=extensions&sec2=extensions/matrix_events&pure=1">'.html_print_image('images/full_screen.png', true, ['title' => __('Full screen mode')]).'</a>';
|
||||
$onheader = ['fullscreen' => $fullscreen];
|
||||
ui_print_page_header($title_menu, 'images/op_monitoring.png', false, '', false, $onheader);
|
||||
}
|
||||
|
||||
echo "<canvas id=\"matrix-terminal\" style=\"display:block;\"></canvas>";
|
||||
echo '<canvas id="matrix-terminal" style="display:block;"></canvas>';
|
||||
|
||||
?>
|
||||
<script language="javascript" type="text/javascript">
|
||||
?>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
var terminal = {
|
||||
element : "",
|
||||
context : null,
|
||||
fontSize : 14,
|
||||
timers : {
|
||||
rain : null,
|
||||
event : null,
|
||||
events : null
|
||||
},
|
||||
stopRain : function () {
|
||||
if (this.timers.rain) {
|
||||
clearInterval(this.timers.rain);
|
||||
}
|
||||
},
|
||||
stopEvent : function () {
|
||||
if (this.timers.event) {
|
||||
clearInterval(this.timers.event);
|
||||
}
|
||||
},
|
||||
clear : function () {
|
||||
this.stopRain();
|
||||
this.stopEvent();
|
||||
if (this.context) {
|
||||
this.context.fillStyle = "rgba(0, 0, 0, 1.0)";
|
||||
this.context.fillRect(0, 0, width, height);
|
||||
}
|
||||
},
|
||||
print : function () {
|
||||
var terminal = {
|
||||
element : "",
|
||||
context : null,
|
||||
fontSize : 14,
|
||||
timers : {
|
||||
rain : null,
|
||||
event : null,
|
||||
events : null
|
||||
},
|
||||
stopRain : function () {
|
||||
if (this.timers.rain) {
|
||||
clearInterval(this.timers.rain);
|
||||
}
|
||||
},
|
||||
stopEvent : function () {
|
||||
if (this.timers.event) {
|
||||
clearInterval(this.timers.event);
|
||||
}
|
||||
},
|
||||
clear : function () {
|
||||
this.stopRain();
|
||||
this.stopEvent();
|
||||
if (this.context) {
|
||||
this.context.fillStyle = "rgba(0, 0, 0, 1.0)";
|
||||
this.context.fillRect(0, 0, width, height);
|
||||
}
|
||||
},
|
||||
print : function () {
|
||||
|
||||
this.stopRain();
|
||||
this.stopRain();
|
||||
|
||||
var letters = "田由甲申甴电甶アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン<>*01ACREJWH{V";
|
||||
var letters = "田由甲申甴电甶アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン<>*01ACREJWH{V";
|
||||
|
||||
// Converting the string into an array of single characters
|
||||
letters = letters.split("");
|
||||
// Converting the string into an array of single characters
|
||||
letters = letters.split("");
|
||||
|
||||
var width = this.element.width;
|
||||
var height = this.element.height;
|
||||
var context = this.context;
|
||||
var width = this.element.width;
|
||||
var height = this.element.height;
|
||||
var context = this.context;
|
||||
|
||||
var font_size = this.fontSize;
|
||||
// Number of columns for the rain
|
||||
var columns = Math.round(width / font_size);
|
||||
// Number of rows for the rain
|
||||
var rows = Math.round(height / font_size);
|
||||
// An array of drops - one per column
|
||||
var drops = [];
|
||||
// x below is the x coordinate
|
||||
// 1 = y co-ordinate of the drop(same for every drop initially)
|
||||
for (var x = 0; x < columns; x++) {
|
||||
drops[x] = -1;
|
||||
}
|
||||
var font_size = this.fontSize;
|
||||
// Number of columns for the rain
|
||||
var columns = Math.round(width / font_size);
|
||||
// Number of rows for the rain
|
||||
var rows = Math.round(height / font_size);
|
||||
// An array of drops - one per column
|
||||
var drops = [];
|
||||
// x below is the x coordinate
|
||||
// 1 = y co-ordinate of the drop(same for every drop initially)
|
||||
for (var x = 0; x < columns; x++) {
|
||||
drops[x] = -1;
|
||||
}
|
||||
|
||||
// Drawing the characters
|
||||
function draw() {
|
||||
// Black BG for the canvas
|
||||
// Translucent BG to show trail
|
||||
context.fillStyle = "rgba(0, 0, 0, 0.05)";
|
||||
context.fillRect(0, 0, width, height);
|
||||
|
||||
context.fillStyle = "#0F0"; // Green text
|
||||
context.font = font_size + "px arial";
|
||||
// Looping over drops
|
||||
for (var i = 0; i < drops.length; i++) {
|
||||
if (drops[i] == -1) {
|
||||
if (Math.random() > 0.975) {
|
||||
drops[i] = 1;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// A random character to print
|
||||
var letter = letters[Math.floor(Math.random() * letters.length)];
|
||||
//x = i * font_size, y = value of drops[i] * font_size
|
||||
context.fillText(letter, i * font_size, drops[i] * font_size);
|
||||
|
||||
// Sending the drop back to the top randomly after it has crossed the screen
|
||||
// Adding a randomness to the reset to make the drops scattered on the Y axis
|
||||
if (drops[i] * font_size > height && Math.random() > 0.975) {
|
||||
drops[i] = 0;
|
||||
}
|
||||
//incrementing Y coordinate
|
||||
drops[i]++;
|
||||
}
|
||||
// Drawing the characters
|
||||
function draw() {
|
||||
// Black BG for the canvas
|
||||
// Translucent BG to show trail
|
||||
context.fillStyle = "rgba(0, 0, 0, 0.05)";
|
||||
context.fillRect(0, 0, width, height);
|
||||
|
||||
context.fillStyle = "#0F0"; // Green text
|
||||
context.font = font_size + "px arial";
|
||||
// Looping over drops
|
||||
for (var i = 0; i < drops.length; i++) {
|
||||
if (drops[i] == -1) {
|
||||
if (Math.random() > 0.975) {
|
||||
drops[i] = 1;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// A random character to print
|
||||
var letter = letters[Math.floor(Math.random() * letters.length)];
|
||||
//x = i * font_size, y = value of drops[i] * font_size
|
||||
context.fillText(letter, i * font_size, drops[i] * font_size);
|
||||
|
||||
// Sending the drop back to the top randomly after it has crossed the screen
|
||||
// Adding a randomness to the reset to make the drops scattered on the Y axis
|
||||
if (drops[i] * font_size > height && Math.random() > 0.975) {
|
||||
drops[i] = 0;
|
||||
}
|
||||
//incrementing Y coordinate
|
||||
drops[i]++;
|
||||
}
|
||||
|
||||
}
|
||||
this.timers.rain = setInterval(draw, 33);
|
||||
},
|
||||
showEvent : function (message) {
|
||||
}
|
||||
this.timers.rain = setInterval(draw, 33);
|
||||
},
|
||||
showEvent : function (message) {
|
||||
|
||||
this.stopEvent();
|
||||
this.stopEvent();
|
||||
|
||||
var context = this.context;
|
||||
var font_size = this.fontSize;
|
||||
var width = this.element.width;
|
||||
var height = this.element.height;
|
||||
var columns = Math.round(width / font_size);
|
||||
var rows = Math.round(height / font_size);
|
||||
var middleColumn = Math.floor(rows / 2);
|
||||
|
||||
while (message.length < columns) {
|
||||
message = " " + message + " ";
|
||||
}
|
||||
var context = this.context;
|
||||
var font_size = this.fontSize;
|
||||
var width = this.element.width;
|
||||
var height = this.element.height;
|
||||
var columns = Math.round(width / font_size);
|
||||
var rows = Math.round(height / font_size);
|
||||
var middleColumn = Math.floor(rows / 2);
|
||||
|
||||
while (message.length < columns) {
|
||||
message = " " + message + " ";
|
||||
}
|
||||
|
||||
// Converting the string into an array of single characters
|
||||
var letters = message.split("");
|
||||
var positions = [];
|
||||
// x below is the x coordinate
|
||||
// 1 = y co-ordinate of the drop(same for every drop initially)
|
||||
for (var i = 0; i < letters.length; i++) {
|
||||
positions[i] = -1;
|
||||
}
|
||||
function drawMessage() {
|
||||
// Looping over drops
|
||||
for (var i = 0; i < letters.length; i++) {
|
||||
if (positions[i] < 0) {
|
||||
if (Math.random() > 0.9) {
|
||||
positions[i] = 1;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else if (positions[i] < middleColumn) {
|
||||
context.fillStyle = "#0F0";
|
||||
context.fillText(letters[i], i * font_size, positions[i] * font_size);
|
||||
//incrementing Y coordinate
|
||||
positions[i]++;
|
||||
} else if (positions[i] > middleColumn) {
|
||||
context.fillStyle = "#0F0";
|
||||
context.fillText(letters[i], i * font_size, positions[i] * font_size);
|
||||
//incrementing Y coordinate
|
||||
// Adding a randomness to the reset to make the drops scattered on the Y axis
|
||||
if (positions[i] * font_size > terminal.height) {
|
||||
positions[i] = -1;
|
||||
}
|
||||
//incrementing Y coordinate
|
||||
positions[i]++;
|
||||
} else {
|
||||
context.fillStyle = "rgba(255, 255, 255, 1.0)";
|
||||
context.fillText(letters[i], i * font_size, positions[i] * font_size);
|
||||
// Converting the string into an array of single characters
|
||||
var letters = message.split("");
|
||||
var positions = [];
|
||||
// x below is the x coordinate
|
||||
// 1 = y co-ordinate of the drop(same for every drop initially)
|
||||
for (var i = 0; i < letters.length; i++) {
|
||||
positions[i] = -1;
|
||||
}
|
||||
function drawMessage() {
|
||||
// Looping over drops
|
||||
for (var i = 0; i < letters.length; i++) {
|
||||
if (positions[i] < 0) {
|
||||
if (Math.random() > 0.9) {
|
||||
positions[i] = 1;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else if (positions[i] < middleColumn) {
|
||||
context.fillStyle = "#0F0";
|
||||
context.fillText(letters[i], i * font_size, positions[i] * font_size);
|
||||
//incrementing Y coordinate
|
||||
positions[i]++;
|
||||
} else if (positions[i] > middleColumn) {
|
||||
context.fillStyle = "#0F0";
|
||||
context.fillText(letters[i], i * font_size, positions[i] * font_size);
|
||||
//incrementing Y coordinate
|
||||
// Adding a randomness to the reset to make the drops scattered on the Y axis
|
||||
if (positions[i] * font_size > terminal.height) {
|
||||
positions[i] = -1;
|
||||
}
|
||||
//incrementing Y coordinate
|
||||
positions[i]++;
|
||||
} else {
|
||||
context.fillStyle = "rgba(255, 255, 255, 1.0)";
|
||||
context.fillText(letters[i], i * font_size, positions[i] * font_size);
|
||||
|
||||
function moveLetter(array, index) {
|
||||
setTimeout(function() {
|
||||
if (array[index] == middleColumn) {
|
||||
array[index]++;
|
||||
}
|
||||
}, 15000);
|
||||
}
|
||||
moveLetter(positions, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.timers.event = setInterval(drawMessage, 100);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready (function () {
|
||||
function moveLetter(array, index) {
|
||||
setTimeout(function() {
|
||||
if (array[index] == middleColumn) {
|
||||
array[index]++;
|
||||
}
|
||||
}, 15000);
|
||||
}
|
||||
moveLetter(positions, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.timers.event = setInterval(drawMessage, 100);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready (function () {
|
||||
|
||||
var pure = <?php echo json_encode($pure); ?>;
|
||||
|
||||
terminal.element = document.getElementById("matrix-terminal");
|
||||
if (pure) {
|
||||
terminal.fontSize = terminal.fontSize + 2;
|
||||
terminal.element.height = window.innerHeight;
|
||||
terminal.element.width = window.innerWidth;
|
||||
var pure = <?php echo json_encode($pure); ?>;
|
||||
|
||||
terminal.element = document.getElementById("matrix-terminal");
|
||||
if (pure) {
|
||||
terminal.fontSize = terminal.fontSize + 2;
|
||||
terminal.element.height = window.innerHeight;
|
||||
terminal.element.width = window.innerWidth;
|
||||
|
||||
$("#matrix-terminal").click(function() {
|
||||
document.location.search = "?extension_in_menu=eventos&sec=extensions&sec2=extensions/matrix_events";
|
||||
});
|
||||
$("#main_pure").css("margin", 0)
|
||||
} else {
|
||||
terminal.element.height = $("#main").innerHeight();
|
||||
terminal.element.width = $("#main").innerWidth();
|
||||
$("#matrix-terminal").click(function() {
|
||||
document.location.search = "?extension_in_menu=eventos&sec=extensions&sec2=extensions/matrix_events";
|
||||
});
|
||||
$("#main_pure").css("margin", 0)
|
||||
} else {
|
||||
terminal.element.height = $("#main").innerHeight();
|
||||
terminal.element.width = $("#main").innerWidth();
|
||||
|
||||
$("#matrix-terminal").dblclick(function() {
|
||||
document.location.search = "?extension_in_menu=eventos&sec=extensions&sec2=extensions/matrix_events&pure=1";
|
||||
});
|
||||
}
|
||||
terminal.context = terminal.element.getContext("2d");
|
||||
$("#matrix-terminal").dblclick(function() {
|
||||
document.location.search = "?extension_in_menu=eventos&sec=extensions&sec2=extensions/matrix_events&pure=1";
|
||||
});
|
||||
}
|
||||
terminal.context = terminal.element.getContext("2d");
|
||||
|
||||
terminal.print();
|
||||
showLastEvents();
|
||||
});
|
||||
terminal.print();
|
||||
showLastEvents();
|
||||
});
|
||||
|
||||
// Shows the last 5 events via ajax
|
||||
function showLastEvents () {
|
||||
// Shows the last 5 events via ajax
|
||||
function showLastEvents () {
|
||||
|
||||
if (terminal.timers.events) {
|
||||
clearInterval(terminal.timers.events);
|
||||
}
|
||||
|
||||
$.ajax ({
|
||||
url : "ajax.php",
|
||||
data : {
|
||||
page: "<?php echo EXTENSIONS_DIR; ?>/matrix_events/ajax",
|
||||
get_last_events: 1
|
||||
},
|
||||
type : 'POST',
|
||||
dataType : 'json',
|
||||
success: function (data) {
|
||||
events = data;
|
||||
if (terminal.timers.events) {
|
||||
clearInterval(terminal.timers.events);
|
||||
}
|
||||
|
||||
$.ajax ({
|
||||
url : "ajax.php",
|
||||
data : {
|
||||
page: "<?php echo EXTENSIONS_DIR; ?>/matrix_events/ajax",
|
||||
get_last_events: 1
|
||||
},
|
||||
type : 'POST',
|
||||
dataType : 'json',
|
||||
success: function (data) {
|
||||
events = data;
|
||||
|
||||
if (events.length > 0) {
|
||||
event = events.shift();
|
||||
terminal.showEvent(event.agent + " - " + event.text + " - " + event.date);
|
||||
}
|
||||
var showEventsInterval = function () {
|
||||
if (events.length > 0) {
|
||||
event = events.shift();
|
||||
terminal.showEvent(event.agent + " - " + event.text + " - " + event.date);
|
||||
} else {
|
||||
showLastEvents();
|
||||
}
|
||||
}
|
||||
terminal.timers.events = setInterval(showEventsInterval, 20000);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
if (events.length > 0) {
|
||||
event = events.shift();
|
||||
terminal.showEvent(event.agent + " - " + event.text + " - " + event.date);
|
||||
}
|
||||
var showEventsInterval = function () {
|
||||
if (events.length > 0) {
|
||||
event = events.shift();
|
||||
terminal.showEvent(event.agent + " - " + event.text + " - " + event.date);
|
||||
} else {
|
||||
showLastEvents();
|
||||
}
|
||||
}
|
||||
terminal.timers.events = setInterval(showEventsInterval, 20000);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
extensions_add_operation_menu_option("Matrix", 'eventos', '', "v1r1");
|
||||
|
||||
extensions_add_operation_menu_option('Matrix', 'eventos', '', 'v1r1');
|
||||
extensions_add_main_function('load_matrix_console');
|
||||
?>
|
||||
|
||||
|
|
|
@ -4,89 +4,93 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function extension_uploader_extensions()
|
||||
{
|
||||
global $config;
|
||||
|
||||
function extension_uploader_extensions() {
|
||||
global $config;
|
||||
|
||||
if (!check_acl($config['id_user'], 0, "PM")) {
|
||||
db_pandora_audit("ACL Violation",
|
||||
"Trying to access Group Management");
|
||||
require ("general/noaccess.php");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ui_print_page_header (__("Uploader extension"),
|
||||
"images/extensions.png", false, "", true, "");
|
||||
|
||||
$upload = (bool)get_parameter('upload', 0);
|
||||
$upload_enteprise = (bool)get_parameter('upload_enterprise', 0);
|
||||
|
||||
if ($upload) {
|
||||
$error = $_FILES['extension']['error'];
|
||||
|
||||
if ($error == 0) {
|
||||
$zip = new ZipArchive;
|
||||
|
||||
$tmpName = $_FILES['extension']['tmp_name'];
|
||||
|
||||
if ($upload_enteprise) {
|
||||
$pathname = $config['homedir'] . '/' . ENTERPRISE_DIR . '/' . EXTENSIONS_DIR . '/';
|
||||
}
|
||||
else {
|
||||
$pathname = $config['homedir'] . '/' . EXTENSIONS_DIR . '/';
|
||||
}
|
||||
|
||||
if ($zip->open($tmpName) === true) {
|
||||
$result = $zip->extractTo($pathname);
|
||||
}
|
||||
else {
|
||||
$result = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$result = false;
|
||||
}
|
||||
|
||||
if ($result) {
|
||||
db_pandora_audit ("Extension manager", "Upload extension " . $_FILES['extension']['name']);
|
||||
}
|
||||
|
||||
ui_print_result_message ($result, __('Success to upload extension'),
|
||||
__('Fail to upload extension'));
|
||||
}
|
||||
|
||||
$table = null;
|
||||
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox filters';
|
||||
$table->data = array();
|
||||
$table->data[0][0] = __('Upload extension');
|
||||
$table->data[0][1] = html_print_input_file('extension', true) .
|
||||
ui_print_help_tip (__("Upload the extension as a zip file."), true);
|
||||
if (enterprise_installed()) {
|
||||
$table->data[0][2] = __('Upload enterprise extension') . " " .
|
||||
html_print_checkbox('upload_enterprise', 1, false, true);
|
||||
}
|
||||
|
||||
echo "<form method='post' enctype='multipart/form-data'>";
|
||||
html_print_table($table);
|
||||
echo "<div style='text-align: right; width: " . $table->width . "'>";
|
||||
html_print_input_hidden('upload', 1);
|
||||
html_print_submit_button(__('Upload'), 'submit', false, 'class="sub add"');
|
||||
echo "</div>";
|
||||
echo "</form>";
|
||||
if (!check_acl($config['id_user'], 0, 'PM')) {
|
||||
db_pandora_audit(
|
||||
'ACL Violation',
|
||||
'Trying to access Group Management'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ui_print_page_header(
|
||||
__('Uploader extension'),
|
||||
'images/extensions.png',
|
||||
false,
|
||||
'',
|
||||
true,
|
||||
''
|
||||
);
|
||||
|
||||
$upload = (bool) get_parameter('upload', 0);
|
||||
$upload_enteprise = (bool) get_parameter('upload_enterprise', 0);
|
||||
|
||||
if ($upload) {
|
||||
$error = $_FILES['extension']['error'];
|
||||
|
||||
if ($error == 0) {
|
||||
$zip = new ZipArchive;
|
||||
|
||||
$tmpName = $_FILES['extension']['tmp_name'];
|
||||
|
||||
if ($upload_enteprise) {
|
||||
$pathname = $config['homedir'].'/'.ENTERPRISE_DIR.'/'.EXTENSIONS_DIR.'/';
|
||||
} else {
|
||||
$pathname = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
}
|
||||
|
||||
if ($zip->open($tmpName) === true) {
|
||||
$result = $zip->extractTo($pathname);
|
||||
} else {
|
||||
$result = false;
|
||||
}
|
||||
} else {
|
||||
$result = false;
|
||||
}
|
||||
|
||||
if ($result) {
|
||||
db_pandora_audit('Extension manager', 'Upload extension '.$_FILES['extension']['name']);
|
||||
}
|
||||
|
||||
ui_print_result_message(
|
||||
$result,
|
||||
__('Success to upload extension'),
|
||||
__('Fail to upload extension')
|
||||
);
|
||||
}
|
||||
|
||||
$table = null;
|
||||
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox filters';
|
||||
$table->data = [];
|
||||
$table->data[0][0] = __('Upload extension');
|
||||
$table->data[0][1] = html_print_input_file('extension', true).ui_print_help_tip(__('Upload the extension as a zip file.'), true);
|
||||
if (enterprise_installed()) {
|
||||
$table->data[0][2] = __('Upload enterprise extension').' '.html_print_checkbox('upload_enterprise', 1, false, true);
|
||||
}
|
||||
|
||||
echo "<form method='post' enctype='multipart/form-data'>";
|
||||
html_print_table($table);
|
||||
echo "<div style='text-align: right; width: ".$table->width."'>";
|
||||
html_print_input_hidden('upload', 1);
|
||||
html_print_submit_button(__('Upload'), 'submit', false, 'class="sub add"');
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
}
|
||||
|
||||
extensions_add_godmode_menu_option(__('Extension uploader'), 'PM', null, null, "v1r1");
|
||||
|
||||
extensions_add_godmode_menu_option(__('Extension uploader'), 'PM', null, null, 'v1r1');
|
||||
extensions_add_godmode_function('extension_uploader_extensions');
|
||||
?>
|
||||
|
|
|
@ -4,221 +4,238 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function pandora_files_repo_install()
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (isset($config['files_repo_installed']) && $config['files_repo_installed'] == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
function pandora_files_repo_install () {
|
||||
global $config;
|
||||
|
||||
|
||||
if (isset($config['files_repo_installed']) && $config['files_repo_installed'] == 1)
|
||||
return;
|
||||
|
||||
$full_extensions_dir = $config['homedir']."/".EXTENSIONS_DIR."/";
|
||||
$full_sql_dir = $full_extensions_dir."files_repo/sql/";
|
||||
|
||||
$file_path = '';
|
||||
switch ($config['dbtype']) {
|
||||
case "mysql":
|
||||
$file_path = $full_sql_dir . 'files_repo.sql';
|
||||
break;
|
||||
case "postgresql":
|
||||
$file_path = $full_sql_dir . 'files_repo.postgreSQL.sql';
|
||||
break;
|
||||
case "oracle":
|
||||
$file_path = $full_sql_dir . 'files_repo.oracle.sql';
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($file_path)) {
|
||||
$result = db_process_file($file_path);
|
||||
|
||||
if ($result) {
|
||||
/* Configuration values */
|
||||
$values = array(
|
||||
"token" => "files_repo_installed",
|
||||
"value" => 1
|
||||
);
|
||||
db_process_sql_insert('tconfig', $values);
|
||||
}
|
||||
}
|
||||
$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
$full_sql_dir = $full_extensions_dir.'files_repo/sql/';
|
||||
|
||||
$file_path = '';
|
||||
switch ($config['dbtype']) {
|
||||
case 'mysql':
|
||||
$file_path = $full_sql_dir.'files_repo.sql';
|
||||
break;
|
||||
|
||||
case 'postgresql':
|
||||
$file_path = $full_sql_dir.'files_repo.postgreSQL.sql';
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$file_path = $full_sql_dir.'files_repo.oracle.sql';
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($file_path)) {
|
||||
$result = db_process_file($file_path);
|
||||
|
||||
if ($result) {
|
||||
// Configuration values
|
||||
$values = [
|
||||
'token' => 'files_repo_installed',
|
||||
'value' => 1,
|
||||
];
|
||||
db_process_sql_insert('tconfig', $values);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pandora_files_repo_uninstall () {
|
||||
global $config;
|
||||
|
||||
switch ($config["dbtype"]) {
|
||||
case "mysql":
|
||||
db_process_sql('DROP TABLE `tfiles_repo_group`');
|
||||
db_process_sql('DROP TABLE `tfiles_repo`');
|
||||
db_process_sql('DELETE FROM `tconfig`
|
||||
WHERE `token` LIKE "files_repo_%"');
|
||||
break;
|
||||
case "postgresql":
|
||||
db_process_sql('DROP TABLE "tfiles_repo_group"');
|
||||
db_process_sql('DROP TABLE "tfiles_repo"');
|
||||
db_process_sql('DELETE FROM "tconfig"
|
||||
WHERE "token" LIKE \'files_repo_%\'');
|
||||
break;
|
||||
case "oracle":
|
||||
db_process_sql('DROP TRIGGER "tfiles_repo_group_inc"');
|
||||
db_process_sql('DROP SEQUENCE "tfiles_repo_group_s"');
|
||||
db_process_sql('DROP TABLE "tfiles_repo_group"');
|
||||
db_process_sql('DROP TRIGGER "tfiles_repo_inc"');
|
||||
db_process_sql('DROP SEQUENCE "tfiles_repo_s"');
|
||||
db_process_sql('DROP TABLE "tfiles_repo"');
|
||||
db_process_sql('DELETE FROM tconfig
|
||||
WHERE token LIKE \'files_repo_%\'');
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($config['attachment_store']))
|
||||
delete_dir($config['attachment_store']."/files_repo");
|
||||
function pandora_files_repo_uninstall()
|
||||
{
|
||||
global $config;
|
||||
|
||||
switch ($config['dbtype']) {
|
||||
case 'mysql':
|
||||
db_process_sql('DROP TABLE `tfiles_repo_group`');
|
||||
db_process_sql('DROP TABLE `tfiles_repo`');
|
||||
db_process_sql(
|
||||
'DELETE FROM `tconfig`
|
||||
WHERE `token` LIKE "files_repo_%"'
|
||||
);
|
||||
break;
|
||||
|
||||
case 'postgresql':
|
||||
db_process_sql('DROP TABLE "tfiles_repo_group"');
|
||||
db_process_sql('DROP TABLE "tfiles_repo"');
|
||||
db_process_sql(
|
||||
'DELETE FROM "tconfig"
|
||||
WHERE "token" LIKE \'files_repo_%\''
|
||||
);
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
db_process_sql('DROP TRIGGER "tfiles_repo_group_inc"');
|
||||
db_process_sql('DROP SEQUENCE "tfiles_repo_group_s"');
|
||||
db_process_sql('DROP TABLE "tfiles_repo_group"');
|
||||
db_process_sql('DROP TRIGGER "tfiles_repo_inc"');
|
||||
db_process_sql('DROP SEQUENCE "tfiles_repo_s"');
|
||||
db_process_sql('DROP TABLE "tfiles_repo"');
|
||||
db_process_sql(
|
||||
'DELETE FROM tconfig
|
||||
WHERE token LIKE \'files_repo_%\''
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($config['attachment_store'])) {
|
||||
delete_dir($config['attachment_store'].'/files_repo');
|
||||
}
|
||||
}
|
||||
|
||||
function pandora_files_repo_godmode () {
|
||||
global $config;
|
||||
|
||||
if (!isset($config['files_repo_installed']) || !$config['files_repo_installed']) {
|
||||
ui_print_error_message(__('Extension not installed'));
|
||||
}
|
||||
|
||||
// ACL Check
|
||||
check_login ();
|
||||
if (! check_acl ($config['id_user'], 0, "PM")) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access to Files repository");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
// Header tabs
|
||||
$godmode['text'] = '<a href="index.php?sec=godmode/extensions&sec2=extensions/files_repo">'
|
||||
. html_print_image ("images/setup.png", true, array ("title" => __('Administration view')))
|
||||
. "</a>";
|
||||
$godmode['godmode'] = 1;
|
||||
$godmode['active'] = 1;
|
||||
|
||||
$operation['text'] = '<a href="index.php?sec=extensions&sec2=extensions/files_repo">'
|
||||
. html_print_image ("images/operation.png", true, array ("title" => __('Operation view')))
|
||||
. "</a>";
|
||||
$operation['operation'] = 1;
|
||||
|
||||
$onheader = array('godmode' => $godmode, 'operation' => $operation);
|
||||
// Header
|
||||
ui_print_page_header (__("Files repository manager"), "images/extensions.png", false, "", true, $onheader);
|
||||
|
||||
$full_extensions_dir = $config['homedir']."/".EXTENSIONS_DIR."/";
|
||||
require_once ($full_extensions_dir . "files_repo/functions_files_repo.php");
|
||||
|
||||
// Directory files_repo check
|
||||
if (!files_repo_check_directory(true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$server_content_length = 0;
|
||||
if (isset($_SERVER['CONTENT_LENGTH']))
|
||||
$server_content_length = $_SERVER['CONTENT_LENGTH'];
|
||||
|
||||
// Check for an anoying error that causes the $_POST and $_FILES arrays
|
||||
// were empty if the file is larger than the post_max_size
|
||||
if (intval($server_content_length) > 0 && empty($_POST)) {
|
||||
ui_print_error_message(__('The file exceeds the maximum size'));
|
||||
}
|
||||
|
||||
// GET and POST parameters
|
||||
$file_id = (int) get_parameter ("file_id");
|
||||
$add_file = (bool) get_parameter ("add_file");
|
||||
$update_file = (bool) get_parameter ("update_file");
|
||||
$delete_file = (bool) get_parameter ("delete");
|
||||
|
||||
// File add or update
|
||||
if ( $add_file || ($update_file && $file_id > 0) ) {
|
||||
$groups = get_parameter ("groups", array());
|
||||
$public = (bool) get_parameter ("public");
|
||||
$description = io_safe_output((string) get_parameter ("description"));
|
||||
if (mb_strlen($description, "UTF-8") > 200) {
|
||||
$description = mb_substr($description, 0, 200, "UTF-8");
|
||||
}
|
||||
$description = io_safe_input($description);
|
||||
|
||||
if ($add_file) {
|
||||
$result = files_repo_add_file("upfile", $description, $groups, $public);
|
||||
} elseif ($update_file) {
|
||||
$result = files_repo_update_file($file_id, $description, $groups, $public);
|
||||
$file_id = 0;
|
||||
}
|
||||
if ($result['status'] == false) {
|
||||
ui_print_error_message($result['message']);
|
||||
}
|
||||
}
|
||||
// File delete
|
||||
if ($delete_file && $file_id > 0) {
|
||||
$result = files_repo_delete_file($file_id);
|
||||
if ($result !== -1) {
|
||||
ui_print_result_message($result, __('Successfully deleted'), __('Could not be deleted'));
|
||||
}
|
||||
$file_id = 0;
|
||||
}
|
||||
|
||||
// FORM
|
||||
require ($full_extensions_dir."files_repo/files_repo_form.php");
|
||||
if (!$file_id) {
|
||||
// LIST
|
||||
$manage = true;
|
||||
require ($full_extensions_dir."files_repo/files_repo_list.php");
|
||||
}
|
||||
|
||||
function pandora_files_repo_godmode()
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (!isset($config['files_repo_installed']) || !$config['files_repo_installed']) {
|
||||
ui_print_error_message(__('Extension not installed'));
|
||||
}
|
||||
|
||||
// ACL Check
|
||||
check_login();
|
||||
if (! check_acl($config['id_user'], 0, 'PM')) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access to Files repository');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
// Header tabs
|
||||
$godmode['text'] = '<a href="index.php?sec=godmode/extensions&sec2=extensions/files_repo">'.html_print_image('images/setup.png', true, ['title' => __('Administration view')]).'</a>';
|
||||
$godmode['godmode'] = 1;
|
||||
$godmode['active'] = 1;
|
||||
|
||||
$operation['text'] = '<a href="index.php?sec=extensions&sec2=extensions/files_repo">'.html_print_image('images/operation.png', true, ['title' => __('Operation view')]).'</a>';
|
||||
$operation['operation'] = 1;
|
||||
|
||||
$onheader = [
|
||||
'godmode' => $godmode,
|
||||
'operation' => $operation,
|
||||
];
|
||||
// Header
|
||||
ui_print_page_header(__('Files repository manager'), 'images/extensions.png', false, '', true, $onheader);
|
||||
|
||||
$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
include_once $full_extensions_dir.'files_repo/functions_files_repo.php';
|
||||
|
||||
// Directory files_repo check
|
||||
if (!files_repo_check_directory(true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$server_content_length = 0;
|
||||
if (isset($_SERVER['CONTENT_LENGTH'])) {
|
||||
$server_content_length = $_SERVER['CONTENT_LENGTH'];
|
||||
}
|
||||
|
||||
// Check for an anoying error that causes the $_POST and $_FILES arrays
|
||||
// were empty if the file is larger than the post_max_size
|
||||
if (intval($server_content_length) > 0 && empty($_POST)) {
|
||||
ui_print_error_message(__('The file exceeds the maximum size'));
|
||||
}
|
||||
|
||||
// GET and POST parameters
|
||||
$file_id = (int) get_parameter('file_id');
|
||||
$add_file = (bool) get_parameter('add_file');
|
||||
$update_file = (bool) get_parameter('update_file');
|
||||
$delete_file = (bool) get_parameter('delete');
|
||||
|
||||
// File add or update
|
||||
if ($add_file || ($update_file && $file_id > 0)) {
|
||||
$groups = get_parameter('groups', []);
|
||||
$public = (bool) get_parameter('public');
|
||||
$description = io_safe_output((string) get_parameter('description'));
|
||||
if (mb_strlen($description, 'UTF-8') > 200) {
|
||||
$description = mb_substr($description, 0, 200, 'UTF-8');
|
||||
}
|
||||
|
||||
$description = io_safe_input($description);
|
||||
|
||||
if ($add_file) {
|
||||
$result = files_repo_add_file('upfile', $description, $groups, $public);
|
||||
} else if ($update_file) {
|
||||
$result = files_repo_update_file($file_id, $description, $groups, $public);
|
||||
$file_id = 0;
|
||||
}
|
||||
|
||||
if ($result['status'] == false) {
|
||||
ui_print_error_message($result['message']);
|
||||
}
|
||||
}
|
||||
|
||||
// File delete
|
||||
if ($delete_file && $file_id > 0) {
|
||||
$result = files_repo_delete_file($file_id);
|
||||
if ($result !== -1) {
|
||||
ui_print_result_message($result, __('Successfully deleted'), __('Could not be deleted'));
|
||||
}
|
||||
|
||||
$file_id = 0;
|
||||
}
|
||||
|
||||
// FORM
|
||||
include $full_extensions_dir.'files_repo/files_repo_form.php';
|
||||
if (!$file_id) {
|
||||
// LIST
|
||||
$manage = true;
|
||||
include $full_extensions_dir.'files_repo/files_repo_list.php';
|
||||
}
|
||||
}
|
||||
|
||||
function pandora_files_repo_operation () {
|
||||
global $config;
|
||||
|
||||
// Header tabs
|
||||
$onheader = array();
|
||||
if (check_acl($config['id_user'], 0, "PM")) {
|
||||
$godmode['text'] = '<a href="index.php?sec=godmode/extensions&sec2=extensions/files_repo">'
|
||||
. html_print_image ("images/setup.png", true, array ("title" => __('Administration view')))
|
||||
. "</a>";
|
||||
$godmode['godmode'] = 1;
|
||||
|
||||
$operation['text'] = '<a href="index.php?sec=extensions&sec2=extensions/files_repo">'
|
||||
. html_print_image ("images/operation.png", true, array ("title" => __('Operation view')))
|
||||
. "</a>";
|
||||
$operation['operation'] = 1;
|
||||
$operation['active'] = 1;
|
||||
|
||||
$onheader = array('godmode' => $godmode, 'operation' => $operation);
|
||||
}
|
||||
// Header
|
||||
ui_print_page_header (__("Files repository"), "images/extensions.png", false, "", false, $onheader);
|
||||
|
||||
$full_extensions_dir = $config['homedir']."/".EXTENSIONS_DIR."/";
|
||||
require_once ($full_extensions_dir."files_repo/functions_files_repo.php");
|
||||
|
||||
// Directory files_repo check
|
||||
if (!files_repo_check_directory(true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// LIST
|
||||
$full_extensions_dir = $config['homedir']."/".EXTENSIONS_DIR."/";
|
||||
|
||||
require ($full_extensions_dir . "files_repo/files_repo_list.php");
|
||||
|
||||
function pandora_files_repo_operation()
|
||||
{
|
||||
global $config;
|
||||
|
||||
// Header tabs
|
||||
$onheader = [];
|
||||
if (check_acl($config['id_user'], 0, 'PM')) {
|
||||
$godmode['text'] = '<a href="index.php?sec=godmode/extensions&sec2=extensions/files_repo">'.html_print_image('images/setup.png', true, ['title' => __('Administration view')]).'</a>';
|
||||
$godmode['godmode'] = 1;
|
||||
|
||||
$operation['text'] = '<a href="index.php?sec=extensions&sec2=extensions/files_repo">'.html_print_image('images/operation.png', true, ['title' => __('Operation view')]).'</a>';
|
||||
$operation['operation'] = 1;
|
||||
$operation['active'] = 1;
|
||||
|
||||
$onheader = [
|
||||
'godmode' => $godmode,
|
||||
'operation' => $operation,
|
||||
];
|
||||
}
|
||||
|
||||
// Header
|
||||
ui_print_page_header(__('Files repository'), 'images/extensions.png', false, '', false, $onheader);
|
||||
|
||||
$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
include_once $full_extensions_dir.'files_repo/functions_files_repo.php';
|
||||
|
||||
// Directory files_repo check
|
||||
if (!files_repo_check_directory(true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// LIST
|
||||
$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
|
||||
include $full_extensions_dir.'files_repo/files_repo_list.php';
|
||||
}
|
||||
|
||||
extensions_add_operation_menu_option(__('Files repository'), null, null, "v1r1");
|
||||
|
||||
extensions_add_operation_menu_option(__('Files repository'), null, null, 'v1r1');
|
||||
extensions_add_main_function('pandora_files_repo_operation');
|
||||
extensions_add_godmode_menu_option(__('Files repository manager'), 'PM', null, null, "v1r1");
|
||||
extensions_add_godmode_menu_option(__('Files repository manager'), 'PM', null, null, 'v1r1');
|
||||
extensions_add_godmode_function('pandora_files_repo_godmode');
|
||||
|
||||
//pandora_files_repo_uninstall();
|
||||
// pandora_files_repo_uninstall();
|
||||
pandora_files_repo_install();
|
||||
|
||||
?>
|
||||
|
|
|
@ -4,71 +4,69 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
|
||||
global $config;
|
||||
|
||||
$full_extensions_dir = $config['homedir']."/".EXTENSIONS_DIR."/";
|
||||
require_once ($full_extensions_dir."files_repo/functions_files_repo.php");
|
||||
$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
require_once $full_extensions_dir.'files_repo/functions_files_repo.php';
|
||||
|
||||
$file = array();
|
||||
$file = [];
|
||||
$file['name'] = '';
|
||||
$file['description'] = '';
|
||||
$file['hash'] = '';
|
||||
$file['groups'] = array();
|
||||
$file['groups'] = [];
|
||||
if (isset($file_id) && $file_id > 0) {
|
||||
$file = files_repo_get_files(array('id' => $file_id));
|
||||
if (empty($file)) {
|
||||
$file_id = 0;
|
||||
} else {
|
||||
$file = $file[$file_id];
|
||||
}
|
||||
$file = files_repo_get_files(['id' => $file_id]);
|
||||
if (empty($file)) {
|
||||
$file_id = 0;
|
||||
} else {
|
||||
$file = $file[$file_id];
|
||||
}
|
||||
}
|
||||
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox filters';
|
||||
$table->style = array();
|
||||
$table->style[0] = "font-weight: bold;";
|
||||
$table->style[2] = "text-align: center;";
|
||||
$table->colspan = array();
|
||||
$table->data = array();
|
||||
$table->style = [];
|
||||
$table->style[0] = 'font-weight: bold;';
|
||||
$table->style[2] = 'text-align: center;';
|
||||
$table->colspan = [];
|
||||
$table->data = [];
|
||||
|
||||
// GROUPS
|
||||
$groups = groups_get_all();
|
||||
// Add the All group to the beginning to be always the first
|
||||
// Use this instead array_unshift to keep the array keys
|
||||
$groups = array(0 => __('All')) + $groups;
|
||||
$html = "";
|
||||
$style = "style=\"padding: 2px 10px; display: inline-block;\"";
|
||||
$groups = ([0 => __('All')] + $groups);
|
||||
$html = '';
|
||||
$style = 'style="padding: 2px 10px; display: inline-block;"';
|
||||
foreach ($groups as $id => $name) {
|
||||
$checked = in_array($id, $file['groups']);
|
||||
$all_checked = false;
|
||||
if ($id === 0) {
|
||||
$checkbox = html_print_checkbox_extended ('groups[]', $id, $checked, false, '', 'class="chkb_all"', true);
|
||||
$all_checked = $checked;
|
||||
} else {
|
||||
$checkbox = html_print_checkbox_extended ('groups[]', $id, $checked, $all_checked, '', 'class="chkb_group"', true);
|
||||
}
|
||||
$html .= "<div $style>$name $checkbox</div>";
|
||||
$checked = in_array($id, $file['groups']);
|
||||
$all_checked = false;
|
||||
if ($id === 0) {
|
||||
$checkbox = html_print_checkbox_extended('groups[]', $id, $checked, false, '', 'class="chkb_all"', true);
|
||||
$all_checked = $checked;
|
||||
} else {
|
||||
$checkbox = html_print_checkbox_extended('groups[]', $id, $checked, $all_checked, '', 'class="chkb_group"', true);
|
||||
}
|
||||
|
||||
$html .= "<div $style>$name $checkbox</div>";
|
||||
}
|
||||
$row = array();
|
||||
|
||||
$row = [];
|
||||
$row[0] = __('Groups');
|
||||
$row[1] = $html;
|
||||
$table->data[] = $row;
|
||||
$table->colspan[][1] = 3;
|
||||
|
||||
// DESCRIPTION
|
||||
$row = array();
|
||||
$row = [];
|
||||
$row[0] = __('Description');
|
||||
$row[0] .= ui_print_help_tip(__('Only 200 characters are permitted'), true);
|
||||
$row[1] = html_print_textarea('description', 3, 20, $file['description'], 'style="min-height: 40px; max-height: 40px; width: 98%;"', true);
|
||||
|
@ -76,54 +74,55 @@ $table->data[] = $row;
|
|||
$table->colspan[][1] = 3;
|
||||
|
||||
// FILE and SUBMIT BUTTON
|
||||
$row = array();
|
||||
$row = [];
|
||||
// Public checkbox
|
||||
$checkbox = html_print_checkbox('public', 1, (bool)!empty($file['hash']), true);
|
||||
$style = "style=\"padding: 2px 10px; display: inline-block;\"";
|
||||
$checkbox = html_print_checkbox('public', 1, (bool) !empty($file['hash']), true);
|
||||
$style = 'style="padding: 2px 10px; display: inline-block;"';
|
||||
|
||||
$row[0] = __('File');
|
||||
if ($file_id > 0) {
|
||||
$row[1] = $file['name'];
|
||||
$row[2] = "<div $style>".__('Public link')." $checkbox</div>";
|
||||
$row[3] = html_print_submit_button(__('Update'), 'submit', false, 'class="sub upd"', true);
|
||||
$row[3] .= html_print_input_hidden('update_file', 1, true);
|
||||
$row[3] .= html_print_input_hidden('file_id', $file_id, true);
|
||||
$row[1] = $file['name'];
|
||||
$row[2] = "<div $style>".__('Public link')." $checkbox</div>";
|
||||
$row[3] = html_print_submit_button(__('Update'), 'submit', false, 'class="sub upd"', true);
|
||||
$row[3] .= html_print_input_hidden('update_file', 1, true);
|
||||
$row[3] .= html_print_input_hidden('file_id', $file_id, true);
|
||||
} else {
|
||||
$row[1] = html_print_input_file('upfile', true);
|
||||
$row[2] = "<div $style>".__('Public link')." $checkbox</div>";
|
||||
$row[3] = html_print_submit_button(__('Add'), 'submit', false, 'class="sub add"', true);
|
||||
$row[3] .= html_print_input_hidden('add_file', 1, true);
|
||||
$row[1] = html_print_input_file('upfile', true);
|
||||
$row[2] = "<div $style>".__('Public link')." $checkbox</div>";
|
||||
$row[3] = html_print_submit_button(__('Add'), 'submit', false, 'class="sub add"', true);
|
||||
$row[3] .= html_print_input_hidden('add_file', 1, true);
|
||||
}
|
||||
|
||||
$table->data[] = $row;
|
||||
$table->colspan[][1] = 1;
|
||||
|
||||
$url = ui_get_full_url("index.php?sec=godmode/extensions&sec2=extensions/files_repo");
|
||||
$url = ui_get_full_url('index.php?sec=godmode/extensions&sec2=extensions/files_repo');
|
||||
echo "<form method='post' action='$url' enctype='multipart/form-data'>";
|
||||
html_print_table($table);
|
||||
echo "</form>";
|
||||
echo '</form>';
|
||||
|
||||
?>
|
||||
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
$(document).ready (function () {
|
||||
$(document).ready (function () {
|
||||
|
||||
var all_enabled = $(".chkb_all").prop("checked");
|
||||
if (all_enabled) {
|
||||
$(".chkb_group").prop("checked", false);
|
||||
$(".chkb_group").prop("disabled", true);
|
||||
}
|
||||
var all_enabled = $(".chkb_all").prop("checked");
|
||||
if (all_enabled) {
|
||||
$(".chkb_group").prop("checked", false);
|
||||
$(".chkb_group").prop("disabled", true);
|
||||
}
|
||||
|
||||
$(".chkb_all").click(function () {
|
||||
all_enabled = $(".chkb_all").prop("checked");
|
||||
if (all_enabled) {
|
||||
$(".chkb_group").prop("checked", false);
|
||||
$(".chkb_group").prop("disabled", true);
|
||||
} else {
|
||||
$(".chkb_group").prop("disabled", false);
|
||||
}
|
||||
});
|
||||
$(".chkb_all").click(function () {
|
||||
all_enabled = $(".chkb_all").prop("checked");
|
||||
if (all_enabled) {
|
||||
$(".chkb_group").prop("checked", false);
|
||||
$(".chkb_group").prop("disabled", true);
|
||||
} else {
|
||||
$(".chkb_group").prop("disabled", false);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
|
@ -4,18 +4,14 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2010 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
|
||||
require_once ("../../include/config.php");
|
||||
require_once '../../include/config.php';
|
||||
|
||||
$file_hash = (string) get_parameter('file');
|
||||
|
||||
|
@ -25,46 +21,48 @@ $check_get = (count($_GET) === 1) ? true : false;
|
|||
$check_post = (count($_POST) === 0) ? true : false;
|
||||
// Only allow the parameter 'file'
|
||||
$check_parameter = (!empty($file_hash)) ? true : false;
|
||||
$check_string = (preg_match("/^[0-9a-zA-Z]{8}$/", $file_hash) === 1) ? true : false;
|
||||
$check_string = (preg_match('/^[0-9a-zA-Z]{8}$/', $file_hash) === 1) ? true : false;
|
||||
|
||||
$checks = ($check_request && $check_get && $check_post && $check_parameter && $check_string);
|
||||
if (!$checks) {
|
||||
throw_error(15); // ERROR
|
||||
throw_error(15);
|
||||
// ERROR
|
||||
}
|
||||
|
||||
// Get the db file row
|
||||
$file = db_get_row_filter("tfiles_repo", array('hash' => $file_hash));
|
||||
$file = db_get_row_filter('tfiles_repo', ['hash' => $file_hash]);
|
||||
if (!$file) {
|
||||
throw_error(10); // ERROR
|
||||
throw_error(10);
|
||||
// ERROR
|
||||
}
|
||||
|
||||
// Case sensitive check
|
||||
$check_hash = ($file['hash'] == $file_hash) ? true : false;
|
||||
if (!$check_hash) {
|
||||
throw_error(10); // ERROR
|
||||
throw_error(10);
|
||||
// ERROR
|
||||
}
|
||||
|
||||
// Get the location
|
||||
$files_repo_path = io_safe_output($config['attachment_store'])."/files_repo";
|
||||
$location = $files_repo_path."/".$file['id']."_".$file['name'];
|
||||
$files_repo_path = io_safe_output($config['attachment_store']).'/files_repo';
|
||||
$location = $files_repo_path.'/'.$file['id'].'_'.$file['name'];
|
||||
if (!file_exists($location) || !is_readable($location) || !is_file($location)) {
|
||||
throw_error(5); // ERROR
|
||||
throw_error(5);
|
||||
// ERROR
|
||||
}
|
||||
|
||||
// All checks are fine. Download the file!
|
||||
header('Content-type: aplication/octet-stream;');
|
||||
header("Content-Length: " . filesize($location));
|
||||
header('Content-Disposition: attachment; filename="' . $file['name'] . '"');
|
||||
header('Content-Length: '.filesize($location));
|
||||
header('Content-Disposition: attachment; filename="'.$file['name'].'"');
|
||||
readfile($location);
|
||||
///
|
||||
|
||||
function throw_error ($time = 15) {
|
||||
sleep ($time);
|
||||
|
||||
$styleError = "background:url(\"../images/err.png\") no-repeat scroll 0 0 transparent; padding:4px 1px 6px 30px; color:#CC0000;";
|
||||
echo "<h3 style='" . $styleError . "'>" .
|
||||
__('Unreliable petition') . ". " . __('Please contact the administrator') .
|
||||
"</h3>";
|
||||
exit;
|
||||
function throw_error($time=15)
|
||||
{
|
||||
sleep($time);
|
||||
|
||||
$styleError = 'background:url("../images/err.png") no-repeat scroll 0 0 transparent; padding:4px 1px 6px 30px; color:#CC0000;';
|
||||
echo "<h3 style='".$styleError."'>".__('Unreliable petition').'. '.__('Please contact the administrator').'</h3>';
|
||||
exit;
|
||||
}
|
||||
|
||||
?>
|
|
@ -4,115 +4,116 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
|
||||
global $config;
|
||||
|
||||
$full_extensions_dir = $config['homedir'] . "/" . EXTENSIONS_DIR . "/";
|
||||
require_once ($full_extensions_dir .
|
||||
"files_repo/functions_files_repo.php");
|
||||
$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/';
|
||||
require_once $full_extensions_dir.'files_repo/functions_files_repo.php';
|
||||
|
||||
$offset = (int) get_parameter('offset');
|
||||
$filter = array();
|
||||
$filter = [];
|
||||
$filter['limit'] = $config['block_size'];
|
||||
$filter['offset'] = $offset;
|
||||
$filter['order'] = array('field' => 'id', 'order' => 'DESC');
|
||||
$filter['order'] = [
|
||||
'field' => 'id',
|
||||
'order' => 'DESC',
|
||||
];
|
||||
|
||||
$files = files_repo_get_files($filter);
|
||||
|
||||
|
||||
if (!empty($files)) {
|
||||
|
||||
if (!isset($manage)) {
|
||||
$manage = false;
|
||||
}
|
||||
|
||||
// Pagination
|
||||
if ($manage) {
|
||||
$url = ui_get_full_url("index.php?sec=godmode/extensions&sec2=extensions/files_repo");
|
||||
}
|
||||
else {
|
||||
$url = ui_get_full_url("index.php?sec=extensions&sec2=extensions/files_repo");
|
||||
}
|
||||
$total_files = files_repo_get_files(false, true);
|
||||
ui_pagination($total_files, $url, $offset);
|
||||
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox data';
|
||||
$table->style = array();
|
||||
$table->style[1] = "max-width: 200px;";
|
||||
$table->style[2] = "text-align: center;";
|
||||
$table->style[3] = "text-align: center;";
|
||||
$table->style[4] = "text-align: center;";
|
||||
$table->head = array();
|
||||
$table->head[0] = __("Name");
|
||||
$table->head[1] = __("Description");
|
||||
$table->head[2] = __("Size");
|
||||
$table->head[3] = __("Last modification");
|
||||
$table->head[4] = "";
|
||||
$table->data = array();
|
||||
|
||||
foreach ($files as $file_id => $file) {
|
||||
$data = array();
|
||||
|
||||
// Prepare the filename for the get_file.php script
|
||||
$document_root = str_replace("\\", "/", io_safe_output($_SERVER['DOCUMENT_ROOT']));
|
||||
$file['location'] = str_replace("\\", "/", io_safe_output($file['location']));
|
||||
$relative_path = str_replace($document_root, '', $file['location']);
|
||||
$file_path = base64_encode($relative_path);
|
||||
$hash = md5($relative_path . $config['dbpass']);
|
||||
$url = ui_get_full_url("include/get_file.php?file=$file_path&hash=$hash");
|
||||
$date_format = ($config['date_format']) ? io_safe_output($config['date_format']) : 'F j, Y - H:m';
|
||||
|
||||
$data[0] = "<a href=\"$url\" target=\"_blank\">" . $file['name'] . "</a>"; // Name
|
||||
$data[1] = ui_print_truncate_text($file['description'], 'description', true, true); // Description
|
||||
$data[2] = ui_format_filesize($file['size']); // Size
|
||||
$data[3] = date($date_format, $file['mtime']); // Last modification
|
||||
|
||||
// Public URL
|
||||
$data[4] = "";
|
||||
if (!empty($file['hash'])) {
|
||||
$public_url = ui_get_full_url(EXTENSIONS_DIR . "/files_repo/files_repo_get_file.php?file=" . $file['hash']);
|
||||
$message = __('Copy to clipboard') . ": Ctrl+C -> Enter";
|
||||
$action = "window.prompt('$message', '$public_url');";
|
||||
$data[4] .= "<a href=\"javascript:;\" onclick=\"$action\">";
|
||||
$data[4] .= html_print_image('images/world.png', true, array('title' => __('Public link'))); // Public link image
|
||||
$data[4] .= "</a> ";
|
||||
}
|
||||
|
||||
$data[4] .= "<a href=\"$url\" target=\"_blank\">";
|
||||
$data[4] .= html_print_image('images/download.png', true, array('title' => __('Download'))); // Download image
|
||||
$data[4] .= "</a>";
|
||||
|
||||
if ($manage) {
|
||||
|
||||
$config_url = ui_get_full_url("index.php?sec=godmode/extensions&sec2=extensions/files_repo&file_id=$file_id");
|
||||
$data[4] .= " <a href=\"$config_url\">";
|
||||
$data[4] .= html_print_image('images/config.png', true, array('title' => __('Edit'))); // Edit image
|
||||
$data[4] .= "</a>";
|
||||
|
||||
$delete_url = ui_get_full_url("index.php?sec=godmode/extensions&sec2=extensions/files_repo&delete=1&file_id=$file_id");
|
||||
$data[4] .= " <a href=\"$delete_url\" onClick=\"if (!confirm('".__('Are you sure?')."')) return false;\">";
|
||||
$data[4] .= html_print_image('images/cross.png', true, array('title' => __('Delete'))); // Delete image
|
||||
$data[4] .= "</a>";
|
||||
}
|
||||
$table->data[] = $data;
|
||||
}
|
||||
html_print_table($table);
|
||||
|
||||
}
|
||||
else {
|
||||
ui_print_info_message(__('No items'));
|
||||
}
|
||||
if (!isset($manage)) {
|
||||
$manage = false;
|
||||
}
|
||||
|
||||
?>
|
||||
// Pagination
|
||||
if ($manage) {
|
||||
$url = ui_get_full_url('index.php?sec=godmode/extensions&sec2=extensions/files_repo');
|
||||
} else {
|
||||
$url = ui_get_full_url('index.php?sec=extensions&sec2=extensions/files_repo');
|
||||
}
|
||||
|
||||
$total_files = files_repo_get_files(false, true);
|
||||
ui_pagination($total_files, $url, $offset);
|
||||
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox data';
|
||||
$table->style = [];
|
||||
$table->style[1] = 'max-width: 200px;';
|
||||
$table->style[2] = 'text-align: center;';
|
||||
$table->style[3] = 'text-align: center;';
|
||||
$table->style[4] = 'text-align: center;';
|
||||
$table->head = [];
|
||||
$table->head[0] = __('Name');
|
||||
$table->head[1] = __('Description');
|
||||
$table->head[2] = __('Size');
|
||||
$table->head[3] = __('Last modification');
|
||||
$table->head[4] = '';
|
||||
$table->data = [];
|
||||
|
||||
foreach ($files as $file_id => $file) {
|
||||
$data = [];
|
||||
|
||||
// Prepare the filename for the get_file.php script
|
||||
$document_root = str_replace('\\', '/', io_safe_output($_SERVER['DOCUMENT_ROOT']));
|
||||
$file['location'] = str_replace('\\', '/', io_safe_output($file['location']));
|
||||
$relative_path = str_replace($document_root, '', $file['location']);
|
||||
$file_path = base64_encode($relative_path);
|
||||
$hash = md5($relative_path.$config['dbpass']);
|
||||
$url = ui_get_full_url("include/get_file.php?file=$file_path&hash=$hash");
|
||||
$date_format = ($config['date_format']) ? io_safe_output($config['date_format']) : 'F j, Y - H:m';
|
||||
|
||||
$data[0] = "<a href=\"$url\" target=\"_blank\">".$file['name'].'</a>';
|
||||
// Name
|
||||
$data[1] = ui_print_truncate_text($file['description'], 'description', true, true);
|
||||
// Description
|
||||
$data[2] = ui_format_filesize($file['size']);
|
||||
// Size
|
||||
$data[3] = date($date_format, $file['mtime']);
|
||||
// Last modification
|
||||
// Public URL
|
||||
$data[4] = '';
|
||||
if (!empty($file['hash'])) {
|
||||
$public_url = ui_get_full_url(EXTENSIONS_DIR.'/files_repo/files_repo_get_file.php?file='.$file['hash']);
|
||||
$message = __('Copy to clipboard').': Ctrl+C -> Enter';
|
||||
$action = "window.prompt('$message', '$public_url');";
|
||||
$data[4] .= "<a href=\"javascript:;\" onclick=\"$action\">";
|
||||
$data[4] .= html_print_image('images/world.png', true, ['title' => __('Public link')]);
|
||||
// Public link image
|
||||
$data[4] .= '</a> ';
|
||||
}
|
||||
|
||||
$data[4] .= "<a href=\"$url\" target=\"_blank\">";
|
||||
$data[4] .= html_print_image('images/download.png', true, ['title' => __('Download')]);
|
||||
// Download image
|
||||
$data[4] .= '</a>';
|
||||
|
||||
if ($manage) {
|
||||
$config_url = ui_get_full_url("index.php?sec=godmode/extensions&sec2=extensions/files_repo&file_id=$file_id");
|
||||
$data[4] .= " <a href=\"$config_url\">";
|
||||
$data[4] .= html_print_image('images/config.png', true, ['title' => __('Edit')]);
|
||||
// Edit image
|
||||
$data[4] .= '</a>';
|
||||
|
||||
$delete_url = ui_get_full_url("index.php?sec=godmode/extensions&sec2=extensions/files_repo&delete=1&file_id=$file_id");
|
||||
$data[4] .= " <a href=\"$delete_url\" onClick=\"if (!confirm('".__('Are you sure?')."')) return false;\">";
|
||||
$data[4] .= html_print_image('images/cross.png', true, ['title' => __('Delete')]);
|
||||
// Delete image
|
||||
$data[4] .= '</a>';
|
||||
}
|
||||
|
||||
$table->data[] = $data;
|
||||
}
|
||||
|
||||
html_print_table($table);
|
||||
} else {
|
||||
ui_print_info_message(__('No items'));
|
||||
}
|
||||
|
|
|
@ -4,300 +4,321 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function files_repo_check_directory($print_messages=false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$attachment_path = io_safe_output($config['attachment_store']);
|
||||
$files_repo_path = $attachment_path.'/files_repo';
|
||||
|
||||
function files_repo_check_directory ($print_messages = false) {
|
||||
global $config;
|
||||
$result = false;
|
||||
$messages = '';
|
||||
|
||||
$attachment_path = io_safe_output($config['attachment_store']);
|
||||
$files_repo_path = $attachment_path."/files_repo";
|
||||
// attachment/ check
|
||||
if (!is_writable($attachment_path)) {
|
||||
$messages .= ui_print_error_message(
|
||||
[
|
||||
'message' => __('Attachment directory is not writable by HTTP Server').'</h3>'.'<p>'.sprinf(__('Please check that the web server has write rights on the %s directory'), $attachment_path),
|
||||
'no_close' => true,
|
||||
'force_style' => 'color: #000000 !important',
|
||||
],
|
||||
'',
|
||||
true
|
||||
);
|
||||
} else {
|
||||
// attachment/agent_packages/ check
|
||||
if (!file_exists($files_repo_path) || !is_writable($files_repo_path)) {
|
||||
// Create the directoty if not exist
|
||||
if (!file_exists($files_repo_path)) {
|
||||
mkdir($files_repo_path);
|
||||
}
|
||||
|
||||
$result = false;
|
||||
$messages = "";
|
||||
if (!is_writable($files_repo_path)) {
|
||||
$messages .= ui_print_error_message(
|
||||
[
|
||||
'message' => __('Attachment directory is not writable by HTTP Server').'</h3>'.'<p>'.sprintf(__('Please check that the web server has write rights on the %s directory'), $attachment_path),
|
||||
'no_close' => true,
|
||||
'force_style' => 'color: #000000 !important',
|
||||
],
|
||||
'',
|
||||
true
|
||||
);
|
||||
} else {
|
||||
$result = true;
|
||||
}
|
||||
} else {
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
|
||||
// attachment/ check
|
||||
if (!is_writable($attachment_path)) {
|
||||
$messages .= ui_print_error_message(array('message' => __('Attachment directory is not writable by HTTP Server')
|
||||
.'</h3>'.'<p>'.sprinf(__('Please check that the web server has write rights on the %s directory'), $attachment_path),
|
||||
'no_close' => true, 'force_style' => 'color: #000000 !important'), '', true);
|
||||
} else {
|
||||
// attachment/agent_packages/ check
|
||||
if (!file_exists($files_repo_path) || !is_writable($files_repo_path)) {
|
||||
// Create the directoty if not exist
|
||||
if (!file_exists($files_repo_path)) {
|
||||
mkdir($files_repo_path);
|
||||
}
|
||||
if (!is_writable($files_repo_path)) {
|
||||
$messages .= ui_print_error_message(array('message' => __('Attachment directory is not writable by HTTP Server')
|
||||
.'</h3>'.'<p>'.sprintf(__('Please check that the web server has write rights on the %s directory'), $attachment_path),
|
||||
'no_close' => true, 'force_style' => 'color: #000000 !important'), '', true);
|
||||
} else {
|
||||
$result = true;
|
||||
}
|
||||
} else {
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
if ($print_messages) {
|
||||
echo $messages;
|
||||
}
|
||||
|
||||
if ($print_messages) {
|
||||
echo $messages;
|
||||
}
|
||||
return $result;
|
||||
return $result;
|
||||
}
|
||||
|
||||
function files_repo_check_file_acl ($file_id, $user_id = false, $file_groups = false, $user_groups = false) {
|
||||
global $config;
|
||||
|
||||
$result = false;
|
||||
if (!$user_id) {
|
||||
$user_id = $config['id_user'];
|
||||
}
|
||||
if (is_user_admin($user_id)) {
|
||||
return true;
|
||||
}
|
||||
if (!$file_groups) {
|
||||
$file_groups = files_repo_get_file_groups($file_id);
|
||||
if (empty($file_groups)) {
|
||||
$file_groups = array();
|
||||
}
|
||||
}
|
||||
function files_repo_check_file_acl($file_id, $user_id=false, $file_groups=false, $user_groups=false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (in_array(0, $file_groups)) {
|
||||
return true;
|
||||
}
|
||||
$result = false;
|
||||
if (!$user_id) {
|
||||
$user_id = $config['id_user'];
|
||||
}
|
||||
|
||||
if (!$user_groups) {
|
||||
$user_groups = users_get_groups ($user_id, false, true);
|
||||
if (empty($user_groups)) {
|
||||
$user_groups = array();
|
||||
}
|
||||
}
|
||||
if (is_user_admin($user_id)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($file_groups as $group_id) {
|
||||
// $user_groups has the id in the array keys
|
||||
if (in_array($group_id, $user_groups)) {
|
||||
$result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
if (!$file_groups) {
|
||||
$file_groups = files_repo_get_file_groups($file_id);
|
||||
if (empty($file_groups)) {
|
||||
$file_groups = [];
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array(0, $file_groups)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!$user_groups) {
|
||||
$user_groups = users_get_groups($user_id, false, true);
|
||||
if (empty($user_groups)) {
|
||||
$user_groups = [];
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($file_groups as $group_id) {
|
||||
// $user_groups has the id in the array keys
|
||||
if (in_array($group_id, $user_groups)) {
|
||||
$result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function files_repo_get_file_groups ($file_id) {
|
||||
|
||||
$groups = array();
|
||||
$filter = array('id_file' => $file_id);
|
||||
$result = db_get_all_rows_filter("tfiles_repo_group", $filter, "id_group");
|
||||
function files_repo_get_file_groups($file_id)
|
||||
{
|
||||
$groups = [];
|
||||
$filter = ['id_file' => $file_id];
|
||||
$result = db_get_all_rows_filter('tfiles_repo_group', $filter, 'id_group');
|
||||
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $key => $value) {
|
||||
$groups[] = $value['id_group'];
|
||||
}
|
||||
}
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $key => $value) {
|
||||
$groups[] = $value['id_group'];
|
||||
}
|
||||
}
|
||||
|
||||
return $groups;
|
||||
return $groups;
|
||||
}
|
||||
|
||||
function files_repo_get_user_groups ($user_id) {
|
||||
|
||||
$groups = array();
|
||||
$filter = array('id_usuario' => $user_id);
|
||||
$result = db_get_all_rows_filter("tusuario_perfil", $filter, "id_grupo");
|
||||
function files_repo_get_user_groups($user_id)
|
||||
{
|
||||
$groups = [];
|
||||
$filter = ['id_usuario' => $user_id];
|
||||
$result = db_get_all_rows_filter('tusuario_perfil', $filter, 'id_grupo');
|
||||
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $key => $value) {
|
||||
$groups[] = $value['id_grupo'];
|
||||
}
|
||||
}
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $key => $value) {
|
||||
$groups[] = $value['id_grupo'];
|
||||
}
|
||||
}
|
||||
|
||||
return $groups;
|
||||
return $groups;
|
||||
}
|
||||
|
||||
function files_repo_get_files ($filter = false, $count = false) {
|
||||
global $config;
|
||||
|
||||
// Don't use the realpath for the download links!
|
||||
$files_repo_path = io_safe_output($config['attachment_store'])."/files_repo";
|
||||
|
||||
$sql = "SELECT *
|
||||
|
||||
function files_repo_get_files($filter=false, $count=false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
// Don't use the realpath for the download links!
|
||||
$files_repo_path = io_safe_output($config['attachment_store']).'/files_repo';
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM tfiles_repo
|
||||
" . db_format_array_where_clause_sql($filter, "AND", "WHERE");
|
||||
$files = db_get_all_rows_sql($sql);
|
||||
|
||||
if ($files === false)
|
||||
$files = array();
|
||||
|
||||
$user_groups = files_repo_get_user_groups($config['id_user']);
|
||||
|
||||
$files_data = array();
|
||||
foreach ($files as $file) {
|
||||
|
||||
$file_groups = files_repo_get_file_groups($file['id']);
|
||||
$permission = files_repo_check_file_acl ($file['id'], $config['id_user'], $file_groups, $user_groups);
|
||||
if (!$permission) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$data = array();
|
||||
$data['name'] = $file['name'];
|
||||
$data['description'] = $file['description'];
|
||||
$data['location'] = $files_repo_path . "/" . $file['id']."_".$data['name'];
|
||||
// Size in bytes
|
||||
$data['size'] = filesize($data['location']);
|
||||
// Last modification time in unix timestamp
|
||||
$data['mtime'] = filemtime($data['location']);
|
||||
$data['groups'] = $file_groups;
|
||||
$data['hash'] = $file['hash'];
|
||||
$files_data[$file['id']] = $data;
|
||||
}
|
||||
|
||||
if ($count) {
|
||||
$files_data = count($files_data);
|
||||
}
|
||||
|
||||
return $files_data;
|
||||
'.db_format_array_where_clause_sql($filter, 'AND', 'WHERE');
|
||||
$files = db_get_all_rows_sql($sql);
|
||||
|
||||
if ($files === false) {
|
||||
$files = [];
|
||||
}
|
||||
|
||||
$user_groups = files_repo_get_user_groups($config['id_user']);
|
||||
|
||||
$files_data = [];
|
||||
foreach ($files as $file) {
|
||||
$file_groups = files_repo_get_file_groups($file['id']);
|
||||
$permission = files_repo_check_file_acl($file['id'], $config['id_user'], $file_groups, $user_groups);
|
||||
if (!$permission) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['name'] = $file['name'];
|
||||
$data['description'] = $file['description'];
|
||||
$data['location'] = $files_repo_path.'/'.$file['id'].'_'.$data['name'];
|
||||
// Size in bytes
|
||||
$data['size'] = filesize($data['location']);
|
||||
// Last modification time in unix timestamp
|
||||
$data['mtime'] = filemtime($data['location']);
|
||||
$data['groups'] = $file_groups;
|
||||
$data['hash'] = $file['hash'];
|
||||
$files_data[$file['id']] = $data;
|
||||
}
|
||||
|
||||
if ($count) {
|
||||
$files_data = count($files_data);
|
||||
}
|
||||
|
||||
return $files_data;
|
||||
}
|
||||
|
||||
function files_repo_add_file ($file_input_name = "upfile", $description = "", $groups = array(), $public = false) {
|
||||
global $config;
|
||||
|
||||
$attachment_path = io_safe_output($config['attachment_store']);
|
||||
$files_repo_path = $attachment_path."/"."files_repo";
|
||||
function files_repo_add_file($file_input_name='upfile', $description='', $groups=[], $public=false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$result = array();
|
||||
$result["status"] = false;
|
||||
$result["message"] = "";
|
||||
$attachment_path = io_safe_output($config['attachment_store']);
|
||||
$files_repo_path = $attachment_path.'/'.'files_repo';
|
||||
|
||||
$upload_status = get_file_upload_status($file_input_name);
|
||||
$upload_result = translate_file_upload_status($upload_status);
|
||||
$result = [];
|
||||
$result['status'] = false;
|
||||
$result['message'] = '';
|
||||
|
||||
if ($upload_result === true) {
|
||||
$filename = $_FILES[$file_input_name]['name'];
|
||||
// Replace conflictive characters
|
||||
$filename = str_replace (array(" ", "=", "?", "&"), "_", $filename);
|
||||
$filename = filter_var($filename, FILTER_SANITIZE_URL);
|
||||
// The filename should not be larger than 200 characters
|
||||
if (mb_strlen($filename, "UTF-8") > 200) {
|
||||
$filename = mb_substr($filename, 0, 200, "UTF-8");
|
||||
}
|
||||
$upload_status = get_file_upload_status($file_input_name);
|
||||
$upload_result = translate_file_upload_status($upload_status);
|
||||
|
||||
$hash = "";
|
||||
if ($public) {
|
||||
$hash = md5(time() . $config['dbpass']);
|
||||
$hash = mb_substr($hash, 0, 8, "UTF-8");
|
||||
}
|
||||
if ($upload_result === true) {
|
||||
$filename = $_FILES[$file_input_name]['name'];
|
||||
// Replace conflictive characters
|
||||
$filename = str_replace([' ', '=', '?', '&'], '_', $filename);
|
||||
$filename = filter_var($filename, FILTER_SANITIZE_URL);
|
||||
// The filename should not be larger than 200 characters
|
||||
if (mb_strlen($filename, 'UTF-8') > 200) {
|
||||
$filename = mb_substr($filename, 0, 200, 'UTF-8');
|
||||
}
|
||||
|
||||
$values = array(
|
||||
'name' => $filename,
|
||||
'description' => $description,
|
||||
'hash' => $hash
|
||||
);
|
||||
$file_id = db_process_sql_insert('tfiles_repo', $values);
|
||||
$hash = '';
|
||||
if ($public) {
|
||||
$hash = md5(time().$config['dbpass']);
|
||||
$hash = mb_substr($hash, 0, 8, 'UTF-8');
|
||||
}
|
||||
|
||||
if ($file_id) {
|
||||
|
||||
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
|
||||
$destination = $files_repo_path."/".$file_id."_".$filename;
|
||||
|
||||
if (move_uploaded_file($file_tmp, $destination)) {
|
||||
$values = [
|
||||
'name' => $filename,
|
||||
'description' => $description,
|
||||
'hash' => $hash,
|
||||
];
|
||||
$file_id = db_process_sql_insert('tfiles_repo', $values);
|
||||
|
||||
if (is_array($groups) && !empty($groups)) {
|
||||
db_process_sql_delete('tfiles_repo_group', array('id_file' => $file_id));
|
||||
foreach ($groups as $group) {
|
||||
$values = array(
|
||||
'id_file' => $file_id,
|
||||
'id_group' => $group
|
||||
);
|
||||
db_process_sql_insert('tfiles_repo_group', $values);
|
||||
}
|
||||
}
|
||||
|
||||
$result["status"] = true;
|
||||
} else {
|
||||
db_process_sql_delete('tfiles_repo', array('id' => $file_id));
|
||||
unlink ($file_tmp);
|
||||
$result["message"] = __('The file could not be copied');
|
||||
}
|
||||
|
||||
} else {
|
||||
$result["message"] = __('There was an error creating the file');
|
||||
}
|
||||
} else {
|
||||
$result["message"] = $upload_result;
|
||||
}
|
||||
if ($file_id) {
|
||||
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
|
||||
$destination = $files_repo_path.'/'.$file_id.'_'.$filename;
|
||||
|
||||
return $result;
|
||||
if (move_uploaded_file($file_tmp, $destination)) {
|
||||
if (is_array($groups) && !empty($groups)) {
|
||||
db_process_sql_delete('tfiles_repo_group', ['id_file' => $file_id]);
|
||||
foreach ($groups as $group) {
|
||||
$values = [
|
||||
'id_file' => $file_id,
|
||||
'id_group' => $group,
|
||||
];
|
||||
db_process_sql_insert('tfiles_repo_group', $values);
|
||||
}
|
||||
}
|
||||
|
||||
$result['status'] = true;
|
||||
} else {
|
||||
db_process_sql_delete('tfiles_repo', ['id' => $file_id]);
|
||||
unlink($file_tmp);
|
||||
$result['message'] = __('The file could not be copied');
|
||||
}
|
||||
} else {
|
||||
$result['message'] = __('There was an error creating the file');
|
||||
}
|
||||
} else {
|
||||
$result['message'] = $upload_result;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function files_repo_update_file ($file_id, $description = "", $groups = array(), $public = false) {
|
||||
global $config;
|
||||
|
||||
$result = array();
|
||||
$result["status"] = false;
|
||||
$result["message"] = "";
|
||||
function files_repo_update_file($file_id, $description='', $groups=[], $public=false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$hash = "";
|
||||
if ($public) {
|
||||
$hash = md5(time() . $config['dbpass']);
|
||||
$hash = mb_substr($hash, 0, 8, "UTF-8");
|
||||
}
|
||||
$result = [];
|
||||
$result['status'] = false;
|
||||
$result['message'] = '';
|
||||
|
||||
$values = array(
|
||||
'description' => $description,
|
||||
'hash' => $hash
|
||||
);
|
||||
$filter = array('id' => $file_id);
|
||||
$res = db_process_sql_update('tfiles_repo', $values, $filter);
|
||||
if ($res !== false) {
|
||||
if (is_array($groups) && !empty($groups)) {
|
||||
db_process_sql_delete('tfiles_repo_group', array('id_file' => $file_id));
|
||||
foreach ($groups as $group) {
|
||||
$values = array(
|
||||
'id_file' => $file_id,
|
||||
'id_group' => $group
|
||||
);
|
||||
db_process_sql_insert('tfiles_repo_group', $values);
|
||||
}
|
||||
}
|
||||
$result["status"] = true;
|
||||
} else {
|
||||
$result["message"] = __('There was an error updating the file');
|
||||
}
|
||||
$hash = '';
|
||||
if ($public) {
|
||||
$hash = md5(time().$config['dbpass']);
|
||||
$hash = mb_substr($hash, 0, 8, 'UTF-8');
|
||||
}
|
||||
|
||||
return $result;
|
||||
$values = [
|
||||
'description' => $description,
|
||||
'hash' => $hash,
|
||||
];
|
||||
$filter = ['id' => $file_id];
|
||||
$res = db_process_sql_update('tfiles_repo', $values, $filter);
|
||||
if ($res !== false) {
|
||||
if (is_array($groups) && !empty($groups)) {
|
||||
db_process_sql_delete('tfiles_repo_group', ['id_file' => $file_id]);
|
||||
foreach ($groups as $group) {
|
||||
$values = [
|
||||
'id_file' => $file_id,
|
||||
'id_group' => $group,
|
||||
];
|
||||
db_process_sql_insert('tfiles_repo_group', $values);
|
||||
}
|
||||
}
|
||||
|
||||
$result['status'] = true;
|
||||
} else {
|
||||
$result['message'] = __('There was an error updating the file');
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function files_repo_delete_file ($file_id) {
|
||||
global $config;
|
||||
|
||||
$result = -1;
|
||||
function files_repo_delete_file($file_id)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$filename = db_get_value("name", "tfiles_repo", "id", $file_id);
|
||||
$result = -1;
|
||||
|
||||
if ($filename) {
|
||||
$attachment_path = io_safe_output($config['attachment_store']);
|
||||
$files_repo_path = $attachment_path."/files_repo";
|
||||
$location = $files_repo_path."/".$file_id."_".$filename;
|
||||
$filename = db_get_value('name', 'tfiles_repo', 'id', $file_id);
|
||||
|
||||
if (file_exists($location)) {
|
||||
$result = false;
|
||||
if (unlink($location)) {
|
||||
$result = (bool) db_process_sql_delete('tfiles_repo', array('id' => $file_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
if ($filename) {
|
||||
$attachment_path = io_safe_output($config['attachment_store']);
|
||||
$files_repo_path = $attachment_path.'/files_repo';
|
||||
$location = $files_repo_path.'/'.$file_id.'_'.$filename;
|
||||
|
||||
if (file_exists($location)) {
|
||||
$result = false;
|
||||
if (unlink($location)) {
|
||||
$result = (bool) db_process_sql_delete('tfiles_repo', ['id' => $file_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
?>
|
|
@ -4,28 +4,26 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
|
||||
include_once($config['homedir'] . "/include/functions_agents.php");
|
||||
include_once($config['homedir'] . "/include/functions_modules.php");
|
||||
include_once($config['homedir'] . "/include/functions.php");
|
||||
require_once $config['homedir'].'/include/functions_agents.php';
|
||||
require_once $config['homedir'].'/include/functions_modules.php';
|
||||
require_once $config['homedir'].'/include/functions.php';
|
||||
|
||||
function createXMLData($agent, $agentModule, $time, $data) {
|
||||
global $config;
|
||||
|
||||
$xmlTemplate = "<?xml version='1.0' encoding='UTF-8'?>
|
||||
<agent_data description='' group='' os_name='%s' " .
|
||||
" os_version='%s' interval='%d' version='%s' timestamp='%s' agent_name='%s' timezone_offset='0'>
|
||||
|
||||
function createXMLData($agent, $agentModule, $time, $data)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$xmlTemplate = "<?xml version='1.0' encoding='UTF-8'?>
|
||||
<agent_data description='' group='' os_name='%s' "." os_version='%s' interval='%d' version='%s' timestamp='%s' agent_name='%s' timezone_offset='0'>
|
||||
<module>
|
||||
<name><![CDATA[%s]]></name>
|
||||
<description><![CDATA[%s]]></description>
|
||||
|
@ -33,228 +31,241 @@ function createXMLData($agent, $agentModule, $time, $data) {
|
|||
<data><![CDATA[%s]]></data>
|
||||
</module>
|
||||
</agent_data>";
|
||||
|
||||
$xml = sprintf(
|
||||
$xmlTemplate,
|
||||
io_safe_output(get_os_name($agent['id_os'])),
|
||||
io_safe_output($agent['os_version']),
|
||||
$agent['intervalo'],
|
||||
io_safe_output($agent['agent_version']),
|
||||
$time,
|
||||
io_safe_output($agent['nombre']),
|
||||
io_safe_output($agentModule['nombre']),
|
||||
io_safe_output($agentModule['descripcion']),
|
||||
modules_get_type_name($agentModule['id_tipo_modulo']),
|
||||
$data
|
||||
);
|
||||
|
||||
$file_name = $config["remote_config"] . "/" . io_safe_output($agent["alias"]) . "." . strtotime($time) . ".data";
|
||||
return (bool) @file_put_contents($file_name, $xml);
|
||||
|
||||
$xml = sprintf(
|
||||
$xmlTemplate,
|
||||
io_safe_output(get_os_name($agent['id_os'])),
|
||||
io_safe_output($agent['os_version']),
|
||||
$agent['intervalo'],
|
||||
io_safe_output($agent['agent_version']),
|
||||
$time,
|
||||
io_safe_output($agent['nombre']),
|
||||
io_safe_output($agentModule['nombre']),
|
||||
io_safe_output($agentModule['descripcion']),
|
||||
modules_get_type_name($agentModule['id_tipo_modulo']),
|
||||
$data
|
||||
);
|
||||
|
||||
$file_name = $config['remote_config'].'/'.io_safe_output($agent['alias']).'.'.strtotime($time).'.data';
|
||||
return (bool) @file_put_contents($file_name, $xml);
|
||||
}
|
||||
|
||||
function mainInsertData() {
|
||||
global $config;
|
||||
|
||||
ui_print_page_header (__("Insert data"), "images/extensions.png", false, "", true, "");
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "AW") && ! is_user_admin ($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
$save = (bool) get_parameter("save");
|
||||
$agent_id = (int) get_parameter("agent_id");
|
||||
$agent_name = (string) get_parameter("agent_name");
|
||||
|
||||
$id_agent_module = (int) get_parameter("id_agent_module");
|
||||
$data = (string) get_parameter('data');
|
||||
$date = (string) get_parameter('date', date(DATE_FORMAT));
|
||||
$time = (string) get_parameter('time', date(TIME_FORMAT));
|
||||
if (isset($_FILES['csv'])) {
|
||||
if ($_FILES['csv']['error'] != 4) {
|
||||
$csv = $_FILES['csv'];
|
||||
}
|
||||
else {
|
||||
$csv = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$csv = false;
|
||||
}
|
||||
|
||||
|
||||
if ($save) {
|
||||
if (!check_acl($config['id_user'], agents_get_agent_group($agent_id), "AW")) {
|
||||
ui_print_error_message(__('You haven\'t privileges for insert data in the agent.'));
|
||||
}
|
||||
else {
|
||||
$agent = db_get_row_filter('tagente', array('id_agente' => $agent_id));
|
||||
$agentModule = db_get_row_filter('tagente_modulo', array('id_agente_modulo' => $id_agent_module));
|
||||
|
||||
$done = 0;
|
||||
$errors = 0;
|
||||
if ($csv !== false) {
|
||||
$file = file($csv['tmp_name']);
|
||||
foreach ($file as $line) {
|
||||
$tokens = explode(';', $line);
|
||||
|
||||
$utimestamp = strtotime(trim($tokens[0])) - get_fixed_offset();
|
||||
$timestamp = date(DATE_FORMAT . " " . TIME_FORMAT, $utimestamp);
|
||||
$result = createXMLData($agent, $agentModule, $timestamp, trim($tokens[1]));
|
||||
|
||||
if ($result) {
|
||||
$done++;
|
||||
}
|
||||
else {
|
||||
$errors++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$utimestamp = strtotime($date . " " . $time) - get_fixed_offset();
|
||||
$timestamp = date(DATE_FORMAT . " " . TIME_FORMAT, $utimestamp);
|
||||
$result = createXMLData($agent, $agentModule, $timestamp, $data);
|
||||
|
||||
if ($result) {
|
||||
$done++;
|
||||
}
|
||||
else {
|
||||
$errors++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($errors > 0) {
|
||||
$msg = sprintf(__('Can\'t save agent (%s), module (%s) data xml.'), $agent['alias'], $agentModule['nombre']);
|
||||
if ($errors > 1) {
|
||||
$msg .= " ($errors)";
|
||||
}
|
||||
ui_print_error_message($msg);
|
||||
}
|
||||
if ($done > 0) {
|
||||
$msg = sprintf(__('Save agent (%s), module (%s) data xml.'), $agent['alias'], $agentModule['nombre']);
|
||||
if ($done > 1) {
|
||||
$msg .= " ($done)";
|
||||
}
|
||||
ui_print_success_message($msg);
|
||||
}
|
||||
}
|
||||
|
||||
echo '<div class="notify" style="margin-bottom:15px;">';
|
||||
echo sprintf(__("Please check that the directory \"%s\" is writeable by the apache user. <br /><br />The CSV file format is date;value<newline>date;value<newline>... The date in CSV is in format Y/m/d H:i:s."),
|
||||
$config['remote_config']);
|
||||
echo '</div>';
|
||||
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox filters';
|
||||
$table->style = array();
|
||||
$table->style[0] = 'font-weight: bolder;';
|
||||
|
||||
$table->data = array();
|
||||
|
||||
$table->data[0][0] = __('Agent');
|
||||
$params = array();
|
||||
$params['return'] = true;
|
||||
$params['show_helptip'] = true;
|
||||
$params['input_name'] = 'agent_name';
|
||||
$params['value'] = $agent_name;
|
||||
$params['javascript_is_function_select'] = true;
|
||||
$params['javascript_name_function_select'] = 'custom_select_function';
|
||||
$params['javascript_code_function_select'] = '';
|
||||
$params['use_hidden_input_idagent'] = true;
|
||||
$params['print_hidden_input_idagent'] = true;
|
||||
$params['hidden_input_idagent_id'] = 'hidden-autocomplete_id_agent';
|
||||
$params['hidden_input_idagent_name'] = 'agent_id';
|
||||
$params['hidden_input_idagent_value'] = $agent_id;
|
||||
|
||||
$table->data[0][1] = ui_print_agent_autocomplete_input($params);
|
||||
|
||||
$table->data[1][0] = __('Module');
|
||||
$modules = array ();
|
||||
if ($agent_id){
|
||||
$modules = agents_get_modules ($agent_id, false, array("delete_pending" => 0));
|
||||
}
|
||||
$table->data[1][1] = html_print_select ($modules, 'id_agent_module', $id_agent_module, true,
|
||||
__('Select'), 0, true, false, true, '', empty($agent_id));
|
||||
$table->data[2][0] = __('Data');
|
||||
$table->data[2][1] = html_print_input_text('data', $data, __('Data'), 40, 60, true);
|
||||
$table->data[3][0] = __('Date');
|
||||
$table->data[3][1] = html_print_input_text ('date', $date, '', 11, 11, true).' ';
|
||||
$table->data[3][1] .= html_print_input_text ('time', $time, '', 7, 7, true);
|
||||
$table->data[4][0] = __('CSV');
|
||||
$table->data[4][1] = html_print_input_file('csv', true);
|
||||
|
||||
echo "<form method='post' enctype='multipart/form-data'>";
|
||||
|
||||
html_print_table($table);
|
||||
|
||||
echo "<div style='text-align: right; width: " . $table->width . "'>";
|
||||
html_print_input_hidden('save', 1);
|
||||
html_print_submit_button(__('Save'), 'submit', ($id_agent === ''), 'class="sub next"');
|
||||
echo "</div>";
|
||||
|
||||
echo "</form>";
|
||||
|
||||
ui_require_css_file ('datepicker');
|
||||
ui_include_time_picker();
|
||||
ui_require_jquery_file("ui.datepicker-" . get_user_language(), "include/javascript/i18n/");
|
||||
?>
|
||||
function mainInsertData()
|
||||
{
|
||||
global $config;
|
||||
|
||||
ui_print_page_header(__('Insert data'), 'images/extensions.png', false, '', true, '');
|
||||
|
||||
if (! check_acl($config['id_user'], 0, 'AW') && ! is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
$save = (bool) get_parameter('save');
|
||||
$agent_id = (int) get_parameter('agent_id');
|
||||
$agent_name = (string) get_parameter('agent_name');
|
||||
|
||||
$id_agent_module = (int) get_parameter('id_agent_module');
|
||||
$data = (string) get_parameter('data');
|
||||
$date = (string) get_parameter('date', date(DATE_FORMAT));
|
||||
$time = (string) get_parameter('time', date(TIME_FORMAT));
|
||||
if (isset($_FILES['csv'])) {
|
||||
if ($_FILES['csv']['error'] != 4) {
|
||||
$csv = $_FILES['csv'];
|
||||
} else {
|
||||
$csv = false;
|
||||
}
|
||||
} else {
|
||||
$csv = false;
|
||||
}
|
||||
|
||||
if ($save) {
|
||||
if (!check_acl($config['id_user'], agents_get_agent_group($agent_id), 'AW')) {
|
||||
ui_print_error_message(__('You haven\'t privileges for insert data in the agent.'));
|
||||
} else {
|
||||
$agent = db_get_row_filter('tagente', ['id_agente' => $agent_id]);
|
||||
$agentModule = db_get_row_filter('tagente_modulo', ['id_agente_modulo' => $id_agent_module]);
|
||||
|
||||
$done = 0;
|
||||
$errors = 0;
|
||||
if ($csv !== false) {
|
||||
$file = file($csv['tmp_name']);
|
||||
foreach ($file as $line) {
|
||||
$tokens = explode(';', $line);
|
||||
|
||||
$utimestamp = (strtotime(trim($tokens[0])) - get_fixed_offset());
|
||||
$timestamp = date(DATE_FORMAT.' '.TIME_FORMAT, $utimestamp);
|
||||
$result = createXMLData($agent, $agentModule, $timestamp, trim($tokens[1]));
|
||||
|
||||
if ($result) {
|
||||
$done++;
|
||||
} else {
|
||||
$errors++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$utimestamp = (strtotime($date.' '.$time) - get_fixed_offset());
|
||||
$timestamp = date(DATE_FORMAT.' '.TIME_FORMAT, $utimestamp);
|
||||
$result = createXMLData($agent, $agentModule, $timestamp, $data);
|
||||
|
||||
if ($result) {
|
||||
$done++;
|
||||
} else {
|
||||
$errors++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($errors > 0) {
|
||||
$msg = sprintf(__('Can\'t save agent (%s), module (%s) data xml.'), $agent['alias'], $agentModule['nombre']);
|
||||
if ($errors > 1) {
|
||||
$msg .= " ($errors)";
|
||||
}
|
||||
|
||||
ui_print_error_message($msg);
|
||||
}
|
||||
|
||||
if ($done > 0) {
|
||||
$msg = sprintf(__('Save agent (%s), module (%s) data xml.'), $agent['alias'], $agentModule['nombre']);
|
||||
if ($done > 1) {
|
||||
$msg .= " ($done)";
|
||||
}
|
||||
|
||||
ui_print_success_message($msg);
|
||||
}
|
||||
}
|
||||
|
||||
echo '<div class="notify" style="margin-bottom:15px;">';
|
||||
echo sprintf(
|
||||
__('Please check that the directory "%s" is writeable by the apache user. <br /><br />The CSV file format is date;value<newline>date;value<newline>... The date in CSV is in format Y/m/d H:i:s.'),
|
||||
$config['remote_config']
|
||||
);
|
||||
echo '</div>';
|
||||
|
||||
$table = new stdClass();
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox filters';
|
||||
$table->style = [];
|
||||
$table->style[0] = 'font-weight: bolder;';
|
||||
|
||||
$table->data = [];
|
||||
|
||||
$table->data[0][0] = __('Agent');
|
||||
$params = [];
|
||||
$params['return'] = true;
|
||||
$params['show_helptip'] = true;
|
||||
$params['input_name'] = 'agent_name';
|
||||
$params['value'] = $agent_name;
|
||||
$params['javascript_is_function_select'] = true;
|
||||
$params['javascript_name_function_select'] = 'custom_select_function';
|
||||
$params['javascript_code_function_select'] = '';
|
||||
$params['use_hidden_input_idagent'] = true;
|
||||
$params['print_hidden_input_idagent'] = true;
|
||||
$params['hidden_input_idagent_id'] = 'hidden-autocomplete_id_agent';
|
||||
$params['hidden_input_idagent_name'] = 'agent_id';
|
||||
$params['hidden_input_idagent_value'] = $agent_id;
|
||||
|
||||
$table->data[0][1] = ui_print_agent_autocomplete_input($params);
|
||||
|
||||
$table->data[1][0] = __('Module');
|
||||
$modules = [];
|
||||
if ($agent_id) {
|
||||
$modules = agents_get_modules($agent_id, false, ['delete_pending' => 0]);
|
||||
}
|
||||
|
||||
$table->data[1][1] = html_print_select(
|
||||
$modules,
|
||||
'id_agent_module',
|
||||
$id_agent_module,
|
||||
true,
|
||||
__('Select'),
|
||||
0,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
'',
|
||||
empty($agent_id)
|
||||
);
|
||||
$table->data[2][0] = __('Data');
|
||||
$table->data[2][1] = html_print_input_text('data', $data, __('Data'), 40, 60, true);
|
||||
$table->data[3][0] = __('Date');
|
||||
$table->data[3][1] = html_print_input_text('date', $date, '', 11, 11, true).' ';
|
||||
$table->data[3][1] .= html_print_input_text('time', $time, '', 7, 7, true);
|
||||
$table->data[4][0] = __('CSV');
|
||||
$table->data[4][1] = html_print_input_file('csv', true);
|
||||
|
||||
echo "<form method='post' enctype='multipart/form-data'>";
|
||||
|
||||
html_print_table($table);
|
||||
|
||||
echo "<div style='text-align: right; width: ".$table->width."'>";
|
||||
html_print_input_hidden('save', 1);
|
||||
html_print_submit_button(__('Save'), 'submit', ($id_agent === ''), 'class="sub next"');
|
||||
echo '</div>';
|
||||
|
||||
echo '</form>';
|
||||
|
||||
ui_require_css_file('datepicker');
|
||||
ui_include_time_picker();
|
||||
ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/');
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
$(document).ready (function () {
|
||||
|
||||
$('#text-time').timepicker({
|
||||
showSecond: true,
|
||||
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
|
||||
timeOnlyTitle: '<?php echo __('Choose time');?>',
|
||||
timeText: '<?php echo __('Time');?>',
|
||||
hourText: '<?php echo __('Hour');?>',
|
||||
minuteText: '<?php echo __('Minute');?>',
|
||||
secondText: '<?php echo __('Second');?>',
|
||||
currentText: '<?php echo __('Now');?>',
|
||||
closeText: '<?php echo __('Close');?>'});
|
||||
|
||||
$("#text-date").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
|
||||
|
||||
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
|
||||
});
|
||||
|
||||
function custom_select_function(agent_name) {
|
||||
$('#id_agent_module').empty ();
|
||||
var inputs = [];
|
||||
var id_agent = $('#hidden-autocomplete_id_agent').val();
|
||||
|
||||
inputs.push ("id_agent=" + id_agent);
|
||||
inputs.push ("delete_pending=0");
|
||||
inputs.push ("get_agent_modules_json=1");
|
||||
inputs.push ("page=operation/agentes/ver_agente");
|
||||
jQuery.ajax ({
|
||||
data: inputs.join ("&"),
|
||||
type: 'GET',
|
||||
url: action="ajax.php",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
$('#id_agent_module').append ($('<option></option>').attr ('value', 0).text ("--"));
|
||||
jQuery.each (data, function (i, val) {
|
||||
s = js_html_entity_decode (val['nombre']);
|
||||
$('#id_agent_module').append ($('<option></option>').attr ('value', val['id_agente_modulo']).text (s));
|
||||
});
|
||||
$('#id_agent_module').enable();
|
||||
$('#id_agent_module').fadeIn ('normal');
|
||||
|
||||
$('#submit-submit').enable();
|
||||
$('#submit-submit').fadeIn ('normal');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* ]]> */
|
||||
/* <![CDATA[ */
|
||||
$(document).ready (function () {
|
||||
|
||||
$('#text-time').timepicker({
|
||||
showSecond: true,
|
||||
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
|
||||
timeOnlyTitle: '<?php echo __('Choose time'); ?>',
|
||||
timeText: '<?php echo __('Time'); ?>',
|
||||
hourText: '<?php echo __('Hour'); ?>',
|
||||
minuteText: '<?php echo __('Minute'); ?>',
|
||||
secondText: '<?php echo __('Second'); ?>',
|
||||
currentText: '<?php echo __('Now'); ?>',
|
||||
closeText: '<?php echo __('Close'); ?>'});
|
||||
|
||||
$("#text-date").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
|
||||
|
||||
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
|
||||
});
|
||||
|
||||
function custom_select_function(agent_name) {
|
||||
$('#id_agent_module').empty ();
|
||||
var inputs = [];
|
||||
var id_agent = $('#hidden-autocomplete_id_agent').val();
|
||||
|
||||
inputs.push ("id_agent=" + id_agent);
|
||||
inputs.push ("delete_pending=0");
|
||||
inputs.push ("get_agent_modules_json=1");
|
||||
inputs.push ("page=operation/agentes/ver_agente");
|
||||
jQuery.ajax ({
|
||||
data: inputs.join ("&"),
|
||||
type: 'GET',
|
||||
url: action="ajax.php",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
$('#id_agent_module').append ($('<option></option>').attr ('value', 0).text ("--"));
|
||||
jQuery.each (data, function (i, val) {
|
||||
s = js_html_entity_decode (val['nombre']);
|
||||
$('#id_agent_module').append ($('<option></option>').attr ('value', val['id_agente_modulo']).text (s));
|
||||
});
|
||||
$('#id_agent_module').enable();
|
||||
$('#id_agent_module').fadeIn ('normal');
|
||||
|
||||
$('#submit-submit').enable();
|
||||
$('#submit-submit').fadeIn ('normal');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* ]]> */
|
||||
</script>
|
||||
<?php
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
extensions_add_godmode_function('mainInsertData');
|
||||
extensions_add_godmode_menu_option(__('Insert Data'), 'AW', 'gagente', null, "v1r1");
|
||||
?>
|
||||
extensions_add_godmode_menu_option(__('Insert Data'), 'AW', 'gagente', null, 'v1r1');
|
||||
|
||||
|
|
|
@ -4,65 +4,61 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
|
||||
if (is_ajax()) {
|
||||
if (! check_acl($config['id_user'], 0, 'ER')) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access event viewer');
|
||||
return;
|
||||
}
|
||||
|
||||
if (! check_acl ($config["id_user"], 0, "ER")) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access event viewer");
|
||||
return;
|
||||
}
|
||||
$get_last_events = (bool) get_parameter('get_last_events');
|
||||
if ($get_last_events) {
|
||||
include_once 'include/functions_io.php';
|
||||
include_once 'include/functions_tags.php';
|
||||
|
||||
$get_last_events = (bool) get_parameter("get_last_events");
|
||||
if ($get_last_events) {
|
||||
|
||||
require_once ('include/functions_io.php');
|
||||
require_once ('include/functions_tags.php');
|
||||
$limit = (int) get_parameter('limit', 5);
|
||||
|
||||
$limit = (int) get_parameter("limit", 5);
|
||||
$tags_condition = tags_get_acl_tags($config['id_user'], 0, 'ER', 'event_condition', 'AND');
|
||||
|
||||
$tags_condition = tags_get_acl_tags($config['id_user'], 0, 'ER', 'event_condition', 'AND');
|
||||
|
||||
$filter = "estado <> 1 $tags_condition";
|
||||
$filter = "estado <> 1 $tags_condition";
|
||||
|
||||
$sql = sprintf ("SELECT id_agente, evento, utimestamp
|
||||
$sql = sprintf(
|
||||
'SELECT id_agente, evento, utimestamp
|
||||
FROM tevento
|
||||
LEFT JOIN tagent_secondary_group
|
||||
ON tevento.id_agente = tagent_secondary_group.id_agent
|
||||
WHERE %s
|
||||
ORDER BY utimestamp DESC LIMIT %d",
|
||||
$filter, $limit);
|
||||
|
||||
$result = db_get_all_rows_sql ($sql);
|
||||
ORDER BY utimestamp DESC LIMIT %d',
|
||||
$filter,
|
||||
$limit
|
||||
);
|
||||
|
||||
$events = array();
|
||||
if (! empty($result)) {
|
||||
foreach ($result as $key => $value) {
|
||||
$event = array();
|
||||
$event['agent'] = (empty($value['id_agente'])) ? "System" : agents_get_name($value['id_agente']);
|
||||
$event['text'] = io_safe_output($value['evento']);
|
||||
$event['date'] = date(io_safe_output($config['date_format']), $value['utimestamp']);
|
||||
$events[] = $event;
|
||||
}
|
||||
} else {
|
||||
sleep(5);
|
||||
}
|
||||
$result = db_get_all_rows_sql($sql);
|
||||
|
||||
echo json_encode($events);
|
||||
return;
|
||||
}
|
||||
$events = [];
|
||||
if (! empty($result)) {
|
||||
foreach ($result as $key => $value) {
|
||||
$event = [];
|
||||
$event['agent'] = (empty($value['id_agente'])) ? 'System' : agents_get_name($value['id_agente']);
|
||||
$event['text'] = io_safe_output($value['evento']);
|
||||
$event['date'] = date(io_safe_output($config['date_format']), $value['utimestamp']);
|
||||
$events[] = $event;
|
||||
}
|
||||
} else {
|
||||
sleep(5);
|
||||
}
|
||||
|
||||
return;
|
||||
echo json_encode($events);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
|
@ -4,117 +4,128 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
// Load global vars
|
||||
|
||||
global $config;
|
||||
|
||||
check_login ();
|
||||
check_login();
|
||||
|
||||
if (is_ajax ()) {
|
||||
$get_info_alert_module_group = (bool)get_parameter('get_info_alert_module_group');
|
||||
if (is_ajax()) {
|
||||
$get_info_alert_module_group = (bool) get_parameter('get_info_alert_module_group');
|
||||
|
||||
if ($get_info_alert_module_group) {
|
||||
$send_tooltip = json_decode(io_safe_output(get_parameter('send_tooltip')), true);
|
||||
echo "<ul class='tooltip_counters'><h3>" . __('Counters Module') . "</h3>";
|
||||
echo "<li><div style='background-color: " . COL_ALERTFIRED . ";'></div>" . __('Alerts_Fired') . ": " . $send_tooltip['alerts_module_count'] . "</li>";
|
||||
echo "<li><div style='background-color: " . COL_CRITICAL . ";'></div>" . __('Critical') . ": " . $send_tooltip['critical_module_count'] . "</li>";
|
||||
echo "<li><div style='background-color: " . COL_WARNING . ";'></div>" . __('warning') . ": " . $send_tooltip['warning_module_count'] . "</li>";
|
||||
echo "<li><div style='background-color: " . COL_UNKNOWN . ";'></div>" . __('Unknown') . ": " . $send_tooltip['unknown_module_count'] . "</li>";
|
||||
echo "<li><div style='background-color: " . COL_NORMAL . ";'></div>" . __('OK') . ": " . $send_tooltip['normal_module_count'] . "</li>";
|
||||
echo "<li><div style='background-color: " . COL_MAINTENANCE . ";'></div>" . __('Not_init') . ": " . $send_tooltip['notInit_module_count'] . "</li></ul>";
|
||||
}
|
||||
if ($get_info_alert_module_group) {
|
||||
$send_tooltip = json_decode(io_safe_output(get_parameter('send_tooltip')), true);
|
||||
echo "<ul class='tooltip_counters'><h3>".__('Counters Module').'</h3>';
|
||||
echo "<li><div style='background-color: ".COL_ALERTFIRED.";'></div>".__('Alerts_Fired').': '.$send_tooltip['alerts_module_count'].'</li>';
|
||||
echo "<li><div style='background-color: ".COL_CRITICAL.";'></div>".__('Critical').': '.$send_tooltip['critical_module_count'].'</li>';
|
||||
echo "<li><div style='background-color: ".COL_WARNING.";'></div>".__('warning').': '.$send_tooltip['warning_module_count'].'</li>';
|
||||
echo "<li><div style='background-color: ".COL_UNKNOWN.";'></div>".__('Unknown').': '.$send_tooltip['unknown_module_count'].'</li>';
|
||||
echo "<li><div style='background-color: ".COL_NORMAL.";'></div>".__('OK').': '.$send_tooltip['normal_module_count'].'</li>';
|
||||
echo "<li><div style='background-color: ".COL_MAINTENANCE.";'></div>".__('Not_init').': '.$send_tooltip['notInit_module_count'].'</li></ul>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The main function of module groups and the enter point to
|
||||
* execute the code.
|
||||
*/
|
||||
function mainModuleGroups() {
|
||||
global $config;
|
||||
function mainModuleGroups()
|
||||
{
|
||||
global $config;
|
||||
|
||||
require_once($config['homedir'] . "/include/class/TreeGroup.class.php");
|
||||
require_once($config['homedir'] . "/include/functions_groupview.php");
|
||||
include_once $config['homedir'].'/include/class/TreeGroup.class.php';
|
||||
include_once $config['homedir'].'/include/functions_groupview.php';
|
||||
|
||||
$tree_group = new TreeGroup("group", "group");
|
||||
$tree_group->setPropagateCounters(false);
|
||||
$tree_group->setDisplayAllGroups(true);
|
||||
$tree_group->setFilter( array(
|
||||
'searchAgent' => '',
|
||||
'statusAgent' => AGENT_STATUS_ALL,
|
||||
'searchModule' => '',
|
||||
'statusModule' => -1,
|
||||
'groupID' => 0,
|
||||
'tagID' => 0,
|
||||
'show_not_init_agents' => 1,
|
||||
'show_not_init_modules' => 1
|
||||
));
|
||||
$info = $tree_group->getArray();
|
||||
$info = groupview_plain_groups($info);
|
||||
$counter = count($info);
|
||||
$offset = get_parameter('offset', 0);
|
||||
$agent_group_search = get_parameter('agent_group_search', '');
|
||||
$module_group_search = get_parameter('module_group_search', '');
|
||||
$tree_group = new TreeGroup('group', 'group');
|
||||
$tree_group->setPropagateCounters(false);
|
||||
$tree_group->setDisplayAllGroups(true);
|
||||
$tree_group->setFilter(
|
||||
[
|
||||
'searchAgent' => '',
|
||||
'statusAgent' => AGENT_STATUS_ALL,
|
||||
'searchModule' => '',
|
||||
'statusModule' => -1,
|
||||
'groupID' => 0,
|
||||
'tagID' => 0,
|
||||
'show_not_init_agents' => 1,
|
||||
'show_not_init_modules' => 1,
|
||||
]
|
||||
);
|
||||
$info = $tree_group->getArray();
|
||||
$info = groupview_plain_groups($info);
|
||||
$counter = count($info);
|
||||
$offset = get_parameter('offset', 0);
|
||||
$agent_group_search = get_parameter('agent_group_search', '');
|
||||
$module_group_search = get_parameter('module_group_search', '');
|
||||
|
||||
$info = array_filter($info, function($v, $k) use ($agent_group_search) {
|
||||
return preg_match("/$agent_group_search/i", $v['name']);
|
||||
}, ARRAY_FILTER_USE_BOTH);
|
||||
$info = array_filter(
|
||||
$info,
|
||||
function ($v, $k) use ($agent_group_search) {
|
||||
return preg_match("/$agent_group_search/i", $v['name']);
|
||||
},
|
||||
ARRAY_FILTER_USE_BOTH
|
||||
);
|
||||
|
||||
if (!empty($info)) {
|
||||
$groups_view = $is_not_paginated
|
||||
? $info
|
||||
: array_slice($info, $offset, $config['block_size']);
|
||||
$agents_counters = array_reduce($groups_view, function($carry, $item){
|
||||
$carry[$item['id']] = $item;
|
||||
return $carry;
|
||||
}, array());
|
||||
if (!empty($info)) {
|
||||
$groups_view = $is_not_paginated ? $info : array_slice($info, $offset, $config['block_size']);
|
||||
$agents_counters = array_reduce(
|
||||
$groups_view,
|
||||
function ($carry, $item) {
|
||||
$carry[$item['id']] = $item;
|
||||
return $carry;
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
$ids_array = array_keys($agents_counters);
|
||||
$ids_array = array_keys($agents_counters);
|
||||
|
||||
$ids_group = implode(',', $ids_array);
|
||||
} else
|
||||
$ids_group = -1;
|
||||
$ids_group = implode(',', $ids_array);
|
||||
} else {
|
||||
$ids_group = -1;
|
||||
}
|
||||
|
||||
$condition_critical = modules_get_state_condition(AGENT_MODULE_STATUS_CRITICAL_ALERT);
|
||||
$condition_warning = modules_get_state_condition(AGENT_MODULE_STATUS_WARNING_ALERT);
|
||||
$condition_unknown = modules_get_state_condition(AGENT_MODULE_STATUS_UNKNOWN);
|
||||
$condition_not_init = modules_get_state_condition(AGENT_MODULE_STATUS_NO_DATA);
|
||||
$condition_normal = modules_get_state_condition(AGENT_MODULE_STATUS_NORMAL);
|
||||
$condition_critical = modules_get_state_condition(AGENT_MODULE_STATUS_CRITICAL_ALERT);
|
||||
$condition_warning = modules_get_state_condition(AGENT_MODULE_STATUS_WARNING_ALERT);
|
||||
$condition_unknown = modules_get_state_condition(AGENT_MODULE_STATUS_UNKNOWN);
|
||||
$condition_not_init = modules_get_state_condition(AGENT_MODULE_STATUS_NO_DATA);
|
||||
$condition_normal = modules_get_state_condition(AGENT_MODULE_STATUS_NORMAL);
|
||||
|
||||
$array_for_defect = array();
|
||||
$array_module_group = array();
|
||||
$array_data = array();
|
||||
$array_for_defect = [];
|
||||
$array_module_group = [];
|
||||
$array_data = [];
|
||||
|
||||
$sql = "SELECT id_mg, `name` FROM tmodule_group";
|
||||
$array_mod= db_get_all_rows_sql($sql);
|
||||
$sql = 'SELECT id_mg, `name` FROM tmodule_group';
|
||||
$array_mod = db_get_all_rows_sql($sql);
|
||||
|
||||
foreach ($array_mod as $key => $value) {
|
||||
$array_module_group[$value['id_mg']] = $value['name'];
|
||||
}
|
||||
$array_module_group[0] = 'Nothing';
|
||||
foreach ($array_mod as $key => $value) {
|
||||
$array_module_group[$value['id_mg']] = $value['name'];
|
||||
}
|
||||
|
||||
$array_module_group[0] = 'Nothing';
|
||||
|
||||
$array_module_group = array_filter($array_module_group, function($v, $k) use ($module_group_search) {
|
||||
return preg_match("/$module_group_search/i", $v);
|
||||
}, ARRAY_FILTER_USE_BOTH);
|
||||
$array_module_group = array_filter(
|
||||
$array_module_group,
|
||||
function ($v, $k) use ($module_group_search) {
|
||||
return preg_match("/$module_group_search/i", $v);
|
||||
},
|
||||
ARRAY_FILTER_USE_BOTH
|
||||
);
|
||||
|
||||
foreach ($agents_counters as $key => $value) {
|
||||
$array_for_defect[$key]['gm'] = $array_module_group;
|
||||
$array_for_defect[$key]['data']['name'] = $value['name'];
|
||||
$array_for_defect[$key]['data']['parent'] = $value['parent'];
|
||||
$array_for_defect[$key]['data']['icon'] = $value['icon'];
|
||||
}
|
||||
foreach ($agents_counters as $key => $value) {
|
||||
$array_for_defect[$key]['gm'] = $array_module_group;
|
||||
$array_for_defect[$key]['data']['name'] = $value['name'];
|
||||
$array_for_defect[$key]['data']['parent'] = $value['parent'];
|
||||
$array_for_defect[$key]['data']['icon'] = $value['icon'];
|
||||
}
|
||||
|
||||
$sql =
|
||||
"SELECT SUM(IF(tae.alert_fired <> 0, 1, 0)) AS alerts_module_count,
|
||||
$sql = "SELECT SUM(IF(tae.alert_fired <> 0, 1, 0)) AS alerts_module_count,
|
||||
SUM(IF($condition_warning, 1, 0)) AS warning_module_count,
|
||||
SUM(IF($condition_unknown, 1, 0)) AS unknown_module_count,
|
||||
SUM(IF($condition_not_init, 1, 0)) AS notInit_module_count,
|
||||
|
@ -175,146 +186,146 @@ $sql =
|
|||
ON tae.id_module_group = tmg.id_mg
|
||||
GROUP BY tae.g, tmg.id_mg";
|
||||
|
||||
$array_data_prev = db_get_all_rows_sql($sql);
|
||||
$array_data_prev = db_get_all_rows_sql($sql);
|
||||
|
||||
foreach ($array_data_prev as $key => $value) {
|
||||
$array_data[$value['id_grupo']][$value['id_mg']] = $value;
|
||||
}
|
||||
foreach ($array_data_prev as $key => $value) {
|
||||
$array_data[$value['id_grupo']][$value['id_mg']] = $value;
|
||||
}
|
||||
|
||||
ui_print_page_header (__("Combined table of agent group and module group"), "images/module_group.png", false, "", false, '');
|
||||
ui_print_page_header(__('Combined table of agent group and module group'), 'images/module_group.png', false, '', false, '');
|
||||
|
||||
echo "<table cellpadding='4' cellspacing='4' class='databox filters' width='100%' style='font-weight: bold; margin-bottom: 10px;'>
|
||||
echo "<table cellpadding='4' cellspacing='4' class='databox filters' width='100%' style='font-weight: bold; margin-bottom: 10px;'>
|
||||
<tr>";
|
||||
echo "<form method='post'
|
||||
echo "<form method='post'
|
||||
action='index.php?sec=view&sec2=extensions/module_groups'>";
|
||||
|
||||
echo "<td>";
|
||||
echo __('Search by agent group') . ' ';
|
||||
html_print_input_text ("agent_group_search", $agent_group_search);
|
||||
echo '<td>';
|
||||
echo __('Search by agent group').' ';
|
||||
html_print_input_text('agent_group_search', $agent_group_search);
|
||||
|
||||
echo "</td><td>";
|
||||
echo __('Search by module group') . ' ';
|
||||
html_print_input_text ("module_group_search", $module_group_search);
|
||||
echo '</td><td>';
|
||||
echo __('Search by module group').' ';
|
||||
html_print_input_text('module_group_search', $module_group_search);
|
||||
|
||||
echo "</td><td>";
|
||||
echo "<input name='srcbutton' type='submit' class='sub search' value='".__('Search')."'>";
|
||||
echo "</form>";
|
||||
echo "<td>";
|
||||
echo "</tr></table>";
|
||||
echo '</td><td>';
|
||||
echo "<input name='srcbutton' type='submit' class='sub search' value='".__('Search')."'>";
|
||||
echo '</form>';
|
||||
echo '<td>';
|
||||
echo '</tr></table>';
|
||||
|
||||
if(true){
|
||||
$table = new StdClass();
|
||||
$table->style[0] = 'color: #ffffff; background-color: #373737; font-weight: bolder; padding-right: 10px; min-width: 230px;';
|
||||
$table->width = '100%';
|
||||
if (true) {
|
||||
$table = new StdClass();
|
||||
$table->style[0] = 'color: #ffffff; background-color: #373737; font-weight: bolder; padding-right: 10px; min-width: 230px;';
|
||||
$table->width = '100%';
|
||||
|
||||
$head[0] = __('Groups');
|
||||
$headstyle[0] = "width: 20%; font-weight: bolder;";
|
||||
foreach ($array_module_group as $key => $value) {
|
||||
$headstyle[] = "min-width: 60px;max-width: 5%;text-align:center; color: #ffffff; background-color: #373737; font-weight: bolder;";
|
||||
$head[] = ui_print_truncate_text($value, GENERIC_SIZE_TEXT, true, true, true, '…', 'color:#FFF');
|
||||
}
|
||||
$head[0] = __('Groups');
|
||||
$headstyle[0] = 'width: 20%; font-weight: bolder;';
|
||||
foreach ($array_module_group as $key => $value) {
|
||||
$headstyle[] = 'min-width: 60px;max-width: 5%;text-align:center; color: #ffffff; background-color: #373737; font-weight: bolder;';
|
||||
$head[] = ui_print_truncate_text($value, GENERIC_SIZE_TEXT, true, true, true, '…', 'color:#FFF');
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
foreach ($array_for_defect as $key => $value) {
|
||||
$deep = groups_get_group_deep($key);
|
||||
$data[$i][0] = $deep . ui_print_truncate_text($value['data']['name'], GENERIC_SIZE_TEXT, true, true, true, '…', 'color:#FFF');
|
||||
$j = 1;
|
||||
if(isset($array_data[$key])){
|
||||
foreach ($value['gm'] as $k => $v) {
|
||||
if(isset($array_data[$key][$k])){
|
||||
$send_tooltip = json_encode($array_data[$key][$k]);
|
||||
$rel = "ajax.php?page=extensions/module_groups&get_info_alert_module_group=1&send_tooltip=" . $send_tooltip;
|
||||
$url = "index.php?sec=estado&sec2=operation/agentes/status_monitor&status=-1&ag_group=" . $key . "&modulegroup=" . $k;
|
||||
$i = 0;
|
||||
foreach ($array_for_defect as $key => $value) {
|
||||
$deep = groups_get_group_deep($key);
|
||||
$data[$i][0] = $deep.ui_print_truncate_text($value['data']['name'], GENERIC_SIZE_TEXT, true, true, true, '…', 'color:#FFF');
|
||||
$j = 1;
|
||||
if (isset($array_data[$key])) {
|
||||
foreach ($value['gm'] as $k => $v) {
|
||||
if (isset($array_data[$key][$k])) {
|
||||
$send_tooltip = json_encode($array_data[$key][$k]);
|
||||
$rel = 'ajax.php?page=extensions/module_groups&get_info_alert_module_group=1&send_tooltip='.$send_tooltip;
|
||||
$url = 'index.php?sec=estado&sec2=operation/agentes/status_monitor&status=-1&ag_group='.$key.'&modulegroup='.$k;
|
||||
|
||||
if ($array_data[$key][$k]['alerts_module_count'] != 0) {
|
||||
$color = '#FFA631'; //Orange when the cell for this model group and agent has at least one alert fired.
|
||||
}
|
||||
else if ($array_data[$key][$k]['critical_module_count'] != 0) {
|
||||
$color = '#FC4444'; //Red when the cell for this model group and agent has at least one module in critical state and the rest in any state.
|
||||
}
|
||||
elseif ($array_data[$key][$k]['warning_module_count'] != 0) {
|
||||
$color = '#FAD403'; //Yellow when the cell for this model group and agent has at least one in warning state and the rest in green state.
|
||||
}
|
||||
elseif ($array_data[$key][$k]['unknown_module_count'] != 0) {
|
||||
$color = '#B2B2B2 '; //Grey when the cell for this model group and agent has at least one module in unknown state and the rest in any state.
|
||||
}
|
||||
elseif ($array_data[$key][$k]['normal_module_count'] != 0) {
|
||||
$color = '#80BA27'; //Green when the cell for this model group and agent has OK state all modules.
|
||||
}
|
||||
elseif ($array_data[$key][$k]['notInit_module_count'] != 0) {
|
||||
$color = '#5BB6E5'; // Blue when the cell for this module group and all modules have not init value.
|
||||
}
|
||||
if ($array_data[$key][$k]['alerts_module_count'] != 0) {
|
||||
$color = '#FFA631';
|
||||
// Orange when the cell for this model group and agent has at least one alert fired.
|
||||
} else if ($array_data[$key][$k]['critical_module_count'] != 0) {
|
||||
$color = '#FC4444';
|
||||
// Red when the cell for this model group and agent has at least one module in critical state and the rest in any state.
|
||||
} else if ($array_data[$key][$k]['warning_module_count'] != 0) {
|
||||
$color = '#FAD403';
|
||||
// Yellow when the cell for this model group and agent has at least one in warning state and the rest in green state.
|
||||
} else if ($array_data[$key][$k]['unknown_module_count'] != 0) {
|
||||
$color = '#B2B2B2 ';
|
||||
// Grey when the cell for this model group and agent has at least one module in unknown state and the rest in any state.
|
||||
} else if ($array_data[$key][$k]['normal_module_count'] != 0) {
|
||||
$color = '#80BA27';
|
||||
// Green when the cell for this model group and agent has OK state all modules.
|
||||
} else if ($array_data[$key][$k]['notInit_module_count'] != 0) {
|
||||
$color = '#5BB6E5';
|
||||
// Blue when the cell for this module group and all modules have not init value.
|
||||
}
|
||||
|
||||
$data[$i][$j] ="<div style='background:$color; height: 20px;min-width: 60px;max-width:5%;overflow:hidden; margin-left: auto; margin-right: auto; text-align: center; padding: 5px;padding-bottom:10px;font-size: 18px;line-height:25px;'>";
|
||||
$data[$i][$j] .= "<a class='info_cell' rel='$rel' href='$url' style='color:white;font-size: 18px;'>";
|
||||
$data[$i][$j] .= $array_data[$key][$k]['total_count'];
|
||||
$data[$i][$j] .= "</a></div>";
|
||||
}
|
||||
else{
|
||||
$data[$i][$j] ="<div style='background:white; height: 20px;min-width: 60px;max-width:5%;overflow:hidden; margin-left: auto; margin-right: auto; text-align: center; padding: 5px;padding-bottom:10px;font-size: 18px;line-height:25px;'>";
|
||||
$data[$i][$j] .= 0;
|
||||
$data[$i][$j] .= "</div>";
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
else{
|
||||
foreach ($value['gm'] as $k => $v) {
|
||||
$data[$i][$j] ="<div style='background:white; height: 20px;min-width: 60px;max-width:5%;overflow:hidden; margin-left: auto; margin-right: auto; text-align: center; padding: 5px;padding-bottom:10px;font-size: 18px;line-height:25px;'>";
|
||||
$data[$i][$j] .= 0;
|
||||
$data[$i][$j] .= "</div>";
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$data[$i][$j] = "<div style='background:$color; height: 20px;min-width: 60px;max-width:5%;overflow:hidden; margin-left: auto; margin-right: auto; text-align: center; padding: 5px;padding-bottom:10px;font-size: 18px;line-height:25px;'>";
|
||||
$data[$i][$j] .= "<a class='info_cell' rel='$rel' href='$url' style='color:white;font-size: 18px;'>";
|
||||
$data[$i][$j] .= $array_data[$key][$k]['total_count'];
|
||||
$data[$i][$j] .= '</a></div>';
|
||||
} else {
|
||||
$data[$i][$j] = "<div style='background:white; height: 20px;min-width: 60px;max-width:5%;overflow:hidden; margin-left: auto; margin-right: auto; text-align: center; padding: 5px;padding-bottom:10px;font-size: 18px;line-height:25px;'>";
|
||||
$data[$i][$j] .= 0;
|
||||
$data[$i][$j] .= '</div>';
|
||||
}
|
||||
|
||||
$table->head = $head;
|
||||
$table->headstyle = $headstyle;
|
||||
$table->data = $data;
|
||||
$j++;
|
||||
}
|
||||
} else {
|
||||
foreach ($value['gm'] as $k => $v) {
|
||||
$data[$i][$j] = "<div style='background:white; height: 20px;min-width: 60px;max-width:5%;overflow:hidden; margin-left: auto; margin-right: auto; text-align: center; padding: 5px;padding-bottom:10px;font-size: 18px;line-height:25px;'>";
|
||||
$data[$i][$j] .= 0;
|
||||
$data[$i][$j] .= '</div>';
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
|
||||
ui_pagination($counter);
|
||||
$i++;
|
||||
}
|
||||
|
||||
echo "<div style='width:100%; overflow-x:auto;'>";
|
||||
html_print_table($table);
|
||||
echo "</div>";
|
||||
$table->head = $head;
|
||||
$table->headstyle = $headstyle;
|
||||
$table->data = $data;
|
||||
|
||||
ui_pagination($counter);
|
||||
ui_pagination($counter);
|
||||
|
||||
echo "<div class='legend_basic' style='width: 98.6%'>";
|
||||
echo "<table >";
|
||||
echo "<tr><td colspan='2' style='padding-bottom: 10px;'><b>" . __('Legend') . "</b></td></tr>";
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_ALERTFIRED . ";'></div></td><td>" . __("Orange cell when the module group and agent have at least one alarm fired.") . "</td></tr>";
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_CRITICAL . ";'></div></td><td>" . __("Red cell when the module group and agent have at least one module in critical status and the others in any status") . "</td></tr>";
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_WARNING . ";'></div></td><td>" . __("Yellow cell when the module group and agent have at least one in warning status and the others in grey or green status") . "</td></tr>";
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_UNKNOWN . ";'></div></td><td>" . __("Grey cell when the module group and agent have at least one in unknown status and the others in green status") . "</td></tr>";
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_NORMAL . ";'></div></td><td>" . __("Green cell when the module group and agent have all modules in OK status") . "</td></tr>";
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_MAINTENANCE . ";'></div></td><td>" .__("Blue cell when the module group and agent have all modules in not init status.") . "</td></tr>";
|
||||
echo "</table>";
|
||||
echo "</div>";
|
||||
echo "<div style='width:100%; overflow-x:auto;'>";
|
||||
html_print_table($table);
|
||||
echo '</div>';
|
||||
|
||||
}
|
||||
else {
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __("This table shows in columns the modules group and in rows agents group. The cell shows all modules") ));
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no defined groups or module groups') ));
|
||||
}
|
||||
ui_pagination($counter);
|
||||
|
||||
ui_require_css_file('cluetip');
|
||||
ui_require_jquery_file('cluetip');
|
||||
?>
|
||||
<script>
|
||||
$(document).ready (function () {
|
||||
$("a.info_cell").cluetip ({
|
||||
arrows: true,
|
||||
attribute: 'rel',
|
||||
cluetipClass: 'default',
|
||||
width: '200px'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
echo "<div class='legend_basic' style='width: 98.6%'>";
|
||||
echo '<table >';
|
||||
echo "<tr><td colspan='2' style='padding-bottom: 10px;'><b>".__('Legend').'</b></td></tr>';
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: ".COL_ALERTFIRED.";'></div></td><td>".__('Orange cell when the module group and agent have at least one alarm fired.').'</td></tr>';
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: ".COL_CRITICAL.";'></div></td><td>".__('Red cell when the module group and agent have at least one module in critical status and the others in any status').'</td></tr>';
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: ".COL_WARNING.";'></div></td><td>".__('Yellow cell when the module group and agent have at least one in warning status and the others in grey or green status').'</td></tr>';
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: ".COL_UNKNOWN.";'></div></td><td>".__('Grey cell when the module group and agent have at least one in unknown status and the others in green status').'</td></tr>';
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: ".COL_NORMAL.";'></div></td><td>".__('Green cell when the module group and agent have all modules in OK status').'</td></tr>';
|
||||
echo "<tr><td class='legend_square_simple'><div style='background-color: ".COL_MAINTENANCE.";'></div></td><td>".__('Blue cell when the module group and agent have all modules in not init status.').'</td></tr>';
|
||||
echo '</table>';
|
||||
echo '</div>';
|
||||
} else {
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('This table shows in columns the modules group and in rows agents group. The cell shows all modules') ]);
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no defined groups or module groups') ]);
|
||||
}
|
||||
|
||||
ui_require_css_file('cluetip', 'include/styles/js/');
|
||||
ui_require_jquery_file('cluetip');
|
||||
?>
|
||||
<script>
|
||||
$(document).ready (function () {
|
||||
$("a.info_cell").cluetip ({
|
||||
arrows: true,
|
||||
attribute: 'rel',
|
||||
cluetipClass: 'default',
|
||||
width: '200px'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
extensions_add_operation_menu_option(__("Module groups"), 'estado', 'module_groups/brick.png', "v1r1","view");
|
||||
|
||||
extensions_add_operation_menu_option(__('Module groups'), 'estado', 'module_groups/brick.png', 'v1r1', 'view');
|
||||
extensions_add_main_function('mainModuleGroups');
|
||||
?>
|
||||
|
||||
|
|
|
@ -4,99 +4,108 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
$id_agente = get_parameter ("id_agente");
|
||||
$id_agente = get_parameter('id_agente');
|
||||
|
||||
// This extension is usefull only if the agent has associated IP
|
||||
$address = agents_get_address($id_agente);
|
||||
|
||||
if (!empty($address) || empty($id_agente)) {
|
||||
extensions_add_opemode_tab_agent ('network_tools','Network Tools','extensions/net_tools/nettool.png',"main_net_tools", "v1r1", 'AW');
|
||||
extensions_add_opemode_tab_agent('network_tools', 'Network Tools', 'extensions/net_tools/nettool.png', 'main_net_tools', 'v1r1', 'AW');
|
||||
}
|
||||
|
||||
function whereis_the_command ($command) {
|
||||
global $config;
|
||||
|
||||
if (isset($config['network_tools_config'])) {
|
||||
$network_tools_config = json_decode($config['network_tools_config'], true);
|
||||
$traceroute_path = $network_tools_config['traceroute_path'];
|
||||
$ping_path = $network_tools_config['ping_path'];
|
||||
$nmap_path = $network_tools_config['nmap_path'];
|
||||
$dig_path = $network_tools_config['dig_path'];
|
||||
$snmpget_path = $network_tools_config['snmpget_path'];
|
||||
|
||||
switch ($command) {
|
||||
case 'traceroute':
|
||||
if (!empty($traceroute_path))
|
||||
return $traceroute_path;
|
||||
break;
|
||||
case 'ping':
|
||||
if (!empty($ping_path))
|
||||
return $ping_path;
|
||||
break;
|
||||
case 'nmap':
|
||||
if (!empty($nmap_path))
|
||||
return $nmap_path;
|
||||
break;
|
||||
case 'dig':
|
||||
if (!empty($dig_path))
|
||||
return $dig_path;
|
||||
break;
|
||||
case 'snmpget':
|
||||
if (!empty($snmpget_path))
|
||||
return $snmpget_path;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
ob_start();
|
||||
system('whereis '. $command);
|
||||
$output = ob_get_clean();
|
||||
$result = explode(':', $output);
|
||||
$result = trim($result[1]);
|
||||
|
||||
if ( empty($result)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
$result = explode(' ', $result);
|
||||
$fullpath = trim($result[0]);
|
||||
|
||||
if (! file_exists($fullpath)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return $fullpath;
|
||||
|
||||
function whereis_the_command($command)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (isset($config['network_tools_config'])) {
|
||||
$network_tools_config = json_decode($config['network_tools_config'], true);
|
||||
$traceroute_path = $network_tools_config['traceroute_path'];
|
||||
$ping_path = $network_tools_config['ping_path'];
|
||||
$nmap_path = $network_tools_config['nmap_path'];
|
||||
$dig_path = $network_tools_config['dig_path'];
|
||||
$snmpget_path = $network_tools_config['snmpget_path'];
|
||||
|
||||
switch ($command) {
|
||||
case 'traceroute':
|
||||
if (!empty($traceroute_path)) {
|
||||
return $traceroute_path;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'ping':
|
||||
if (!empty($ping_path)) {
|
||||
return $ping_path;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'nmap':
|
||||
if (!empty($nmap_path)) {
|
||||
return $nmap_path;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'dig':
|
||||
if (!empty($dig_path)) {
|
||||
return $dig_path;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'snmpget':
|
||||
if (!empty($snmpget_path)) {
|
||||
return $snmpget_path;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ob_start();
|
||||
system('whereis '.$command);
|
||||
$output = ob_get_clean();
|
||||
$result = explode(':', $output);
|
||||
$result = trim($result[1]);
|
||||
|
||||
if (empty($result)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$result = explode(' ', $result);
|
||||
$fullpath = trim($result[0]);
|
||||
|
||||
if (! file_exists($fullpath)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $fullpath;
|
||||
}
|
||||
|
||||
function main_net_tools () {
|
||||
|
||||
$id_agente = get_parameter ("id_agente");
|
||||
$principal_ip = db_get_sql ("SELECT direccion FROM tagente WHERE id_agente = $id_agente");
|
||||
|
||||
$list_address = db_get_all_rows_sql ("select id_a from taddress_agent where id_agent = " . $id_agente);
|
||||
foreach ($list_address as $address) {
|
||||
$ids []= join(",",$address);
|
||||
}
|
||||
$ids_address = implode(",",$ids);
|
||||
$ips = db_get_all_rows_sql ("select ip from taddress where id_a in (" . $ids_address . ")");
|
||||
|
||||
if ($ips == "") {
|
||||
echo "<div class='error' style='margin-top:5px'>" . __('The agent hasn\'t got IP') . "</div>";
|
||||
return;
|
||||
}
|
||||
echo "
|
||||
|
||||
function main_net_tools()
|
||||
{
|
||||
$id_agente = get_parameter('id_agente');
|
||||
$principal_ip = db_get_sql("SELECT direccion FROM tagente WHERE id_agente = $id_agente");
|
||||
|
||||
$list_address = db_get_all_rows_sql('select id_a from taddress_agent where id_agent = '.$id_agente);
|
||||
foreach ($list_address as $address) {
|
||||
$ids[] = join(',', $address);
|
||||
}
|
||||
|
||||
$ids_address = implode(',', $ids);
|
||||
$ips = db_get_all_rows_sql('select ip from taddress where id_a in ('.$ids_address.')');
|
||||
|
||||
if ($ips == '') {
|
||||
echo "<div class='error' style='margin-top:5px'>".__('The agent hasn\'t got IP').'</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
echo "
|
||||
<script type='text/javascript'>
|
||||
function mostrarColumns(ValueSelect) {
|
||||
value = ValueSelect.value;
|
||||
|
@ -110,241 +119,243 @@ function main_net_tools () {
|
|||
}
|
||||
}
|
||||
</script>";
|
||||
|
||||
echo "<div>";
|
||||
echo "<form name='actionbox' method='post'>";
|
||||
echo "<table class='databox filters' width=100% id=netToolTable>";
|
||||
echo "<tr><td>";
|
||||
echo __("Operation");
|
||||
ui_print_help_tip(
|
||||
__('You can set the command path in the menu Administration -> Extensions -> Config Network Tools'));
|
||||
echo "</td><td>";
|
||||
echo "<select name='operation' onChange='mostrarColumns(this);'>";
|
||||
echo "<option value='1'>" . __("Traceroute");
|
||||
echo "<option value='2'>" . __("Ping host & Latency");
|
||||
echo "<option value='3'>" . __("SNMP Interface status");
|
||||
echo "<option value='4'>" . __("Basic TCP Port Scan");
|
||||
echo "<option value='5'>" . __("DiG/Whois Lookup");
|
||||
echo "</select>";
|
||||
echo "</td>";
|
||||
echo "<td>";
|
||||
echo __("IP address");
|
||||
echo "</td><td>";
|
||||
echo "<select name='select_ips'>";
|
||||
foreach ($ips as $ip) {
|
||||
if ($ip['ip'] == $principal_ip) {
|
||||
echo "<option value='". $ip['ip'] ."' selected = 'selected'>" . $ip['ip'];
|
||||
}
|
||||
else {
|
||||
echo "<option value='". $ip['ip'] ."'>" . $ip['ip'];
|
||||
}
|
||||
}
|
||||
echo "</select>";
|
||||
echo "</td>";
|
||||
echo "<td id='snmpcolumn' style=\"display:none;\">";
|
||||
echo __("SNMP Community") . " ";
|
||||
echo "<input name=community type=text value='public'>";
|
||||
echo "</td><td>";
|
||||
echo "<input style='margin:0px;' name=submit type=submit class='sub next' value='".__('Execute')."'>";
|
||||
echo "</td>";
|
||||
echo "</tr></table>";
|
||||
echo "</form>";
|
||||
|
||||
|
||||
$operation = get_parameter ("operation", 0);
|
||||
$community = get_parameter ("community", "public");
|
||||
$ip = get_parameter("select_ips");
|
||||
|
||||
if(!validate_address($ip)){
|
||||
ui_print_error_message(__('The ip or dns name entered cannot be resolved'));
|
||||
}
|
||||
else{
|
||||
switch($operation) {
|
||||
case 1:
|
||||
$traceroute = whereis_the_command ('traceroute');
|
||||
if (empty($traceroute)) {
|
||||
ui_print_error_message(__('Traceroute executable does not exist.'));
|
||||
}
|
||||
else {
|
||||
echo "<h3>".__("Traceroute to "). $ip. "</h3>";
|
||||
echo "<pre>";
|
||||
echo system ("$traceroute $ip");
|
||||
echo "</pre>";
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
$ping = whereis_the_command ('ping');
|
||||
if (empty($ping)) {
|
||||
ui_print_error_message(__('Ping executable does not exist.'));
|
||||
}
|
||||
else {
|
||||
echo "<h3>" . __("Ping to %s", $ip) . "</h3>";
|
||||
echo "<pre>";
|
||||
echo system ("$ping -c 5 $ip");
|
||||
echo "</pre>";
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
$nmap = whereis_the_command ('nmap');
|
||||
if (empty($nmap)) {
|
||||
ui_print_error_message(__('Nmap executable does not exist.'));
|
||||
}
|
||||
else {
|
||||
echo "<h3>".__("Basic TCP Scan on "). $ip. "</h3>";
|
||||
echo "<pre>";
|
||||
echo system ("$nmap -F $ip");
|
||||
echo "</pre>";
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
echo "<h3>".__("Domain and IP information for "). $ip. "</h3>";
|
||||
|
||||
$dig = whereis_the_command ('dig');
|
||||
if (empty($dig)) {
|
||||
ui_print_error_message(__('Dig executable does not exist.'));
|
||||
}
|
||||
else {
|
||||
echo "<pre>";
|
||||
echo system ("dig $ip");
|
||||
echo "</pre>";
|
||||
}
|
||||
|
||||
$whois = whereis_the_command ('whois');
|
||||
if (empty($whois)) {
|
||||
ui_print_error_message(__('Whois executable does not exist.'));
|
||||
}
|
||||
else {
|
||||
echo "<pre>";
|
||||
echo system ("whois $ip");
|
||||
echo "</pre>";
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
echo "<h3>".__("SNMP information for "). $ip. "</h3>";
|
||||
|
||||
$snmpget = whereis_the_command ('snmpget');
|
||||
if (empty($snmpget)) {
|
||||
ui_print_error_message(__('SNMPget executable does not exist.'));
|
||||
}
|
||||
else {
|
||||
echo "<h4>" . __("Uptime") . "</h4>";
|
||||
echo "<pre>";
|
||||
echo exec ("$snmpget -Ounv -v1 -c $community $ip .1.3.6.1.2.1.1.3.0 ");
|
||||
echo "</pre>";
|
||||
echo "<h4>" . __("Device info") . "</h4>";
|
||||
echo "<pre>";
|
||||
|
||||
echo system ("$snmpget -Ounv -v1 -c $community $ip .1.3.6.1.2.1.1.1.0 ");
|
||||
echo "</pre>";
|
||||
|
||||
echo "<h4>Interface Information</h4>";
|
||||
echo "<table class=databox>";
|
||||
echo "<tr><th>".__("Interface");
|
||||
echo "<th>".__("Status");
|
||||
|
||||
$int_max = exec ("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.1.0 ");
|
||||
|
||||
for ($ax=0; $ax < $int_max; $ax++) {
|
||||
$interface = exec ("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.2.1.2.$ax ");
|
||||
$estado = exec ("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.2.1.8.$ax ");
|
||||
echo "<tr><td>$interface<td>$estado";
|
||||
}
|
||||
echo "</table>";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
echo "</div>";
|
||||
echo '<div>';
|
||||
echo "<form name='actionbox' method='post'>";
|
||||
echo "<table class='databox filters' width=100% id=netToolTable>";
|
||||
echo '<tr><td>';
|
||||
echo __('Operation');
|
||||
ui_print_help_tip(
|
||||
__('You can set the command path in the menu Administration -> Extensions -> Config Network Tools')
|
||||
);
|
||||
echo '</td><td>';
|
||||
echo "<select name='operation' onChange='mostrarColumns(this);'>";
|
||||
echo "<option value='1'>".__('Traceroute');
|
||||
echo "<option value='2'>".__('Ping host & Latency');
|
||||
echo "<option value='3'>".__('SNMP Interface status');
|
||||
echo "<option value='4'>".__('Basic TCP Port Scan');
|
||||
echo "<option value='5'>".__('DiG/Whois Lookup');
|
||||
echo '</select>';
|
||||
echo '</td>';
|
||||
echo '<td>';
|
||||
echo __('IP address');
|
||||
echo '</td><td>';
|
||||
echo "<select name='select_ips'>";
|
||||
foreach ($ips as $ip) {
|
||||
if ($ip['ip'] == $principal_ip) {
|
||||
echo "<option value='".$ip['ip']."' selected = 'selected'>".$ip['ip'];
|
||||
} else {
|
||||
echo "<option value='".$ip['ip']."'>".$ip['ip'];
|
||||
}
|
||||
}
|
||||
|
||||
echo '</select>';
|
||||
echo '</td>';
|
||||
echo "<td id='snmpcolumn' style=\"display:none;\">";
|
||||
echo __('SNMP Community').' ';
|
||||
echo "<input name=community type=text value='public'>";
|
||||
echo '</td><td>';
|
||||
echo "<input style='margin:0px;' name=submit type=submit class='sub next' value='".__('Execute')."'>";
|
||||
echo '</td>';
|
||||
echo '</tr></table>';
|
||||
echo '</form>';
|
||||
|
||||
$operation = get_parameter('operation', 0);
|
||||
$community = get_parameter('community', 'public');
|
||||
$ip = get_parameter('select_ips');
|
||||
|
||||
if (!validate_address($ip)) {
|
||||
ui_print_error_message(__('The ip or dns name entered cannot be resolved'));
|
||||
} else {
|
||||
switch ($operation) {
|
||||
case 1:
|
||||
$traceroute = whereis_the_command('traceroute');
|
||||
if (empty($traceroute)) {
|
||||
ui_print_error_message(__('Traceroute executable does not exist.'));
|
||||
} else {
|
||||
echo '<h3>'.__('Traceroute to ').$ip.'</h3>';
|
||||
echo '<pre>';
|
||||
echo system("$traceroute $ip");
|
||||
echo '</pre>';
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$ping = whereis_the_command('ping');
|
||||
if (empty($ping)) {
|
||||
ui_print_error_message(__('Ping executable does not exist.'));
|
||||
} else {
|
||||
echo '<h3>'.__('Ping to %s', $ip).'</h3>';
|
||||
echo '<pre>';
|
||||
echo system("$ping -c 5 $ip");
|
||||
echo '</pre>';
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
$nmap = whereis_the_command('nmap');
|
||||
if (empty($nmap)) {
|
||||
ui_print_error_message(__('Nmap executable does not exist.'));
|
||||
} else {
|
||||
echo '<h3>'.__('Basic TCP Scan on ').$ip.'</h3>';
|
||||
echo '<pre>';
|
||||
echo system("$nmap -F $ip");
|
||||
echo '</pre>';
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
echo '<h3>'.__('Domain and IP information for ').$ip.'</h3>';
|
||||
|
||||
$dig = whereis_the_command('dig');
|
||||
if (empty($dig)) {
|
||||
ui_print_error_message(__('Dig executable does not exist.'));
|
||||
} else {
|
||||
echo '<pre>';
|
||||
echo system("dig $ip");
|
||||
echo '</pre>';
|
||||
}
|
||||
|
||||
$whois = whereis_the_command('whois');
|
||||
if (empty($whois)) {
|
||||
ui_print_error_message(__('Whois executable does not exist.'));
|
||||
} else {
|
||||
echo '<pre>';
|
||||
echo system("whois $ip");
|
||||
echo '</pre>';
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
echo '<h3>'.__('SNMP information for ').$ip.'</h3>';
|
||||
|
||||
$snmpget = whereis_the_command('snmpget');
|
||||
if (empty($snmpget)) {
|
||||
ui_print_error_message(__('SNMPget executable does not exist.'));
|
||||
} else {
|
||||
echo '<h4>'.__('Uptime').'</h4>';
|
||||
echo '<pre>';
|
||||
echo exec("$snmpget -Ounv -v1 -c $community $ip .1.3.6.1.2.1.1.3.0 ");
|
||||
echo '</pre>';
|
||||
echo '<h4>'.__('Device info').'</h4>';
|
||||
echo '<pre>';
|
||||
|
||||
echo system("$snmpget -Ounv -v1 -c $community $ip .1.3.6.1.2.1.1.1.0 ");
|
||||
echo '</pre>';
|
||||
|
||||
echo '<h4>Interface Information</h4>';
|
||||
echo '<table class=databox>';
|
||||
echo '<tr><th>'.__('Interface');
|
||||
echo '<th>'.__('Status');
|
||||
|
||||
$int_max = exec("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.1.0 ");
|
||||
|
||||
for ($ax = 0; $ax < $int_max; $ax++) {
|
||||
$interface = exec("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.2.1.2.$ax ");
|
||||
$estado = exec("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.2.1.8.$ax ");
|
||||
echo "<tr><td>$interface<td>$estado";
|
||||
}
|
||||
|
||||
echo '</table>';
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
function godmode_net_tools() {
|
||||
global $config;
|
||||
|
||||
check_login();
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM")) {
|
||||
db_pandora_audit("ACL Violation",
|
||||
"Trying to access Profile Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
ui_print_page_header (__('Config Network Tools'));
|
||||
|
||||
$update_traceroute = (bool)get_parameter('update_traceroute', 0);
|
||||
|
||||
$traceroute_path = (string)get_parameter('traceroute_path', '');
|
||||
$ping_path = (string)get_parameter('ping_path', '');
|
||||
$nmap_path = (string)get_parameter('nmap_path', '');
|
||||
$dig_path = (string)get_parameter('dig_path', '');
|
||||
$snmpget_path = (string)get_parameter('snmpget_path', '');
|
||||
|
||||
|
||||
if ($update_traceroute) {
|
||||
$network_tools_config = array();
|
||||
$network_tools_config['traceroute_path'] = $traceroute_path;
|
||||
$network_tools_config['ping_path'] = $ping_path;
|
||||
$network_tools_config['nmap_path'] = $nmap_path;
|
||||
$network_tools_config['dig_path'] = $dig_path;
|
||||
$network_tools_config['snmpget_path'] = $snmpget_path;
|
||||
|
||||
$result = config_update_value('network_tools_config', json_encode($network_tools_config));
|
||||
|
||||
ui_print_result_message($result, __('Set the paths.'),
|
||||
__('Set the paths.'));
|
||||
}
|
||||
else {
|
||||
|
||||
if (isset($config['network_tools_config'])) {
|
||||
$network_tools_config_output = io_safe_output($config['network_tools_config']);
|
||||
$network_tools_config = json_decode($network_tools_config_output, true);
|
||||
$traceroute_path = $network_tools_config['traceroute_path'];
|
||||
$ping_path = $network_tools_config['ping_path'];
|
||||
$nmap_path = $network_tools_config['nmap_path'];
|
||||
$dig_path = $network_tools_config['dig_path'];
|
||||
$snmpget_path = $network_tools_config['snmpget_path'];
|
||||
}
|
||||
}
|
||||
|
||||
$table = null;
|
||||
$table->width = "100%";
|
||||
|
||||
$table->data = array();
|
||||
|
||||
$table->data[0][0] = __("Traceroute path");
|
||||
$table->data[0][0] .= ui_print_help_tip(__('If empty, %s will search the traceroute system.', get_product_name()), true);
|
||||
$table->data[0][1] = html_print_input_text('traceroute_path', $traceroute_path, '', 40, 255, true);
|
||||
|
||||
$table->data[1][0] = __("Ping path");
|
||||
$table->data[1][0] .= ui_print_help_tip(__('If empty, %s will search the ping system.', get_product_name()), true);
|
||||
$table->data[1][1] = html_print_input_text('ping_path', $ping_path, '', 40, 255, true);
|
||||
|
||||
$table->data[2][0] = __("Nmap path");
|
||||
$table->data[2][0] .= ui_print_help_tip(__('If empty, %s will search the nmap system.', get_product_name()), true);
|
||||
$table->data[2][1] = html_print_input_text('nmap_path', $nmap_path, '', 40, 255, true);
|
||||
|
||||
$table->data[3][0] = __("Dig path");
|
||||
$table->data[3][0] .= ui_print_help_tip(__('If empty, %s will search the dig system', get_product_name()), true);
|
||||
$table->data[3][1] = html_print_input_text('dig_path', $dig_path, '', 40, 255, true);
|
||||
|
||||
$table->data[4][0] = __("Snmpget path");
|
||||
$table->data[4][0] .= ui_print_help_tip(__('If empty, %s will search the snmpget system.', get_product_name()), true);
|
||||
$table->data[4][1] = html_print_input_text('snmpget_path', $snmpget_path, '', 40, 255, true);
|
||||
|
||||
echo '<form id="form_setup" method="post" >';
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . __('Options') . "</legend>";
|
||||
html_print_input_hidden('update_traceroute', 1);
|
||||
html_print_table($table);
|
||||
echo "</fieldset>";
|
||||
|
||||
echo '<div class="action-buttons" style="width: '.$table->width.'">';
|
||||
html_print_submit_button (__('Update'), 'update_button', false, 'class="sub upd"');
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
|
||||
function godmode_net_tools()
|
||||
{
|
||||
global $config;
|
||||
|
||||
check_login();
|
||||
|
||||
if (! check_acl($config['id_user'], 0, 'PM')) {
|
||||
db_pandora_audit(
|
||||
'ACL Violation',
|
||||
'Trying to access Profile Management'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
ui_print_page_header(__('Config Network Tools'));
|
||||
|
||||
$update_traceroute = (bool) get_parameter('update_traceroute', 0);
|
||||
|
||||
$traceroute_path = (string) get_parameter('traceroute_path', '');
|
||||
$ping_path = (string) get_parameter('ping_path', '');
|
||||
$nmap_path = (string) get_parameter('nmap_path', '');
|
||||
$dig_path = (string) get_parameter('dig_path', '');
|
||||
$snmpget_path = (string) get_parameter('snmpget_path', '');
|
||||
|
||||
if ($update_traceroute) {
|
||||
$network_tools_config = [];
|
||||
$network_tools_config['traceroute_path'] = $traceroute_path;
|
||||
$network_tools_config['ping_path'] = $ping_path;
|
||||
$network_tools_config['nmap_path'] = $nmap_path;
|
||||
$network_tools_config['dig_path'] = $dig_path;
|
||||
$network_tools_config['snmpget_path'] = $snmpget_path;
|
||||
|
||||
$result = config_update_value('network_tools_config', json_encode($network_tools_config));
|
||||
|
||||
ui_print_result_message(
|
||||
$result,
|
||||
__('Set the paths.'),
|
||||
__('Set the paths.')
|
||||
);
|
||||
} else {
|
||||
if (isset($config['network_tools_config'])) {
|
||||
$network_tools_config_output = io_safe_output($config['network_tools_config']);
|
||||
$network_tools_config = json_decode($network_tools_config_output, true);
|
||||
$traceroute_path = $network_tools_config['traceroute_path'];
|
||||
$ping_path = $network_tools_config['ping_path'];
|
||||
$nmap_path = $network_tools_config['nmap_path'];
|
||||
$dig_path = $network_tools_config['dig_path'];
|
||||
$snmpget_path = $network_tools_config['snmpget_path'];
|
||||
}
|
||||
}
|
||||
|
||||
$table = null;
|
||||
$table->width = '100%';
|
||||
|
||||
$table->data = [];
|
||||
|
||||
$table->data[0][0] = __('Traceroute path');
|
||||
$table->data[0][0] .= ui_print_help_tip(__('If empty, %s will search the traceroute system.', get_product_name()), true);
|
||||
$table->data[0][1] = html_print_input_text('traceroute_path', $traceroute_path, '', 40, 255, true);
|
||||
|
||||
$table->data[1][0] = __('Ping path');
|
||||
$table->data[1][0] .= ui_print_help_tip(__('If empty, %s will search the ping system.', get_product_name()), true);
|
||||
$table->data[1][1] = html_print_input_text('ping_path', $ping_path, '', 40, 255, true);
|
||||
|
||||
$table->data[2][0] = __('Nmap path');
|
||||
$table->data[2][0] .= ui_print_help_tip(__('If empty, %s will search the nmap system.', get_product_name()), true);
|
||||
$table->data[2][1] = html_print_input_text('nmap_path', $nmap_path, '', 40, 255, true);
|
||||
|
||||
$table->data[3][0] = __('Dig path');
|
||||
$table->data[3][0] .= ui_print_help_tip(__('If empty, %s will search the dig system', get_product_name()), true);
|
||||
$table->data[3][1] = html_print_input_text('dig_path', $dig_path, '', 40, 255, true);
|
||||
|
||||
$table->data[4][0] = __('Snmpget path');
|
||||
$table->data[4][0] .= ui_print_help_tip(__('If empty, %s will search the snmpget system.', get_product_name()), true);
|
||||
$table->data[4][1] = html_print_input_text('snmpget_path', $snmpget_path, '', 40, 255, true);
|
||||
|
||||
echo '<form id="form_setup" method="post" >';
|
||||
echo '<fieldset>';
|
||||
echo '<legend>'.__('Options').'</legend>';
|
||||
html_print_input_hidden('update_traceroute', 1);
|
||||
html_print_table($table);
|
||||
echo '</fieldset>';
|
||||
|
||||
echo '<div class="action-buttons" style="width: '.$table->width.'">';
|
||||
html_print_submit_button(__('Update'), 'update_button', false, 'class="sub upd"');
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
}
|
||||
|
||||
extensions_add_godmode_menu_option (__('Config Network Tools'), 'PM');
|
||||
extensions_add_godmode_function ('godmode_net_tools');
|
||||
?>
|
||||
|
||||
extensions_add_godmode_menu_option(__('Config Network Tools'), 'PM');
|
||||
extensions_add_godmode_function('godmode_net_tools');
|
||||
|
|
|
@ -4,83 +4,76 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function view_logfile($file_name)
|
||||
{
|
||||
global $config;
|
||||
|
||||
function view_logfile ($file_name) {
|
||||
global $config;
|
||||
|
||||
$memory_limit = ini_get("memory_limit");
|
||||
|
||||
if (strstr($memory_limit, "M") !== false) {
|
||||
$memory_limit = str_replace("M", "", $memory_limit);
|
||||
$memory_limit = $memory_limit * 1024 * 1024;
|
||||
|
||||
//Arbitrary size for the PHP program
|
||||
$memory_limit = $memory_limit - (8 * 1024 * 1024);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!file_exists($file_name)) {
|
||||
ui_print_error_message(__("Cannot find file") . "(" . $file_name . ")");
|
||||
}
|
||||
else {
|
||||
$file_size = filesize($file_name);
|
||||
|
||||
if ($memory_limit < $file_size) {
|
||||
echo "<h2>$file_name (" . __("File is too large than PHP memory allocated in the system.") . ")</h2>";
|
||||
echo "<h2>" . __("The preview file is imposible.") . "</h2>";
|
||||
}
|
||||
else if ($file_size > ($config['max_log_size'] * 1000)) {
|
||||
$data = file_get_contents ($file_name, false, NULL, $file_size - ($config['max_log_size'] * 1000));
|
||||
echo "<h2>$file_name (".format_numeric(filesize ($file_name)/1024)." KB) </h2>";
|
||||
echo "<textarea style='width: 98%; float:right; height: 200px; margin-bottom:20px;' name='$file_name'>";
|
||||
echo "... ";
|
||||
echo $data;
|
||||
echo "</textarea><br><br>";
|
||||
}
|
||||
else {
|
||||
$data = file_get_contents ($file_name);
|
||||
echo "<h2>$file_name (".format_numeric(filesize ($file_name)/1024)." KB) </h2>";
|
||||
echo "<textarea style='width: 98%; float:right; height: 200px; margin-bottom:20px;' name='$file_name'>";
|
||||
echo $data;
|
||||
echo "</textarea><br><br>";
|
||||
}
|
||||
}
|
||||
$memory_limit = ini_get('memory_limit');
|
||||
|
||||
if (strstr($memory_limit, 'M') !== false) {
|
||||
$memory_limit = str_replace('M', '', $memory_limit);
|
||||
$memory_limit = ($memory_limit * 1024 * 1024);
|
||||
|
||||
// Arbitrary size for the PHP program
|
||||
$memory_limit = ($memory_limit - (8 * 1024 * 1024));
|
||||
}
|
||||
|
||||
if (!file_exists($file_name)) {
|
||||
ui_print_error_message(__('Cannot find file').'('.$file_name.')');
|
||||
} else {
|
||||
$file_size = filesize($file_name);
|
||||
|
||||
if ($memory_limit < $file_size) {
|
||||
echo "<h2>$file_name (".__('File is too large than PHP memory allocated in the system.').')</h2>';
|
||||
echo '<h2>'.__('The preview file is imposible.').'</h2>';
|
||||
} else if ($file_size > ($config['max_log_size'] * 1000)) {
|
||||
$data = file_get_contents($file_name, false, null, ($file_size - ($config['max_log_size'] * 1000)));
|
||||
echo "<h2>$file_name (".format_numeric(filesize($file_name) / 1024).' KB) </h2>';
|
||||
echo "<textarea style='width: 98%; float:right; height: 200px; margin-bottom:20px;' name='$file_name'>";
|
||||
echo '... ';
|
||||
echo $data;
|
||||
echo '</textarea><br><br>';
|
||||
} else {
|
||||
$data = file_get_contents($file_name);
|
||||
echo "<h2>$file_name (".format_numeric(filesize($file_name) / 1024).' KB) </h2>';
|
||||
echo "<textarea style='width: 98%; float:right; height: 200px; margin-bottom:20px;' name='$file_name'>";
|
||||
echo $data;
|
||||
echo '</textarea><br><br>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function pandoralogs_extension_main () {
|
||||
global $config;
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
ui_print_page_header (__("System logfile viewer"), "images/extensions.png", false, "", true, "" );
|
||||
|
||||
echo "<p>" . __('Use this tool to view your %s logfiles directly on the console', get_product_name()) . "</p>";
|
||||
function pandoralogs_extension_main()
|
||||
{
|
||||
global $config;
|
||||
|
||||
echo "<p>" . __('You can choose the amount of information shown in general setup (Log size limit in system logs viewer extension), ' . $config['max_log_size'] * 1000 . 'B at the moment') . "</p>";
|
||||
|
||||
$logs_directory = (!empty($config["server_log_dir"])) ? io_safe_output($config["server_log_dir"]) : "/var/log/pandora";
|
||||
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
view_logfile ($config["homedir"]."/pandora_console.log");
|
||||
view_logfile ($logs_directory."/pandora_server.log");
|
||||
view_logfile ($logs_directory."/pandora_server.error");
|
||||
ui_print_page_header(__('System logfile viewer'), 'images/extensions.png', false, '', true, '');
|
||||
|
||||
echo '<p>'.__('Use this tool to view your %s logfiles directly on the console', get_product_name()).'</p>';
|
||||
|
||||
echo '<p>'.__('You can choose the amount of information shown in general setup (Log size limit in system logs viewer extension), '.($config['max_log_size'] * 1000).'B at the moment').'</p>';
|
||||
|
||||
$logs_directory = (!empty($config['server_log_dir'])) ? io_safe_output($config['server_log_dir']) : '/var/log/pandora';
|
||||
|
||||
view_logfile($config['homedir'].'/pandora_console.log');
|
||||
view_logfile($logs_directory.'/pandora_server.log');
|
||||
view_logfile($logs_directory.'/pandora_server.error');
|
||||
}
|
||||
|
||||
extensions_add_godmode_menu_option (__('System logfiles'), 'PM','', null, "v1r1");
|
||||
|
||||
extensions_add_godmode_menu_option(__('System logfiles'), 'PM', '', null, 'v1r1');
|
||||
extensions_add_godmode_function('pandoralogs_extension_main');
|
||||
|
||||
?>
|
|
@ -4,434 +4,415 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
function pluginreg_extension_main()
|
||||
{
|
||||
global $config;
|
||||
|
||||
function pluginreg_extension_main () {
|
||||
global $config;
|
||||
check_login();
|
||||
|
||||
check_login();
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
ui_require_css_file ('firts_task');
|
||||
ui_print_page_header (__('Plugin registration'), "images/extensions.png", false, "", true, "" );
|
||||
|
||||
echo '<div class="new_task">
|
||||
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
ui_require_css_file('firts_task');
|
||||
ui_print_page_header(__('Plugin registration'), 'images/extensions.png', false, '', true, '');
|
||||
|
||||
echo '<div class="new_task">
|
||||
<div class="image_task">';
|
||||
echo html_print_image("images/firts_task/icono_grande_import.png", true, array("title" => __("Plugin Registration") ));
|
||||
echo '</div>';
|
||||
echo '<div class="text_task">';
|
||||
echo '<h3>' . __("Plugin registration") . '</h3>';
|
||||
echo '<p id="description_task">' .
|
||||
__("This extension makes registering server plugins an easier task.
|
||||
echo html_print_image('images/firts_task/icono_grande_import.png', true, ['title' => __('Plugin Registration') ]);
|
||||
echo '</div>';
|
||||
echo '<div class="text_task">';
|
||||
echo '<h3>'.__('Plugin registration').'</h3>';
|
||||
echo '<p id="description_task">'.__(
|
||||
"This extension makes registering server plugins an easier task.
|
||||
Here you can upload a server plugin in .pspz zipped format.
|
||||
Please refer to the official documentation on how to obtain and use Server Plugins.
|
||||
<br><br>You can get more plugins in our <a href='http://pandorafms.com/Library/Library/'>Public Resource Library</a> ") . '</p>';
|
||||
// Upload form
|
||||
echo "<form name='submit_plugin' method='post' enctype='multipart/form-data'>";
|
||||
echo '<table class="" id="table1" width="100%" border="0" cellpadding="4" cellspacing="4">';
|
||||
echo "<tr><td class='datos'><input type='file' name='plugin_upload' />";
|
||||
echo "<td class='datos'><input type='submit' class='sub next' value='".__('Upload')."' />";
|
||||
echo "</form></table>";
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
<br><br>You can get more plugins in our <a href='http://pandorafms.com/Library/Library/'>Public Resource Library</a> "
|
||||
).'</p>';
|
||||
// Upload form
|
||||
echo "<form name='submit_plugin' method='post' enctype='multipart/form-data'>";
|
||||
echo '<table class="" id="table1" width="100%" border="0" cellpadding="4" cellspacing="4">';
|
||||
echo "<tr><td class='datos'><input type='file' name='plugin_upload' />";
|
||||
echo "<td class='datos'><input type='submit' class='sub next' value='".__('Upload')."' />";
|
||||
echo '</form></table>';
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
|
||||
|
||||
$zip = null;
|
||||
$upload = false;
|
||||
if (isset($_FILES['plugin_upload'])) {
|
||||
$config["plugin_store"] = $config["attachment_store"] . "/plugin";
|
||||
|
||||
$name_file = $_FILES['plugin_upload']['name'];
|
||||
|
||||
$zip = zip_open($_FILES['plugin_upload']['tmp_name']);
|
||||
$upload = true;
|
||||
}
|
||||
|
||||
if ($zip) {
|
||||
while ($zip_entry = zip_read($zip)) {
|
||||
if (zip_entry_open($zip, $zip_entry, "r")) {
|
||||
if (zip_entry_name($zip_entry) == "plugin_definition.ini") {
|
||||
$basepath = $config["attachment_store"];
|
||||
}
|
||||
else {
|
||||
$basepath = $config["plugin_store"];
|
||||
}
|
||||
$filename = $basepath . "/". zip_entry_name($zip_entry);
|
||||
$fp = fopen($filename, 'w');
|
||||
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
|
||||
fwrite($fp, $buf);
|
||||
fclose($fp);
|
||||
chmod ($filename, 0755);
|
||||
zip_entry_close($zip_entry);
|
||||
}
|
||||
}
|
||||
zip_close($zip);
|
||||
}
|
||||
|
||||
if ($upload) {
|
||||
// Parse with sections
|
||||
if (! $ini_array = parse_ini_file($config["attachment_store"] . "/plugin_definition.ini", true)) {
|
||||
echo "<h2 class=error>".__("Cannot load INI file")."</h2>";
|
||||
}
|
||||
else {
|
||||
|
||||
$version = preg_replace("/.*[.]/", "", $name_file);
|
||||
|
||||
$exec_path = $config["plugin_store"] . "/" . $ini_array["plugin_definition"]["filename"];
|
||||
|
||||
$file_exec_path = $exec_path;
|
||||
|
||||
if (isset($ini_array["plugin_definition"]["execution_command"])
|
||||
&& ($ini_array["plugin_definition"]["execution_command"] != "")) {
|
||||
|
||||
$exec_path = $ini_array["plugin_definition"]["execution_command"] . " " . $config["plugin_store"] . "/" . $ini_array["plugin_definition"]["filename"];
|
||||
}
|
||||
|
||||
if (isset($ini_array["plugin_definition"]["execution_postcommand"])
|
||||
&& ($ini_array["plugin_definition"]["execution_postcommand"] != "")) {
|
||||
|
||||
$exec_path = $exec_path . " " .$ini_array["plugin_definition"]["execution_postcommand"];
|
||||
}
|
||||
|
||||
if (!file_exists($file_exec_path)) {
|
||||
echo "<h2 class=error>".__("Plugin exec not found. Aborting!")."</h2>";
|
||||
unlink ($config["attachment_store"] . "/plugin_definition.ini");
|
||||
}
|
||||
else {
|
||||
// Verify if a plugin with the same name is already registered
|
||||
|
||||
$sql0 = "SELECT COUNT(*)
|
||||
$zip = null;
|
||||
$upload = false;
|
||||
if (isset($_FILES['plugin_upload'])) {
|
||||
$config['plugin_store'] = $config['attachment_store'].'/plugin';
|
||||
|
||||
$name_file = $_FILES['plugin_upload']['name'];
|
||||
|
||||
$zip = zip_open($_FILES['plugin_upload']['tmp_name']);
|
||||
$upload = true;
|
||||
}
|
||||
|
||||
if ($zip) {
|
||||
while ($zip_entry = zip_read($zip)) {
|
||||
if (zip_entry_open($zip, $zip_entry, 'r')) {
|
||||
if (zip_entry_name($zip_entry) == 'plugin_definition.ini') {
|
||||
$basepath = $config['attachment_store'];
|
||||
} else {
|
||||
$basepath = $config['plugin_store'];
|
||||
}
|
||||
|
||||
$filename = $basepath.'/'.zip_entry_name($zip_entry);
|
||||
$fp = fopen($filename, 'w');
|
||||
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
|
||||
fwrite($fp, $buf);
|
||||
fclose($fp);
|
||||
chmod($filename, 0755);
|
||||
zip_entry_close($zip_entry);
|
||||
}
|
||||
}
|
||||
|
||||
zip_close($zip);
|
||||
}
|
||||
|
||||
if ($upload) {
|
||||
// Parse with sections
|
||||
if (! $ini_array = parse_ini_file($config['attachment_store'].'/plugin_definition.ini', true)) {
|
||||
echo '<h2 class=error>'.__('Cannot load INI file').'</h2>';
|
||||
} else {
|
||||
$version = preg_replace('/.*[.]/', '', $name_file);
|
||||
|
||||
$exec_path = $config['plugin_store'].'/'.$ini_array['plugin_definition']['filename'];
|
||||
|
||||
$file_exec_path = $exec_path;
|
||||
|
||||
if (isset($ini_array['plugin_definition']['execution_command'])
|
||||
&& ($ini_array['plugin_definition']['execution_command'] != '')
|
||||
) {
|
||||
$exec_path = $ini_array['plugin_definition']['execution_command'].' '.$config['plugin_store'].'/'.$ini_array['plugin_definition']['filename'];
|
||||
}
|
||||
|
||||
if (isset($ini_array['plugin_definition']['execution_postcommand'])
|
||||
&& ($ini_array['plugin_definition']['execution_postcommand'] != '')
|
||||
) {
|
||||
$exec_path = $exec_path.' '.$ini_array['plugin_definition']['execution_postcommand'];
|
||||
}
|
||||
|
||||
if (!file_exists($file_exec_path)) {
|
||||
echo '<h2 class=error>'.__('Plugin exec not found. Aborting!').'</h2>';
|
||||
unlink($config['attachment_store'].'/plugin_definition.ini');
|
||||
} else {
|
||||
// Verify if a plugin with the same name is already registered
|
||||
$sql0 = "SELECT COUNT(*)
|
||||
FROM tplugin
|
||||
WHERE name = '" . io_safe_input ($ini_array["plugin_definition"]["name"]) . "'";
|
||||
$result = db_get_sql ($sql0);
|
||||
|
||||
|
||||
if ($result> 0) {
|
||||
echo "<h2 class=error>".__("Plugin already registered. Aborting!")."</h2>";
|
||||
unlink ($config["attachment_store"] . "/plugin_definition.ini");
|
||||
}
|
||||
else {
|
||||
|
||||
$values = array(
|
||||
'name' => io_safe_input ($ini_array["plugin_definition"]["name"]),
|
||||
'description' => io_safe_input ($ini_array["plugin_definition"]["description"]),
|
||||
'max_timeout' => $ini_array["plugin_definition"]["timeout"],
|
||||
'execute' => io_safe_input ($exec_path),
|
||||
'net_dst_opt' => $ini_array["plugin_definition"]["ip_opt"],
|
||||
'net_port_opt' => $ini_array["plugin_definition"]["port_opt"],
|
||||
'user_opt' => $ini_array["plugin_definition"]["user_opt"],
|
||||
'pass_opt' => $ini_array["plugin_definition"]["pass_opt"],
|
||||
'parameters' => $ini_array["plugin_definition"]["parameters"],
|
||||
'plugin_type' => $ini_array["plugin_definition"]["plugin_type"]);
|
||||
|
||||
|
||||
switch ($version) {
|
||||
case 'pspz':
|
||||
// Fixed the static parameters
|
||||
// for
|
||||
// the dinamic parameters of pandoras 5
|
||||
|
||||
$total_macros = 0;
|
||||
$macros = array();
|
||||
|
||||
if (!isset($values['parameters']))
|
||||
$values['parameters'] = "";
|
||||
|
||||
if ($values['net_dst_opt'] != "") {
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Target IP from net';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
$values['net_dst_opt'] . ' _field' . $total_macros . '_ ';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['ip_opt'] != "") {
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Target IP';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
$values['ip_opt'] . ' _field' . $total_macros . '_ ';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['net_port_opt'] != "") {
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Port from net';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
$values['net_port_opt'] . ' _field' . $total_macros . '_ ';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['port_opt'] != "") {
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Port';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
$values['port_opt'] . ' _field' . $total_macros . '_ ';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['user_opt'] != "") {
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Username';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
$values['user_opt'] . ' _field' . $total_macros . '_ ';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['pass_opt'] != "") {
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Password';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
$values['pass_opt'] . ' _field' . $total_macros . '_ ';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
}
|
||||
|
||||
// A last parameter is defined always to
|
||||
// add the old "Plug-in parameters" in the
|
||||
// side of the module
|
||||
$total_macros++;
|
||||
|
||||
$macro = array();
|
||||
$macro['macro'] = '_field' . $total_macros . '_';
|
||||
$macro['desc'] = 'Plug-in Parameters';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .=
|
||||
' _field' . $total_macros . '_';
|
||||
|
||||
$macros[(string)$total_macros] = $macro;
|
||||
|
||||
break;
|
||||
case 'pspz2':
|
||||
// Fill the macros field.
|
||||
$total_macros =
|
||||
$ini_array["plugin_definition"]["total_macros_provided"];
|
||||
|
||||
$macros = array();
|
||||
for ($it_macros = 1; $it_macros <= $total_macros; $it_macros++) {
|
||||
$label = "macro_" . $it_macros;
|
||||
|
||||
$macro = array();
|
||||
|
||||
$macro['macro'] = '_field' . $it_macros . '_';
|
||||
$macro['hide'] =
|
||||
$ini_array[$label]['hide'];
|
||||
$macro['desc'] = io_safe_input(
|
||||
$ini_array[$label]['description']);
|
||||
$macro['help'] = io_safe_input(
|
||||
$ini_array[$label]['help']);
|
||||
$macro['value'] = io_safe_input(
|
||||
$ini_array[$label]['value']);
|
||||
|
||||
$macros[(string)$it_macros] = $macro;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($macros)) {
|
||||
$values['macros'] = json_encode($macros);
|
||||
}
|
||||
|
||||
$create_id = db_process_sql_insert('tplugin', $values);
|
||||
|
||||
if (empty($create_id)) {
|
||||
ui_print_error_message(
|
||||
__('Plug-in Remote Registered unsuccessfull'));
|
||||
ui_print_info_message(
|
||||
__('Please check the syntax of file "plugin_definition.ini"'));
|
||||
}
|
||||
else {
|
||||
for ($ax = 1; $ax <= $ini_array["plugin_definition"]["total_modules_provided"]; $ax++) {
|
||||
$label = "module" . $ax;
|
||||
|
||||
$plugin_user = "";
|
||||
if (isset($ini_array[$label]["plugin_user"]))
|
||||
$plugin_user = $ini_array[$label]["plugin_user"];
|
||||
$plugin_pass = "";
|
||||
if (isset($ini_array[$label]["plugin_pass"]))
|
||||
$plugin_pass = $ini_array[$label]["plugin_pass"];
|
||||
$plugin_parameter = "";
|
||||
if (isset($ini_array[$label]["plugin_parameter"]))
|
||||
$plugin_parameter = $ini_array[$label]["plugin_parameter"];
|
||||
$unit = "";
|
||||
if (isset($ini_array[$label]["unit"]))
|
||||
$unit = $ini_array[$label]["unit"];
|
||||
|
||||
$values = array(
|
||||
'name' => io_safe_input ($ini_array[$label]["name"]),
|
||||
'description' => io_safe_input ($ini_array[$label]["description"]),
|
||||
'id_group' => $ini_array[$label]["id_group"],
|
||||
'type' => $ini_array[$label]["type"],
|
||||
'max' => isset($ini_array[$label]["max"]) ? $ini_array[$label]["max"] : '',
|
||||
'min' => isset($ini_array[$label]["min"]) ? $ini_array[$label]["min"] : '',
|
||||
'module_interval' => isset($ini_array[$label]["module_interval"]) ? $ini_array[$label]["module_interval"] : '',
|
||||
'id_module_group' => $ini_array[$label]["id_module_group"],
|
||||
'id_modulo' => $ini_array[$label]["id_modulo"],
|
||||
'plugin_user' => io_safe_input ($plugin_user),
|
||||
'plugin_pass' => io_safe_input ($plugin_pass),
|
||||
'plugin_parameter' => io_safe_input ($plugin_parameter),
|
||||
'unit' => io_safe_input ($unit),
|
||||
'max_timeout' => isset($ini_array[$label]["max_timeout"]) ? $ini_array[$label]["max_timeout"] : '',
|
||||
'history_data' => isset($ini_array[$label]["history_data"]) ? $ini_array[$label]["history_data"] : '',
|
||||
'dynamic_interval' => isset($ini_array[$label]["dynamic_interval"]) ? $ini_array[$label]["dynamic_interval"] : '',
|
||||
'dynamic_min' => isset($ini_array[$label]["dynamic_min"]) ? $ini_array[$label]["dynamic_min"] : '',
|
||||
'dynamic_max' => isset($ini_array[$label]["dynamic_max"]) ? $ini_array[$label]["dynamic_max"] : '',
|
||||
'dynamic_two_tailed' => isset($ini_array[$label]["dynamic_two_tailed"]) ? $ini_array[$label]["dynamic_two_tailed"] : '',
|
||||
'min_warning' => isset($ini_array[$label]["min_warning"]) ? $ini_array[$label]["min_warning"] : '',
|
||||
'max_warning' => isset($ini_array[$label]["max_warning"]) ? $ini_array[$label]["max_warning"] : '',
|
||||
'str_warning' => isset($ini_array[$label]["str_warning"]) ? $ini_array[$label]["str_warning"] : '',
|
||||
'min_critical' => isset($ini_array[$label]["min_critical"]) ? $ini_array[$label]["min_critical"] : '',
|
||||
'max_critical' => isset($ini_array[$label]["max_critical"]) ? $ini_array[$label]["max_critical"] : '',
|
||||
'str_critical' => isset($ini_array[$label]["str_critical"]) ? $ini_array[$label]["str_critical"] : '',
|
||||
'min_ff_event' => isset($ini_array[$label]["min_ff_event"]) ? $ini_array[$label]["min_ff_event"] : '',
|
||||
'tcp_port' => isset($ini_array[$label]["tcp_port"]) ? $ini_array[$label]["tcp_port"] : '',
|
||||
'id_plugin' => $create_id);
|
||||
|
||||
$macros_component = $macros;
|
||||
|
||||
switch ($version) {
|
||||
case 'pspz':
|
||||
// Fixed the static parameters
|
||||
// for
|
||||
// the dinamic parameters of pandoras 5
|
||||
|
||||
foreach ($macros_component as $key => $macro) {
|
||||
if ($macro['desc'] == 'Target IP from net') {
|
||||
if (!empty($values['ip_target'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['ip_target']);
|
||||
}
|
||||
}
|
||||
if ($macro['desc'] == 'Target IP') {
|
||||
if (!empty($values['ip_target'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['ip_target']);
|
||||
}
|
||||
}
|
||||
else if ($macro['desc'] == 'Port from net') {
|
||||
if (!empty($values['tcp_port'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['tcp_port']);
|
||||
}
|
||||
}
|
||||
else if ($macro['desc'] == 'Port') {
|
||||
if (!empty($values['tcp_port'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['tcp_port']);
|
||||
}
|
||||
}
|
||||
else if ($macro['desc'] == 'Username') {
|
||||
if (!empty($values['plugin_user'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['plugin_user']);
|
||||
}
|
||||
}
|
||||
else if ($macro['desc'] == 'Password') {
|
||||
if (!empty($values['plugin_pass'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['plugin_pass']);
|
||||
}
|
||||
}
|
||||
else if ($macro['desc'] == 'Plug-in Parameters') {
|
||||
if (!empty($values['plugin_parameter'])) {
|
||||
$macros_component[$key]['value'] =
|
||||
io_safe_input($values['plugin_parameter']);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'pspz2':
|
||||
if ($total_macros > 0) {
|
||||
for ($it_macros = 1; $it_macros <= $total_macros; $it_macros++) {
|
||||
$macro = "macro_" . $it_macros . "_value";
|
||||
|
||||
// Set the value or use the default
|
||||
if (isset($ini_array[$label][$macro])) {
|
||||
$macros_component[(string)$it_macros]['value'] =
|
||||
io_safe_input($ini_array[$label][$macro]);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($macros_component)) {
|
||||
$values['macros'] = json_encode($macros_component);
|
||||
}
|
||||
|
||||
db_process_sql_insert('tnetwork_component', $values);
|
||||
|
||||
echo "<h3 class=suc>" .
|
||||
__("Module plugin registered") . " : " . $ini_array[$label]["name"] .
|
||||
"</h3>";
|
||||
}
|
||||
|
||||
echo "<h2 class=suc>" .
|
||||
__("Plugin") . " " . $ini_array["plugin_definition"]["name"] . " " . __("Registered successfully") .
|
||||
"</h2>";
|
||||
}
|
||||
unlink ($config["attachment_store"] . "/plugin_definition.ini");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
WHERE name = '".io_safe_input($ini_array['plugin_definition']['name'])."'";
|
||||
$result = db_get_sql($sql0);
|
||||
|
||||
if ($result > 0) {
|
||||
echo '<h2 class=error>'.__('Plugin already registered. Aborting!').'</h2>';
|
||||
unlink($config['attachment_store'].'/plugin_definition.ini');
|
||||
} else {
|
||||
$values = [
|
||||
'name' => io_safe_input($ini_array['plugin_definition']['name']),
|
||||
'description' => io_safe_input($ini_array['plugin_definition']['description']),
|
||||
'max_timeout' => $ini_array['plugin_definition']['timeout'],
|
||||
'execute' => io_safe_input($exec_path),
|
||||
'net_dst_opt' => $ini_array['plugin_definition']['ip_opt'],
|
||||
'net_port_opt' => $ini_array['plugin_definition']['port_opt'],
|
||||
'user_opt' => $ini_array['plugin_definition']['user_opt'],
|
||||
'pass_opt' => $ini_array['plugin_definition']['pass_opt'],
|
||||
'parameters' => $ini_array['plugin_definition']['parameters'],
|
||||
'plugin_type' => $ini_array['plugin_definition']['plugin_type'],
|
||||
];
|
||||
|
||||
switch ($version) {
|
||||
case 'pspz':
|
||||
// Fixed the static parameters
|
||||
// for
|
||||
// the dinamic parameters of pandoras 5
|
||||
$total_macros = 0;
|
||||
$macros = [];
|
||||
|
||||
if (!isset($values['parameters'])) {
|
||||
$values['parameters'] = '';
|
||||
}
|
||||
|
||||
if ($values['net_dst_opt'] != '') {
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Target IP from net';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= $values['net_dst_opt'].' _field'.$total_macros.'_ ';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['ip_opt'] != '') {
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Target IP';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= $values['ip_opt'].' _field'.$total_macros.'_ ';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['net_port_opt'] != '') {
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Port from net';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= $values['net_port_opt'].' _field'.$total_macros.'_ ';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['port_opt'] != '') {
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Port';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= $values['port_opt'].' _field'.$total_macros.'_ ';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['user_opt'] != '') {
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Username';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= $values['user_opt'].' _field'.$total_macros.'_ ';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
}
|
||||
|
||||
if ($values['pass_opt'] != '') {
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Password';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= $values['pass_opt'].' _field'.$total_macros.'_ ';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
}
|
||||
|
||||
// A last parameter is defined always to
|
||||
// add the old "Plug-in parameters" in the
|
||||
// side of the module
|
||||
$total_macros++;
|
||||
|
||||
$macro = [];
|
||||
$macro['macro'] = '_field'.$total_macros.'_';
|
||||
$macro['desc'] = 'Plug-in Parameters';
|
||||
$macro['help'] = '';
|
||||
$macro['value'] = '';
|
||||
|
||||
$values['parameters'] .= ' _field'.$total_macros.'_';
|
||||
|
||||
$macros[(string) $total_macros] = $macro;
|
||||
|
||||
break;
|
||||
|
||||
case 'pspz2':
|
||||
// Fill the macros field.
|
||||
$total_macros = $ini_array['plugin_definition']['total_macros_provided'];
|
||||
|
||||
$macros = [];
|
||||
for ($it_macros = 1; $it_macros <= $total_macros; $it_macros++) {
|
||||
$label = 'macro_'.$it_macros;
|
||||
|
||||
$macro = [];
|
||||
|
||||
$macro['macro'] = '_field'.$it_macros.'_';
|
||||
$macro['hide'] = $ini_array[$label]['hide'];
|
||||
$macro['desc'] = io_safe_input(
|
||||
$ini_array[$label]['description']
|
||||
);
|
||||
$macro['help'] = io_safe_input(
|
||||
$ini_array[$label]['help']
|
||||
);
|
||||
$macro['value'] = io_safe_input(
|
||||
$ini_array[$label]['value']
|
||||
);
|
||||
|
||||
$macros[(string) $it_macros] = $macro;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($macros)) {
|
||||
$values['macros'] = json_encode($macros);
|
||||
}
|
||||
|
||||
$create_id = db_process_sql_insert('tplugin', $values);
|
||||
|
||||
if (empty($create_id)) {
|
||||
ui_print_error_message(
|
||||
__('Plug-in Remote Registered unsuccessfull')
|
||||
);
|
||||
ui_print_info_message(
|
||||
__('Please check the syntax of file "plugin_definition.ini"')
|
||||
);
|
||||
} else {
|
||||
for ($ax = 1; $ax <= $ini_array['plugin_definition']['total_modules_provided']; $ax++) {
|
||||
$label = 'module'.$ax;
|
||||
|
||||
$plugin_user = '';
|
||||
if (isset($ini_array[$label]['plugin_user'])) {
|
||||
$plugin_user = $ini_array[$label]['plugin_user'];
|
||||
}
|
||||
|
||||
$plugin_pass = '';
|
||||
if (isset($ini_array[$label]['plugin_pass'])) {
|
||||
$plugin_pass = $ini_array[$label]['plugin_pass'];
|
||||
}
|
||||
|
||||
$plugin_parameter = '';
|
||||
if (isset($ini_array[$label]['plugin_parameter'])) {
|
||||
$plugin_parameter = $ini_array[$label]['plugin_parameter'];
|
||||
}
|
||||
|
||||
$unit = '';
|
||||
if (isset($ini_array[$label]['unit'])) {
|
||||
$unit = $ini_array[$label]['unit'];
|
||||
}
|
||||
|
||||
$values = [
|
||||
'name' => io_safe_input($ini_array[$label]['name']),
|
||||
'description' => io_safe_input($ini_array[$label]['description']),
|
||||
'id_group' => $ini_array[$label]['id_group'],
|
||||
'type' => $ini_array[$label]['type'],
|
||||
'max' => isset($ini_array[$label]['max']) ? $ini_array[$label]['max'] : '',
|
||||
'min' => isset($ini_array[$label]['min']) ? $ini_array[$label]['min'] : '',
|
||||
'module_interval' => isset($ini_array[$label]['module_interval']) ? $ini_array[$label]['module_interval'] : '',
|
||||
'id_module_group' => $ini_array[$label]['id_module_group'],
|
||||
'id_modulo' => $ini_array[$label]['id_modulo'],
|
||||
'plugin_user' => io_safe_input($plugin_user),
|
||||
'plugin_pass' => io_safe_input($plugin_pass),
|
||||
'plugin_parameter' => io_safe_input($plugin_parameter),
|
||||
'unit' => io_safe_input($unit),
|
||||
'max_timeout' => isset($ini_array[$label]['max_timeout']) ? $ini_array[$label]['max_timeout'] : '',
|
||||
'history_data' => isset($ini_array[$label]['history_data']) ? $ini_array[$label]['history_data'] : '',
|
||||
'dynamic_interval' => isset($ini_array[$label]['dynamic_interval']) ? $ini_array[$label]['dynamic_interval'] : '',
|
||||
'dynamic_min' => isset($ini_array[$label]['dynamic_min']) ? $ini_array[$label]['dynamic_min'] : '',
|
||||
'dynamic_max' => isset($ini_array[$label]['dynamic_max']) ? $ini_array[$label]['dynamic_max'] : '',
|
||||
'dynamic_two_tailed' => isset($ini_array[$label]['dynamic_two_tailed']) ? $ini_array[$label]['dynamic_two_tailed'] : '',
|
||||
'min_warning' => isset($ini_array[$label]['min_warning']) ? $ini_array[$label]['min_warning'] : '',
|
||||
'max_warning' => isset($ini_array[$label]['max_warning']) ? $ini_array[$label]['max_warning'] : '',
|
||||
'str_warning' => isset($ini_array[$label]['str_warning']) ? $ini_array[$label]['str_warning'] : '',
|
||||
'min_critical' => isset($ini_array[$label]['min_critical']) ? $ini_array[$label]['min_critical'] : '',
|
||||
'max_critical' => isset($ini_array[$label]['max_critical']) ? $ini_array[$label]['max_critical'] : '',
|
||||
'str_critical' => isset($ini_array[$label]['str_critical']) ? $ini_array[$label]['str_critical'] : '',
|
||||
'min_ff_event' => isset($ini_array[$label]['min_ff_event']) ? $ini_array[$label]['min_ff_event'] : '',
|
||||
'tcp_port' => isset($ini_array[$label]['tcp_port']) ? $ini_array[$label]['tcp_port'] : '',
|
||||
'id_plugin' => $create_id,
|
||||
];
|
||||
|
||||
$macros_component = $macros;
|
||||
|
||||
switch ($version) {
|
||||
case 'pspz':
|
||||
// Fixed the static parameters
|
||||
// for
|
||||
// the dinamic parameters of pandoras 5
|
||||
foreach ($macros_component as $key => $macro) {
|
||||
if ($macro['desc'] == 'Target IP from net') {
|
||||
if (!empty($values['ip_target'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['ip_target']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($macro['desc'] == 'Target IP') {
|
||||
if (!empty($values['ip_target'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['ip_target']);
|
||||
}
|
||||
} else if ($macro['desc'] == 'Port from net') {
|
||||
if (!empty($values['tcp_port'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['tcp_port']);
|
||||
}
|
||||
} else if ($macro['desc'] == 'Port') {
|
||||
if (!empty($values['tcp_port'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['tcp_port']);
|
||||
}
|
||||
} else if ($macro['desc'] == 'Username') {
|
||||
if (!empty($values['plugin_user'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['plugin_user']);
|
||||
}
|
||||
} else if ($macro['desc'] == 'Password') {
|
||||
if (!empty($values['plugin_pass'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['plugin_pass']);
|
||||
}
|
||||
} else if ($macro['desc'] == 'Plug-in Parameters') {
|
||||
if (!empty($values['plugin_parameter'])) {
|
||||
$macros_component[$key]['value'] = io_safe_input($values['plugin_parameter']);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'pspz2':
|
||||
if ($total_macros > 0) {
|
||||
for ($it_macros = 1; $it_macros <= $total_macros; $it_macros++) {
|
||||
$macro = 'macro_'.$it_macros.'_value';
|
||||
|
||||
// Set the value or use the default
|
||||
if (isset($ini_array[$label][$macro])) {
|
||||
$macros_component[(string) $it_macros]['value'] = io_safe_input($ini_array[$label][$macro]);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($macros_component)) {
|
||||
$values['macros'] = json_encode($macros_component);
|
||||
}
|
||||
|
||||
db_process_sql_insert('tnetwork_component', $values);
|
||||
|
||||
echo '<h3 class=suc>'.__('Module plugin registered').' : '.$ini_array[$label]['name'].'</h3>';
|
||||
}
|
||||
|
||||
echo '<h2 class=suc>'.__('Plugin').' '.$ini_array['plugin_definition']['name'].' '.__('Registered successfully').'</h2>';
|
||||
}
|
||||
|
||||
unlink($config['attachment_store'].'/plugin_definition.ini');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extensions_add_godmode_menu_option (__('Register plugin'), 'PM','gservers', null, "v1r1");
|
||||
extensions_add_godmode_function('pluginreg_extension_main');
|
||||
|
||||
?>
|
||||
extensions_add_godmode_menu_option(__('Register plugin'), 'PM', 'gservers', null, 'v1r1');
|
||||
extensions_add_godmode_function('pluginreg_extension_main');
|
||||
|
|
|
@ -4,191 +4,204 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2014 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
|
||||
include_once($config['homedir'] . '/include/graphs/fgraph.php');
|
||||
include_once($config['homedir'] . '/include/functions_snmp_browser.php');
|
||||
require_once $config['homedir'].'/include/graphs/fgraph.php';
|
||||
require_once $config['homedir'].'/include/functions_snmp_browser.php';
|
||||
|
||||
function pandora_realtime_graphs () {
|
||||
global $config;
|
||||
check_login ();
|
||||
|
||||
$id_network = get_parameter('id_network', 0);
|
||||
$action = get_parameter('action', 'list');
|
||||
function pandora_realtime_graphs()
|
||||
{
|
||||
global $config;
|
||||
check_login();
|
||||
|
||||
$onheader = array();
|
||||
$id_network = get_parameter('id_network', 0);
|
||||
$action = get_parameter('action', 'list');
|
||||
|
||||
$hide_header = get_parameter('hide_header', 0);
|
||||
if (!$hide_header) {
|
||||
ui_print_page_header (__("Realtime graphs"), "images/extensions.png", false, "", false, $onheader);
|
||||
}
|
||||
$onheader = [];
|
||||
|
||||
$chart[time()]['graph'] = '0';
|
||||
$interactive_graph = true;
|
||||
$color = array();
|
||||
$legend = '';
|
||||
$long_index = array();
|
||||
$no_data_image = '';
|
||||
$hide_header = get_parameter('hide_header', 0);
|
||||
if (!$hide_header) {
|
||||
ui_print_page_header(__('Realtime graphs'), 'images/extensions.png', false, '', false, $onheader);
|
||||
}
|
||||
|
||||
$canvas = '<div id="graph_container">';
|
||||
$canvas .= '<div id="chartLegend"></div>';
|
||||
$chart[time()]['graph'] = '0';
|
||||
$interactive_graph = true;
|
||||
$color = [];
|
||||
$legend = '';
|
||||
$long_index = [];
|
||||
$no_data_image = '';
|
||||
|
||||
$width = 800;
|
||||
$height = 300;
|
||||
$canvas = '<div id="graph_container">';
|
||||
$canvas .= '<div id="chartLegend"></div>';
|
||||
|
||||
$data_array['realtime']['data'][0][0] = time() - 10;
|
||||
$data_array['realtime']['data'][0][1] = 0;
|
||||
$data_array['realtime']['data'][1][0] = time();
|
||||
$data_array['realtime']['data'][1][1] = 0;
|
||||
$data_array['realtime']['color'] = 'green';
|
||||
$width = 800;
|
||||
$height = 300;
|
||||
|
||||
$params =array(
|
||||
'agent_module_id' => false,
|
||||
'period' => 300,
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'unit' => $unit,
|
||||
'only_image' => $only_image,
|
||||
'homeurl' => $homeurl,
|
||||
'type_graph' => 'area',
|
||||
'font' => $config['fontpath'],
|
||||
'font-size' => $config['font_size'],
|
||||
'array_data_create' => $data_array,
|
||||
'show_legend' => false,
|
||||
'show_menu' => false
|
||||
);
|
||||
$data_array['realtime']['data'][0][0] = (time() - 10);
|
||||
$data_array['realtime']['data'][0][1] = 0;
|
||||
$data_array['realtime']['data'][1][0] = time();
|
||||
$data_array['realtime']['data'][1][1] = 0;
|
||||
$data_array['realtime']['color'] = 'green';
|
||||
|
||||
$canvas .= grafico_modulo_sparse($params);
|
||||
$params = [
|
||||
'agent_module_id' => false,
|
||||
'period' => 300,
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'unit' => $unit,
|
||||
'only_image' => $only_image,
|
||||
'homeurl' => $homeurl,
|
||||
'type_graph' => 'area',
|
||||
'font' => $config['fontpath'],
|
||||
'font-size' => $config['font_size'],
|
||||
'array_data_create' => $data_array,
|
||||
'show_legend' => false,
|
||||
'show_menu' => false,
|
||||
];
|
||||
|
||||
$canvas .= '</div>';
|
||||
echo $canvas;
|
||||
$canvas .= grafico_modulo_sparse($params);
|
||||
|
||||
$table->width = '100%';
|
||||
$table->id = 'table-form';
|
||||
$table->class = 'databox filters';
|
||||
$table->style = array ();
|
||||
$table->cellpadding = '0';
|
||||
$table->cellspacing = '0';
|
||||
$table->style['graph'] = 'font-weight: bold;';
|
||||
$table->style['refresh'] = 'font-weight: bold;';
|
||||
$table->style['incremental'] = 'font-weight: bold;';
|
||||
$table->style['reset'] = 'font-weight: bold;';
|
||||
$table->style['snmp_address'] = 'font-weight: bold;';
|
||||
$table->style['snmp_community'] = 'font-weight: bold;';
|
||||
$table->style['snmp_oid'] = 'font-weight: bold;';
|
||||
$table->style['snmp_oid'] = 'font-weight: bold;';
|
||||
$table->data = array ();
|
||||
$canvas .= '</div>';
|
||||
echo $canvas;
|
||||
|
||||
$graph_fields['cpu_load'] = __('%s Server CPU', get_product_name());
|
||||
$graph_fields['pending_packets'] = __('Pending packages from %s Server', get_product_name());
|
||||
$graph_fields['disk_io_wait'] = __('%s Server Disk IO Wait', get_product_name());
|
||||
$graph_fields['apache_load'] = __('%s Server Apache load', get_product_name());
|
||||
$graph_fields['mysql_load'] = __('%s Server MySQL load', get_product_name());
|
||||
$graph_fields['server_load'] = __('%s Server load', get_product_name());
|
||||
$graph_fields['snmp_interface'] = __('SNMP Interface throughput');
|
||||
$table->width = '100%';
|
||||
$table->id = 'table-form';
|
||||
$table->class = 'databox filters';
|
||||
$table->style = [];
|
||||
$table->cellpadding = '0';
|
||||
$table->cellspacing = '0';
|
||||
$table->style['graph'] = 'font-weight: bold;';
|
||||
$table->style['refresh'] = 'font-weight: bold;';
|
||||
$table->style['incremental'] = 'font-weight: bold;';
|
||||
$table->style['reset'] = 'font-weight: bold;';
|
||||
$table->style['snmp_address'] = 'font-weight: bold;';
|
||||
$table->style['snmp_community'] = 'font-weight: bold;';
|
||||
$table->style['snmp_oid'] = 'font-weight: bold;';
|
||||
$table->style['snmp_oid'] = 'font-weight: bold;';
|
||||
$table->data = [];
|
||||
|
||||
$graph = get_parameter('graph', 'cpu_load');
|
||||
$refresh = get_parameter('refresh', '1000');
|
||||
$graph_fields['cpu_load'] = __('%s Server CPU', get_product_name());
|
||||
$graph_fields['pending_packets'] = __('Pending packages from %s Server', get_product_name());
|
||||
$graph_fields['disk_io_wait'] = __('%s Server Disk IO Wait', get_product_name());
|
||||
$graph_fields['apache_load'] = __('%s Server Apache load', get_product_name());
|
||||
$graph_fields['mysql_load'] = __('%s Server MySQL load', get_product_name());
|
||||
$graph_fields['server_load'] = __('%s Server load', get_product_name());
|
||||
$graph_fields['snmp_interface'] = __('SNMP Interface throughput');
|
||||
|
||||
if ($graph != 'snmp_module') {
|
||||
$data['graph'] = __('Graph') . ' ' . html_print_select ($graph_fields, 'graph', $graph, '', '', 0, true);
|
||||
}
|
||||
$graph = get_parameter('graph', 'cpu_load');
|
||||
$refresh = get_parameter('refresh', '1000');
|
||||
|
||||
$refresh_fields[1000] = human_time_description_raw(1, true, 'large');
|
||||
$refresh_fields[5000] = human_time_description_raw(5, true, 'large');
|
||||
$refresh_fields[10000] = human_time_description_raw(10, true, 'large');
|
||||
$refresh_fields[30000] = human_time_description_raw(30, true, 'large');
|
||||
if ($graph != 'snmp_module') {
|
||||
$data['graph'] = __('Graph').' '.html_print_select($graph_fields, 'graph', $graph, '', '', 0, true);
|
||||
}
|
||||
|
||||
if ($graph == 'snmp_module') {
|
||||
$agent_alias = io_safe_output(get_parameter('agent_alias', '')) ;
|
||||
$module_name = io_safe_output(get_parameter('module_name', '')) ;
|
||||
$module_incremental = get_parameter ('incremental', 0);
|
||||
$data['module_info'] = "$agent_alias: <b>$module_name</b>";
|
||||
$refresh_fields[1000] = human_time_description_raw(1, true, 'large');
|
||||
$refresh_fields[5000] = human_time_description_raw(5, true, 'large');
|
||||
$refresh_fields[10000] = human_time_description_raw(10, true, 'large');
|
||||
$refresh_fields[30000] = human_time_description_raw(30, true, 'large');
|
||||
|
||||
// Append all the hidden in this cell
|
||||
$data['module_info'] .= html_print_input_hidden ('incremental', $module_incremental, true);
|
||||
$data['module_info'] .= html_print_select (
|
||||
array('snmp_module' => '-'), 'graph', 'snmp_module', '', '', 0, true, false, true, '', false, 'display: none;'
|
||||
);
|
||||
}
|
||||
$data['refresh'] = __('Refresh interval') . ' ' . html_print_select ($refresh_fields, 'refresh', $refresh, '', '', 0, true);
|
||||
if ($graph != 'snmp_module') {
|
||||
$data['incremental'] = __('Incremental') . ' ' . html_print_checkbox ('incremental', 1, 0, true);
|
||||
}
|
||||
$data['reset'] = html_print_button(__('Clear graph'), 'reset', false, 'javascript:realtimeGraphs.clearGraph();', 'class="sub delete" style="margin-top:0px;"', true);
|
||||
$table->data[] = $data;
|
||||
if ($graph == 'snmp_module') {
|
||||
$agent_alias = io_safe_output(get_parameter('agent_alias', ''));
|
||||
$module_name = io_safe_output(get_parameter('module_name', ''));
|
||||
$module_incremental = get_parameter('incremental', 0);
|
||||
$data['module_info'] = "$agent_alias: <b>$module_name</b>";
|
||||
|
||||
if ($graph == 'snmp_interface' || $graph == 'snmp_module') {
|
||||
$snmp_address = get_parameter('snmp_address', '');
|
||||
$snmp_community = get_parameter('snmp_community', '');
|
||||
$snmp_oid = get_parameter('snmp_oid', '');
|
||||
$snmp_ver = get_parameter('snmp_ver', '');
|
||||
// Append all the hidden in this cell
|
||||
$data['module_info'] .= html_print_input_hidden('incremental', $module_incremental, true);
|
||||
$data['module_info'] .= html_print_select(
|
||||
['snmp_module' => '-'],
|
||||
'graph',
|
||||
'snmp_module',
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
'',
|
||||
false,
|
||||
'display: none;'
|
||||
);
|
||||
}
|
||||
|
||||
$data = array();
|
||||
$data['refresh'] = __('Refresh interval').' '.html_print_select($refresh_fields, 'refresh', $refresh, '', '', 0, true);
|
||||
if ($graph != 'snmp_module') {
|
||||
$data['incremental'] = __('Incremental').' '.html_print_checkbox('incremental', 1, 0, true);
|
||||
}
|
||||
|
||||
$data['snmp_address'] = __('Target IP') . ' ' . html_print_input_text ('ip_target', $snmp_address, '', 50, 255, true);
|
||||
$table->colspan[1]['snmp_address'] = 2;
|
||||
$data['reset'] = html_print_button(__('Clear graph'), 'reset', false, 'javascript:realtimeGraphs.clearGraph();', 'class="sub delete" style="margin-top:0px;"', true);
|
||||
$table->data[] = $data;
|
||||
|
||||
$data['snmp_community'] = __('Community') . ' ' . html_print_input_text ('snmp_community', $snmp_community, '', 50, 255, true);
|
||||
$table->colspan[1]['snmp_community'] = 2;
|
||||
if ($graph == 'snmp_interface' || $graph == 'snmp_module') {
|
||||
$snmp_address = get_parameter('snmp_address', '');
|
||||
$snmp_community = get_parameter('snmp_community', '');
|
||||
$snmp_oid = get_parameter('snmp_oid', '');
|
||||
$snmp_ver = get_parameter('snmp_ver', '');
|
||||
|
||||
$table->data[] = $data;
|
||||
$data = [];
|
||||
|
||||
$snmp_versions = array();
|
||||
$snmp_versions['1'] = '1';
|
||||
$snmp_versions['2'] = '2';
|
||||
$snmp_versions['2c'] = '2c';
|
||||
$data['snmp_address'] = __('Target IP').' '.html_print_input_text('ip_target', $snmp_address, '', 50, 255, true);
|
||||
$table->colspan[1]['snmp_address'] = 2;
|
||||
|
||||
$data = array();
|
||||
$data['snmp_oid'] = __('OID') . ' ' . html_print_input_text ('snmp_oid', $snmp_oid, '', 100, 255, true);
|
||||
$table->colspan[2]['snmp_oid'] = 2;
|
||||
$data['snmp_community'] = __('Community').' '.html_print_input_text('snmp_community', $snmp_community, '', 50, 255, true);
|
||||
$table->colspan[1]['snmp_community'] = 2;
|
||||
|
||||
$data['snmp_ver'] = __('Version') . ' ' . html_print_select ($snmp_versions, 'snmp_version', $snmp_ver, '', '', 0, true);
|
||||
$data['snmp_ver'] .= ' ' . html_print_button (__('SNMP walk'), 'snmp_walk', false, 'javascript:realtimeGraphs.snmpBrowserWindow();', 'class="sub next"', true);
|
||||
$table->colspan[2]['snmp_ver'] = 2;
|
||||
$table->data[] = $data;
|
||||
|
||||
$table->data[] = $data;
|
||||
$snmp_versions = [];
|
||||
$snmp_versions['1'] = '1';
|
||||
$snmp_versions['2'] = '2';
|
||||
$snmp_versions['2c'] = '2c';
|
||||
|
||||
// Hide some options in snmp_module graphs
|
||||
if ($graph == 'snmp_module') {
|
||||
$table->rowstyle[1] = "display: none;";
|
||||
$table->rowstyle[2] = "display: none;";
|
||||
}
|
||||
snmp_browser_print_container (false, '100%', '60%', 'none');
|
||||
}
|
||||
$data = [];
|
||||
$data['snmp_oid'] = __('OID').' '.html_print_input_text('snmp_oid', $snmp_oid, '', 100, 255, true);
|
||||
$table->colspan[2]['snmp_oid'] = 2;
|
||||
|
||||
// Print the relative path to AJAX calls:
|
||||
html_print_input_hidden('rel_path', get_parameter('rel_path', ''));
|
||||
$data['snmp_ver'] = __('Version').' '.html_print_select($snmp_versions, 'snmp_version', $snmp_ver, '', '', 0, true);
|
||||
$data['snmp_ver'] .= ' '.html_print_button(__('SNMP walk'), 'snmp_walk', false, 'javascript:realtimeGraphs.snmpBrowserWindow();', 'class="sub next"', true);
|
||||
$table->colspan[2]['snmp_ver'] = 2;
|
||||
|
||||
// Print the form
|
||||
echo '<form id="realgraph" method="post">';
|
||||
html_print_table($table);
|
||||
echo '</form>';
|
||||
$table->data[] = $data;
|
||||
|
||||
// Define a custom action to save the OID selected in the SNMP browser to the form
|
||||
html_print_input_hidden ('custom_action', urlencode (base64_encode(' <a href="javascript:realtimeGraphs.setOID();"><img src="' . ui_get_full_url("images") . '/input_filter.disabled.png" title="' . __("Use this OID") . '" style="vertical-align: middle;"></img></a>')), false);
|
||||
html_print_input_hidden ('incremental_base', '0');
|
||||
// Hide some options in snmp_module graphs
|
||||
if ($graph == 'snmp_module') {
|
||||
$table->rowstyle[1] = 'display: none;';
|
||||
$table->rowstyle[2] = 'display: none;';
|
||||
}
|
||||
|
||||
echo '<script type="text/javascript" src="'.ui_get_full_url("extensions/realtime_graphs/realtime_graphs.js").'"></script>';
|
||||
echo '<script type="text/javascript" src="'.ui_get_full_url("include/javascript/pandora_snmp_browser.js").'"></script>';
|
||||
echo '<link rel="stylesheet" type="text/css" href="'.ui_get_full_url("extensions/realtime_graphs/realtime_graphs.css").'"></style>';
|
||||
snmp_browser_print_container(false, '100%', '60%', 'none');
|
||||
}
|
||||
|
||||
// Store servers timezone offset to be retrieved from js
|
||||
set_js_value('timezone_offset', date('Z', time()));
|
||||
// Print the relative path to AJAX calls:
|
||||
html_print_input_hidden('rel_path', get_parameter('rel_path', ''));
|
||||
|
||||
// Print the form
|
||||
echo '<form id="realgraph" method="post">';
|
||||
html_print_table($table);
|
||||
echo '</form>';
|
||||
|
||||
// Define a custom action to save the OID selected in the SNMP browser to the form
|
||||
html_print_input_hidden('custom_action', urlencode(base64_encode(' <a href="javascript:realtimeGraphs.setOID();"><img src="'.ui_get_full_url('images').'/input_filter.disabled.png" title="'.__('Use this OID').'" style="vertical-align: middle;"></img></a>')), false);
|
||||
html_print_input_hidden('incremental_base', '0');
|
||||
|
||||
echo '<script type="text/javascript" src="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.js').'"></script>';
|
||||
echo '<script type="text/javascript" src="'.ui_get_full_url('include/javascript/pandora_snmp_browser.js').'"></script>';
|
||||
echo '<link rel="stylesheet" type="text/css" href="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.css').'"></style>';
|
||||
|
||||
// Store servers timezone offset to be retrieved from js
|
||||
set_js_value('timezone_offset', date('Z', time()));
|
||||
}
|
||||
|
||||
extensions_add_operation_menu_option (__('Realtime graphs'), "estado", null, "v1r1","view");
|
||||
extensions_add_main_function ('pandora_realtime_graphs');
|
||||
|
||||
$db = NULL;
|
||||
?>
|
||||
extensions_add_operation_menu_option(__('Realtime graphs'), 'estado', null, 'v1r1', 'view');
|
||||
extensions_add_main_function('pandora_realtime_graphs');
|
||||
|
||||
$db = null;
|
||||
|
|
|
@ -4,101 +4,111 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2014 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
require_once ('../../include/functions_html.php');
|
||||
require_once '../../include/functions_html.php';
|
||||
|
||||
$graph = $_POST['graph'];
|
||||
$graph_title = $_POST['graph_title'];
|
||||
$refresh = $_POST['refresh'];
|
||||
|
||||
$os = strtolower(PHP_OS);
|
||||
if (substr($os, 0, 3) === 'win') {
|
||||
$os = 'windows';
|
||||
if (substr($os, 0, 3) === 'win') {
|
||||
$os = 'windows';
|
||||
}
|
||||
switch($graph) {
|
||||
case 'cpu_load':
|
||||
if ( $os == 'windows')
|
||||
$data = exec('wmic cpu get loadpercentage|find /I /V "Loadpercentage" | findstr /r "[0-9]" ');
|
||||
else
|
||||
$data = exec("top -bn 2 -d 0.01 | grep '^Cpu' | tail -n 1 | awk '{ print $2+$4+$6 }'");
|
||||
break;
|
||||
case 'pending_packets':
|
||||
$data = exec("ls /var/spool/pandora/data_in/*.data | wc -l");
|
||||
break;
|
||||
case 'disk_io_wait':
|
||||
if ( $os == 'windows')
|
||||
$data = exec("vmstat 1 3 | tail -1 | awk '{ print $16 }'");
|
||||
else
|
||||
$data = exec("vmstat 1 3 | tail -1 | awk '{ print $16 }'");
|
||||
break;
|
||||
case 'mysql_load':
|
||||
if ( $os == 'windows')
|
||||
$data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(mysqld)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."');
|
||||
else
|
||||
$data = exec("ps aux | grep mysqld | grep -v safe | grep -v grep | awk '{ print $3 }'");
|
||||
break;
|
||||
case 'apache_load':
|
||||
if ( $os == 'windows')
|
||||
$data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(httpd)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."');
|
||||
else
|
||||
$data = exec("ps aux | grep apache2 | grep -v safe | grep -v grep | awk '{ sum+=$3 } END { print sum }'");
|
||||
break;
|
||||
case 'server_load':
|
||||
if ( $os == 'windows')
|
||||
$data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(pandora_server)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."');
|
||||
else
|
||||
$data = exec("ps aux | grep pandora_server | grep -v grep | awk '{ print $3 }'");
|
||||
break;
|
||||
case 'snmp_interface':
|
||||
case 'snmp_module':
|
||||
$snmp_address = $_POST['snmp_address'];
|
||||
$snmp_community = $_POST['snmp_community'];
|
||||
$snmp_ver = $_POST['snmp_ver'];
|
||||
$snmp_oid = $_POST['snmp_oid'];
|
||||
|
||||
if (empty($snmp_address) || empty($snmp_oid)) {
|
||||
$data = 0;
|
||||
}
|
||||
else {
|
||||
$data = get_snmpwalk($snmp_address, $snmp_ver, $snmp_community, '', '', '', '', '', '', 0, $snmp_oid);
|
||||
$data_index = array_keys($data);
|
||||
$graph_title = $data_index[0];
|
||||
if (!empty($data)) {
|
||||
$data_array = explode(' ', reset($data));
|
||||
if (count($data_array) > 1) {
|
||||
$data = $data_array[1];
|
||||
}
|
||||
// Redefine boolean data
|
||||
switch ($data) {
|
||||
case "up(1)":
|
||||
$data = 1;
|
||||
break;
|
||||
case "down(0)":
|
||||
$data = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$data = 0;
|
||||
|
||||
switch ($graph) {
|
||||
case 'cpu_load':
|
||||
if ($os == 'windows') {
|
||||
$data = exec('wmic cpu get loadpercentage|find /I /V "Loadpercentage" | findstr /r "[0-9]" ');
|
||||
} else {
|
||||
$data = exec("top -bn 2 -d 0.01 | grep '^Cpu' | tail -n 1 | awk '{ print $2+$4+$6 }'");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'pending_packets':
|
||||
$data = exec('ls /var/spool/pandora/data_in/*.data | wc -l');
|
||||
break;
|
||||
|
||||
case 'disk_io_wait':
|
||||
if ($os == 'windows') {
|
||||
$data = exec("vmstat 1 3 | tail -1 | awk '{ print $16 }'");
|
||||
} else {
|
||||
$data = exec("vmstat 1 3 | tail -1 | awk '{ print $16 }'");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'mysql_load':
|
||||
if ($os == 'windows') {
|
||||
$data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(mysqld)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."');
|
||||
} else {
|
||||
$data = exec("ps aux | grep mysqld | grep -v safe | grep -v grep | awk '{ print $3 }'");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'apache_load':
|
||||
if ($os == 'windows') {
|
||||
$data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(httpd)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."');
|
||||
} else {
|
||||
$data = exec("ps aux | grep apache2 | grep -v safe | grep -v grep | awk '{ sum+=$3 } END { print sum }'");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'server_load':
|
||||
if ($os == 'windows') {
|
||||
$data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(pandora_server)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."');
|
||||
} else {
|
||||
$data = exec("ps aux | grep pandora_server | grep -v grep | awk '{ print $3 }'");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'snmp_interface':
|
||||
case 'snmp_module':
|
||||
$snmp_address = $_POST['snmp_address'];
|
||||
$snmp_community = $_POST['snmp_community'];
|
||||
$snmp_ver = $_POST['snmp_ver'];
|
||||
$snmp_oid = $_POST['snmp_oid'];
|
||||
|
||||
if (empty($snmp_address) || empty($snmp_oid)) {
|
||||
$data = 0;
|
||||
} else {
|
||||
$data = get_snmpwalk($snmp_address, $snmp_ver, $snmp_community, '', '', '', '', '', '', 0, $snmp_oid);
|
||||
$data_index = array_keys($data);
|
||||
$graph_title = $data_index[0];
|
||||
if (!empty($data)) {
|
||||
$data_array = explode(' ', reset($data));
|
||||
if (count($data_array) > 1) {
|
||||
$data = $data_array[1];
|
||||
}
|
||||
|
||||
// Redefine boolean data
|
||||
switch ($data) {
|
||||
case 'up(1)':
|
||||
$data = 1;
|
||||
break;
|
||||
|
||||
case 'down(0)':
|
||||
$data = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
$data = 0;
|
||||
}
|
||||
|
||||
if (empty($data)) {
|
||||
$data = 0;
|
||||
$data = 0;
|
||||
}
|
||||
|
||||
echo '{
|
||||
"label": "' . $graph_title . '",
|
||||
"data": [["' . time() . '", ' . $data . ']]
|
||||
"label": "'.$graph_title.'",
|
||||
"data": [["'.time().'", '.$data.']]
|
||||
}';
|
||||
?>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
#chartLegend {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
height: 30px;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
#chartLegend table {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
#graph_container {
|
||||
width: 800px;
|
||||
margin: 20px auto !important;
|
||||
width: 800px;
|
||||
margin: 20px auto !important;
|
||||
}
|
||||
|
|
|
@ -1,210 +1,218 @@
|
|||
(function () {
|
||||
var numberOfPoints = 100;
|
||||
var refresh = parseInt($('#refresh').val());
|
||||
var incremental = $('#checkbox-incremental').is(':checked') || $('#hidden-incremental').val() == 1;
|
||||
var lastIncVal = null;
|
||||
var intervalRef = null;
|
||||
var currentXHR = null;
|
||||
(function() {
|
||||
var numberOfPoints = 100;
|
||||
var refresh = parseInt($("#refresh").val());
|
||||
var incremental =
|
||||
$("#checkbox-incremental").is(":checked") ||
|
||||
$("#hidden-incremental").val() == 1;
|
||||
var lastIncVal = null;
|
||||
var intervalRef = null;
|
||||
var currentXHR = null;
|
||||
|
||||
var plot;
|
||||
var plotOptions = {
|
||||
legend: { container: $("#chartLegend") },
|
||||
xaxis: {
|
||||
tickFormatter: function (timestamp, axis) {
|
||||
var date = new Date(timestamp * 1000);
|
||||
|
||||
var server_timezone_offset = get_php_value('timezone_offset');
|
||||
var local_timezone_offset = date.getTimezoneOffset()*60*-1;
|
||||
|
||||
if (server_timezone_offset != local_timezone_offset) {
|
||||
// If timezone of server and client is different, adjust the time to the server
|
||||
date = new Date((timestamp + (server_timezone_offset - local_timezone_offset)) * 1000);
|
||||
}
|
||||
|
||||
var hours = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours());
|
||||
var minutes = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
|
||||
var seconds = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
|
||||
var formattedTime = hours + ':' + minutes + ':' + seconds;
|
||||
return formattedTime;
|
||||
}
|
||||
},
|
||||
yaxis: {
|
||||
tickFormatter: function (value, axis) {
|
||||
return shortNumber(roundToTwo(value)) ;
|
||||
}
|
||||
},
|
||||
series: {
|
||||
lines: {
|
||||
lineWidth: 2,
|
||||
fill: true
|
||||
}
|
||||
},
|
||||
colors: ['#6db431']
|
||||
};
|
||||
var plot;
|
||||
var plotOptions = {
|
||||
legend: { container: $("#chartLegend") },
|
||||
xaxis: {
|
||||
tickFormatter: function(timestamp, axis) {
|
||||
var date = new Date(timestamp * 1000);
|
||||
|
||||
function updatePlot (data) {
|
||||
plot = $.plot($('.graph'), data, plotOptions);
|
||||
}
|
||||
var server_timezone_offset = get_php_value("timezone_offset");
|
||||
var local_timezone_offset = date.getTimezoneOffset() * 60 * -1;
|
||||
|
||||
function requestData () {
|
||||
var rel_path = $("#hidden-rel_path").val();
|
||||
if (server_timezone_offset != local_timezone_offset) {
|
||||
// If timezone of server and client is different, adjust the time to the server
|
||||
date = new Date(
|
||||
(timestamp + (server_timezone_offset - local_timezone_offset)) *
|
||||
1000
|
||||
);
|
||||
}
|
||||
|
||||
currentXHR = $.ajax({
|
||||
url: rel_path + "extensions/realtime_graphs/ajax.php",
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
data: {
|
||||
graph: $('#graph :selected').val(),
|
||||
graph_title: $('#graph :selected').html(),
|
||||
snmp_community: $('#text-snmp_community').val(),
|
||||
snmp_oid: $('#text-snmp_oid').val(),
|
||||
snmp_ver: $('#snmp_version :selected').val(),
|
||||
snmp_address: $('#text-ip_target').val(),
|
||||
refresh: refresh
|
||||
},
|
||||
success: function (serie) {
|
||||
var timestamp = serie.data[0][0];
|
||||
var data = plot.getData();
|
||||
|
||||
if (incremental) {
|
||||
var currentVal = serie.data[0][1];
|
||||
// Try to avoid the first value, cause we need at least two values to get the increment
|
||||
serie.data[0][1] = lastIncVal == null ? 0 : currentVal - lastIncVal;
|
||||
// Incremental is always positive
|
||||
if (serie.data[0][1] < 0) serie.data[0][1] = 0;
|
||||
// Store the current value to use it into the next request
|
||||
lastIncVal = currentVal;
|
||||
}
|
||||
|
||||
if (data.length === 0) {
|
||||
for (i = 0; i < numberOfPoints; i++) {
|
||||
var step = i * (refresh / 1000);
|
||||
serie.data.unshift([timestamp - step, 0]);
|
||||
}
|
||||
|
||||
serie = [serie];
|
||||
updatePlot(serie);
|
||||
return;
|
||||
}
|
||||
var hours =
|
||||
date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
||||
var minutes =
|
||||
date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
||||
var seconds =
|
||||
date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
||||
var formattedTime = hours + ":" + minutes + ":" + seconds;
|
||||
return formattedTime;
|
||||
}
|
||||
},
|
||||
yaxis: {
|
||||
tickFormatter: function(value, axis) {
|
||||
return shortNumber(roundToTwo(value));
|
||||
}
|
||||
},
|
||||
series: {
|
||||
lines: {
|
||||
lineWidth: 2,
|
||||
fill: true
|
||||
}
|
||||
},
|
||||
colors: ["#6db431"]
|
||||
};
|
||||
|
||||
data[0].label = serie.label;
|
||||
if (data[0].data.length >= numberOfPoints) {
|
||||
data[0].data.shift();
|
||||
}
|
||||
|
||||
data[0].data.push(serie.data[0]);
|
||||
updatePlot(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function startDataPooling () {
|
||||
intervalRef = window.setInterval(requestData, refresh);
|
||||
}
|
||||
function updatePlot(data) {
|
||||
plot = $.plot($(".graph"), data, plotOptions);
|
||||
}
|
||||
|
||||
function resetDataPooling () {
|
||||
if (currentXHR !== null) currentXHR.abort();
|
||||
// Stop and start the interval
|
||||
window.clearInterval(intervalRef);
|
||||
startDataPooling();
|
||||
}
|
||||
function requestData() {
|
||||
var rel_path = $("#hidden-rel_path").val();
|
||||
|
||||
function clearGraph () {
|
||||
var data = plot.getData();
|
||||
if (data.length === 0) return;
|
||||
currentXHR = $.ajax({
|
||||
url: rel_path + "extensions/realtime_graphs/ajax.php",
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
data: {
|
||||
graph: $("#graph :selected").val(),
|
||||
graph_title: $("#graph :selected").html(),
|
||||
snmp_community: $("#text-snmp_community").val(),
|
||||
snmp_oid: $("#text-snmp_oid").val(),
|
||||
snmp_ver: $("#snmp_version :selected").val(),
|
||||
snmp_address: $("#text-ip_target").val(),
|
||||
refresh: refresh
|
||||
},
|
||||
success: function(serie) {
|
||||
var timestamp = serie.data[0][0];
|
||||
var data = plot.getData();
|
||||
|
||||
for (i = 0; i < data[0].data.length; i ++) {
|
||||
data[0].data[i][1] = 0;
|
||||
}
|
||||
if (incremental) lastIncVal = null;
|
||||
|
||||
updatePlot(data);
|
||||
if (incremental) {
|
||||
var currentVal = serie.data[0][1];
|
||||
// Try to avoid the first value, cause we need at least two values to get the increment
|
||||
serie.data[0][1] = lastIncVal == null ? 0 : currentVal - lastIncVal;
|
||||
// Incremental is always positive
|
||||
if (serie.data[0][1] < 0) serie.data[0][1] = 0;
|
||||
// Store the current value to use it into the next request
|
||||
lastIncVal = currentVal;
|
||||
}
|
||||
|
||||
resetDataPooling();
|
||||
}
|
||||
if (data.length === 0) {
|
||||
for (i = 0; i < numberOfPoints; i++) {
|
||||
var step = i * (refresh / 1000);
|
||||
serie.data.unshift([timestamp - step, 0]);
|
||||
}
|
||||
|
||||
// Set the form OID to the value selected in the SNMP browser
|
||||
function setOID () {
|
||||
if ($('#snmp_browser_version').val() == '3') {
|
||||
$('#text-snmp_oid').val($('#table1-0-1').text());
|
||||
} else {
|
||||
$('#text-snmp_oid').val($('#snmp_selected_oid').text());
|
||||
}
|
||||
|
||||
// Close the SNMP browser
|
||||
$('.ui-dialog-titlebar-close').trigger('click');
|
||||
}
|
||||
serie = [serie];
|
||||
updatePlot(serie);
|
||||
return;
|
||||
}
|
||||
|
||||
// Show the SNMP browser window
|
||||
function snmpBrowserWindow () {
|
||||
|
||||
// Keep elements in the form and the SNMP browser synced
|
||||
$('#text-target_ip').val($('#text-ip_target').val());
|
||||
$('#text-community').val($('#text-snmp_community').val());
|
||||
$('#snmp_browser_version').val($('#snmp_version').val());
|
||||
$('#snmp3_browser_auth_user').val($('#snmp3_auth_user').val());
|
||||
$('#snmp3_browser_security_level').val($('#snmp3_security_level').val());
|
||||
$('#snmp3_browser_auth_method').val($('#snmp3_auth_method').val());
|
||||
$('#snmp3_browser_auth_pass').val($('#snmp3_auth_pass').val());
|
||||
$('#snmp3_browser_privacy_method').val($('#snmp3_privacy_method').val());
|
||||
$('#snmp3_browser_privacy_pass').val($('#snmp3_privacy_pass').val());
|
||||
|
||||
$("#snmp_browser_container").show().dialog ({
|
||||
title: '',
|
||||
resizable: true,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
overlay: {
|
||||
opacity: 0.5,
|
||||
background: "black"
|
||||
},
|
||||
width: 920,
|
||||
height: 500
|
||||
});
|
||||
}
|
||||
data[0].label = serie.label;
|
||||
if (data[0].data.length >= numberOfPoints) {
|
||||
data[0].data.shift();
|
||||
}
|
||||
|
||||
function shortNumber (number) {
|
||||
if (Math.round(number) != number) return number;
|
||||
number = Number.parseInt(number);
|
||||
if (Number.isNaN(number)) return number;
|
||||
data[0].data.push(serie.data[0]);
|
||||
updatePlot(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var shorts = ["", "K", "M", "G", "T", "P", "E", "Z", "Y"];
|
||||
var pos = 0;
|
||||
function startDataPooling() {
|
||||
intervalRef = window.setInterval(requestData, refresh);
|
||||
}
|
||||
|
||||
while (number >= 1000 || number <= -1000) {
|
||||
pos++;
|
||||
number = number / 1000;
|
||||
}
|
||||
function resetDataPooling() {
|
||||
if (currentXHR !== null) currentXHR.abort();
|
||||
// Stop and start the interval
|
||||
window.clearInterval(intervalRef);
|
||||
startDataPooling();
|
||||
}
|
||||
|
||||
return number + " " + shorts[pos];
|
||||
}
|
||||
function roundToTwo(num) {
|
||||
return +(Math.round(num + "e+2") + "e-2");
|
||||
}
|
||||
function clearGraph() {
|
||||
var data = plot.getData();
|
||||
if (data.length === 0) return;
|
||||
|
||||
$('#graph').change(function() {
|
||||
$('form#realgraph').submit();
|
||||
});
|
||||
for (i = 0; i < data[0].data.length; i++) {
|
||||
data[0].data[i][1] = 0;
|
||||
}
|
||||
if (incremental) lastIncVal = null;
|
||||
|
||||
$('#refresh').change(function () {
|
||||
refresh = parseInt($('#refresh').val());
|
||||
resetDataPooling();
|
||||
});
|
||||
updatePlot(data);
|
||||
|
||||
$('#checkbox-incremental').change(function() {
|
||||
incremental = $('#checkbox-incremental').is(':checked');
|
||||
clearGraph();
|
||||
});
|
||||
resetDataPooling();
|
||||
}
|
||||
|
||||
updatePlot([]);
|
||||
requestData();
|
||||
startDataPooling();
|
||||
// Set the form OID to the value selected in the SNMP browser
|
||||
function setOID() {
|
||||
if ($("#snmp_browser_version").val() == "3") {
|
||||
$("#text-snmp_oid").val($("#table1-0-1").text());
|
||||
} else {
|
||||
$("#text-snmp_oid").val($("#snmp_selected_oid").text());
|
||||
}
|
||||
|
||||
// Expose this functions
|
||||
window.realtimeGraphs = {
|
||||
clearGraph: clearGraph,
|
||||
setOID: setOID,
|
||||
snmpBrowserWindow: snmpBrowserWindow
|
||||
}
|
||||
// Close the SNMP browser
|
||||
$(".ui-dialog-titlebar-close").trigger("click");
|
||||
}
|
||||
|
||||
})();
|
||||
// Show the SNMP browser window
|
||||
function snmpBrowserWindow() {
|
||||
// Keep elements in the form and the SNMP browser synced
|
||||
$("#text-target_ip").val($("#text-ip_target").val());
|
||||
$("#text-community").val($("#text-snmp_community").val());
|
||||
$("#snmp_browser_version").val($("#snmp_version").val());
|
||||
$("#snmp3_browser_auth_user").val($("#snmp3_auth_user").val());
|
||||
$("#snmp3_browser_security_level").val($("#snmp3_security_level").val());
|
||||
$("#snmp3_browser_auth_method").val($("#snmp3_auth_method").val());
|
||||
$("#snmp3_browser_auth_pass").val($("#snmp3_auth_pass").val());
|
||||
$("#snmp3_browser_privacy_method").val($("#snmp3_privacy_method").val());
|
||||
$("#snmp3_browser_privacy_pass").val($("#snmp3_privacy_pass").val());
|
||||
|
||||
$("#snmp_browser_container")
|
||||
.show()
|
||||
.dialog({
|
||||
title: "",
|
||||
resizable: true,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
overlay: {
|
||||
opacity: 0.5,
|
||||
background: "black"
|
||||
},
|
||||
width: 920,
|
||||
height: 500
|
||||
});
|
||||
}
|
||||
|
||||
function shortNumber(number) {
|
||||
if (Math.round(number) != number) return number;
|
||||
number = Number.parseInt(number);
|
||||
if (Number.isNaN(number)) return number;
|
||||
|
||||
var shorts = ["", "K", "M", "G", "T", "P", "E", "Z", "Y"];
|
||||
var pos = 0;
|
||||
|
||||
while (number >= 1000 || number <= -1000) {
|
||||
pos++;
|
||||
number = number / 1000;
|
||||
}
|
||||
|
||||
return number + " " + shorts[pos];
|
||||
}
|
||||
function roundToTwo(num) {
|
||||
return +(Math.round(num + "e+2") + "e-2");
|
||||
}
|
||||
|
||||
$("#graph").change(function() {
|
||||
$("form#realgraph").submit();
|
||||
});
|
||||
|
||||
$("#refresh").change(function() {
|
||||
refresh = parseInt($("#refresh").val());
|
||||
resetDataPooling();
|
||||
});
|
||||
|
||||
$("#checkbox-incremental").change(function() {
|
||||
incremental = $("#checkbox-incremental").is(":checked");
|
||||
clearGraph();
|
||||
});
|
||||
|
||||
updatePlot([]);
|
||||
requestData();
|
||||
startDataPooling();
|
||||
|
||||
// Expose this functions
|
||||
window.realtimeGraphs = {
|
||||
clearGraph: clearGraph,
|
||||
setOID: setOID,
|
||||
snmpBrowserWindow: snmpBrowserWindow
|
||||
};
|
||||
})();
|
||||
|
|
|
@ -4,402 +4,466 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
if (isset($_GET['get_ptr'])) {
|
||||
if ($_GET['get_ptr'] == 1) {
|
||||
if ($_GET['get_ptr'] == 1) {
|
||||
$ownDir = dirname(__FILE__).'/';
|
||||
$ownDir = str_replace('\\', '/', $ownDir);
|
||||
|
||||
$ownDir = dirname(__FILE__) . '/';
|
||||
$ownDir = str_replace("\\", "/", $ownDir);
|
||||
// Don't start a session before this import.
|
||||
// The session is configured and started inside the config process.
|
||||
include_once $ownDir.'../include/config.php';
|
||||
|
||||
// Don't start a session before this import.
|
||||
// The session is configured and started inside the config process.
|
||||
require_once ($ownDir.'../include/config.php');
|
||||
// Login check
|
||||
if (!isset($_SESSION['id_usuario'])) {
|
||||
$config['id_user'] = null;
|
||||
} else {
|
||||
$config['id_user'] = $_SESSION['id_usuario'];
|
||||
}
|
||||
|
||||
// Login check
|
||||
if (!isset($_SESSION["id_usuario"])) {
|
||||
$config['id_user'] = null;
|
||||
}
|
||||
else {
|
||||
$config['id_user'] = $_SESSION["id_usuario"];
|
||||
}
|
||||
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
$hook_enterprise = enterprise_include ('extensions/resource_exportation/functions.php');
|
||||
|
||||
header("Content-type: binary");
|
||||
header("Content-Disposition: attachment; filename=\"".get_name_xml_resource($hook_enterprise)) . "\"";
|
||||
header("Pragma: no-cache");
|
||||
header("Expires: 0");
|
||||
|
||||
output_xml_resource($hook_enterprise);
|
||||
}
|
||||
}
|
||||
else {
|
||||
extensions_add_godmode_menu_option (__('Resource exportation'), 'PM','gagente','', "v1r1");
|
||||
extensions_add_godmode_function('resource_exportation_extension_main');
|
||||
|
||||
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
$hook_enterprise = enterprise_include('extensions/resource_exportation/functions.php');
|
||||
|
||||
header('Content-type: binary');
|
||||
header('Content-Disposition: attachment; filename="'.get_name_xml_resource($hook_enterprise)).'"';
|
||||
header('Pragma: no-cache');
|
||||
header('Expires: 0');
|
||||
|
||||
output_xml_resource($hook_enterprise);
|
||||
}
|
||||
} else {
|
||||
extensions_add_godmode_menu_option(__('Resource exportation'), 'PM', 'gagente', '', 'v1r1');
|
||||
extensions_add_godmode_function('resource_exportation_extension_main');
|
||||
}
|
||||
|
||||
function output_xml_resource($hook_enterprise) {
|
||||
global $config;
|
||||
|
||||
$type = get_parameter('type');
|
||||
$id = (int)get_parameter('id');
|
||||
|
||||
switch ($type) {
|
||||
case 'report':
|
||||
output_xml_report($id);
|
||||
break;
|
||||
case 'visual_console':
|
||||
output_xml_visual_console($id);
|
||||
break;
|
||||
default:
|
||||
if ($hook_enterprise === true) {
|
||||
$include_agents = get_parameter('include_agents', 0);
|
||||
return enterprise_output_xml_resource($type, $id, $include_agents);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
function output_xml_resource($hook_enterprise)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$type = get_parameter('type');
|
||||
$id = (int) get_parameter('id');
|
||||
|
||||
switch ($type) {
|
||||
case 'report':
|
||||
output_xml_report($id);
|
||||
break;
|
||||
|
||||
case 'visual_console':
|
||||
output_xml_visual_console($id);
|
||||
break;
|
||||
|
||||
default:
|
||||
if ($hook_enterprise === true) {
|
||||
$include_agents = get_parameter('include_agents', 0);
|
||||
return enterprise_output_xml_resource($type, $id, $include_agents);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function output_xml_report($id) {
|
||||
global $config;
|
||||
|
||||
require_once ($config['homedir'].'/include/functions_agents.php');
|
||||
|
||||
$report = db_get_row('treport', 'id_report', $id);
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8" ?>' . "\n";
|
||||
echo "<report>\n";
|
||||
echo "<name><![CDATA[" . io_safe_output($report['name']) . "]]></name>\n";
|
||||
if (isset($report['description']))
|
||||
echo "<description><![CDATA[" . io_safe_output($report['description']) . "]]></description>\n";
|
||||
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $report['id_group']);
|
||||
echo "<group><![CDATA[" . io_safe_output($group) . "]]></group>\n";
|
||||
$items = db_get_all_rows_field_filter('treport_content', 'id_report', $report['id_report']);
|
||||
foreach ($items as $item) {
|
||||
echo "<item>\n";
|
||||
echo "<type>" . io_safe_output($item['type']) . "</type>\n";
|
||||
echo "<description>" . io_safe_output($item['description']) . "</description>\n";
|
||||
echo "<period>" . io_safe_output($item['period']) . "</period>\n";
|
||||
if ($item['id_agent'] != 0) {
|
||||
$agent = db_get_value ("alias","tagente","id_agente",$item['id_agent']);
|
||||
}
|
||||
if ($item['id_agent_module'] != 0) {
|
||||
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
|
||||
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
|
||||
$agent = db_get_value ("alias","tagente","id_agente",$item['id_agent']);
|
||||
|
||||
echo "<module><![CDATA[" . io_safe_output($module) . "]]></module>\n";
|
||||
}
|
||||
if (isset($agent))
|
||||
echo "<agent><![CDATA[" . $agent . "]]></agent>\n";
|
||||
$agent = null;
|
||||
switch (io_safe_output($item['type'])) {
|
||||
case 1:
|
||||
case 'simple_graph':
|
||||
break;
|
||||
case 'simple_baseline_graph':
|
||||
break;
|
||||
case 2:
|
||||
case 'custom_graph':
|
||||
case 'automatic_custom_graph':
|
||||
$graph = db_get_value('name', 'tgraph', 'id_graph', $item['id_gs']);
|
||||
echo "<graph><![CDATA[" . io_safe_output($graph) . "]]></graph>\n";
|
||||
break;
|
||||
case 3:
|
||||
case 'SLA':
|
||||
echo "<only_display_wrong>" . $item['only_display_wrong'] . "</only_display_wrong>\n";
|
||||
echo "<monday>" . $item['monday'] . "</monday>\n";
|
||||
echo "<tuesday>" . $item['tuesday'] . "</tuesday>\n";
|
||||
echo "<wednesday>" . $item['wednesday'] . "</wednesday>\n";
|
||||
echo "<thursday>" . $item['thursday'] . "</thursday>\n";
|
||||
echo "<friday>" . $item['friday'] . "</friday>\n";
|
||||
echo "<saturday>" . $item['saturday'] . "</saturday>\n";
|
||||
echo "<sunday>" . $item['sunday'] . "</sunday>\n";
|
||||
echo "<time_from>" . $item['time_from'] . "</time_from>\n";
|
||||
echo "<time_to>" . $item['time_to'] . "</time_to>\n";
|
||||
|
||||
$slas = db_get_all_rows_field_filter('treport_content_sla_combined', 'id_report_content', $item['id_rc']);
|
||||
if ($slas === false) $slas = array();
|
||||
|
||||
foreach ($slas as $sla) {
|
||||
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
|
||||
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
|
||||
$agent = db_get_value ("alias","tagente","id_agente",$item['id_agent']);
|
||||
echo "<sla>";
|
||||
echo "<agent><![CDATA[" . $agent . "]]></agent>\n";
|
||||
echo "<module><![CDATA[" . io_safe_output($module) . "]]></module>\n";
|
||||
echo "<sla_max>" . $sla['sla_max'] . "</sla_max>\n";
|
||||
echo "<sla_min>" . $sla['sla_min'] . "</sla_min>\n";
|
||||
echo "<sla_limit>" . $sla['sla_limit'] . "</sla_limit>\n";
|
||||
echo "</sla>";
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
case 'monitor_report':
|
||||
break;
|
||||
case 7:
|
||||
case 'avg_value':
|
||||
break;
|
||||
case 8:
|
||||
case 'max_value':
|
||||
break;
|
||||
case 9:
|
||||
case 'min_value':
|
||||
break;
|
||||
case 10:
|
||||
case 'sumatory':
|
||||
break;
|
||||
case 'agent_detailed_event':
|
||||
case 'event_report_agent':
|
||||
break;
|
||||
case 'text':
|
||||
echo "<text><![CDATA[" . io_safe_output($item['text']) . "]]></text>\n";
|
||||
break;
|
||||
case 'sql':
|
||||
echo "<header_definition><![CDATA[" . io_safe_output($item['header_definition']) . "]]></header_definition>\n";
|
||||
if (!empty($item['external_source'])) {
|
||||
echo "<sql><![CDATA[" . io_safe_output($item['external_source']) . "]]></sql>\n";
|
||||
}
|
||||
else {
|
||||
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
|
||||
echo "<sql>" . io_safe_output($sql) . "</sql>\n";
|
||||
}
|
||||
break;
|
||||
case 'sql_graph_pie':
|
||||
case 'sql_graph_vbar':
|
||||
case 'sql_graph_hbar':
|
||||
echo "<header_definition>" . io_safe_output($item['header_definition']) . "</header_definition>\n";
|
||||
if (!empty($item['external_source'])) {
|
||||
echo "<sql>" . io_safe_output($item['external_source']) . "</sql>\n";
|
||||
}
|
||||
else {
|
||||
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
|
||||
echo "<sql>" . io_safe_output($sql) . "</sql>\n";
|
||||
}
|
||||
break;
|
||||
case 'event_report_group':
|
||||
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $item['id_agent']);
|
||||
echo "<group><![CDATA[" . io_safe_output($group) . "]]></group>\n";
|
||||
break;
|
||||
case 'event_report_module':
|
||||
break;
|
||||
case 'alert_report_module':
|
||||
break;
|
||||
case 'alert_report_agent':
|
||||
break;
|
||||
case 'alert_report_group':
|
||||
break;
|
||||
case 'url':
|
||||
echo "<url><![CDATA[" . io_safe_output($values["external_source"]) . "]]></url>";
|
||||
break;
|
||||
case 'database_serialized':
|
||||
echo "<header_definition><![CDATA[" . io_safe_output($item["header_definition"]) . "]]></header_definition>";
|
||||
echo "<line_separator><![CDATA[" . io_safe_output($item["line_separator"]) . "]]></line_separator>";
|
||||
echo "<column_separator><![CDATA[" . io_safe_output($item["header_definition"]) . "]]></column_separator>";
|
||||
break;
|
||||
case 'TTRT':
|
||||
break;
|
||||
case 'TTO':
|
||||
break;
|
||||
case 'MTBF':
|
||||
break;
|
||||
case 'MTTR':
|
||||
break;
|
||||
}
|
||||
echo "</item>\n";
|
||||
}
|
||||
echo "</report>\n";
|
||||
|
||||
function output_xml_report($id)
|
||||
{
|
||||
global $config;
|
||||
|
||||
include_once $config['homedir'].'/include/functions_agents.php';
|
||||
|
||||
$report = db_get_row('treport', 'id_report', $id);
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
|
||||
echo "<report>\n";
|
||||
echo '<name><![CDATA['.io_safe_output($report['name'])."]]></name>\n";
|
||||
if (isset($report['description'])) {
|
||||
echo '<description><![CDATA['.io_safe_output($report['description'])."]]></description>\n";
|
||||
}
|
||||
|
||||
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $report['id_group']);
|
||||
echo '<group><![CDATA['.io_safe_output($group)."]]></group>\n";
|
||||
$items = db_get_all_rows_field_filter('treport_content', 'id_report', $report['id_report']);
|
||||
foreach ($items as $item) {
|
||||
echo "<item>\n";
|
||||
echo '<type>'.io_safe_output($item['type'])."</type>\n";
|
||||
echo '<description>'.io_safe_output($item['description'])."</description>\n";
|
||||
echo '<period>'.io_safe_output($item['period'])."</period>\n";
|
||||
if ($item['id_agent'] != 0) {
|
||||
$agent = db_get_value('alias', 'tagente', 'id_agente', $item['id_agent']);
|
||||
}
|
||||
|
||||
if ($item['id_agent_module'] != 0) {
|
||||
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
|
||||
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
|
||||
$agent = db_get_value('alias', 'tagente', 'id_agente', $item['id_agent']);
|
||||
|
||||
echo '<module><![CDATA['.io_safe_output($module)."]]></module>\n";
|
||||
}
|
||||
|
||||
if (isset($agent)) {
|
||||
echo '<agent><![CDATA['.$agent."]]></agent>\n";
|
||||
}
|
||||
|
||||
$agent = null;
|
||||
switch (io_safe_output($item['type'])) {
|
||||
case 1:
|
||||
case 'simple_graph':
|
||||
break;
|
||||
|
||||
case 'simple_baseline_graph':
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case 'custom_graph':
|
||||
case 'automatic_custom_graph':
|
||||
$graph = db_get_value('name', 'tgraph', 'id_graph', $item['id_gs']);
|
||||
echo '<graph><![CDATA['.io_safe_output($graph)."]]></graph>\n";
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 'SLA':
|
||||
echo '<only_display_wrong>'.$item['only_display_wrong']."</only_display_wrong>\n";
|
||||
echo '<monday>'.$item['monday']."</monday>\n";
|
||||
echo '<tuesday>'.$item['tuesday']."</tuesday>\n";
|
||||
echo '<wednesday>'.$item['wednesday']."</wednesday>\n";
|
||||
echo '<thursday>'.$item['thursday']."</thursday>\n";
|
||||
echo '<friday>'.$item['friday']."</friday>\n";
|
||||
echo '<saturday>'.$item['saturday']."</saturday>\n";
|
||||
echo '<sunday>'.$item['sunday']."</sunday>\n";
|
||||
echo '<time_from>'.$item['time_from']."</time_from>\n";
|
||||
echo '<time_to>'.$item['time_to']."</time_to>\n";
|
||||
|
||||
$slas = db_get_all_rows_field_filter('treport_content_sla_combined', 'id_report_content', $item['id_rc']);
|
||||
if ($slas === false) {
|
||||
$slas = [];
|
||||
}
|
||||
|
||||
foreach ($slas as $sla) {
|
||||
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
|
||||
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
|
||||
$agent = db_get_value('alias', 'tagente', 'id_agente', $item['id_agent']);
|
||||
echo '<sla>';
|
||||
echo '<agent><![CDATA['.$agent."]]></agent>\n";
|
||||
echo '<module><![CDATA['.io_safe_output($module)."]]></module>\n";
|
||||
echo '<sla_max>'.$sla['sla_max']."</sla_max>\n";
|
||||
echo '<sla_min>'.$sla['sla_min']."</sla_min>\n";
|
||||
echo '<sla_limit>'.$sla['sla_limit']."</sla_limit>\n";
|
||||
echo '</sla>';
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
case 'monitor_report':
|
||||
break;
|
||||
|
||||
case 7:
|
||||
case 'avg_value':
|
||||
break;
|
||||
|
||||
case 8:
|
||||
case 'max_value':
|
||||
break;
|
||||
|
||||
case 9:
|
||||
case 'min_value':
|
||||
break;
|
||||
|
||||
case 10:
|
||||
case 'sumatory':
|
||||
break;
|
||||
|
||||
case 'agent_detailed_event':
|
||||
case 'event_report_agent':
|
||||
break;
|
||||
|
||||
case 'text':
|
||||
echo '<text><![CDATA['.io_safe_output($item['text'])."]]></text>\n";
|
||||
break;
|
||||
|
||||
case 'sql':
|
||||
echo '<header_definition><![CDATA['.io_safe_output($item['header_definition'])."]]></header_definition>\n";
|
||||
if (!empty($item['external_source'])) {
|
||||
echo '<sql><![CDATA['.io_safe_output($item['external_source'])."]]></sql>\n";
|
||||
} else {
|
||||
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
|
||||
echo '<sql>'.io_safe_output($sql)."</sql>\n";
|
||||
}
|
||||
break;
|
||||
|
||||
case 'sql_graph_pie':
|
||||
case 'sql_graph_vbar':
|
||||
case 'sql_graph_hbar':
|
||||
echo '<header_definition>'.io_safe_output($item['header_definition'])."</header_definition>\n";
|
||||
if (!empty($item['external_source'])) {
|
||||
echo '<sql>'.io_safe_output($item['external_source'])."</sql>\n";
|
||||
} else {
|
||||
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
|
||||
echo '<sql>'.io_safe_output($sql)."</sql>\n";
|
||||
}
|
||||
break;
|
||||
|
||||
case 'event_report_group':
|
||||
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $item['id_agent']);
|
||||
echo '<group><![CDATA['.io_safe_output($group)."]]></group>\n";
|
||||
break;
|
||||
|
||||
case 'event_report_module':
|
||||
break;
|
||||
|
||||
case 'alert_report_module':
|
||||
break;
|
||||
|
||||
case 'alert_report_agent':
|
||||
break;
|
||||
|
||||
case 'alert_report_group':
|
||||
break;
|
||||
|
||||
case 'url':
|
||||
echo '<url><![CDATA['.io_safe_output($values['external_source']).']]></url>';
|
||||
break;
|
||||
|
||||
case 'database_serialized':
|
||||
echo '<header_definition><![CDATA['.io_safe_output($item['header_definition']).']]></header_definition>';
|
||||
echo '<line_separator><![CDATA['.io_safe_output($item['line_separator']).']]></line_separator>';
|
||||
echo '<column_separator><![CDATA['.io_safe_output($item['header_definition']).']]></column_separator>';
|
||||
break;
|
||||
|
||||
case 'TTRT':
|
||||
break;
|
||||
|
||||
case 'TTO':
|
||||
break;
|
||||
|
||||
case 'MTBF':
|
||||
break;
|
||||
|
||||
case 'MTTR':
|
||||
break;
|
||||
}
|
||||
|
||||
echo "</item>\n";
|
||||
}
|
||||
|
||||
echo "</report>\n";
|
||||
}
|
||||
|
||||
function output_xml_visual_console($id) {
|
||||
$visual_map = db_get_row('tlayout', 'id', $id);
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8" ?>' . "\n";
|
||||
echo "<visual_map>\n";
|
||||
echo "<name><![CDATA[" . io_safe_output($visual_map['name']) . "]]></name>\n";
|
||||
if ($visual_map['id_group'] != 0) {
|
||||
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $visual_map['id_group']);
|
||||
echo "<group><![CDATA[" . io_safe_output($group) . "]]></group>\n";
|
||||
}
|
||||
echo "<background><![CDATA[" . io_safe_output($visual_map['background']) . "]]></background>\n";
|
||||
echo "<height>" . io_safe_output($visual_map['height']) . "</height>\n";
|
||||
echo "<width>" . io_safe_output($visual_map['width']) . "</width>\n";
|
||||
$items = db_get_all_rows_field_filter('tlayout_data', 'id_layout', $visual_map['id']);
|
||||
if ($items === false) $items = array();
|
||||
foreach ($items as $item) {
|
||||
echo "<item>\n";
|
||||
echo "<other_id>" . $item['id'] . "</other_id>\n"; //OLD ID USE FOR parent item
|
||||
$agent = '';
|
||||
if ($item['id_agent'] != 0) {
|
||||
$agent = db_get_value ("nombre","tagente","id_agente",$item['id_agent']);
|
||||
}
|
||||
if (!empty($item['label'])) {
|
||||
echo "<label><![CDATA[" . io_safe_output($item['label']) . "]]></label>\n";
|
||||
}
|
||||
echo "<x>" . $item['pos_x'] . "</x>\n";
|
||||
echo "<y>" . $item['pos_y'] . "</y>\n";
|
||||
echo "<type>" . $item['type'] . "</type>\n";
|
||||
if ($item['width'] != 0) {
|
||||
echo "<width>" . $item['width'] . "</width>\n";
|
||||
}
|
||||
if ($item['height'] != 0) {
|
||||
echo "<height>" . $item['height'] . "</height>\n";
|
||||
}
|
||||
if (!empty($item['image'])) {
|
||||
echo "<image>" . $item['image'] . "</image>\n";
|
||||
}
|
||||
if ($item['period'] != 0) {
|
||||
echo "<period>" . $item['period'] . "</period>\n";
|
||||
}
|
||||
if (isset($item['id_agente_modulo'])) {
|
||||
if ($item['id_agente_modulo'] != 0) {
|
||||
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
|
||||
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
|
||||
$agent = db_get_value ("nombre","tagente","id_agente",$id_agent);
|
||||
|
||||
echo "<module><![CDATA[" . io_safe_output($module) . "]]></module>\n";
|
||||
}
|
||||
}
|
||||
if (!empty($agent)) {
|
||||
echo "<agent><![CDATA[" . $agent . "]]></agent>\n";
|
||||
}
|
||||
if ($item['id_layout_linked'] != 0) {
|
||||
echo "<id_layout_linked>" . $item['id_layout_linked'] . "</id_layout_linked>\n";
|
||||
}
|
||||
if ($item['parent_item'] != 0) {
|
||||
echo "<parent_item>" . $item['parent_item'] . "</parent_item>\n";
|
||||
}
|
||||
if (!empty($item['clock_animation'])) {
|
||||
echo "<clock_animation>" . $item['clock_animation'] . "</clock_animation>\n";
|
||||
}
|
||||
if (!empty($item['fill_color'])) {
|
||||
echo "<fill_color>" . $item['fill_color'] . "</fill_color>\n";
|
||||
}
|
||||
if (!empty($item['type_graph'])) {
|
||||
echo "<type_graph>" . $item['type_graph'] . "</type_graph>\n";
|
||||
}
|
||||
if (!empty($item['time_format'])) {
|
||||
echo "<time_format>" . $item['time_format'] . "</time_format>\n";
|
||||
}
|
||||
if (!empty($item['timezone'])) {
|
||||
echo "<timezone>" . $item['timezone'] . "</timezone>\n";
|
||||
}
|
||||
if (!empty($item['border_width'])) {
|
||||
echo "<border_width>" . $item['border_width'] . "</border_width>\n";
|
||||
}
|
||||
if (!empty($item['border_color'])) {
|
||||
echo "<border_color>" . $item['border_color'] . "</border_color>\n";
|
||||
}
|
||||
echo "</item>\n";
|
||||
}
|
||||
echo "</visual_map>\n";
|
||||
|
||||
function output_xml_visual_console($id)
|
||||
{
|
||||
$visual_map = db_get_row('tlayout', 'id', $id);
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
|
||||
echo "<visual_map>\n";
|
||||
echo '<name><![CDATA['.io_safe_output($visual_map['name'])."]]></name>\n";
|
||||
if ($visual_map['id_group'] != 0) {
|
||||
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $visual_map['id_group']);
|
||||
echo '<group><![CDATA['.io_safe_output($group)."]]></group>\n";
|
||||
}
|
||||
|
||||
echo '<background><![CDATA['.io_safe_output($visual_map['background'])."]]></background>\n";
|
||||
echo '<height>'.io_safe_output($visual_map['height'])."</height>\n";
|
||||
echo '<width>'.io_safe_output($visual_map['width'])."</width>\n";
|
||||
$items = db_get_all_rows_field_filter('tlayout_data', 'id_layout', $visual_map['id']);
|
||||
if ($items === false) {
|
||||
$items = [];
|
||||
}
|
||||
|
||||
foreach ($items as $item) {
|
||||
echo "<item>\n";
|
||||
echo '<other_id>'.$item['id']."</other_id>\n";
|
||||
// OLD ID USE FOR parent item
|
||||
$agent = '';
|
||||
if ($item['id_agent'] != 0) {
|
||||
$agent = db_get_value('nombre', 'tagente', 'id_agente', $item['id_agent']);
|
||||
}
|
||||
|
||||
if (!empty($item['label'])) {
|
||||
echo '<label><![CDATA['.io_safe_output($item['label'])."]]></label>\n";
|
||||
}
|
||||
|
||||
echo '<x>'.$item['pos_x']."</x>\n";
|
||||
echo '<y>'.$item['pos_y']."</y>\n";
|
||||
echo '<type>'.$item['type']."</type>\n";
|
||||
if ($item['width'] != 0) {
|
||||
echo '<width>'.$item['width']."</width>\n";
|
||||
}
|
||||
|
||||
if ($item['height'] != 0) {
|
||||
echo '<height>'.$item['height']."</height>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['image'])) {
|
||||
echo '<image>'.$item['image']."</image>\n";
|
||||
}
|
||||
|
||||
if ($item['period'] != 0) {
|
||||
echo '<period>'.$item['period']."</period>\n";
|
||||
}
|
||||
|
||||
if (isset($item['id_agente_modulo'])) {
|
||||
if ($item['id_agente_modulo'] != 0) {
|
||||
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
|
||||
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
|
||||
$agent = db_get_value('nombre', 'tagente', 'id_agente', $id_agent);
|
||||
|
||||
echo '<module><![CDATA['.io_safe_output($module)."]]></module>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($agent)) {
|
||||
echo '<agent><![CDATA['.$agent."]]></agent>\n";
|
||||
}
|
||||
|
||||
if ($item['id_layout_linked'] != 0) {
|
||||
echo '<id_layout_linked>'.$item['id_layout_linked']."</id_layout_linked>\n";
|
||||
}
|
||||
|
||||
if ($item['parent_item'] != 0) {
|
||||
echo '<parent_item>'.$item['parent_item']."</parent_item>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['clock_animation'])) {
|
||||
echo '<clock_animation>'.$item['clock_animation']."</clock_animation>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['fill_color'])) {
|
||||
echo '<fill_color>'.$item['fill_color']."</fill_color>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['type_graph'])) {
|
||||
echo '<type_graph>'.$item['type_graph']."</type_graph>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['time_format'])) {
|
||||
echo '<time_format>'.$item['time_format']."</time_format>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['timezone'])) {
|
||||
echo '<timezone>'.$item['timezone']."</timezone>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['border_width'])) {
|
||||
echo '<border_width>'.$item['border_width']."</border_width>\n";
|
||||
}
|
||||
|
||||
if (!empty($item['border_color'])) {
|
||||
echo '<border_color>'.$item['border_color']."</border_color>\n";
|
||||
}
|
||||
|
||||
echo "</item>\n";
|
||||
}
|
||||
|
||||
echo "</visual_map>\n";
|
||||
}
|
||||
|
||||
function get_name_xml_resource($hook_enterprise) {
|
||||
global $config;
|
||||
|
||||
$type = get_parameter('type');
|
||||
$id = (int)get_parameter('id');
|
||||
|
||||
switch ($type) {
|
||||
case 'report':
|
||||
$name = db_get_value('name', 'treport', 'id_report', $id);
|
||||
break;
|
||||
case 'visual_console':
|
||||
$name = db_get_value('name', 'tlayout', 'id', $id);
|
||||
break;
|
||||
default:
|
||||
if ($hook_enterprise === true)
|
||||
return enterprise_get_name_xml_resource($type, $id);
|
||||
break;
|
||||
}
|
||||
|
||||
$file = $name . ".ptr";
|
||||
|
||||
return $file;
|
||||
|
||||
function get_name_xml_resource($hook_enterprise)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$type = get_parameter('type');
|
||||
$id = (int) get_parameter('id');
|
||||
|
||||
switch ($type) {
|
||||
case 'report':
|
||||
$name = db_get_value('name', 'treport', 'id_report', $id);
|
||||
break;
|
||||
|
||||
case 'visual_console':
|
||||
$name = db_get_value('name', 'tlayout', 'id', $id);
|
||||
break;
|
||||
|
||||
default:
|
||||
if ($hook_enterprise === true) {
|
||||
return enterprise_get_name_xml_resource($type, $id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$file = $name.'.ptr';
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
function get_xml_resource() {
|
||||
global $config;
|
||||
|
||||
$hook_enterprise = enterprise_include ('extensions/resource_exportation/functions.php');
|
||||
|
||||
function get_xml_resource()
|
||||
{
|
||||
global $config;
|
||||
|
||||
$hook_enterprise = enterprise_include('extensions/resource_exportation/functions.php');
|
||||
}
|
||||
|
||||
function resource_exportation_extension_main() {
|
||||
global $config;
|
||||
|
||||
check_login();
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
|
||||
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
}
|
||||
|
||||
$hook_enterprise = enterprise_include ('extensions/resource_exportation/functions.php');
|
||||
|
||||
ui_print_page_header (__('Resource exportation'), "images/extensions.png", false, "", true, "" );
|
||||
|
||||
echo "<div class=notify>";
|
||||
echo __("This extension makes exportation of resource template more easy.") .
|
||||
" " .
|
||||
__("You can export resource templates in .ptr format.");
|
||||
echo "</div>";
|
||||
|
||||
echo "<br /><br />";
|
||||
|
||||
$table = null;
|
||||
$table->width = '100%';
|
||||
$table->style[0] = 'width: 30%;';
|
||||
$table->style[1] = 'width: 10%;';
|
||||
$table->class = "databox filters";
|
||||
$table->data[0][0] = __('Report');
|
||||
$table->data[0][1] = html_print_select_from_sql('SELECT id_report, name FROM treport', 'report', '', '', '', 0, true);
|
||||
$table->data[0][2] = html_print_button(__('Export'), '', false, 'export_to_ptr(\'report\');', 'class="sub config"', true);
|
||||
$table->data[1][0] = __('Visual console');
|
||||
$table->data[1][1] = html_print_select_from_sql('SELECT id, name FROM tlayout', 'visual_console', '', '', '', 0, true);
|
||||
$table->data[1][2] = html_print_button(__('Export'), '', false, 'export_to_ptr(\'visual_console\');', 'class="sub config"', true);
|
||||
|
||||
if ($hook_enterprise === true)
|
||||
add_rows_for_enterprise($table->data);
|
||||
|
||||
html_print_table($table);
|
||||
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
function export_to_ptr(type) {
|
||||
id = $("select#" + type + " option:selected").val();
|
||||
url = location.href.split('index');
|
||||
if (type == "policy") {
|
||||
var include_agents = $("#checkbox-export_agents").prop("checked")
|
||||
|
||||
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
|
||||
+ '&id=' + id + '&include_agents=' + include_agents;
|
||||
}
|
||||
else {
|
||||
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
|
||||
+ '&id=' + id;
|
||||
}
|
||||
function resource_exportation_extension_main()
|
||||
{
|
||||
global $config;
|
||||
|
||||
location.href=url;
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
check_login();
|
||||
|
||||
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) {
|
||||
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
$hook_enterprise = enterprise_include('extensions/resource_exportation/functions.php');
|
||||
|
||||
ui_print_page_header(__('Resource exportation'), 'images/extensions.png', false, '', true, '');
|
||||
|
||||
echo '<div class=notify>';
|
||||
echo __('This extension makes exportation of resource template more easy.').' '.__('You can export resource templates in .ptr format.');
|
||||
echo '</div>';
|
||||
|
||||
echo '<br /><br />';
|
||||
|
||||
$table = null;
|
||||
$table->width = '100%';
|
||||
$table->style[0] = 'width: 30%;';
|
||||
$table->style[1] = 'width: 10%;';
|
||||
$table->class = 'databox filters';
|
||||
$table->data[0][0] = __('Report');
|
||||
$table->data[0][1] = html_print_select_from_sql('SELECT id_report, name FROM treport', 'report', '', '', '', 0, true);
|
||||
$table->data[0][2] = html_print_button(__('Export'), '', false, 'export_to_ptr(\'report\');', 'class="sub config"', true);
|
||||
$table->data[1][0] = __('Visual console');
|
||||
$table->data[1][1] = html_print_select_from_sql('SELECT id, name FROM tlayout', 'visual_console', '', '', '', 0, true);
|
||||
$table->data[1][2] = html_print_button(__('Export'), '', false, 'export_to_ptr(\'visual_console\');', 'class="sub config"', true);
|
||||
|
||||
if ($hook_enterprise === true) {
|
||||
add_rows_for_enterprise($table->data);
|
||||
}
|
||||
|
||||
html_print_table($table);
|
||||
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
function export_to_ptr(type) {
|
||||
id = $("select#" + type + " option:selected").val();
|
||||
url = location.href.split('index');
|
||||
if (type == "policy") {
|
||||
var include_agents = $("#checkbox-export_agents").prop("checked")
|
||||
|
||||
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
|
||||
+ '&id=' + id + '&include_agents=' + include_agents;
|
||||
}
|
||||
else {
|
||||
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
|
||||
+ '&id=' + id;
|
||||
}
|
||||
|
||||
location.href=url;
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -4,125 +4,138 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
function users_extension_main() {
|
||||
users_extension_main_god(false);
|
||||
function users_extension_main()
|
||||
{
|
||||
users_extension_main_god(false);
|
||||
}
|
||||
|
||||
function users_extension_main_god ($god = true) {
|
||||
global $config;
|
||||
|
||||
if (isset($config["id_user"])) {
|
||||
if (!check_acl ($config["id_user"], 0, "UM")) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ($god) {
|
||||
$image = "images/gm_users.png";
|
||||
}
|
||||
else {
|
||||
$image = "images/op_workspace.png";
|
||||
}
|
||||
|
||||
// Header
|
||||
ui_print_page_header (__("Users connected"), $image, false, "", $god);
|
||||
|
||||
// Get user conected last 5 minutes
|
||||
switch ($config["dbtype"]) {
|
||||
case "mysql":
|
||||
$sql = "SELECT id_user, last_connect
|
||||
|
||||
function users_extension_main_god($god=true)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (isset($config['id_user'])) {
|
||||
if (!check_acl($config['id_user'], 0, 'UM')) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ($god) {
|
||||
$image = 'images/gm_users.png';
|
||||
} else {
|
||||
$image = 'images/op_workspace.png';
|
||||
}
|
||||
|
||||
// Header
|
||||
ui_print_page_header(__('Users connected'), $image, false, '', $god);
|
||||
|
||||
// Get user conected last 5 minutes
|
||||
switch ($config['dbtype']) {
|
||||
case 'mysql':
|
||||
$sql = 'SELECT id_user, last_connect
|
||||
FROM tusuario
|
||||
WHERE last_connect > (UNIX_TIMESTAMP(NOW()) - " . SECONDS_5MINUTES . ")
|
||||
ORDER BY last_connect DESC";
|
||||
break;
|
||||
case "postgresql":
|
||||
$sql = "SELECT id_user, last_connect
|
||||
WHERE last_connect > (UNIX_TIMESTAMP(NOW()) - '.SECONDS_5MINUTES.')
|
||||
ORDER BY last_connect DESC';
|
||||
break;
|
||||
|
||||
case 'postgresql':
|
||||
$sql = "SELECT id_user, last_connect
|
||||
FROM tusuario
|
||||
WHERE last_connect > (ceil(date_part('epoch', CURRENT_TIMESTAMP)) - " . SECONDS_5MINUTES . ")
|
||||
ORDER BY last_connect DESC";
|
||||
break;
|
||||
case "oracle":
|
||||
$sql = "SELECT id_user, last_connect
|
||||
WHERE last_connect > (ceil(date_part('epoch', CURRENT_TIMESTAMP)) - ".SECONDS_5MINUTES.')
|
||||
ORDER BY last_connect DESC';
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$sql = "SELECT id_user, last_connect
|
||||
FROM tusuario
|
||||
WHERE last_connect > (ceil((sysdate - to_date('19700101000000','YYYYMMDDHH24MISS')) * (" . SECONDS_1DAY . ")) - " . SECONDS_5MINUTES . ")
|
||||
ORDER BY last_connect DESC";
|
||||
break;
|
||||
}
|
||||
|
||||
$rows = db_get_all_rows_sql ($sql);
|
||||
|
||||
if (empty ($rows)) {
|
||||
$rows = array ();
|
||||
echo "<div class='nf'>".__('No other users connected')."</div>";
|
||||
}
|
||||
else {
|
||||
$table->cellpadding = 4;
|
||||
$table->cellspacing = 4;
|
||||
$table->width = '100%';
|
||||
$table->class = "databox data";
|
||||
$table->size = array ();
|
||||
$table->data = array ();
|
||||
$table->head = array ();
|
||||
|
||||
$table->head[0] = __('User');
|
||||
$table->head[1] = __('IP');
|
||||
$table->head[2] = __('Date');
|
||||
|
||||
$rowPair = true;
|
||||
$iterator = 0;
|
||||
|
||||
// Get data
|
||||
foreach ($rows as $row) {
|
||||
// Get ip_origin of the last login of the user
|
||||
switch ($config["dbtype"]) {
|
||||
case "mysql":
|
||||
case "postgresql":
|
||||
$ip_origin = db_get_value_sql(sprintf("SELECT ip_origen
|
||||
WHERE last_connect > (ceil((sysdate - to_date('19700101000000','YYYYMMDDHH24MISS')) * (".SECONDS_1DAY.')) - '.SECONDS_5MINUTES.')
|
||||
ORDER BY last_connect DESC';
|
||||
break;
|
||||
}
|
||||
|
||||
$rows = db_get_all_rows_sql($sql);
|
||||
|
||||
if (empty($rows)) {
|
||||
$rows = [];
|
||||
echo "<div class='nf'>".__('No other users connected').'</div>';
|
||||
} else {
|
||||
$table->cellpadding = 4;
|
||||
$table->cellspacing = 4;
|
||||
$table->width = '100%';
|
||||
$table->class = 'databox data';
|
||||
$table->size = [];
|
||||
$table->data = [];
|
||||
$table->head = [];
|
||||
|
||||
$table->head[0] = __('User');
|
||||
$table->head[1] = __('IP');
|
||||
$table->head[2] = __('Date');
|
||||
|
||||
$rowPair = true;
|
||||
$iterator = 0;
|
||||
|
||||
// Get data
|
||||
foreach ($rows as $row) {
|
||||
// Get ip_origin of the last login of the user
|
||||
switch ($config['dbtype']) {
|
||||
case 'mysql':
|
||||
case 'postgresql':
|
||||
$ip_origin = db_get_value_sql(
|
||||
sprintf(
|
||||
"SELECT ip_origen
|
||||
FROM tsesion
|
||||
WHERE id_usuario = '%s'
|
||||
AND descripcion = '" . io_safe_input('Logged in') . "'
|
||||
ORDER BY fecha DESC",$row["id_user"]));
|
||||
break;
|
||||
case "oracle":
|
||||
$ip_origin = db_get_value_sql(sprintf("SELECT ip_origen
|
||||
AND descripcion = '".io_safe_input('Logged in')."'
|
||||
ORDER BY fecha DESC",
|
||||
$row['id_user']
|
||||
)
|
||||
);
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$ip_origin = db_get_value_sql(
|
||||
sprintf(
|
||||
"SELECT ip_origen
|
||||
FROM tsesion
|
||||
WHERE id_usuario = '%s'
|
||||
AND to_char(descripcion) = '" . io_safe_input('Logged in') . "'
|
||||
ORDER BY fecha DESC",$row["id_user"]));
|
||||
break;
|
||||
}
|
||||
|
||||
if ($rowPair)
|
||||
$table->rowclass[$iterator] = 'rowPair';
|
||||
else
|
||||
$table->rowclass[$iterator] = 'rowOdd';
|
||||
$rowPair = !$rowPair;
|
||||
$iterator++;
|
||||
|
||||
$data = array ();
|
||||
$data[0] = '<a href="index.php?sec=gusuarios&sec2=godmode/users/configure_user&id='.$row["id_user"].'">'.$row["id_user"].'</a>';
|
||||
$data[1] = $ip_origin;
|
||||
$data[2] = date($config["date_format"], $row['last_connect']);
|
||||
array_push ($table->data, $data);
|
||||
}
|
||||
|
||||
html_print_table ($table);
|
||||
}
|
||||
AND to_char(descripcion) = '".io_safe_input('Logged in')."'
|
||||
ORDER BY fecha DESC",
|
||||
$row['id_user']
|
||||
)
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($rowPair) {
|
||||
$table->rowclass[$iterator] = 'rowPair';
|
||||
} else {
|
||||
$table->rowclass[$iterator] = 'rowOdd';
|
||||
}
|
||||
|
||||
$rowPair = !$rowPair;
|
||||
$iterator++;
|
||||
|
||||
$data = [];
|
||||
$data[0] = '<a href="index.php?sec=gusuarios&sec2=godmode/users/configure_user&id='.$row['id_user'].'">'.$row['id_user'].'</a>';
|
||||
$data[1] = $ip_origin;
|
||||
$data[2] = date($config['date_format'], $row['last_connect']);
|
||||
array_push($table->data, $data);
|
||||
}
|
||||
|
||||
html_print_table($table);
|
||||
}
|
||||
}
|
||||
extensions_add_godmode_menu_option (__('Users connected'), 'UM','gusuarios',"users/icon.png", "v1r1");
|
||||
extensions_add_operation_menu_option(__('Users connected'), 'workspace',"users/icon.png", "v1r1", '', "UM");
|
||||
|
||||
|
||||
extensions_add_godmode_menu_option(__('Users connected'), 'UM', 'gusuarios', 'users/icon.png', 'v1r1');
|
||||
extensions_add_operation_menu_option(__('Users connected'), 'workspace', 'users/icon.png', 'v1r1', '', 'UM');
|
||||
|
||||
extensions_add_godmode_function('users_extension_main_god');
|
||||
extensions_add_main_function('users_extension_main');
|
||||
|
||||
?>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -48,8 +48,6 @@ CREATE TABLE IF NOT EXISTS `tlocal_component` (
|
|||
`dynamic_interval` int(4) unsigned default '0',
|
||||
`dynamic_max` int(4) default '0',
|
||||
`dynamic_min` int(4) default '0',
|
||||
`dynamic_next` bigint(20) NOT NULL default '0',
|
||||
`dynamic_two_tailed` tinyint(1) unsigned default '0',
|
||||
`prediction_sample_window` int(10) default 0,
|
||||
`prediction_samples` int(4) default 0,
|
||||
`prediction_threshold` int(4) default 0,
|
||||
|
@ -58,6 +56,9 @@ CREATE TABLE IF NOT EXISTS `tlocal_component` (
|
|||
ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tlocal_component` ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
|
||||
ALTER TABLE `tlocal_component` ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `tpolicy_modules`
|
||||
-- -----------------------------------------------------
|
||||
|
@ -125,8 +126,6 @@ CREATE TABLE IF NOT EXISTS `tpolicy_modules` (
|
|||
`dynamic_interval` int(4) unsigned default '0',
|
||||
`dynamic_max` int(4) default '0',
|
||||
`dynamic_min` int(4) default '0',
|
||||
`dynamic_next` bigint(20) NOT NULL default '0',
|
||||
`dynamic_two_tailed` tinyint(1) unsigned default '0',
|
||||
`prediction_sample_window` int(10) default 0,
|
||||
`prediction_samples` int(4) default 0,
|
||||
`prediction_threshold` int(4) default 0,
|
||||
|
@ -135,6 +134,9 @@ CREATE TABLE IF NOT EXISTS `tpolicy_modules` (
|
|||
UNIQUE (`id_policy`, `name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tpolicy_modules` ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
|
||||
ALTER TABLE `tpolicy_modules` ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tpolicies`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -181,6 +183,9 @@ CREATE TABLE IF NOT EXISTS `tpolicy_agents` (
|
|||
UNIQUE (`id_policy`, `id_agent`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tpolicy_agents` ADD COLUMN `id_node` int(10) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `tpolicy_agents` ADD UNIQUE(`id_policy`, `id_agent`, `id_node`);
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `tpolicy_groups`
|
||||
-- -----------------------------------------------------
|
||||
|
@ -292,6 +297,8 @@ CREATE TABLE IF NOT EXISTS `tagent_module_inventory` (
|
|||
ON UPDATE CASCADE ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tagent_module_inventory` ADD COLUMN `custom_fields` MEDIUMBLOB NOT NULL;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tpolicy_modules_inventory`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -310,6 +317,8 @@ CREATE TABLE IF NOT EXISTS `tpolicy_modules_inventory` (
|
|||
ON UPDATE CASCADE ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tpolicy_modules_inventory` ADD COLUMN `custom_fields` MEDIUMBLOB NOT NULL;
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `tagente_datos_inventory`
|
||||
-- -----------------------------------------------------
|
||||
|
@ -341,18 +350,13 @@ CREATE TABLE IF NOT EXISTS `ttrap_custom_values` (
|
|||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `tmetaconsole_setup` (
|
||||
`id` int(10) NOT NULL auto_increment primary key,
|
||||
`server_name` text,
|
||||
`server_url` text,
|
||||
`dbuser` text,
|
||||
`dbpass` text,
|
||||
`dbhost` text,
|
||||
`dbport` text,
|
||||
`dbname` text,
|
||||
`meta_dbuser` text,
|
||||
`meta_dbpass` text,
|
||||
`meta_dbhost` text,
|
||||
`meta_dbport` text,
|
||||
`meta_dbname` text,
|
||||
`server_name` text default '',
|
||||
`server_url` text default '',
|
||||
`dbuser` text default '',
|
||||
`dbpass` text default '',
|
||||
`dbhost` text default '',
|
||||
`dbport` text default '',
|
||||
`dbname` text default '',
|
||||
`auth_token` text default '',
|
||||
`id_group` int(10) unsigned NOT NULL default 0,
|
||||
`api_password` text NOT NULL,
|
||||
|
@ -362,6 +366,12 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_setup` (
|
|||
COMMENT = 'Table to store metaconsole sources'
|
||||
DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE tmetaconsole_setup ADD COLUMN `meta_dbuser` text;
|
||||
ALTER TABLE tmetaconsole_setup ADD COLUMN `meta_dbpass` text;
|
||||
ALTER TABLE tmetaconsole_setup ADD COLUMN `meta_dbhost` text;
|
||||
ALTER TABLE tmetaconsole_setup ADD COLUMN `meta_dbport` text;
|
||||
ALTER TABLE tmetaconsole_setup ADD COLUMN `meta_dbname` text;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tprofile_view`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -400,7 +410,7 @@ CREATE TABLE IF NOT EXISTS `tservice` (
|
|||
`id_template_alert_warning` int(10) unsigned NOT NULL default 0,
|
||||
`id_template_alert_critical` int(10) unsigned NOT NULL default 0,
|
||||
`id_template_alert_unknown` int(10) unsigned NOT NULL default 0,
|
||||
`id_template_alert_critical_sla` int(10) unsigned NOT NULL default 0
|
||||
`id_template_alert_critical_sla` int(10) unsigned NOT NULL default 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB
|
||||
COMMENT = 'Table to define services to monitor'
|
||||
|
@ -544,11 +554,12 @@ CREATE TABLE IF NOT EXISTS `tevent_rule` (
|
|||
`user_comment` text NOT NULL,
|
||||
`id_tag` integer(10) unsigned NOT NULL default '0',
|
||||
`name` text default '',
|
||||
`group_recursion` INT(1) unsigned default 0,
|
||||
PRIMARY KEY (`id_event_rule`),
|
||||
KEY `idx_id_event_alert` (`id_event_alert`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tevent_rule` ADD COLUMN `group_recursion` INT(1) unsigned default 0;
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `tevent_alert`
|
||||
-- -----------------------------------------------------
|
||||
|
@ -745,14 +756,15 @@ CREATE TABLE IF NOT EXISTS `treport_content_template` (
|
|||
`module_names` TEXT,
|
||||
`module_free_text` TEXT,
|
||||
`each_agent` tinyint(1) default 1,
|
||||
`historical_db` tinyint(1) UNSIGNED NOT NULL default 0,
|
||||
`lapse_calc` tinyint(1) UNSIGNED NOT NULL default '0',
|
||||
`lapse` int(11) UNSIGNED NOT NULL default '300',
|
||||
`visual_format` tinyint(1) UNSIGNED NOT NULL default '0',
|
||||
`hide_no_data` tinyint(1) default 0,
|
||||
PRIMARY KEY(`id_rc`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE treport_content_template ADD COLUMN `historical_db` tinyint(1) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE treport_content_template ADD COLUMN `lapse_calc` tinyint(1) default '0';
|
||||
ALTER TABLE treport_content_template ADD COLUMN `lapse` int(11) default '300';
|
||||
ALTER TABLE treport_content_template ADD COLUMN `visual_format` tinyint(1) default '0';
|
||||
ALTER TABLE treport_content_template ADD COLUMN `hide_no_data` tinyint(1) default '0';
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `treport_content_sla_com_temp` (treport_content_sla_combined_template)
|
||||
-- -----------------------------------------------------
|
||||
|
@ -861,6 +873,9 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_event` (
|
|||
-- Criticity: 5 - Minor
|
||||
-- Criticity: 6 - Major
|
||||
|
||||
ALTER TABLE `tmetaconsole_event` ADD COLUMN `data` double(22,5) default NULL;
|
||||
ALTER TABLE `tmetaconsole_event` ADD COLUMN `module_status` int(4) NOT NULL default '0';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tmetaconsole_event_history`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -906,6 +921,8 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_event_history` (
|
|||
-- Criticity: 5 - Minor
|
||||
-- Criticity: 6 - Major
|
||||
|
||||
ALTER TABLE `tmetaconsole_event_history` ADD COLUMN `data` double(22,5) default NULL;
|
||||
ALTER TABLE `tmetaconsole_event_history` ADD COLUMN `module_status` int(4) NOT NULL default '0';
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `textension_translate_string`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -958,12 +975,10 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_agent` (
|
|||
`agent_version` varchar(100) default '',
|
||||
`ultimo_contacto_remoto` datetime default '1970-01-01 00:00:00',
|
||||
`disabled` tinyint(2) NOT NULL default '0',
|
||||
`remote` tinyint(1) NOT NULL default '0',
|
||||
`id_parent` int(10) unsigned default '0',
|
||||
`custom_id` varchar(255) default '',
|
||||
`server_name` varchar(100) default '',
|
||||
`cascade_protection` tinyint(2) NOT NULL default '0',
|
||||
`cascade_protection_module` int(10) unsigned default '0',
|
||||
`timezone_offset` TINYINT(2) NULL DEFAULT '0' COMMENT 'number of hours of diference with the server timezone' ,
|
||||
`icon_path` VARCHAR(127) NULL DEFAULT NULL COMMENT 'path in the server to the image of the icon representing the agent' ,
|
||||
`update_gis_data` TINYINT(1) NOT NULL DEFAULT '1' COMMENT 'set it to one to update the position data (altitude, longitude, latitude) when getting information from the agent or to 0 to keep the last value and do not update it' ,
|
||||
|
@ -978,8 +993,6 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_agent` (
|
|||
`fired_count` bigint(20) NOT NULL default '0',
|
||||
`update_module_count` tinyint(1) NOT NULL default '0',
|
||||
`update_alert_count` tinyint(1) NOT NULL default '0',
|
||||
`transactional_agent` tinyint(1) NOT NULL default '0',
|
||||
`alias` varchar(600) BINARY NOT NULL default '',
|
||||
PRIMARY KEY (`id_agente`),
|
||||
KEY `nombre` (`nombre`(255)),
|
||||
KEY `direccion` (`direccion`),
|
||||
|
@ -988,6 +1001,11 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_agent` (
|
|||
FOREIGN KEY (`id_tmetaconsole_setup`) REFERENCES tmetaconsole_setup(`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `remote` tinyint(1) NOT NULL default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `cascade_protection_module` int(10) default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `transactional_agent` tinyint(1) NOT NULL default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `alias` VARCHAR(600) not null DEFAULT '';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `ttransaction`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -1181,13 +1199,13 @@ ALTER TABLE titem MODIFY `source_data` int(10) unsigned;
|
|||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('big_operation_step_datos_purge', '100');
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('small_operation_step_datos_purge', '1000');
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('days_autodisable_deletion', '30');
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('MR', 23);
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('MR', 24);
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_docs_logo', 'default_docs.png');
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_support_logo', 'default_support.png');
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_logo_white_bg_preview', 'pandora_logo_head_white_bg.png');
|
||||
UPDATE tconfig SET value = 'https://licensing.artica.es/pandoraupdate7/server.php' WHERE token='url_update_manager';
|
||||
DELETE FROM `tconfig` WHERE `token` = 'current_package_enterprise';
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('current_package_enterprise', '730');
|
||||
INSERT INTO `tconfig` (`token`, `value`) VALUES ('current_package_enterprise', '731');
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tconfig_os`
|
||||
|
@ -1306,6 +1324,10 @@ ALTER TABLE tlayout_data ADD COLUMN `clock_animation` varchar(60) NOT NULL defau
|
|||
ALTER TABLE tlayout_data ADD COLUMN `time_format` varchar(60) NOT NULL default "time";
|
||||
ALTER TABLE tlayout_data ADD COLUMN `timezone` varchar(60) NOT NULL default "Europe/Madrid";
|
||||
ALTER TABLE tlayout_data ADD COLUMN `show_last_value` tinyint(1) UNSIGNED NULL default '0';
|
||||
ALTER TABLE `tlayout_data` ADD COLUMN `linked_layout_status_type` ENUM ('default', 'weight', 'service') DEFAULT 'default';
|
||||
ALTER TABLE `tlayout_data` ADD COLUMN `linked_layout_status_as_service_warning` FLOAT(20, 3) NOT NULL default 0;
|
||||
ALTER TABLE `tlayout_data` ADD COLUMN `linked_layout_status_as_service_critical` FLOAT(20, 3) NOT NULL default 0;
|
||||
ALTER TABLE `tlayout_data` ADD COLUMN `linked_layout_node_id` INT(10) NOT NULL default 0;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tagent_custom_fields`
|
||||
|
@ -1359,26 +1381,15 @@ ALTER TABLE treport_content ADD COLUMN `recursion` tinyint(1) default NULL;
|
|||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE tmodule_relationship ADD COLUMN `id_server` varchar(100) NOT NULL DEFAULT '';
|
||||
|
||||
-- Table `tlocal_component`
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE tlocal_component ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
|
||||
ALTER TABLE tlocal_component ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tpolicy_module`
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE tpolicy_modules ADD COLUMN `ip_target`varchar(100) default '';
|
||||
ALTER TABLE tpolicy_modules ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
|
||||
ALTER TABLE tpolicy_modules ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
|
||||
ALTER TABLE `tpolicy_modules` ADD COLUMN `cps` int NOT NULL DEFAULT 0;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tmetaconsole_agent`
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `remote` tinyint(1) NOT NULL default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `cascade_protection_module` int(10) default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `transactional_agent` tinyint(1) NOT NULL default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `alias` VARCHAR(600) not null DEFAULT '';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `alias_as_name` int(2) unsigned default '0';
|
||||
ALTER TABLE tmetaconsole_agent ADD COLUMN `safe_mode_module` int(10) unsigned NOT NULL default '0';
|
||||
ALTER TABLE `tmetaconsole_agent` ADD COLUMN `cps` int NOT NULL default 0;
|
||||
|
@ -1543,6 +1554,8 @@ ALTER TABLE `tdashboard` ADD COLUMN `cells_slideshow` TINYINT(1) NOT NULL defaul
|
|||
-- ---------------------------------------------------------------------
|
||||
-- Table `tsnmp_filter`
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE tsnmp_filter ADD unified_filters_id int(10) NOT NULL DEFAULT 0;
|
||||
|
||||
SELECT max(unified_filters_id) INTO @max FROM tsnmp_filter;
|
||||
UPDATE tsnmp_filter tsf,(SELECT @max:= @max) m SET tsf.unified_filters_id = @max:= @max + 1 where tsf.unified_filters_id=0;
|
||||
|
||||
|
@ -1733,7 +1746,7 @@ CREATE TABLE IF NOT EXISTS `tautoconfig_actions` (
|
|||
-- ---------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `tlayout_template` (
|
||||
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(50) NOT NULL,
|
||||
`name` varchar(600) NOT NULL,
|
||||
`id_group` INTEGER UNSIGNED NOT NULL,
|
||||
`background` varchar(200) NOT NULL,
|
||||
`height` INTEGER UNSIGNED NOT NULL default 0,
|
||||
|
@ -1779,11 +1792,15 @@ CREATE TABLE IF NOT EXISTS `tlayout_template_data` (
|
|||
`clock_animation` varchar(60) NOT NULL default "analogic_1",
|
||||
`time_format` varchar(60) NOT NULL default "time",
|
||||
`timezone` varchar(60) NOT NULL default "Europe/Madrid",
|
||||
`show_last_value` tinyint(1) UNSIGNED NULL default '0',
|
||||
`linked_layout_status_type` ENUM ('default', 'weight', 'service') DEFAULT 'default',
|
||||
`linked_layout_status_as_service_warning` FLOAT(20, 3) NOT NULL default 0,
|
||||
`linked_layout_status_as_service_critical` FLOAT(20, 3) NOT NULL default 0,
|
||||
`linked_layout_node_id` INT(10) NOT NULL default 0,
|
||||
PRIMARY KEY(`id`),
|
||||
FOREIGN KEY (`id_layout_template`) REFERENCES tlayout_template(`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE tlayout_template_data ADD COLUMN `show_last_value` tinyint(1) UNSIGNED NULL default '0';
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tlog_graph_models`
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -1826,11 +1843,28 @@ CREATE TABLE IF NOT EXISTS `tagent_custom_fields_filter` (
|
|||
`id_custom_fields_data` varchar(600) default '',
|
||||
`id_status` varchar(600) default '',
|
||||
`module_search` varchar(600) default '',
|
||||
`module_status` varchar(600) default '',
|
||||
`recursion` int(1) unsigned default '0',
|
||||
`group_search` int(10) unsigned default '0',
|
||||
PRIMARY KEY(`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `tagent_custom_fields_filter` ADD COLUMN `module_status` varchar(600) default '';
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Table `tevento`
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE `tevento` ADD COLUMN `data` double(22,5) default NULL;
|
||||
|
||||
ALTER TABLE `tagent_custom_fields_filter` ADD COLUMN `recursion` int(1) unsigned default '0';
|
||||
ALTER TABLE `tevento` ADD COLUMN `module_status` int(4) NOT NULL default '0';
|
||||
|
||||
ALTER TABLE `tagent_custom_fields_filter` ADD COLUMN `group_search` int(10) unsigned default '0';
|
||||
-- -----------------------------------------------------
|
||||
-- Table `tgis_map_layer_groups`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `tgis_map_layer_groups` (
|
||||
`layer_id` INT NOT NULL,
|
||||
`group_id` MEDIUMINT(4) UNSIGNED NOT NULL,
|
||||
`agent_id` INT(10) UNSIGNED NOT NULL COMMENT 'Used to link the position to the group',
|
||||
PRIMARY KEY (`layer_id`, `group_id`),
|
||||
FOREIGN KEY (`layer_id`) REFERENCES `tgis_map_layer` (`id_tmap_layer`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`group_id`) REFERENCES `tgrupo` (`id_grupo`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`agent_id`) REFERENCES `tagente` (`id_agente`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<?php
|
||||
|
||||
// Password estatica, se define en ambos extremos
|
||||
$pwd = "sistemas";
|
||||
$pwd = 'sistemas';
|
||||
|
||||
$user = "admin";
|
||||
$user = 'admin';
|
||||
$data = $user.$pwd;
|
||||
$data = md5($data);
|
||||
|
||||
echo "DEBUG md5sum $data user $user Pass $pwd<br>";
|
||||
echo '<form name=test method=post action="http://192.168.61.41/pandora_console/index.php?loginhash=auto&sec=estado&sec2=operation/agentes/estado_agente&refr=60">';
|
||||
echo '<input type="hidden" name="loginhash_data" value="'.$data.'">';
|
||||
echo '<input type="hidden" name="loginhash_user" value="' . str_rot13($user) . '">';
|
||||
echo '<input type="hidden" name="loginhash_user" value="'.str_rot13($user).'">';
|
||||
echo '<input type="submit">';
|
||||
echo '</form>';
|
||||
|
|
|
@ -1,183 +1,190 @@
|
|||
<?php
|
||||
|
||||
/* Hello there! :)
|
||||
/*
|
||||
Hello there! :)
|
||||
|
||||
We added some of what seems to be "buggy" messages to the openSource version recently. This is not to force open-source users to move to the enterprise version, this is just to inform people using Pandora FMS open source that it requires skilled people to maintain and keep it running smoothly without professional support. This does not imply open-source version is limited in any way. If you check the recently added code, it contains only warnings and messages, no limitations except one: we removed the option to add custom logo in header. In the Update Manager section, it warns about the 'danger’ of applying automated updates without a proper backup, remembering in the process that the Enterprise version comes with a human-tested package. Maintaining an OpenSource version with more than 500 agents is not so easy, that's why someone using a Pandora with 8000 agents should consider asking for support. It's not a joke, we know of many setups with a huge number of agents, and we hate to hear that “its becoming unstable and slow” :(
|
||||
We added some of what seems to be "buggy" messages to the openSource version recently. This is not to force open-source users to move to the enterprise version, this is just to inform people using Pandora FMS open source that it requires skilled people to maintain and keep it running smoothly without professional support. This does not imply open-source version is limited in any way. If you check the recently added code, it contains only warnings and messages, no limitations except one: we removed the option to add custom logo in header. In the Update Manager section, it warns about the 'danger’ of applying automated updates without a proper backup, remembering in the process that the Enterprise version comes with a human-tested package. Maintaining an OpenSource version with more than 500 agents is not so easy, that's why someone using a Pandora with 8000 agents should consider asking for support. It's not a joke, we know of many setups with a huge number of agents, and we hate to hear that “its becoming unstable and slow” :(
|
||||
|
||||
You can of course remove the warnings, that's why we include the source and do not use any kind of trick. And that's why we added here this comment, to let you know this does not reflect any change in our opensource mentality of does the last 14 years.
|
||||
You can of course remove the warnings, that's why we include the source and do not use any kind of trick. And that's why we added here this comment, to let you know this does not reflect any change in our opensource mentality of does the last 14 years.
|
||||
|
||||
*/
|
||||
|
||||
if(check_login()){
|
||||
if (check_login()) {
|
||||
if (!enterprise_installed()) {
|
||||
$open = true;
|
||||
}
|
||||
|
||||
$tipo = $_POST['message'];
|
||||
|
||||
if(!enterprise_installed()){
|
||||
$open=true;
|
||||
}
|
||||
|
||||
$tipo = $_POST['message'];
|
||||
|
||||
echo "
|
||||
echo "
|
||||
<div class='modalheader'>
|
||||
<span class='modalheadertext'>";
|
||||
|
||||
if($tipo=='noaccess'){
|
||||
echo "You don't have access to this page";
|
||||
}
|
||||
elseif(!enterprise_installed()){
|
||||
echo "Community version";
|
||||
}
|
||||
else{
|
||||
echo "Enterprise version";
|
||||
}
|
||||
if ($tipo == 'noaccess') {
|
||||
echo "You don't have access to this page";
|
||||
} else if (!enterprise_installed()) {
|
||||
echo 'Community version';
|
||||
} else {
|
||||
echo 'Enterprise version';
|
||||
}
|
||||
|
||||
echo "</span>
|
||||
echo "</span>
|
||||
<img class='modalclosex cerrar' src='".$config['homeurl']."images/icono_cerrar.png'>
|
||||
</div>
|
||||
|
||||
<div class='modalcontent'>
|
||||
<img class='modalcontentimg' src='".$config['homeurl']."images/";
|
||||
<img class='modalcontentimg' src='".$config['homeurl'].'images/';
|
||||
|
||||
switch ($tipo) {
|
||||
case "infomodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "helpmodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "modulemodal":
|
||||
echo "icono_popup.png";
|
||||
switch ($tipo) {
|
||||
case 'infomodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
case "massivemodal":
|
||||
echo "icono_popup.png";
|
||||
break;
|
||||
case "eventsmodal":
|
||||
echo "icono_popup.png";
|
||||
break;
|
||||
case "reportingmodal":
|
||||
echo "icono_popup.png";
|
||||
break;
|
||||
case "visualmodal":
|
||||
echo "icono_popup.png";
|
||||
break;
|
||||
case "updatemodal":
|
||||
echo "icono_info.png";
|
||||
|
||||
case 'helpmodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
case "agentsmodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "monitorcheckmodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "remotemodulesmodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "monitoreventsmodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "alertagentmodal":
|
||||
echo "icono_info.png";
|
||||
break;
|
||||
case "noaccess":
|
||||
echo "access_denied.png";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
case 'modulemodal':
|
||||
echo 'icono_popup.png';
|
||||
break;
|
||||
|
||||
case 'massivemodal':
|
||||
echo 'icono_popup.png';
|
||||
break;
|
||||
|
||||
case 'eventsmodal':
|
||||
echo 'icono_popup.png';
|
||||
break;
|
||||
|
||||
case 'reportingmodal':
|
||||
echo 'icono_popup.png';
|
||||
break;
|
||||
|
||||
case 'visualmodal':
|
||||
echo 'icono_popup.png';
|
||||
break;
|
||||
|
||||
case 'updatemodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
|
||||
case 'agentsmodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
|
||||
case 'monitorcheckmodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
|
||||
case 'remotemodulesmodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
|
||||
case 'monitoreventsmodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
|
||||
case 'alertagentmodal':
|
||||
echo 'icono_info.png';
|
||||
break;
|
||||
|
||||
case 'noaccess':
|
||||
echo 'access_denied.png';
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
echo "'>
|
||||
echo "'>
|
||||
<div class='modalcontenttext'>";
|
||||
|
||||
switch ($tipo) {
|
||||
|
||||
case "helpmodal":
|
||||
|
||||
echo __("This is the online help for %s console. This help is -in best cases- just a brief contextual help, not intented to teach you how to use %s. Official documentation of %s is about 900 pages, and you probably don't need to read it entirely, but sure, you should download it and take a look.<br><br>
|
||||
switch ($tipo) {
|
||||
case 'helpmodal':
|
||||
|
||||
echo __(
|
||||
"This is the online help for %s console. This help is -in best cases- just a brief contextual help, not intented to teach you how to use %s. Official documentation of %s is about 900 pages, and you probably don't need to read it entirely, but sure, you should download it and take a look.<br><br>
|
||||
<a href='%s' target='_blanck' style='color: #82b92e; font-size: 10pt; text-decoration: underline;'>Download the official documentation</a>",
|
||||
get_product_name(), get_product_name(), get_product_name(), $config['custom_docs_url']);
|
||||
|
||||
break;
|
||||
|
||||
case "noaccess":
|
||||
|
||||
echo __('Access to this page is restricted to authorized users only, please contact system administrator if you need assistance. <br> <br>
|
||||
get_product_name(),
|
||||
get_product_name(),
|
||||
get_product_name(),
|
||||
$config['custom_docs_url']
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
case 'noaccess':
|
||||
|
||||
echo __(
|
||||
'Access to this page is restricted to authorized users only, please contact system administrator if you need assistance. <br> <br>
|
||||
Please know that all attempts to access this page are recorded in security logs of %s System Database.',
|
||||
get_product_name());
|
||||
|
||||
break;
|
||||
|
||||
case "infomodal":
|
||||
|
||||
if($open){
|
||||
get_product_name()
|
||||
);
|
||||
|
||||
echo
|
||||
'<p>' .
|
||||
__('The Update Manager client is included on %s. It helps system administrators update their %s automatically, since the Update Manager retrieves new modules, new plugins and new features (even full migrations tools for future versions) automatically.', get_product_name(), get_product_name()) .
|
||||
'</p>' .
|
||||
'<p>' .
|
||||
__('<b>OpenSource version updates are automated packages generated each week. These updates come WITHOUT ANY warranty or support. If your system is corrupted or a feature stops working properly, you will need to recover a backup by yourself.</b>') .
|
||||
'</p>' .
|
||||
'<p>' .
|
||||
__('The Enterprise version comes with a different update system, with fully tested, professionally-supported packages, and our support team is there to help you in case of problems or queries. Update Manager is another feature present in the Enterprise version and not included in the OpenSource version. There are lots of advanced business-oriented features contained in %s Enterprise Edition. For more information visit <a href="http://pandorafms.com">pandorafms.com</a>', get_product_name()) .
|
||||
'</p>'
|
||||
;
|
||||
|
||||
}else{
|
||||
|
||||
echo
|
||||
'<p>' .
|
||||
__('The new <a href="http://updatemanager.sourceforge.net">Update Manager</a> client is included on %s. It helps system administrators update their %s automatically, since the Update Manager retrieves new modules, new plugins and new features (even full migrations tools for future versions) automatically.', get_product_name(), get_product_name()) .
|
||||
'</p>' .
|
||||
'<p>' .
|
||||
__('The Update Manager is one of the most advanced features on the %s Enterprise Edition. For more information visit <a href="http://pandorafms.com">http://pandorafms.com</a>.', get_product_name()) .
|
||||
'</p>' .
|
||||
'<p>' .
|
||||
__('Update Manager sends anonymous information about %s usage (number of agents and modules running). To disable it, please remove the remote server address from the Update Manager plugin setup.', get_product_name()) .
|
||||
'</p>'
|
||||
;
|
||||
break;
|
||||
|
||||
case 'infomodal':
|
||||
|
||||
if ($open) {
|
||||
echo '<p>'.__('The Update Manager client is included on %s. It helps system administrators update their %s automatically, since the Update Manager retrieves new modules, new plugins and new features (even full migrations tools for future versions) automatically.', get_product_name(), get_product_name()).'</p>'.'<p>'.__('<b>OpenSource version updates are automated packages generated each week. These updates come WITHOUT ANY warranty or support. If your system is corrupted or a feature stops working properly, you will need to recover a backup by yourself.</b>').'</p>'.'<p>'.__('The Enterprise version comes with a different update system, with fully tested, professionally-supported packages, and our support team is there to help you in case of problems or queries. Update Manager is another feature present in the Enterprise version and not included in the OpenSource version. There are lots of advanced business-oriented features contained in %s Enterprise Edition. For more information visit <a href="http://pandorafms.com">pandorafms.com</a>', get_product_name()).'</p>';
|
||||
} else {
|
||||
echo '<p>'.__('The new <a href="http://updatemanager.sourceforge.net">Update Manager</a> client is included on %s. It helps system administrators update their %s automatically, since the Update Manager retrieves new modules, new plugins and new features (even full migrations tools for future versions) automatically.', get_product_name(), get_product_name()).'</p>'.'<p>'.__('The Update Manager is one of the most advanced features on the %s Enterprise Edition. For more information visit <a href="http://pandorafms.com">http://pandorafms.com</a>.', get_product_name()).'</p>'.'<p>'.__('Update Manager sends anonymous information about %s usage (number of agents and modules running). To disable it, please remove the remote server address from the Update Manager plugin setup.', get_product_name()).'</p>';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'modulemodal':
|
||||
echo __(
|
||||
"The community version doesn't have the ability to define your own library of local modules, or distribute it to remote agents. You need to make those changes individually on each agent which is possible by using external tools and time and effort. Nor can it distribute local plugins, or have access to the library of enterprise plugins to monitor applications such as VMWare, RHEV or Informix between others. The Enterprise version will have all this, plus the ability to distribute and manage your own local modules on your systems, individually or through policies.
|
||||
<br><br><img style='width:105px' src='".$config['homeurl']."images/logo_oracle.png'><img style='width:105px' src='".$config['homeurl']."images/logo_citrix.png'><img style='width:105px' src='".$config['homeurl']."images/logo_sap.png'><img style='width:105px' src='".$config['homeurl']."images/logo_exchange.png'><br><br><span style='font-style:italic;'>* Todos los logotipos pertenecen a marcas registradas</span>"
|
||||
);
|
||||
break;
|
||||
|
||||
case 'massivemodal':
|
||||
echo __("Do you want to consolidate all your system monitoring? Do you have many systems, making it difficult to manage them in a comprehensive manner? Would you like to deploy monitoring, alerts and even local plugins with a single click? %s Enterprise Policies are exactly what you need; you'll save time, effort and annoyances. More information <a href='pandorafms.com'>pandorafms.com</a>", get_product_name());
|
||||
break;
|
||||
|
||||
case 'eventsmodal':
|
||||
echo __('%s Enterprise also features event correlation. Through correlation you can generate realtime alerts and / or new events based on logical rules. This allows you to automate troubleshooting. If you know the value of working with events, event correlation will take you to a new level.', get_product_name());
|
||||
break;
|
||||
|
||||
case 'reportingmodal':
|
||||
echo __('Report generating on the Enterprise version is also more powerful: it has wizards, you can schedule emails in PDF to be sent according to the schedule you decide, and it has a template system to create personalized reports quickly for each of your customers. It will even allow your customers to generate their own reports from templates created by you. If reports are key to your business, %s Enterprise version is for you.', get_product_name());
|
||||
break;
|
||||
|
||||
case 'visualmodal':
|
||||
echo __('These options are only effective on the Enterprise version.');
|
||||
break;
|
||||
|
||||
case 'updatemodal':
|
||||
echo __('WARNING: You are just one click away from an automated update. This may result in a damaged system, including loss of data and operativity. Check you have a recent backup. OpenSource updates are automatically created packages, and there is no WARRANTY or SUPPORT. If you need professional support and warranty, please upgrade to Enterprise Version.');
|
||||
break;
|
||||
|
||||
case 'agentsmodal':
|
||||
echo __('This system is heavily loaded. OpenSource version could get a lot more agents but fine tuning requires knowledge and time. Checkout the Enterprise Version for a professional supported system.');
|
||||
break;
|
||||
|
||||
case 'monitorcheckmodal':
|
||||
echo __('This system has too many modules per agent. OpenSource version could manage thousands of modules, but is not recommended to have more than 40 modules per agent. This configuration has B/A modules per agent. Checkout the Enterprise Version for a professional supported system.');
|
||||
break;
|
||||
|
||||
case 'remotemodulesmodal':
|
||||
echo __('Too much remote modules has been detected on this system. OpenSource version could manage thousands of modules, but performance is limited on high amount of SNMP or ICMP request. Checkout the Enterprise Version for a professional supported system with improved capacity on network monitoring, including distributed servers.');
|
||||
break;
|
||||
|
||||
case 'monitoreventsmodal':
|
||||
echo __('This system has too much events in the database. Checkout database purge options. Checkout the Enterprise Version for a professional supported system.');
|
||||
break;
|
||||
|
||||
case 'alertagentmodal':
|
||||
echo __('You have defined a high number of alerts, this may cause you performance problems in the future. In the Enterprise version, you can use event correlation alerts to simplify the alerting system and have easier administration and increased performance.');
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case "modulemodal":
|
||||
echo __("The community version doesn't have the ability to define your own library of local modules, or distribute it to remote agents. You need to make those changes individually on each agent which is possible by using external tools and time and effort. Nor can it distribute local plugins, or have access to the library of enterprise plugins to monitor applications such as VMWare, RHEV or Informix between others. The Enterprise version will have all this, plus the ability to distribute and manage your own local modules on your systems, individually or through policies.
|
||||
<br><br><img style='width:105px' src='".$config['homeurl']."images/logo_oracle.png'><img style='width:105px' src='".$config['homeurl']."images/logo_citrix.png'><img style='width:105px' src='".$config['homeurl']."images/logo_sap.png'><img style='width:105px' src='".$config['homeurl']."images/logo_exchange.png'><br><br><span style='font-style:italic;'>* Todos los logotipos pertenecen a marcas registradas</span>");
|
||||
break;
|
||||
case "massivemodal":
|
||||
echo __("Do you want to consolidate all your system monitoring? Do you have many systems, making it difficult to manage them in a comprehensive manner? Would you like to deploy monitoring, alerts and even local plugins with a single click? %s Enterprise Policies are exactly what you need; you'll save time, effort and annoyances. More information <a href='pandorafms.com'>pandorafms.com</a>", get_product_name());
|
||||
break;
|
||||
case "eventsmodal":
|
||||
echo __("%s Enterprise also features event correlation. Through correlation you can generate realtime alerts and / or new events based on logical rules. This allows you to automate troubleshooting. If you know the value of working with events, event correlation will take you to a new level.", get_product_name());
|
||||
break;
|
||||
case "reportingmodal":
|
||||
echo __("Report generating on the Enterprise version is also more powerful: it has wizards, you can schedule emails in PDF to be sent according to the schedule you decide, and it has a template system to create personalized reports quickly for each of your customers. It will even allow your customers to generate their own reports from templates created by you. If reports are key to your business, %s Enterprise version is for you.", get_product_name());
|
||||
break;
|
||||
case "visualmodal":
|
||||
echo __("These options are only effective on the Enterprise version.");
|
||||
break;
|
||||
case "updatemodal":
|
||||
echo __("WARNING: You are just one click away from an automated update. This may result in a damaged system, including loss of data and operativity. Check you have a recent backup. OpenSource updates are automatically created packages, and there is no WARRANTY or SUPPORT. If you need professional support and warranty, please upgrade to Enterprise Version.");
|
||||
break;
|
||||
case "agentsmodal":
|
||||
echo __("This system is heavily loaded. OpenSource version could get a lot more agents but fine tuning requires knowledge and time. Checkout the Enterprise Version for a professional supported system.");
|
||||
break;
|
||||
case "monitorcheckmodal":
|
||||
echo __("This system has too many modules per agent. OpenSource version could manage thousands of modules, but is not recommended to have more than 40 modules per agent. This configuration has B/A modules per agent. Checkout the Enterprise Version for a professional supported system.");
|
||||
break;
|
||||
case "remotemodulesmodal":
|
||||
echo __("Too much remote modules has been detected on this system. OpenSource version could manage thousands of modules, but performance is limited on high amount of SNMP or ICMP request. Checkout the Enterprise Version for a professional supported system with improved capacity on network monitoring, including distributed servers.");
|
||||
break;
|
||||
case "monitoreventsmodal":
|
||||
echo __("This system has too much events in the database. Checkout database purge options. Checkout the Enterprise Version for a professional supported system.");
|
||||
break;
|
||||
case "alertagentmodal":
|
||||
echo __("You have defined a high number of alerts, this may cause you performance problems in the future. In the Enterprise version, you can use event correlation alerts to simplify the alerting system and have easier administration and increased performance.");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
echo "
|
||||
echo "
|
||||
|
||||
</div>
|
||||
<div style='float:right;width:100%;height:30px;'>
|
||||
|
@ -185,12 +192,11 @@ echo "
|
|||
<div class='modalokbutton cerrar'>
|
||||
<span class='modalokbuttontext'>OK</span>
|
||||
</div>";
|
||||
if($open){
|
||||
echo "<div class='modalgobutton gopandora'>
|
||||
if ($open) {
|
||||
echo "<div class='modalgobutton gopandora'>
|
||||
<span class='modalgobuttontext'>About Enterprise</span>
|
||||
</div>";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
<?php
|
||||
<?php
|
||||
$stacked = db_get_sql('select stacked from tgraph where id_graph = '.$_GET['data']);
|
||||
$num_items = db_get_sql('select count(*) from tgraph_source where id_graph = '.$_GET['data']);
|
||||
echo "$stacked,$num_items";
|
||||
|
||||
|
||||
?>
|
|
@ -1,9 +1,9 @@
|
|||
<?php
|
||||
|
||||
include_once ('include/config.php');
|
||||
include_once ('include/functions.php');
|
||||
include_once ('include/functions_db.php');
|
||||
include_once ('include/auth/mysql.php');
|
||||
require_once 'include/config.php';
|
||||
require_once 'include/functions.php';
|
||||
require_once 'include/functions_db.php';
|
||||
require_once 'include/auth/mysql.php';
|
||||
|
||||
$id = get_parameter('get_image');
|
||||
|
||||
|
@ -13,13 +13,8 @@ $result = db_get_sql($sql);
|
|||
|
||||
$image = strpos($result, 'data:image');
|
||||
|
||||
if($image === false){
|
||||
echo 0;
|
||||
if ($image === false) {
|
||||
echo 0;
|
||||
} else {
|
||||
echo 1;
|
||||
}
|
||||
else{
|
||||
echo 1;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
|
|
@ -4,31 +4,28 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
include_once("include/functions.php");
|
||||
include_once("include/functions_html.php");
|
||||
include_once("include/functions_ui.php");
|
||||
include_once("include/functions_io.php");
|
||||
include_once("include/functions_extensions.php");
|
||||
require_once 'include/functions.php';
|
||||
require_once 'include/functions_html.php';
|
||||
require_once 'include/functions_ui.php';
|
||||
require_once 'include/functions_io.php';
|
||||
require_once 'include/functions_extensions.php';
|
||||
echo '<html>';
|
||||
ob_start ('ui_process_page_head');
|
||||
ob_start('ui_process_page_head');
|
||||
echo '<link rel="stylesheet" href="include/styles/pandora.css" type="text/css">';
|
||||
echo '</head>' . "\n";
|
||||
echo '</head>'."\n";
|
||||
|
||||
require_once ("include/functions_themes.php");
|
||||
ob_start ('ui_process_page_body');
|
||||
require_once 'include/functions_themes.php';
|
||||
ob_start('ui_process_page_body');
|
||||
|
||||
// At this point, $login_screen is setted with the error type desired
|
||||
|
||||
require('login_page.php');
|
||||
require 'login_page.php';
|
||||
|
||||
?>
|
||||
</body>
|
||||
|
|
|
@ -3,87 +3,85 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
|
||||
check_login ();
|
||||
check_login();
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "PM")) {
|
||||
db_pandora_audit("ACL Violation",
|
||||
"Trying to access HA cluster");
|
||||
require ("general/noaccess.php");
|
||||
exit;
|
||||
if (! check_acl($config['id_user'], 0, 'PM')) {
|
||||
db_pandora_audit(
|
||||
'ACL Violation',
|
||||
'Trying to access HA cluster'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
exit;
|
||||
}
|
||||
|
||||
ui_require_css_file ('firts_task');
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php
|
||||
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no HA clusters defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clusters defined yet.') ]);
|
||||
?>
|
||||
|
||||
<div class="new_task_cluster">
|
||||
<div class="image_task_cluster">
|
||||
<?php echo html_print_image('images/firts_task/slave-mode.png', true, array("title" => __('Clusters')));?>
|
||||
</div>
|
||||
<div class="text_task_cluster">
|
||||
<h3> <?php echo __('PANDORA FMS DB CLUSTER'); ?></h3>
|
||||
<p id="description_task"> <?php
|
||||
|
||||
<div class="image_task_cluster">
|
||||
<?php echo html_print_image('images/firts_task/slave-mode.png', true, ['title' => __('Clusters')]); ?>
|
||||
</div>
|
||||
<div class="text_task_cluster">
|
||||
<h3> <?php echo __('PANDORA FMS DB CLUSTER'); ?></h3>
|
||||
<p id="description_task">
|
||||
<?php
|
||||
echo __('With Pandora FMS Enterprise you can add high availability to your Pandora FMS installation by adding redundant MySQL servers').'<br><br>';
|
||||
|
||||
|
||||
echo __('Click on "add new node" to start transforming your Pandora FMS DB Cluster into a Pandora FMS DB Cluster.').'<br><br>';
|
||||
|
||||
?></p>
|
||||
|
||||
<?php
|
||||
if(check_acl ($config['id_user'], 0, "AW")) {
|
||||
echo "<div id='create_master_window'></div>";
|
||||
?>
|
||||
<input style="margin-bottom:20px;" onclick="show_create_ha_cluster();" type="submit" class="button_task" value="<?php echo __('Add new node'); ?>" />
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
?>
|
||||
</p>
|
||||
|
||||
<?php
|
||||
if (check_acl($config['id_user'], 0, 'AW')) {
|
||||
echo "<div id='create_master_window'></div>";
|
||||
?>
|
||||
<input style="margin-bottom:20px;" onclick="show_create_ha_cluster();" type="submit" class="button_task" value="<?php echo __('Add new node'); ?>" />
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
function show_create_ha_cluster() {
|
||||
var params = {};
|
||||
params["dialog_master"] = 1;
|
||||
params["page"] = "enterprise/include/ajax/HA_cluster.ajax";
|
||||
jQuery.ajax ({
|
||||
data: params,
|
||||
dataType: "html",
|
||||
type: "POST",
|
||||
url: "ajax.php",
|
||||
success: function (data) {
|
||||
$("#create_master_window").dialog ({
|
||||
title: '<?php echo __("Add master node");?>',
|
||||
resizable: true,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
close: function() {
|
||||
|
||||
},
|
||||
overlay: {
|
||||
opacity: 0.5,
|
||||
background: "black"
|
||||
},
|
||||
width: 800,
|
||||
height: 600
|
||||
}).empty()
|
||||
.html(data)
|
||||
.show ();
|
||||
}
|
||||
});
|
||||
}
|
||||
function show_create_ha_cluster() {
|
||||
var params = {};
|
||||
params["dialog_master"] = 1;
|
||||
params["page"] = "enterprise/include/ajax/HA_cluster.ajax";
|
||||
jQuery.ajax ({
|
||||
data: params,
|
||||
dataType: "html",
|
||||
type: "POST",
|
||||
url: "ajax.php",
|
||||
success: function (data) {
|
||||
$("#create_master_window").dialog ({
|
||||
title: '<?php echo __('Add master node'); ?>',
|
||||
resizable: true,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
close: function() {
|
||||
|
||||
},
|
||||
overlay: {
|
||||
opacity: 0.5,
|
||||
background: "black"
|
||||
},
|
||||
width: 800,
|
||||
height: 600
|
||||
}).empty()
|
||||
.html(data)
|
||||
.show ();
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -4,62 +4,60 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
|
||||
check_login();
|
||||
|
||||
if (! check_acl ($config['id_user'], 0, "AR") && ! check_acl ($config['id_user'], 0, "AW")) {
|
||||
db_pandora_audit("ACL Violation",
|
||||
"Trying to access Inventory");
|
||||
require ("general/noaccess.php");
|
||||
return;
|
||||
if (! check_acl($config['id_user'], 0, 'AR') && ! check_acl($config['id_user'], 0, 'AW')) {
|
||||
db_pandora_audit(
|
||||
'ACL Violation',
|
||||
'Trying to access Inventory'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
ui_require_css_file ('firts_task');
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php
|
||||
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no clusters defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no clusters defined yet.') ]);
|
||||
?>
|
||||
|
||||
<div class="new_task_cluster">
|
||||
<div class="image_task_cluster">
|
||||
<?php echo html_print_image('images/firts_task/icono-cluster-activo.png', true, array("title" => __('Clusters')));?>
|
||||
</div>
|
||||
<div class="text_task_cluster">
|
||||
<h3> <?php echo __('Create Cluster'); ?></h3>
|
||||
<p id="description_task"> <?php
|
||||
|
||||
<div class="image_task_cluster">
|
||||
<?php echo html_print_image('images/firts_task/icono-cluster-activo.png', true, ['title' => __('Clusters')]); ?>
|
||||
</div>
|
||||
<div class="text_task_cluster">
|
||||
<h3> <?php echo __('Create Cluster'); ?></h3>
|
||||
<p id="description_task">
|
||||
<?php
|
||||
echo __('A cluster is a group of devices that provide the same service in high availability.').'<br><br>';
|
||||
|
||||
|
||||
echo __('Depending on how they provide that service, we can find two types:').'<br><br>';
|
||||
|
||||
|
||||
echo __('<b>Clusters to balance the service load</b>: these are active - active (A/A) mode clusters. It means that all the nodes (or machines that compose it) are working. They must be working because if one stops working, it will overload the others.').'<br><br>';
|
||||
|
||||
|
||||
echo __('<b>Clusters to guarantee service</b>: these are active - passive (A/P) mode clusters. It means that one of the nodes (or machines that make up the cluster) will be running (primary) and another won\'t (secondary). When the primary goes down, the secondary must take over and give the service instead. Although many of the elements of this cluster are active-passive, it will also have active elements in both of them that indicate that the passive node is "online", so that in the case of a service failure in the master, the active node collects this information.');
|
||||
|
||||
?></p>
|
||||
|
||||
<?php
|
||||
if(check_acl ($config['id_user'], 0, "AW")) {
|
||||
?>
|
||||
|
||||
<form action="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_builder&step=1" method="post">
|
||||
<input style="margin-bottom:20px;" type="submit" class="button_task" value="<?php echo __('Create Cluster'); ?>" />
|
||||
</form>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
?>
|
||||
</p>
|
||||
|
||||
<?php
|
||||
if (check_acl($config['id_user'], 0, 'AW')) {
|
||||
?>
|
||||
|
||||
<form action="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_builder&step=1" method="post">
|
||||
<input style="margin-bottom:20px;" type="submit" class="button_task" value="<?php echo __('Create Cluster'); ?>" />
|
||||
</form>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
|
@ -4,37 +4,39 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no collections defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no collections defined yet.') ]); ?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/icono_grande_reconserver.png', true, array("title" => __('Collections')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Collections'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("A file collection is a group of files (e.g. scripts or executables) which are
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/icono_grande_reconserver.png', true, ['title' => __('Collections')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Collections'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"A file collection is a group of files (e.g. scripts or executables) which are
|
||||
automatically copied to a specific directory of the agent (under Windows or UNIX). The file collections allow to be propagated
|
||||
along with the policies in order to be used by a group of agents, using a 'package' of scripts and modules which use them.
|
||||
First we learn how to use the file collections in the agent's view, how to conduct it manually, agent by agent, without using collections,
|
||||
and how to do the same thing by using policies.Our first task is to arrange a compilation of files. In order to do this, please go to the agent's
|
||||
administrator. Subsequently, we're going to see a 'sub option' called 'Collections'. Please click on it in order to create a new collection as we can see on
|
||||
the picture below. "); ?></p>
|
||||
<form action="index.php?sec=gagente&sec2=enterprise/godmode/agentes/collections&action=new" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Collections'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
the picture below. "
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=gagente&sec2=enterprise/godmode/agentes/collections&action=new" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Collections'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,35 +4,36 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php
|
||||
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no custom fields defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no custom fields defined yet.') ]);
|
||||
?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, array("title" => __('Custom Fields')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Custom Fields'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("Custom fields are an easy way to personalized agent's information.
|
||||
You're able to create custom fields by klicking on 'Administration' -> 'Manage monitoring' -> 'Manage custom fields'. "); ?></p>
|
||||
<form action="index.php?sec=gagente&sec2=godmode/agentes/configure_field" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Custom Fields'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Custom Fields')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Custom Fields'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"Custom fields are an easy way to personalized agent's information.
|
||||
You're able to create custom fields by klicking on 'Administration' -> 'Manage monitoring' -> 'Manage custom fields'. "
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=gagente&sec2=godmode/agentes/configure_field" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Custom Fields'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
|
@ -4,37 +4,39 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php
|
||||
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no custom graphs defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no custom graphs defined yet.') ]);
|
||||
?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_custom_reporting.png', true, array("title" => __('Custom Graphs')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Custom Graph'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("Graphs are designed to show the data collected by %s in a temporary scale defined by the user.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_custom_reporting.png', true, ['title' => __('Custom Graphs')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Custom Graph'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"Graphs are designed to show the data collected by %s in a temporary scale defined by the user.
|
||||
%s Graphs display data in real time. They are generated every time the operator requires any of them and display the up-to-date state.
|
||||
There are two types of graphs: The agent's automated graphs and the graphs the user customizes by using one or more modules to do so.",
|
||||
get_product_name(), get_product_name()); ?></p>
|
||||
<form action="index.php?sec=reporting&sec2=godmode/reporting/graph_builder" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Custom Graph'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
get_product_name(),
|
||||
get_product_name()
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=reporting&sec2=godmode/reporting/graph_builder" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Custom Graph'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
|
@ -4,32 +4,34 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no custom fields defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no custom fields defined yet.') ]); ?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, array("title" => __('Fields Manager')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Fields Manager'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("Custom fields are an easy way to personalized agent's information.
|
||||
You're able to create custom fields by klicking on 'Administration' -> 'Manage monitoring' -> 'Manage custom fields'. "); ?></p>
|
||||
<form action="index.php?sec=gagente&sec2=godmode/agentes/configure_field" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Fields '); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Fields Manager')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Fields Manager'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"Custom fields are an easy way to personalized agent's information.
|
||||
You're able to create custom fields by klicking on 'Administration' -> 'Manage monitoring' -> 'Manage custom fields'. "
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=gagente&sec2=godmode/agentes/configure_field" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Fields '); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,45 +4,48 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
global $incident_w;
|
||||
global $incident_m;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php
|
||||
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no incidents defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no incidents defined yet.') ]);
|
||||
|
||||
if ($incident_w || $incident_m) {
|
||||
?>
|
||||
?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_incidencia.png', true, array("title" => __('Incidents')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Incidents'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("Besides receiving and processing data to monitor systems or applications,
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_incidencia.png', true, ['title' => __('Incidents')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Incidents'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"Besides receiving and processing data to monitor systems or applications,
|
||||
you're also required to monitor possible incidents which might take place on these subsystems within the system's monitoring process.
|
||||
For it, the %s team has designed an incident manager from which any user is able to open incidents,
|
||||
that explain what's happened on the network, and update them with comments and files, at any time, in case there is a need to do so.
|
||||
This system allows users to work as a team, along with different roles and work-flow systems which allow an incident to be
|
||||
moved from one group to another, and members from different groups and different people could work on the same incident, sharing information and files.
|
||||
", get_product_name()); ?></p>
|
||||
<form action="index.php?sec=workspace&sec2=operation/incidents/incident_detail&insert_form=1" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Incidents'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
",
|
||||
get_product_name()
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=workspace&sec2=operation/incidents/incident_detail&insert_form=1" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Incidents'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php
|
||||
}
|
||||
|
|
|
@ -4,48 +4,47 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
global $vconsoles_write;
|
||||
global $vconsoles_manage;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
|
||||
ui_print_info_message(
|
||||
array(
|
||||
'no_close'=>true,
|
||||
'message'=> __('There are no visual console defined yet.')));
|
||||
[
|
||||
'no_close' => true,
|
||||
'message' => __('There are no visual console defined yet.'),
|
||||
]
|
||||
);
|
||||
if ($vconsoles_write || $vconsoles_manage) {
|
||||
?>
|
||||
?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_visualconsole.png', true, array("title" => __('Visual Console')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Visual Console'); ?></h3>
|
||||
<p id="description_task"> <?php echo __(
|
||||
"%s allows users to create visual maps on which each user is able to create his or her " .
|
||||
"own monitoring map. The new visual console editor is much more practical, although the prior " .
|
||||
"visual console editor had its advantages. On the new visual console, we've been successful in " .
|
||||
"imitating the sensation and touch of a drawing application like GIMP. We've also simplified the " .
|
||||
"editor by dividing it into several subject-divided tabs named 'Data', 'Preview', 'Wizard', 'List of " .
|
||||
"Elements' and 'Editor'. The items the %s Visual Map was designed to handle are " .
|
||||
"'static images', 'percentage bars', 'module graphs' and 'simple values'.",
|
||||
get_product_name(), get_product_name()); ?></p>
|
||||
<form action="index.php?sec=network&sec2=godmode/reporting/visual_console_builder" method="post">
|
||||
<?php html_print_input_hidden ('edit_layout', 1); ?>
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Visual Console'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_visualconsole.png', true, ['title' => __('Visual Console')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Visual Console'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
'%s allows users to create visual maps on which each user is able to create his or her '.'own monitoring map. The new visual console editor is much more practical, although the prior '."visual console editor had its advantages. On the new visual console, we've been successful in "."imitating the sensation and touch of a drawing application like GIMP. We've also simplified the "."editor by dividing it into several subject-divided tabs named 'Data', 'Preview', 'Wizard', 'List of "."Elements' and 'Editor'. The items the %s Visual Map was designed to handle are "."'static images', 'percentage bars', 'module graphs' and 'simple values'.",
|
||||
get_product_name(),
|
||||
get_product_name()
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=network&sec2=godmode/reporting/visual_console_builder" method="post">
|
||||
<?php html_print_input_hidden('edit_layout', 1); ?>
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Visual Console'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php
|
||||
}
|
||||
|
|
|
@ -4,49 +4,50 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php
|
||||
|
||||
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no network map defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no network map defined yet.') ]);
|
||||
$strict_user = db_get_value('strict_acl', 'tusuario', 'id_user', $config['id_user']);
|
||||
$networkmap_types = networkmap_get_types($strict_user);
|
||||
?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, array("title" => __('Network Map')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Network Map'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("There is also an open-source version of the network map.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Network Map')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Network Map'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
'There is also an open-source version of the network map.
|
||||
This functionality allows to graphically display the nodes and relationships, agents, modules and groups available to the user.
|
||||
There are three types of network maps:
|
||||
");
|
||||
echo "<li>" . __("Topology Map") . "</li>
|
||||
<li>" . __("Group Map") . "</li>
|
||||
<li>" . __("Radial Map (User without strict user)") . "</li>
|
||||
<li>" . __("Dinamic Map") . "</li>
|
||||
<li>" . __("Policy Map (Only Enterprise version)") . "</li>";
|
||||
?> </p>
|
||||
<form id="networkmap_action" method="post" action="index.php?sec=network&sec2=operation/agentes/networkmap&action=create">
|
||||
<?php echo html_print_select($networkmap_types, 'tab', 'topology', '', '', 0);
|
||||
html_print_input_hidden('add_networkmap', 1);
|
||||
?>
|
||||
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Network Map'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
'
|
||||
);
|
||||
echo '<li>'.__('Topology Map').'</li>
|
||||
<li>'.__('Group Map').'</li>
|
||||
<li>'.__('Radial Map (User without strict user)').'</li>
|
||||
<li>'.__('Dinamic Map').'</li>
|
||||
<li>'.__('Policy Map (Only Enterprise version)').'</li>';
|
||||
?>
|
||||
</p>
|
||||
<form id="networkmap_action" method="post" action="index.php?sec=network&sec2=operation/agentes/networkmap&action=create">
|
||||
<?php
|
||||
echo html_print_select($networkmap_types, 'tab', 'topology', '', '', 0);
|
||||
html_print_input_hidden('add_networkmap', 1);
|
||||
?>
|
||||
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Network Map'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,35 +4,37 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no planned downtime defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no planned downtime defined yet.') ]); ?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_visualconsole.png', true, array("title" => __('Planned Downtime')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Planned Downtime'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("%s contains a scheduled downtime management system.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_visualconsole.png', true, ['title' => __('Planned Downtime')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Planned Downtime'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"%s contains a scheduled downtime management system.
|
||||
This system was designed to deactivate alerts during specific intervals whenever there is down time by deactivating the agent.
|
||||
If an agent is deactivated, it doesn't gather information. During down time, down-time intervals aren't taken into
|
||||
account for most metrics or report types, because agents don't contain any data within those intervals.",
|
||||
get_product_name()); ?></p>
|
||||
<form action="index.php?sec=estado&sec2=godmode/agentes/planned_downtime.editor" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Planned Downtime'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
get_product_name()
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=estado&sec2=godmode/agentes/planned_downtime.editor" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Planned Downtime'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,35 +4,37 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no recon task defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no recon task defined yet.') ]); ?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, array("title" => __('Recon server')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Recon Task'); ?></h3>
|
||||
<p id="description_task"> <?php echo __('The Recon Task definition of Pandora FMS is used to find new elements in the network.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Recon server')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Recon Task'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
'The Recon Task definition of Pandora FMS is used to find new elements in the network.
|
||||
If it detects any item, it will add that item to the monitoring, and if that item it is already being monitored, then it will
|
||||
ignore it or will update its information.There are three types of detection: Based on <strong id="fuerte"> ICMP </strong>(pings),
|
||||
<strong id="fuerte">SNMP</strong> (detecting the topology of networks and their interfaces), and other <strong id="fuerte"> customized </strong>
|
||||
type. You can define your own customized recon script.'); ?></p>
|
||||
<form action="index.php?sec=gservers&sec2=godmode/servers/manage_recontask_form&create" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Recon Task'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
type. You can define your own customized recon script.'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=gservers&sec2=godmode/servers/manage_recontask_form&create" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Recon Task'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,42 +4,45 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
global $agent_w;
|
||||
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no services defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no services defined yet.') ]); ?>
|
||||
|
||||
<?php if ($agent_w) { ?>
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_servicios.png', true, array("title" => __('Services')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Services'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("A service is a way to group your IT resources based on their functionalities.
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_servicios.png', true, ['title' => __('Services')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Services'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"A service is a way to group your IT resources based on their functionalities.
|
||||
A service could be e.g. your official website, your CRM system, your support application, or even your printers.
|
||||
Services are logical groups which can include hosts, routers, switches, firewalls, CRMs, ERPs, websites and numerous other services.
|
||||
By the following example, you're able to see more clearly what a service is:
|
||||
A chip manufacturer sells computers by its website all around the world.
|
||||
His company consists of three big departments: A management, an on-line shop and support."); ?></p>
|
||||
|
||||
<form action="index.php?sec=estado&sec2=enterprise/godmode/services/services.service&action=new_service" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Services'); ?>" />
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
His company consists of three big departments: A management, an on-line shop and support."
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
|
||||
<form action="index.php?sec=estado&sec2=enterprise/godmode/services/services.service&action=new_service" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Services'); ?>" />
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
|
|
@ -4,35 +4,37 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no SNMP filter defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no SNMP filter defined yet.') ]); ?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, array("title" => __('SNMP Filter')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create SNMP Filter'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("Some systems receive a high number of traps.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('SNMP Filter')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create SNMP Filter'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"Some systems receive a high number of traps.
|
||||
We're only interested in monitoring a tiny percentage of them. From Pandora FMS versions 3.2 and above,
|
||||
it's possible to filter the traps that the server obtains in order to avoid straining the application unnecessarily.
|
||||
In order to define different filters, please go to 'Administration' -> 'Manage SNMP Console' and 'SNMP Filters'.
|
||||
One trap which is going to run in conjunction with any of them - just the ones for the server are going to get ruled out automatically. "); ?></p>
|
||||
<form action="index.php?sec=snmpconsole&sec2=godmode/snmpconsole/snmp_filters&edit_filter=-1" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create SNMP Filter'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
One trap which is going to run in conjunction with any of them - just the ones for the server are going to get ruled out automatically. "
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=snmpconsole&sec2=godmode/snmpconsole/snmp_filters&edit_filter=-1" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create SNMP Filter'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,33 +4,35 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no tags defined yet.') ) ); ?>
|
||||
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no tags defined yet.') ]); ?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_gestiondetags.png', true, array("title" => __('Tags')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Tags'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("Access to modules can be configured by a tagging system.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_gestiondetags.png', true, ['title' => __('Tags')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Tags'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
"Access to modules can be configured by a tagging system.
|
||||
Tags are configured on the system and are assigned to the chosen modules.
|
||||
A user's access can therefore be restricted to modules with certain tags."); ?></p>
|
||||
<form action="index.php?sec=gmodules&sec2=godmode/tag/edit_tag&action=new" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Tags'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
A user's access can therefore be restricted to modules with certain tags."
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=gmodules&sec2=godmode/tag/edit_tag&action=new" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Tags'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,39 +4,43 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
global $config;
|
||||
global $networkmaps_write;
|
||||
global $networkmaps_manage;
|
||||
check_login ();
|
||||
ui_require_css_file ('firts_task');
|
||||
check_login();
|
||||
ui_require_css_file('firts_task');
|
||||
?>
|
||||
<?php ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no transactions defined yet.') ) );
|
||||
<?php
|
||||
ui_print_info_message(['no_close' => true, 'message' => __('There are no transactions defined yet.') ]);
|
||||
|
||||
if ($networkmaps_write || $networkmaps_manage) {
|
||||
?>
|
||||
?>
|
||||
|
||||
<div class="new_task">
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_topology.png', true, array("title" => __('Transactions')));?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Transactions'); ?></h3>
|
||||
<p id="description_task"> <?php echo __("The new transactional server allows you to execute tasks dependent on the others following a user-defined design. This means that it is possible to coordinate several executions to check a target at a given time.
|
||||
<div class="image_task">
|
||||
<?php echo html_print_image('images/firts_task/icono_grande_topology.png', true, ['title' => __('Transactions')]); ?>
|
||||
</div>
|
||||
<div class="text_task">
|
||||
<h3> <?php echo __('Create Transactions'); ?> <p id="description_task">
|
||||
<?php
|
||||
echo __(
|
||||
'The new transactional server allows you to execute tasks dependent on the others following a user-defined design. This means that it is possible to coordinate several executions to check a target at a given time.
|
||||
|
||||
Transaction graphs represent the different processes within our infrastructure that we use to deliver our service."); ?></p>
|
||||
<form action="index.php?sec=network&sec2=enterprise/operation/agentes/manage_transmap_creation&create_transaction=1" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Transactions'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
Transaction graphs represent the different processes within our infrastructure that we use to deliver our service.'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<form action="index.php?sec=network&sec2=enterprise/operation/agentes/manage_transmap_creation&create_transaction=1" method="post">
|
||||
<input type="submit" class="button_task" value="<?php echo __('Create Transactions'); ?>" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php
|
||||
}
|
||||
|
|
|
@ -4,55 +4,48 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
if (isset($_SERVER['REQUEST_TIME'])) {
|
||||
$time = $_SERVER['REQUEST_TIME'];
|
||||
}
|
||||
else {
|
||||
$time = get_system_time ();
|
||||
$time = $_SERVER['REQUEST_TIME'];
|
||||
} else {
|
||||
$time = get_system_time();
|
||||
}
|
||||
|
||||
$license_file = 'general/license/pandora_info_'.$config["language"].'.html';
|
||||
if (! file_exists ($config["homedir"] . $license_file)) {
|
||||
$license_file = 'general/license/pandora_info_en.html';
|
||||
$license_file = 'general/license/pandora_info_'.$config['language'].'.html';
|
||||
if (! file_exists($config['homedir'].$license_file)) {
|
||||
$license_file = 'general/license/pandora_info_en.html';
|
||||
}
|
||||
|
||||
if (!$config["MR"]) {
|
||||
$config["MR"] = 0;
|
||||
if (!$config['MR']) {
|
||||
$config['MR'] = 0;
|
||||
}
|
||||
|
||||
echo '<a class="white_bold footer" target="_blank" href="' . $config["homeurl"] . $license_file. '">';
|
||||
echo '<a class="white_bold footer" target="_blank" href="'.$config['homeurl'].$license_file.'">';
|
||||
|
||||
include_once ($config["homedir"]."/include/functions_update_manager.php");
|
||||
require_once $config['homedir'].'/include/functions_update_manager.php';
|
||||
|
||||
$current_package = update_manager_get_current_package();
|
||||
|
||||
if($current_package == 0){
|
||||
$build_package_version = $build_version;
|
||||
}
|
||||
else{
|
||||
$build_package_version = $current_package;
|
||||
if ($current_package == 0) {
|
||||
$build_package_version = $build_version;
|
||||
} else {
|
||||
$build_package_version = $current_package;
|
||||
}
|
||||
|
||||
echo sprintf(__('%s %s - Build %s - MR %s', get_product_name(), $pandora_version, $build_package_version, $config["MR"]));
|
||||
echo sprintf(__('%s %s - Build %s - MR %s', get_product_name(), $pandora_version, $build_package_version, $config['MR']));
|
||||
|
||||
echo '</a><br />';
|
||||
echo '<a class="white footer">'. __('Page generated at') . ' '. date($config["date_format"]);
|
||||
echo '<a class="white footer">'.__('Page generated at').' '.date($config['date_format']);
|
||||
echo '</a><br /><span style="color:#eff">® '.get_copyright_notice().'</span>';
|
||||
|
||||
if (isset ($config['debug'])) {
|
||||
$cache_info = array();
|
||||
$cache_info = db_get_cached_queries();
|
||||
echo ' - Saved '.$cache_info[0].' Queries';
|
||||
if (isset($config['debug'])) {
|
||||
$cache_info = [];
|
||||
$cache_info = db_get_cached_queries();
|
||||
echo ' - Saved '.$cache_info[0].' Queries';
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -4,507 +4,499 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
require_once ("include/functions_messages.php");
|
||||
require_once ('include/functions_servers.php');
|
||||
require_once 'include/functions_messages.php';
|
||||
require_once 'include/functions_servers.php';
|
||||
|
||||
// Check permissions
|
||||
|
||||
// Global errors/warnings checking.
|
||||
config_check();
|
||||
|
||||
?>
|
||||
<table width="100%" cellpadding="0" cellspacing="0" style="margin:0px; padding:0px; margin-top: 0px; height: 100%" border="0">
|
||||
<tr>
|
||||
<td style="width:90%;">
|
||||
<a href="index.php?sec=main">
|
||||
<?php
|
||||
$custom_logo = 'images/custom_logo/' . $config['custom_logo'];
|
||||
|
||||
if (!defined ('PANDORA_ENTERPRISE')) {
|
||||
$logo_title = get_product_name() . ' Opensource';
|
||||
$custom_logo = 'images/custom_logo/pandora_logo_head_3.png';
|
||||
}
|
||||
else {
|
||||
if (file_exists(ENTERPRISE_DIR . '/' . $custom_logo)) {
|
||||
$custom_logo = ENTERPRISE_DIR . '/' . $custom_logo;
|
||||
}
|
||||
$logo_title = get_product_name() . ' Enterprise';
|
||||
}
|
||||
|
||||
echo html_print_image($custom_logo, true,
|
||||
array("alt" => $logo_title, "border" => '0'));
|
||||
?>
|
||||
</a>
|
||||
</td>
|
||||
<td style="min-width:200px;">
|
||||
<?php
|
||||
$table = new stdClass();
|
||||
$table->id = "header_table";
|
||||
$table->class = "none";
|
||||
$table->cellpadding = 0;
|
||||
$table->cellspacing = 0;
|
||||
$table->head = array ();
|
||||
$table->data = array ();
|
||||
$table->style[0] =
|
||||
$table->style['clippy'] =
|
||||
$table->style[1] =
|
||||
$table->style[3] =
|
||||
$table->style[4] =
|
||||
$table->style[5] =
|
||||
$table->style[6] =
|
||||
$table->style[8] =
|
||||
$table->style[9] =
|
||||
$table->style['qr'] =
|
||||
'width: 22px; text-align:center; height: 22px; padding-right: 9px;padding-left: 9px;';
|
||||
$table->style[7] = 'width: 20px; padding-right: 9px;';
|
||||
$table->style['searchbar'] = 'width: 180px; min-width: 180px;';
|
||||
$table->style[11] = 'padding-left: 10px; padding-right: 5px;width: 16px;';
|
||||
$table->width = "100%";
|
||||
$table->styleTable = 'margin: auto; margin-top: 0px;';
|
||||
$table->rowclass[0] = '';
|
||||
|
||||
$acl_head_search = true;
|
||||
if ($config["acl_enterprise"] == 1 && !users_is_admin()) {
|
||||
$acl_head_search = db_get_sql("SELECT sec FROM tusuario
|
||||
<tr>
|
||||
<td style="width:90%;">
|
||||
<a href="index.php?sec=main">
|
||||
<?php
|
||||
$custom_logo = 'images/custom_logo/'.$config['custom_logo'];
|
||||
|
||||
if (!defined('PANDORA_ENTERPRISE')) {
|
||||
$logo_title = get_product_name().' Opensource';
|
||||
$custom_logo = 'images/custom_logo/pandora_logo_head_3.png';
|
||||
} else {
|
||||
if (file_exists(ENTERPRISE_DIR.'/'.$custom_logo)) {
|
||||
$custom_logo = ENTERPRISE_DIR.'/'.$custom_logo;
|
||||
}
|
||||
|
||||
$logo_title = get_product_name().' Enterprise';
|
||||
}
|
||||
|
||||
echo html_print_image(
|
||||
$custom_logo,
|
||||
true,
|
||||
[
|
||||
'alt' => $logo_title,
|
||||
'border' => '0',
|
||||
]
|
||||
);
|
||||
?>
|
||||
</a>
|
||||
</td>
|
||||
<td style="min-width:200px;">
|
||||
<?php
|
||||
$table = new stdClass();
|
||||
$table->id = 'header_table';
|
||||
$table->class = 'none';
|
||||
$table->cellpadding = 0;
|
||||
$table->cellspacing = 0;
|
||||
$table->head = [];
|
||||
$table->data = [];
|
||||
$table->style[0] = $table->style['clippy'] = $table->style[1] = $table->style[3] = $table->style[4] = $table->style[5] = $table->style[6] = $table->style[8] = $table->style[9] = $table->style['qr'] = 'width: 22px; text-align:center; height: 22px; padding-right: 9px;padding-left: 9px;';
|
||||
$table->style[7] = 'width: 20px; padding-right: 9px;';
|
||||
$table->style['searchbar'] = 'width: 180px; min-width: 180px;';
|
||||
$table->style[11] = 'padding-left: 10px; padding-right: 5px;width: 16px;';
|
||||
$table->width = '100%';
|
||||
$table->styleTable = 'margin: auto; margin-top: 0px;';
|
||||
$table->rowclass[0] = '';
|
||||
|
||||
$acl_head_search = true;
|
||||
if ($config['acl_enterprise'] == 1 && !users_is_admin()) {
|
||||
$acl_head_search = db_get_sql(
|
||||
"SELECT sec FROM tusuario
|
||||
INNER JOIN tusuario_perfil ON tusuario.id_user = tusuario_perfil.id_usuario
|
||||
INNER JOIN tprofile_view ON tprofile_view.id_profile = tusuario_perfil.id_perfil
|
||||
WHERE tusuario.id_user = '".$config['id_user']."' AND (sec = '*' OR sec = 'head_search')");
|
||||
}
|
||||
if ($acl_head_search) {
|
||||
$table->data[0][11] = ui_print_help_tip (__("Blank characters are used as AND conditions"), true);
|
||||
|
||||
// Search bar
|
||||
$search_bar = '<form method="get" style="display: inline;" name="quicksearch" action="">';
|
||||
if (!isset($config['search_keywords'])) {
|
||||
$search_bar .= '<script type="text/javascript"> var fieldKeyWordEmpty = true; </script>';
|
||||
}
|
||||
else {
|
||||
if (strlen($config['search_keywords']) == 0)
|
||||
$search_bar .= '<script type="text/javascript"> var fieldKeyWordEmpty = true; </script>';
|
||||
else
|
||||
$search_bar .= '<script type="text/javascript"> var fieldKeyWordEmpty = false; </script>';
|
||||
}
|
||||
|
||||
$search_bar .= '<input type="text" id="keywords" name="keywords"';
|
||||
if (!isset($config['search_keywords']))
|
||||
$search_bar .= "value='" . __("Enter keywords to search") . "'";
|
||||
else if (strlen($config['search_keywords']) == 0)
|
||||
$search_bar .= "value='" . __("Enter keywords to search") . "'";
|
||||
else
|
||||
$search_bar .= "value='" . $config['search_keywords'] . "'";
|
||||
|
||||
$search_bar .= 'onfocus="javascript: if (fieldKeyWordEmpty) $(\'#keywords\').val(\'\');"
|
||||
WHERE tusuario.id_user = '".$config['id_user']."' AND (sec = '*' OR sec = 'head_search')"
|
||||
);
|
||||
}
|
||||
|
||||
if ($acl_head_search) {
|
||||
$table->data[0][11] = ui_print_help_tip(__('Blank characters are used as AND conditions'), true);
|
||||
|
||||
// Search bar
|
||||
$search_bar = '<form method="get" style="display: inline;" name="quicksearch" action="">';
|
||||
if (!isset($config['search_keywords'])) {
|
||||
$search_bar .= '<script type="text/javascript"> var fieldKeyWordEmpty = true; </script>';
|
||||
} else {
|
||||
if (strlen($config['search_keywords']) == 0) {
|
||||
$search_bar .= '<script type="text/javascript"> var fieldKeyWordEmpty = true; </script>';
|
||||
} else {
|
||||
$search_bar .= '<script type="text/javascript"> var fieldKeyWordEmpty = false; </script>';
|
||||
}
|
||||
}
|
||||
|
||||
$search_bar .= '<input type="text" id="keywords" name="keywords"';
|
||||
if (!isset($config['search_keywords'])) {
|
||||
$search_bar .= "value='".__('Enter keywords to search')."'";
|
||||
} else if (strlen($config['search_keywords']) == 0) {
|
||||
$search_bar .= "value='".__('Enter keywords to search')."'";
|
||||
} else {
|
||||
$search_bar .= "value='".$config['search_keywords']."'";
|
||||
}
|
||||
|
||||
$search_bar .= 'onfocus="javascript: if (fieldKeyWordEmpty) $(\'#keywords\').val(\'\');"
|
||||
onkeyup="javascript: fieldKeyWordEmpty = false;"
|
||||
style="margin-top:5px;" class="search_input" />';
|
||||
|
||||
//$search_bar .= 'onClick="javascript: document.quicksearch.submit()"';
|
||||
|
||||
$search_bar .= "<input type='hidden' name='head_search_keywords' value='abc' />";
|
||||
$search_bar .= '</form>';
|
||||
|
||||
$table->data[0]['searchbar'] = $search_bar;
|
||||
}
|
||||
|
||||
// Servers check
|
||||
$servers = array();
|
||||
$servers["all"] = (int) db_get_value ('COUNT(id_server)','tserver');
|
||||
$servers["up"] = (int) servers_check_status ();
|
||||
$servers["down"] = $servers["all"] - $servers["up"];
|
||||
if ($servers["up"] == 0) {
|
||||
//All Servers down or no servers at all
|
||||
$servers_check_img = html_print_image("images/header_down.png", true, array("alt" => 'cross', "class" => 'bot', 'title' => __('All systems').': '.__('Down')));
|
||||
}
|
||||
elseif ($servers["down"] != 0) {
|
||||
//Some servers down
|
||||
$servers_check_img = html_print_image("images/header_warning.png", true, array("alt" => 'error', "class" => 'bot', 'title' => $servers["down"].' '.__('servers down')));
|
||||
}
|
||||
else {
|
||||
//All servers up
|
||||
$servers_check_img = html_print_image("images/header_ready.png", true, array("alt" => 'ok', "class" => 'bot', 'title' => __('All systems').': '.__('Ready')));
|
||||
}
|
||||
unset ($servers); // Since this is the header, we don't like to trickle down variables.
|
||||
|
||||
$servers_link_open = '<a class="white" href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60">';
|
||||
$servers_link_close = '</a>';
|
||||
|
||||
if ($config['show_qr_code_header'] == 0){
|
||||
$show_qr_code_header = 'display: none;';
|
||||
}
|
||||
else {
|
||||
$show_qr_code_header = 'display: inline;';
|
||||
}
|
||||
|
||||
$table->data[0]['qr'] =
|
||||
'<div style="' . $show_qr_code_header . '" id="qr_code_container" style="">' .
|
||||
'<a href="javascript: show_dialog_qrcode();">' .
|
||||
html_print_image(
|
||||
"images/qrcode_icon.png",
|
||||
true,
|
||||
array("alt" => __('QR Code of the page'),
|
||||
'title' => __('QR Code of the page'))) .
|
||||
'</a>' .
|
||||
'</div>';
|
||||
|
||||
echo "<div style='display: none;' id='qrcode_container' title='" . __('QR code of the page') . "'>";
|
||||
echo "<div id='qrcode_container_image'></div>";
|
||||
echo "</div>";
|
||||
?>
|
||||
<script type='text/javascript'>
|
||||
$(document).ready(function() {
|
||||
$( "#qrcode_container" ).dialog({
|
||||
autoOpen: false,
|
||||
modal: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
|
||||
if ($config['tutorial_mode'] !== 'expert' && !$config['disable_help']) {
|
||||
$table->data[0]['clippy'] =
|
||||
'<a href="javascript: show_clippy();">' .
|
||||
html_print_image(
|
||||
"images/clippy_icon.png",
|
||||
true,
|
||||
array("id" => 'clippy',
|
||||
"class" => 'clippy',
|
||||
"alt" => __('%s assistant', get_product_name()),
|
||||
'title' => __('%s assistant', get_product_name()))) .
|
||||
'</a>';
|
||||
}
|
||||
|
||||
|
||||
$table->data[0][0] = $servers_link_open .
|
||||
$servers_check_img . $servers_link_close;
|
||||
|
||||
|
||||
|
||||
|
||||
//======= Autorefresh code =============================
|
||||
$autorefresh_txt = '';
|
||||
$autorefresh_additional = '';
|
||||
|
||||
$ignored_params = array ('agent_config' => false, 'code' => false);
|
||||
|
||||
if (!isset($_GET['sec2'])) {
|
||||
$_GET['sec2'] = '';
|
||||
}
|
||||
if (!isset($_GET['refr'])) {
|
||||
$_GET['refr'] = null;
|
||||
}
|
||||
|
||||
$select = db_process_sql("SELECT autorefresh_white_list,time_autorefresh FROM tusuario WHERE id_user = '" . $config['id_user'] . "'");
|
||||
$autorefresh_list = json_decode($select[0]['autorefresh_white_list']);
|
||||
|
||||
if ($autorefresh_list !== null && array_search($_GET['sec2'], $autorefresh_list) !== false) {
|
||||
$do_refresh = true;
|
||||
if ($_GET['sec2'] == 'operation/agentes/pandora_networkmap') {
|
||||
if ((!isset($_GET['tab'])) || ($_GET['tab'] != 'view')) {
|
||||
$do_refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($do_refresh) {
|
||||
$autorefresh_img = html_print_image("images/header_refresh.png", true, array("class" => 'bot', "alt" => 'lightning', 'title' => __('Configure autorefresh')));
|
||||
|
||||
if ($_GET['refr']) {
|
||||
$autorefresh_txt .= ' (<span id="refrcounter">'.date ("i:s", $config["refr"]).'</span>)';
|
||||
}
|
||||
|
||||
$ignored_params['refr'] = '';
|
||||
$values = get_refresh_time_array();
|
||||
$autorefresh_additional = '<span id="combo_refr" style="display: none;">';
|
||||
$autorefresh_additional .= html_print_select ($values, 'ref', '', '', __('Select'), '0', true, false, false);
|
||||
$autorefresh_additional .= '</span>';
|
||||
unset ($values);
|
||||
|
||||
$autorefresh_link_open_img =
|
||||
'<a class="white autorefresh" href="' . ui_get_url_refresh ($ignored_params) . '">';
|
||||
|
||||
if ($_GET['refr']) {
|
||||
$autorefresh_link_open_txt =
|
||||
'<a class="white autorefresh autorefresh_txt" href="' . ui_get_url_refresh ($ignored_params) . '">';
|
||||
}
|
||||
else {
|
||||
$autorefresh_link_open_txt = '<a>';
|
||||
}
|
||||
|
||||
$autorefresh_link_close = '</a>';
|
||||
}
|
||||
else {
|
||||
$autorefresh_img = html_print_image("images/header_refresh_disabled.png", true, array("class" => 'bot autorefresh_disabled', "alt" => 'lightning', 'title' => __('Disabled autorefresh')));
|
||||
|
||||
$ignored_params['refr'] = false;
|
||||
|
||||
$autorefresh_link_open_img = '';
|
||||
$autorefresh_link_open_txt = '';
|
||||
$autorefresh_link_close = '';
|
||||
}
|
||||
}
|
||||
else {
|
||||
$autorefresh_img = html_print_image("images/header_refresh_disabled.png", true, array("class" => 'bot autorefresh_disabled', "alt" => 'lightning', 'title' => __('Disabled autorefresh')));
|
||||
|
||||
$ignored_params['refr'] = false;
|
||||
|
||||
$autorefresh_link_open_img = '';
|
||||
$autorefresh_link_open_txt = '';
|
||||
$autorefresh_link_close = '';
|
||||
}
|
||||
|
||||
$table->data[0][1] = $autorefresh_link_open_img . $autorefresh_img . $autorefresh_link_close;
|
||||
$table->data[0][2] = $autorefresh_link_open_txt . $autorefresh_txt . $autorefresh_link_close . $autorefresh_additional;
|
||||
//======================================================
|
||||
|
||||
|
||||
$check_minor_release_available = false;
|
||||
$pandora_management = check_acl($config['id_user'], 0, "PM");
|
||||
|
||||
$check_minor_release_available = db_check_minor_relase_available ();
|
||||
|
||||
if ($check_minor_release_available) {
|
||||
if (users_is_admin($config['id_user'])) {
|
||||
|
||||
if($config['language'] == 'es'){
|
||||
set_pandora_error_for_header('Hay una o mas revisiones menores en espera para ser actualizadas. <a style="font-size:8pt;font-style:italic;" target="blank" href="http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_es:Actualizacion#Versi.C3.B3n_7.0NG_.28_Rolling_Release_.29">'.__('Sobre actualización de revisión menor').'</a>', 'Revisión/es menor/es disponible/s');
|
||||
}
|
||||
else{
|
||||
set_pandora_error_for_header('There are one or more minor releases waiting for update. <a style="font-size:8pt;font-style:italic;" target="blank" href="http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_en:Anexo_Upgrade#Version_7.0NG_.28_Rolling_Release_.29">'.__('About minor release update').'</a>', 'minor release/s available');
|
||||
}
|
||||
}
|
||||
}
|
||||
echo '<div id="alert_messages" style="display: none"></div>';
|
||||
// $search_bar .= 'onClick="javascript: document.quicksearch.submit()"';
|
||||
$search_bar .= "<input type='hidden' name='head_search_keywords' value='abc' />";
|
||||
$search_bar .= '</form>';
|
||||
|
||||
if ($config["alert_cnt"] > 0) {
|
||||
$maintenance_link = 'javascript:';
|
||||
$maintenance_title = __("System alerts detected - Please fix as soon as possible");
|
||||
$maintenance_class = $maintenance_id = 'show_systemalert_dialog white';
|
||||
|
||||
$maintenance_link_open_txt =
|
||||
'<a href="' . $maintenance_link . '" title="' . $maintenance_title . '" class="' . $maintenance_class . '" id="show_systemalert_dialog">';
|
||||
$maintenance_link_open_img =
|
||||
'<a href="' . $maintenance_link . '" title="' . $maintenance_title . '" class="' . $maintenance_class . '">';
|
||||
$maintenance_link_close = '</a>';
|
||||
if (!$pandora_management) {
|
||||
$maintenance_img = '';
|
||||
}
|
||||
else {
|
||||
$maintenance_img = $maintenance_link_open_img .
|
||||
html_print_image("images/header_yellow.png",
|
||||
true, array(
|
||||
"title" => __('You have %d warning(s)',
|
||||
$config["alert_cnt"]),
|
||||
"id" => "yougotalert",
|
||||
"class" => "bot")) . $maintenance_link_close;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!$pandora_management) {
|
||||
$maintenance_img = '';
|
||||
}
|
||||
else {
|
||||
$maintenance_img = html_print_image ("images/header_ready.png", true, array ("title" => __('There are not warnings'), "id" => "yougotalert", "class" => "bot"));
|
||||
}
|
||||
}
|
||||
|
||||
$table->data[0][3] = $maintenance_img;
|
||||
|
||||
// Main help icon
|
||||
if (!$config['disable_help']) {
|
||||
$table->data[0][4] =
|
||||
'<a href="#" class="modalpopup" id="helpmodal">' .
|
||||
html_print_image("images/header_help.png", true, array(
|
||||
"title" => __('Main help'),
|
||||
"id" => "helpmodal",
|
||||
"class" => "modalpopup")) .
|
||||
'</a>';
|
||||
}
|
||||
|
||||
// Logout
|
||||
$table->data[0][5] = '<a class="white" href="' . ui_get_full_url('index.php?bye=bye') . '">';
|
||||
$table->data[0][5] .= html_print_image("images/header_logout.png", true, array("alt" => __('Logout'), "class" => 'bot', "title" => __('Logout')));
|
||||
$table->data[0][5] .= '</a>';
|
||||
|
||||
// User
|
||||
if (is_user_admin ($config["id_user"]) == 1)
|
||||
$table->data[0][6] = html_print_image("images/header_user_admin.png" , true, array("title" => __('Edit my user'), "class" => 'bot', "alt" => 'user'));
|
||||
else
|
||||
$table->data[0][6] = html_print_image("images/header_user.png" , true, array("title" => __('Edit my user'), "class" => 'bot', "alt" => 'user'));
|
||||
|
||||
$table->data[0][6] = '<a href="index.php?sec=workspace&sec2=operation/users/user_edit">' . $table->data[0][6] . '</a>';
|
||||
|
||||
$table->data[0][7] = '<a href="index.php?sec=workspace&sec2=operation/users/user_edit" class="white_bold"> (' . $config["id_user"] . ')</a>';
|
||||
|
||||
// Chat messages
|
||||
$table->data[0][8] = "<span id='icon_new_messages_chat' style='display: none;'>";
|
||||
$table->data[0][8] .= "<a href='index.php?sec=workspace&sec2=operation/users/webchat'>";
|
||||
$table->data[0][8] .= html_print_image('images/header_chat.png', true, array("title" => __('New chat message')));
|
||||
$table->data[0][8] .= "</a>";
|
||||
$table->data[0][8] .= "</span>";
|
||||
|
||||
// Messages
|
||||
$msg_cnt = messages_get_count ($config["id_user"]);
|
||||
if ($msg_cnt > 0) {
|
||||
echo '<div id="dialog_messages" style="display: none"></div>';
|
||||
|
||||
$table->data[0][9] = '<a href="ajax.php?page=operation/messages/message_list" title="' . __("Message overview") . '" id="show_messages_dialog">';
|
||||
$table->data[0][9] .= html_print_image ("images/header_email.png", true, array ("title" => __('You have %d unread message(s)', $msg_cnt), "id" => "yougotmail", "class" => "bot", 'style' => 'width:24px;'));
|
||||
$table->data[0][9] .= '</a>';
|
||||
}
|
||||
$table->data[0]['searchbar'] = $search_bar;
|
||||
}
|
||||
|
||||
// Servers check
|
||||
$servers = [];
|
||||
$servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
|
||||
$servers['up'] = (int) servers_check_status();
|
||||
$servers['down'] = ($servers['all'] - $servers['up']);
|
||||
if ($servers['up'] == 0) {
|
||||
// All Servers down or no servers at all
|
||||
$servers_check_img = html_print_image('images/header_down.png', true, ['alt' => 'cross', 'class' => 'bot', 'title' => __('All systems').': '.__('Down')]);
|
||||
} else if ($servers['down'] != 0) {
|
||||
// Some servers down
|
||||
$servers_check_img = html_print_image('images/header_warning.png', true, ['alt' => 'error', 'class' => 'bot', 'title' => $servers['down'].' '.__('servers down')]);
|
||||
} else {
|
||||
// All servers up
|
||||
$servers_check_img = html_print_image('images/header_ready.png', true, ['alt' => 'ok', 'class' => 'bot', 'title' => __('All systems').': '.__('Ready')]);
|
||||
}
|
||||
|
||||
unset($servers);
|
||||
// Since this is the header, we don't like to trickle down variables.
|
||||
$servers_link_open = '<a class="white" href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60">';
|
||||
$servers_link_close = '</a>';
|
||||
|
||||
if ($config['show_qr_code_header'] == 0) {
|
||||
$show_qr_code_header = 'display: none;';
|
||||
} else {
|
||||
$show_qr_code_header = 'display: inline;';
|
||||
}
|
||||
|
||||
$table->data[0]['qr'] = '<div style="'.$show_qr_code_header.'" id="qr_code_container" style="">'.'<a href="javascript: show_dialog_qrcode();">'.html_print_image(
|
||||
'images/qrcode_icon.png',
|
||||
true,
|
||||
[
|
||||
'alt' => __('QR Code of the page'),
|
||||
'title' => __('QR Code of the page'),
|
||||
]
|
||||
).'</a>'.'</div>';
|
||||
|
||||
echo "<div style='display: none;' id='qrcode_container' title='".__('QR code of the page')."'>";
|
||||
echo "<div id='qrcode_container_image'></div>";
|
||||
echo '</div>';
|
||||
?>
|
||||
<script type='text/javascript'>
|
||||
$(document).ready(function() {
|
||||
$( "#qrcode_container" ).dialog({
|
||||
autoOpen: false,
|
||||
modal: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
if ($config['tutorial_mode'] !== 'expert' && !$config['disable_help']) {
|
||||
$table->data[0]['clippy'] = '<a href="javascript: show_clippy();">'.html_print_image(
|
||||
'images/clippy_icon.png',
|
||||
true,
|
||||
[
|
||||
'id' => 'clippy',
|
||||
'class' => 'clippy',
|
||||
'alt' => __('%s assistant', get_product_name()),
|
||||
'title' => __(
|
||||
'%s assistant',
|
||||
get_product_name()
|
||||
),
|
||||
]
|
||||
).'</a>';
|
||||
}
|
||||
|
||||
|
||||
$table->data[0][0] = $servers_link_open.$servers_check_img.$servers_link_close;
|
||||
|
||||
|
||||
|
||||
html_print_table($table);
|
||||
|
||||
unset($table);
|
||||
?>
|
||||
</td>
|
||||
<!--
|
||||
<td style="text-align:center">
|
||||
<?php
|
||||
echo "<a href='index.php?sec=main'>";
|
||||
if (isset($config["custom_logo"])) {
|
||||
echo html_print_image("images/custom_logo/" . $config["custom_logo"], true, array("height" => '60', "width" => '139', "alt" => 'Logo'));
|
||||
}
|
||||
echo "</a>";
|
||||
?>
|
||||
</td>
|
||||
-->
|
||||
</tr>
|
||||
|
||||
// ======= Autorefresh code =============================
|
||||
$autorefresh_txt = '';
|
||||
$autorefresh_additional = '';
|
||||
|
||||
$ignored_params = [
|
||||
'agent_config' => false,
|
||||
'code' => false,
|
||||
];
|
||||
|
||||
if (!isset($_GET['sec2'])) {
|
||||
$_GET['sec2'] = '';
|
||||
}
|
||||
|
||||
if (!isset($_GET['refr'])) {
|
||||
$_GET['refr'] = null;
|
||||
}
|
||||
|
||||
$select = db_process_sql("SELECT autorefresh_white_list,time_autorefresh FROM tusuario WHERE id_user = '".$config['id_user']."'");
|
||||
$autorefresh_list = json_decode($select[0]['autorefresh_white_list']);
|
||||
|
||||
if ($autorefresh_list !== null && array_search($_GET['sec2'], $autorefresh_list) !== false) {
|
||||
$do_refresh = true;
|
||||
if ($_GET['sec2'] == 'operation/agentes/pandora_networkmap') {
|
||||
if ((!isset($_GET['tab'])) || ($_GET['tab'] != 'view')) {
|
||||
$do_refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($do_refresh) {
|
||||
$autorefresh_img = html_print_image('images/header_refresh.png', true, ['class' => 'bot', 'alt' => 'lightning', 'title' => __('Configure autorefresh')]);
|
||||
|
||||
if ($_GET['refr']) {
|
||||
$autorefresh_txt .= ' (<span id="refrcounter">'.date('i:s', $config['refr']).'</span>)';
|
||||
}
|
||||
|
||||
$ignored_params['refr'] = '';
|
||||
$values = get_refresh_time_array();
|
||||
$autorefresh_additional = '<span id="combo_refr" style="display: none;">';
|
||||
$autorefresh_additional .= html_print_select($values, 'ref', '', '', __('Select'), '0', true, false, false);
|
||||
$autorefresh_additional .= '</span>';
|
||||
unset($values);
|
||||
|
||||
$autorefresh_link_open_img = '<a class="white autorefresh" href="'.ui_get_url_refresh($ignored_params).'">';
|
||||
|
||||
if ($_GET['refr']) {
|
||||
$autorefresh_link_open_txt = '<a class="white autorefresh autorefresh_txt" href="'.ui_get_url_refresh($ignored_params).'">';
|
||||
} else {
|
||||
$autorefresh_link_open_txt = '<a>';
|
||||
}
|
||||
|
||||
$autorefresh_link_close = '</a>';
|
||||
} else {
|
||||
$autorefresh_img = html_print_image('images/header_refresh_disabled.png', true, ['class' => 'bot autorefresh_disabled', 'alt' => 'lightning', 'title' => __('Disabled autorefresh')]);
|
||||
|
||||
$ignored_params['refr'] = false;
|
||||
|
||||
$autorefresh_link_open_img = '';
|
||||
$autorefresh_link_open_txt = '';
|
||||
$autorefresh_link_close = '';
|
||||
}
|
||||
} else {
|
||||
$autorefresh_img = html_print_image('images/header_refresh_disabled.png', true, ['class' => 'bot autorefresh_disabled', 'alt' => 'lightning', 'title' => __('Disabled autorefresh')]);
|
||||
|
||||
$ignored_params['refr'] = false;
|
||||
|
||||
$autorefresh_link_open_img = '';
|
||||
$autorefresh_link_open_txt = '';
|
||||
$autorefresh_link_close = '';
|
||||
}
|
||||
|
||||
$table->data[0][1] = $autorefresh_link_open_img.$autorefresh_img.$autorefresh_link_close;
|
||||
$table->data[0][2] = $autorefresh_link_open_txt.$autorefresh_txt.$autorefresh_link_close.$autorefresh_additional;
|
||||
// ======================================================
|
||||
$check_minor_release_available = false;
|
||||
$pandora_management = check_acl($config['id_user'], 0, 'PM');
|
||||
|
||||
$check_minor_release_available = db_check_minor_relase_available();
|
||||
|
||||
if ($check_minor_release_available) {
|
||||
if (users_is_admin($config['id_user'])) {
|
||||
if ($config['language'] == 'es') {
|
||||
set_pandora_error_for_header('Hay una o mas revisiones menores en espera para ser actualizadas. <a style="font-size:8pt;font-style:italic;" target="blank" href="http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_es:Actualizacion#Versi.C3.B3n_7.0NG_.28_Rolling_Release_.29">'.__('Sobre actualización de revisión menor').'</a>', 'Revisión/es menor/es disponible/s');
|
||||
} else {
|
||||
set_pandora_error_for_header('There are one or more minor releases waiting for update. <a style="font-size:8pt;font-style:italic;" target="blank" href="http://wiki.pandorafms.com/index.php?title=Pandora:Documentation_en:Anexo_Upgrade#Version_7.0NG_.28_Rolling_Release_.29">'.__('About minor release update').'</a>', 'minor release/s available');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo '<div id="alert_messages" style="display: none"></div>';
|
||||
|
||||
if ($config['alert_cnt'] > 0) {
|
||||
$maintenance_link = 'javascript:';
|
||||
$maintenance_title = __('System alerts detected - Please fix as soon as possible');
|
||||
$maintenance_class = $maintenance_id = 'show_systemalert_dialog white';
|
||||
|
||||
$maintenance_link_open_txt = '<a href="'.$maintenance_link.'" title="'.$maintenance_title.'" class="'.$maintenance_class.'" id="show_systemalert_dialog">';
|
||||
$maintenance_link_open_img = '<a href="'.$maintenance_link.'" title="'.$maintenance_title.'" class="'.$maintenance_class.'">';
|
||||
$maintenance_link_close = '</a>';
|
||||
if (!$pandora_management) {
|
||||
$maintenance_img = '';
|
||||
} else {
|
||||
$maintenance_img = $maintenance_link_open_img.html_print_image(
|
||||
'images/header_yellow.png',
|
||||
true,
|
||||
[
|
||||
'title' => __(
|
||||
'You have %d warning(s)',
|
||||
$config['alert_cnt']
|
||||
),
|
||||
'id' => 'yougotalert',
|
||||
'class' => 'bot',
|
||||
]
|
||||
).$maintenance_link_close;
|
||||
}
|
||||
} else {
|
||||
if (!$pandora_management) {
|
||||
$maintenance_img = '';
|
||||
} else {
|
||||
$maintenance_img = html_print_image('images/header_ready.png', true, ['title' => __('There are not warnings'), 'id' => 'yougotalert', 'class' => 'bot']);
|
||||
}
|
||||
}
|
||||
|
||||
$table->data[0][3] = $maintenance_img;
|
||||
|
||||
// Main help icon
|
||||
if (!$config['disable_help']) {
|
||||
$table->data[0][4] = '<a href="#" class="modalpopup" id="helpmodal">'.html_print_image(
|
||||
'images/header_help.png',
|
||||
true,
|
||||
[
|
||||
'title' => __('Main help'),
|
||||
'id' => 'helpmodal',
|
||||
'class' => 'modalpopup',
|
||||
]
|
||||
).'</a>';
|
||||
}
|
||||
|
||||
// Logout
|
||||
$table->data[0][5] = '<a class="white" href="'.ui_get_full_url('index.php?bye=bye').'">';
|
||||
$table->data[0][5] .= html_print_image('images/header_logout.png', true, ['alt' => __('Logout'), 'class' => 'bot', 'title' => __('Logout')]);
|
||||
$table->data[0][5] .= '</a>';
|
||||
|
||||
// User
|
||||
if (is_user_admin($config['id_user']) == 1) {
|
||||
$table->data[0][6] = html_print_image('images/header_user_admin.png', true, ['title' => __('Edit my user'), 'class' => 'bot', 'alt' => 'user']);
|
||||
} else {
|
||||
$table->data[0][6] = html_print_image('images/header_user.png', true, ['title' => __('Edit my user'), 'class' => 'bot', 'alt' => 'user']);
|
||||
}
|
||||
|
||||
$table->data[0][6] = '<a href="index.php?sec=workspace&sec2=operation/users/user_edit">'.$table->data[0][6].'</a>';
|
||||
|
||||
$table->data[0][7] = '<a href="index.php?sec=workspace&sec2=operation/users/user_edit" class="white_bold"> ('.$config['id_user'].')</a>';
|
||||
|
||||
// Chat messages
|
||||
$table->data[0][8] = "<span id='icon_new_messages_chat' style='display: none;'>";
|
||||
$table->data[0][8] .= "<a href='index.php?sec=workspace&sec2=operation/users/webchat'>";
|
||||
$table->data[0][8] .= html_print_image('images/header_chat.png', true, ['title' => __('New chat message')]);
|
||||
$table->data[0][8] .= '</a>';
|
||||
$table->data[0][8] .= '</span>';
|
||||
|
||||
// Messages
|
||||
$msg_cnt = messages_get_count($config['id_user']);
|
||||
if ($msg_cnt > 0) {
|
||||
echo '<div id="dialog_messages" style="display: none"></div>';
|
||||
|
||||
$table->data[0][9] = '<a href="ajax.php?page=operation/messages/message_list" title="'.__('Message overview').'" id="show_messages_dialog">';
|
||||
$table->data[0][9] .= html_print_image('images/header_email.png', true, ['title' => __('You have %d unread message(s)', $msg_cnt), 'id' => 'yougotmail', 'class' => 'bot', 'style' => 'width:24px;']);
|
||||
$table->data[0][9] .= '</a>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
html_print_table($table);
|
||||
|
||||
unset($table);
|
||||
?>
|
||||
</td>
|
||||
<!--
|
||||
<td style="text-align:center">
|
||||
<?php
|
||||
echo "<a href='index.php?sec=main'>";
|
||||
if (isset($config['custom_logo'])) {
|
||||
echo html_print_image('images/custom_logo/'.$config['custom_logo'], true, ['height' => '60', 'width' => '139', 'alt' => 'Logo']);
|
||||
}
|
||||
|
||||
echo '</a>';
|
||||
?>
|
||||
</td>
|
||||
-->
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
|
||||
<?php
|
||||
$config_fixed_header = false;
|
||||
if (isset($config['fixed_header'])) {
|
||||
$config_fixed_header = $config['fixed_header'];
|
||||
}
|
||||
?>
|
||||
|
||||
var fixed_header = <?php echo json_encode((bool)$config_fixed_header); ?>;
|
||||
|
||||
var new_chat = <?php echo (int)$_SESSION['new_chat'];?>;
|
||||
$(document).ready (function () {
|
||||
<?php
|
||||
if (($autorefresh_list !== null) && (array_search($_GET['sec2'], $autorefresh_list) !== false) && (!isset($_GET["refr"]))) {
|
||||
$do_refresh = true;
|
||||
if ($_GET['sec2'] == 'operation/agentes/pandora_networkmap') {
|
||||
if ((!isset($_GET['tab'])) || ($_GET['tab'] != 'view')) {
|
||||
$do_refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
$new_dashboard = get_parameter('new_dashboard',0);
|
||||
|
||||
if ($_GET['sec2'] == 'enterprise/dashboard/main_dashboard' && $new_dashboard) {
|
||||
$do_refresh = false;
|
||||
}
|
||||
/* <![CDATA[ */
|
||||
|
||||
<?php
|
||||
$config_fixed_header = false;
|
||||
if (isset($config['fixed_header'])) {
|
||||
$config_fixed_header = $config['fixed_header'];
|
||||
}
|
||||
?>
|
||||
|
||||
var fixed_header = <?php echo json_encode((bool) $config_fixed_header); ?>;
|
||||
|
||||
var new_chat = <?php echo (int) $_SESSION['new_chat']; ?>;
|
||||
$(document).ready (function () {
|
||||
<?php
|
||||
if (($autorefresh_list !== null) && (array_search($_GET['sec2'], $autorefresh_list) !== false) && (!isset($_GET['refr']))) {
|
||||
$do_refresh = true;
|
||||
if ($_GET['sec2'] == 'operation/agentes/pandora_networkmap') {
|
||||
if ((!isset($_GET['tab'])) || ($_GET['tab'] != 'view')) {
|
||||
$do_refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($do_refresh) {
|
||||
?>
|
||||
$("a.autorefresh_txt").toggle ();
|
||||
$("#combo_refr").toggle ();
|
||||
$("#combo_refr").css('padding-right', '9px');
|
||||
href = $("a.autorefresh").attr ("href");
|
||||
<?php
|
||||
if($select[0]['time_autorefresh']){
|
||||
?>
|
||||
var refresh = '<?php echo $select[0]["time_autorefresh"] ?>';
|
||||
$(document).attr ("location", href + refresh);
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
$new_dashboard = get_parameter('new_dashboard', 0);
|
||||
|
||||
if (fixed_header) {
|
||||
$('div#head').addClass('fixed_header');
|
||||
$('div#page')
|
||||
.css('padding-top', $('div#head').innerHeight() + 'px')
|
||||
.css('position', 'relative');
|
||||
}
|
||||
|
||||
check_new_chats_icon('icon_new_messages_chat');
|
||||
|
||||
/* Temporal fix to hide graphics when ui_dialog are displayed */
|
||||
$("#yougotalert").click(function () {
|
||||
$("#agent_access").css("display", "none");
|
||||
});
|
||||
$("#ui_close_dialog_titlebar").click(function () {
|
||||
$("#agent_access").css("display","");
|
||||
});
|
||||
|
||||
function blinkmail(){
|
||||
$("#yougotmail").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkmail);
|
||||
}
|
||||
function blinkalert(){
|
||||
$("#yougotalert").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkalert);
|
||||
}
|
||||
function blinkpubli(){
|
||||
$(".publienterprise").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkpubli);
|
||||
}
|
||||
<?php
|
||||
if ($msg_cnt > 0) {
|
||||
?>
|
||||
blinkmail();
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
if ($config["alert_cnt"] > 0) {
|
||||
?>
|
||||
blinkalert();
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
blinkpubli();
|
||||
if ($_GET['sec2'] == 'enterprise/dashboard/main_dashboard' && $new_dashboard) {
|
||||
$do_refresh = false;
|
||||
}
|
||||
|
||||
<?php
|
||||
if ($_GET["refr"]) {
|
||||
?>
|
||||
var refr_time = <?php echo (int) get_parameter("refr", 0); ?>;
|
||||
var t = new Date();
|
||||
t.setTime (t.getTime () +
|
||||
parseInt(<?php echo $config["refr"] * 1000; ?>));
|
||||
$("#refrcounter").countdown ({until: t,
|
||||
layout: '%M%nn%M:%S%nn%S',
|
||||
labels: ['', '', '', '', '', '', ''],
|
||||
onExpiry: function () {
|
||||
href = $("a.autorefresh").attr ("href");
|
||||
href = href + refr_time;
|
||||
$(document).attr ("location", href);
|
||||
}
|
||||
});
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
$("a.autorefresh").click (function () {
|
||||
$("a.autorefresh_txt").toggle ();
|
||||
$("#combo_refr").toggle ();
|
||||
$("#combo_refr").css('padding-right', '9px');
|
||||
$("select#ref").change (function () {
|
||||
href = $("a.autorefresh").attr ("href");
|
||||
$(document).attr ("location", href + this.value);
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
if ($do_refresh) {
|
||||
?>
|
||||
$("a.autorefresh_txt").toggle ();
|
||||
$("#combo_refr").toggle ();
|
||||
$("#combo_refr").css('padding-right', '9px');
|
||||
href = $("a.autorefresh").attr ("href");
|
||||
<?php
|
||||
if ($select[0]['time_autorefresh']) {
|
||||
?>
|
||||
var refresh = '<?php echo $select[0]['time_autorefresh']; ?>';
|
||||
$(document).attr ("location", href + refresh);
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
if (fixed_header) {
|
||||
$('div#head').addClass('fixed_header');
|
||||
$('div#page')
|
||||
.css('padding-top', $('div#head').innerHeight() + 'px')
|
||||
.css('position', 'relative');
|
||||
}
|
||||
|
||||
check_new_chats_icon('icon_new_messages_chat');
|
||||
|
||||
/* Temporal fix to hide graphics when ui_dialog are displayed */
|
||||
$("#yougotalert").click(function () {
|
||||
$("#agent_access").css("display", "none");
|
||||
});
|
||||
$("#ui_close_dialog_titlebar").click(function () {
|
||||
$("#agent_access").css("display","");
|
||||
});
|
||||
|
||||
function blinkmail(){
|
||||
$("#yougotmail").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkmail);
|
||||
}
|
||||
function blinkalert(){
|
||||
$("#yougotalert").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkalert);
|
||||
}
|
||||
function blinkpubli(){
|
||||
$(".publienterprise").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkpubli);
|
||||
}
|
||||
<?php
|
||||
if ($msg_cnt > 0) {
|
||||
?>
|
||||
blinkmail();
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
if ($config['alert_cnt'] > 0) {
|
||||
?>
|
||||
blinkalert();
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
blinkpubli();
|
||||
|
||||
<?php
|
||||
if ($_GET['refr']) {
|
||||
?>
|
||||
var refr_time = <?php echo (int) get_parameter('refr', 0); ?>;
|
||||
var t = new Date();
|
||||
t.setTime (t.getTime () +
|
||||
parseInt(<?php echo ($config['refr'] * 1000); ?>));
|
||||
$("#refrcounter").countdown ({until: t,
|
||||
layout: '%M%nn%M:%S%nn%S',
|
||||
labels: ['', '', '', '', '', '', ''],
|
||||
onExpiry: function () {
|
||||
href = $("a.autorefresh").attr ("href");
|
||||
href = href + refr_time;
|
||||
$(document).attr ("location", href);
|
||||
}
|
||||
});
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
$("a.autorefresh").click (function () {
|
||||
$("a.autorefresh_txt").toggle ();
|
||||
$("#combo_refr").toggle ();
|
||||
$("#combo_refr").css('padding-right', '9px');
|
||||
$("select#ref").change (function () {
|
||||
href = $("a.autorefresh").attr ("href");
|
||||
$(document).attr ("location", href + this.value);
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
/* ]]> */
|
||||
</script>
|
||||
|
|
|
@ -4,11 +4,9 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2016 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
|
@ -20,35 +18,36 @@
|
|||
|
||||
global $config;
|
||||
|
||||
include_once("include/functions_update_manager.php");
|
||||
require_once 'include/functions_update_manager.php';
|
||||
|
||||
$message = array();
|
||||
$message = [];
|
||||
|
||||
if (is_ajax()) {
|
||||
|
||||
$message_id = get_parameter ('message_id', false);
|
||||
if ($message_id === false) return false;
|
||||
$message = update_manger_get_single_message ($message_id);
|
||||
|
||||
$message_id = get_parameter('message_id', false);
|
||||
if ($message_id === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$message = update_manger_get_single_message($message_id);
|
||||
} else {
|
||||
|
||||
$message = update_manger_get_last_message ();
|
||||
$message = update_manger_get_last_message();
|
||||
|
||||
if ($message === false) return false;
|
||||
if ($message === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
update_manger_set_read_message($message["svn_version"], 1);
|
||||
update_manager_remote_read_messages ($message["svn_version"]);
|
||||
update_manger_set_read_message($message['svn_version'], 1);
|
||||
update_manager_remote_read_messages($message['svn_version']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Prints first step pandora registration
|
||||
echo '<div id="message_id_dialog" title="' .
|
||||
io_safe_output($message['db_field_value']) . '">';
|
||||
|
||||
echo '<div>';
|
||||
echo io_safe_output_html($message["data"]);
|
||||
echo '</div>';
|
||||
echo '<div id="message_id_dialog" title="'.io_safe_output($message['db_field_value']).'">';
|
||||
|
||||
echo '<div>';
|
||||
echo io_safe_output_html($message['data']);
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
|
||||
?>
|
||||
|
@ -57,17 +56,17 @@ echo '</div>';
|
|||
/* <![CDATA[ */
|
||||
|
||||
$(document).ready (function () {
|
||||
|
||||
$("#message_id_dialog").dialog({
|
||||
resizable: true,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
width: 850
|
||||
});
|
||||
|
||||
$(".ui-widget-overlay").css("background", "#000");
|
||||
$(".ui-widget-overlay").css("opacity", 0.6);
|
||||
|
||||
|
||||
$("#message_id_dialog").dialog({
|
||||
resizable: true,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
width: 850
|
||||
});
|
||||
|
||||
$(".ui-widget-overlay").css("background", "#000");
|
||||
$(".ui-widget-overlay").css("opacity", 0.6);
|
||||
|
||||
});
|
||||
|
||||
/* ]]> */
|
||||
|
|
|
@ -1,392 +1,542 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Licencia Pública GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h2>Licencia Pública GNU</h2>
|
||||
<h3>Contenido</h3>
|
||||
<html>
|
||||
<head>
|
||||
<title>Licencia Pública GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Licencia Pública GNU</h2>
|
||||
<h3>Contenido</h3>
|
||||
|
||||
<ul>
|
||||
<li><a href="#SEC1">Licencia Pública GNU</a></li>
|
||||
<li><a href="#SEC2">Preámbulo</a></li>
|
||||
<li><a href="#SEC3">Términos y condiciones para la copia,
|
||||
distribución y modificación</a></li>
|
||||
<li><a href="#APPENDIX">Apéndice: Cómo aplicar estos
|
||||
términos a sus nuevos programas</a></li>
|
||||
</ul>
|
||||
<br>
|
||||
<h3><a name="SEC1">Licencia Pública GNU</a></h3>
|
||||
<p>
|
||||
Esta es la conocida GNU Public License (GPL), versión 2 (de junio
|
||||
de 1.991), que cubre la mayor parte del software de la Free Software Foundation,
|
||||
y muchos más programas.</p>
|
||||
<ul>
|
||||
<li><a href="#SEC1">Licencia Pública GNU</a></li>
|
||||
<li><a href="#SEC2">Preámbulo</a></li>
|
||||
<li>
|
||||
<a href="#SEC3"
|
||||
>Términos y condiciones para la copia, distribución y
|
||||
modificación</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#APPENDIX"
|
||||
>Apéndice: Cómo aplicar estos términos a sus
|
||||
nuevos programas</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
<h3><a name="SEC1">Licencia Pública GNU</a></h3>
|
||||
<p>
|
||||
Esta es la conocida GNU Public License (GPL), versión 2 (de junio
|
||||
de 1.991), que cubre la mayor parte del software de la Free Software
|
||||
Foundation, y muchos más programas.
|
||||
</p>
|
||||
|
||||
<p>Los autores de esta traducción son:</p>
|
||||
<ul><li><a href="mailto:jgb@computer.org">Jesús González Barahona</a>
|
||||
</li><li><a href="mailto:pheras@acm.org">Pedro de las Heras Quirós</a>
|
||||
</li></ul>
|
||||
<p>Los autores de esta traducción son:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="mailto:jgb@computer.org"
|
||||
>Jesús González Barahona</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mailto:pheras@acm.org">Pedro de las Heras Quirós</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<blockquote>
|
||||
<hr>
|
||||
<b>NOTA IMPORTANTE:</b>
|
||||
<p>
|
||||
Esta es una traducción no oficial al español de la GNU General Public
|
||||
License. No ha sido publicada por la Free Software Foundation, y no
|
||||
establece legalmente las condiciones de distribución para el software
|
||||
que usa la GNU GPL. Estas condiciones se establecen solamente por
|
||||
el texto original, en inglés, de la GNU GPL. Sin embargo, esperamos
|
||||
que esta traducción ayude a los hispanohablantes a entender mejor la
|
||||
GNU GPL.
|
||||
</p><p>
|
||||
<blockquote>
|
||||
<hr />
|
||||
<b>NOTA IMPORTANTE:</b>
|
||||
<p>
|
||||
Esta es una traducción no oficial al español de la GNU
|
||||
General Public License. No ha sido publicada por la Free Software
|
||||
Foundation, y no establece legalmente las condiciones de
|
||||
distribución para el software que usa la GNU GPL. Estas
|
||||
condiciones se establecen solamente por el texto original, en
|
||||
inglés, de la GNU GPL. Sin embargo, esperamos que esta
|
||||
traducción ayude a los hispanohablantes a entender mejor la GNU
|
||||
GPL.
|
||||
</p>
|
||||
<p><b>IMPORTANT NOTICE:</b></p>
|
||||
<p>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
Spanish. It was not published by the Free Software Foundation, and does
|
||||
not legally state the distribution terms for software that uses the GNU
|
||||
GPL--only the original English text of the GNU GPL does that. However,
|
||||
we hope that this translation will help Spanish speakers understand the
|
||||
GNU GPL better.
|
||||
</p>
|
||||
<p></p>
|
||||
<hr />
|
||||
</blockquote>
|
||||
|
||||
<b>IMPORTANT NOTICE:</b>
|
||||
</p><p>
|
||||
This is an unofficial translation of the GNU General Public License
|
||||
into Spanish. It was not published by the Free Software
|
||||
Foundation, and does not legally state the distribution terms for
|
||||
software that uses the GNU GPL--only the original English text of
|
||||
the GNU GPL does that. However, we hope that this translation will
|
||||
help Spanish speakers understand the GNU GPL better.
|
||||
</p><p>
|
||||
</p><hr>
|
||||
</blockquote>
|
||||
<p>Copyright (C) 1989, 1991 Free Software Foundation, Inc.</p>
|
||||
<p>675 Mass Ave, Cambridge, MA 02139, EEUU</p>
|
||||
<p>
|
||||
Se permite la copia y distribución de copias literales de este
|
||||
documento, pero no se permite su modificación.
|
||||
</p>
|
||||
|
||||
<p>Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
</p><p>675 Mass Ave, Cambridge, MA 02139, EEUU
|
||||
</p><p>Se permite la copia y distribución de copias literales de este
|
||||
documento, pero no se permite su modificación.
|
||||
</p>
|
||||
<h3><a name="SEC2">Preámbulo</a></h3>
|
||||
<p>
|
||||
Las licencias que cubren la mayor parte del software están
|
||||
diseñadas para quitarle a usted la libertad de compartirlo y
|
||||
modificarlo. Por el contrario, la Licencia Pública General de GNU
|
||||
pretende garantizarle la libertad de compartir y modificar software libre,
|
||||
para asegurar que el software es libre para todos sus usuarios. Esta
|
||||
Licencia Pública General se aplica a la mayor parte del software
|
||||
del la Free Software Foundation y a cualquier otro programa si sus autores
|
||||
se comprometen a utilizarla. (Existe otro software de la Free Software
|
||||
Foundation que está cubierto por la Licencia Pública General
|
||||
de GNU para Bibliotecas). Si quiere, también puede aplicarla a sus
|
||||
propios programas.
|
||||
</p>
|
||||
<p>
|
||||
Cuando hablamos de software libre, estamos refiriéndonos a
|
||||
libertad, no a precio. Nuestras Licencias Públicas Generales
|
||||
están diseñadas para asegurarnos de que tenga la libertad de
|
||||
distribuir copias de software libre (y cobrar por ese servicio si quiere),
|
||||
de que reciba el código fuente o que pueda conseguirlo si lo
|
||||
quiere, de que pueda modificar el software o usar fragmentos de él
|
||||
en nuevos programas libres, y de que sepa que puede hacer todas estas
|
||||
cosas.
|
||||
</p>
|
||||
<p>
|
||||
Para proteger sus derechos necesitamos algunas restricciones que prohiban
|
||||
a cualquiera negarle a usted estos derechos o pedirle que renuncie a
|
||||
ellos. Estas restricciones se traducen en ciertas obligaciones que le
|
||||
afectan si distribuye copias del software, o si lo modifica.
|
||||
</p>
|
||||
<p>
|
||||
Por ejemplo, si distribuye copias de uno de estos programas, sea
|
||||
gratuitamente, o a cambio de una contraprestación, debe dar a los
|
||||
receptores todos los derechos que tiene. Debe asegurarse de que ellos
|
||||
también reciben, o pueden conseguir, el código fuente. Y
|
||||
debe mostrarles estas condiciones de forma que conozcan sus derechos.
|
||||
</p>
|
||||
<p>Protegemos sus derechos con la combinación de dos medidas:</p>
|
||||
<ol type="1">
|
||||
<li>Ponemos el software bajo copyright y</li>
|
||||
<li>
|
||||
le ofrecemos esta licencia, que le da permiso legal para copiar,
|
||||
distribuir y/o modificar el software.
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
También, para la protección de cada autor y la nuestra
|
||||
propia, queremos asegurarnos de que todo el mundo comprende que no se
|
||||
proporciona ninguna garantía para este software libre. Si el
|
||||
software se modifica por cualquiera y éste a su vez lo distribuye,
|
||||
queremos que sus receptores sepan que lo que tienen no es el original, de
|
||||
forma que cualquier problema introducido por otros no afecte a la
|
||||
reputación de los autores originales.
|
||||
</p>
|
||||
<p>
|
||||
Por último, cualquier programa libre está constantemente
|
||||
amenazado por patentes sobre el software. Queremos evitar el peligro de
|
||||
que los redistribuidores de un programa libre obtengan patentes por su
|
||||
cuenta, convirtiendo de facto el programa en propietario. Para evitar
|
||||
esto, hemos dejado claro que cualquier patente debe ser pedida para el uso
|
||||
libre de cualquiera, o no ser pedida.
|
||||
</p>
|
||||
<p>
|
||||
Los términos exactos y las condiciones para la copia,
|
||||
distribución y modificación se exponen a
|
||||
continuación.
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
<a name="SEC3"
|
||||
>Términos y condiciones para la copia, distribución y
|
||||
modificación</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<h3><a name="SEC2">Preámbulo</a></h3>
|
||||
<p>
|
||||
Las licencias que cubren la mayor parte del software están diseñadas
|
||||
para quitarle a usted la libertad de compartirlo y modificarlo. Por el
|
||||
contrario, la Licencia Pública General de GNU pretende garantizarle
|
||||
la libertad de compartir y modificar software libre, para asegurar que
|
||||
el software es libre para todos sus usuarios. Esta Licencia Pública
|
||||
General se aplica a la mayor parte del software del la Free Software Foundation
|
||||
y a cualquier otro programa si sus autores se comprometen a utilizarla.
|
||||
(Existe otro software de la Free Software Foundation que está cubierto
|
||||
por la Licencia Pública General de GNU para Bibliotecas). Si quiere,
|
||||
también puede aplicarla a sus propios programas.</p>
|
||||
<p>Cuando hablamos de software libre, estamos refiriéndonos a libertad,
|
||||
no a precio. Nuestras Licencias Públicas Generales están
|
||||
diseñadas para asegurarnos de que tenga la libertad de distribuir
|
||||
copias de software libre (y cobrar por ese servicio si quiere), de que
|
||||
reciba el código fuente o que pueda conseguirlo si lo quiere, de
|
||||
que pueda modificar el software o usar fragmentos de él en nuevos
|
||||
programas libres, y de que sepa que puede hacer todas estas cosas.
|
||||
</p><p>Para proteger sus derechos necesitamos algunas restricciones que prohiban
|
||||
a cualquiera negarle a usted estos derechos o pedirle que renuncie a ellos.
|
||||
Estas restricciones se traducen en ciertas obligaciones que le afectan
|
||||
si distribuye copias del software, o si lo modifica.
|
||||
</p><p>Por ejemplo, si distribuye copias de uno de estos programas, sea gratuitamente,
|
||||
o a cambio de una contraprestación, debe dar a los receptores todos
|
||||
los derechos que tiene. Debe asegurarse de que ellos también reciben,
|
||||
o pueden conseguir, el código fuente. Y debe mostrarles estas condiciones
|
||||
de forma que conozcan sus derechos.
|
||||
</p><p>Protegemos sus derechos con la combinación de dos medidas:
|
||||
</p><ol type="1">
|
||||
<li>Ponemos el software bajo copyright y
|
||||
</li><li>le ofrecemos esta licencia, que le da permiso legal para copiar, distribuir
|
||||
y/o modificar el software.</li></ol>
|
||||
<p>
|
||||
También, para la protección de cada autor y la nuestra propia,
|
||||
queremos asegurarnos de que todo el mundo comprende que no se proporciona
|
||||
ninguna garantía para este software libre. Si el software se modifica
|
||||
por cualquiera y éste a su vez lo distribuye, queremos que sus receptores
|
||||
sepan que lo que tienen no es el original, de forma que cualquier problema
|
||||
introducido por otros no afecte a la reputación de los autores originales.</p>
|
||||
<p>Por último, cualquier programa libre está constantemente
|
||||
amenazado por patentes sobre el software. Queremos evitar el peligro de
|
||||
que los redistribuidores de un programa libre obtengan patentes por su
|
||||
cuenta, convirtiendo de facto el programa en propietario. Para evitar esto,
|
||||
hemos dejado claro que cualquier patente debe ser pedida para el uso libre
|
||||
de cualquiera, o no ser pedida.
|
||||
</p><p>Los términos exactos y las condiciones para la copia, distribución
|
||||
y modificación se exponen a continuación.</p>
|
||||
<ol type="1">
|
||||
<li>
|
||||
Esta Licencia se aplica a cualquier programa u otro tipo de trabajo que
|
||||
contenga una nota colocada por el tenedor del copyright diciendo que
|
||||
puede ser distribuido bajo los términos de esta Licencia
|
||||
Pública General. En adelante, «Programa» se
|
||||
referirá a cualquier programa o trabajo que cumpla esa
|
||||
condición y «trabajo basado en el Programa» se
|
||||
referirá bien al Programa o a cualquier trabajo derivado de
|
||||
él según la ley de copyright. Esto es, un trabajo que
|
||||
contenga el programa o una proción de él, bien en forma
|
||||
literal o con modificaciones y/o traducido en otro lenguaje. Por lo
|
||||
tanto, la traducción está incluida sin limitaciones en el
|
||||
término «modificación». Cada concesionario
|
||||
(licenciatario) será denominado «usted».
|
||||
<p>
|
||||
Cualquier otra actividad que no sea la copia, distribución o
|
||||
modificación no está cubierta por esta Licencia,
|
||||
está fuera de su ámbito. El acto de ejecutar el Programa
|
||||
no está restringido, y los resultados del Programa están
|
||||
cubiertos únicamente si sus contenidos constituyen un trabajo
|
||||
basado en el Programa, independientemente de haberlo producido
|
||||
mediante la ejecución del programa. El que esto se cumpla,
|
||||
depende de lo que haga el programa.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Usted puede copiar y distribuir copias literales del código
|
||||
fuente del Programa, según lo has recibido, en cualquier medio,
|
||||
supuesto que de forma adecuada y bien visible publique en cada copia un
|
||||
anuncio de copyright adecuado y un repudio de garantía, mantenga
|
||||
intactos todos los anuncios que se refieran a esta Licencia y a la
|
||||
ausencia de garantía, y proporcione a cualquier otro receptor del
|
||||
programa una copia de esta Licencia junto con el Programa.
|
||||
<p>
|
||||
Puede cobrar un precio por el acto físico de transferir una
|
||||
copia, y puede, según su libre albedrío, ofrecer
|
||||
garantía a cambio de unos honorarios.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Puede modificar su copia o copias del Programa o de cualquier
|
||||
porción de él, formando de esta manera un trabajo basado
|
||||
en el Programa, y copiar y distribuir esa modificación o trabajo
|
||||
bajo los términos del apartado 1, antedicho, supuesto que
|
||||
además cumpla las siguientes condiciones:
|
||||
<ol type="a">
|
||||
<li>
|
||||
Debe hacer que los ficheros modificados lleven anuncios prominentes
|
||||
indicando que los ha cambiado y la fecha de cualquier cambio.
|
||||
</li>
|
||||
<li>
|
||||
Debe hacer que cualquier trabajo que distribuya o publique y que en
|
||||
todo o en parte contenga o sea derivado del Programa o de cualquier
|
||||
parte de él sea licenciada como un todo, sin carga alguna, a
|
||||
todas las terceras partes y bajo los términos de esta
|
||||
Licencia.
|
||||
</li>
|
||||
<li>
|
||||
Si el programa modificado lee normalmente órdenes
|
||||
interactivamente cuando es ejecutado, debe hacer que, cuando
|
||||
comience su ejecución para ese uso interactivo de la forma
|
||||
más habitual, muestre o escriba un mensaje que incluya un
|
||||
anuncio de copyright y un anuncio de que no se ofrece ninguna
|
||||
garantía (o por el contrario que sí se ofrece
|
||||
garantía) y que los usuarios pueden redistribuir el programa
|
||||
bajo estas condiciones, e indicando al usuario cómo ver una
|
||||
copia de esta licencia. (Excepción: si el propio programa es
|
||||
interactivo pero normalmente no muestra ese anuncio, no se requiere
|
||||
que su trabajo basado en el Programa muestre ningún anuncio).
|
||||
</li>
|
||||
</ol>
|
||||
Estos requisitos se aplican al trabajo modificado como un todo. Si
|
||||
partes identificables de ese trabajo no son derivadas del Programa, y
|
||||
pueden, razonablemente, ser consideradas trabajos independientes y
|
||||
separados por ellos mismos, entonces esta Licencia y sus términos
|
||||
no se aplican a esas partes cuando sean distribuidas como trabajos
|
||||
separados. Pero cuando distribuya esas mismas secciones como partes de
|
||||
un todo que es un trabajo basado en el Programa, la distribución
|
||||
del todo debe ser según los términos de esta licencia,
|
||||
cuyos permisos para otros licenciatarios se extienden al todo completo,
|
||||
y por lo tanto a todas y cada una de sus partes, con independencia de
|
||||
quién la escribió.
|
||||
<p>
|
||||
Por lo tanto, no es la intención de este apartado reclamar
|
||||
derechos o desafiar sus derechos sobre trabajos escritos totalmente
|
||||
por usted mismo. El intento es ejercer el derecho a controlar la
|
||||
distribución de trabajos derivados o colectivos basados en el
|
||||
Programa.
|
||||
</p>
|
||||
<p>
|
||||
Además, el simple hecho de reunir un trabajo no basado en el
|
||||
Programa con el Programa (o con un trabajo basado en el Programa) en
|
||||
un volumen de almacenamiento o en un medio de distribución no
|
||||
hace que dicho trabajo entre dentro del ámbito cubierto por
|
||||
esta Licencia.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Puede copiar y distribuir el Programa (o un trabajo basado en él,
|
||||
según se especifica en el apartado 2, como código objeto o
|
||||
en formato ejecutable según los términos de los apartados
|
||||
1 y 2, supuesto que además cumpla una de las siguientes
|
||||
condiciones:
|
||||
<ol type="a">
|
||||
<li>
|
||||
Acompañarlo con el código fuente completo
|
||||
correspondiente, en formato electrónico, que debe ser
|
||||
distribuido según se especifica en los apartados 1 y 2 de
|
||||
esta Licencia en un medio habitualmente utilizado para el
|
||||
intercambio de programas, o
|
||||
</li>
|
||||
<li>
|
||||
Acompañarlo con una oferta por escrito, válida durante
|
||||
al menos tres años, de proporcionar a cualquier tercera parte
|
||||
una copia completa en formato electrónico del código
|
||||
fuente correspondiente, a un coste no mayor que el de realizar
|
||||
físicamente la distribución del fuente, que
|
||||
será distribuido bajo las condiciones descritas en los
|
||||
apartados 1 y 2 anteriores, en un medio habitualmente utilizado para
|
||||
el intercambio de programas, o
|
||||
</li>
|
||||
<li>
|
||||
Acompañarlo con la información que recibiste
|
||||
ofreciendo distribuir el código fuente correspondiente. (Esta
|
||||
opción se permite sólo para distribución no
|
||||
comercial y sólo si usted recibió el programa como
|
||||
código objeto o en formato ejecutable con tal oferta, de
|
||||
acuerdo con el apartado b anterior).
|
||||
</li>
|
||||
</ol>
|
||||
Por código fuente de un trabajo se entiende la forma preferida
|
||||
del trabajo cuando se le hacen modificaciones. Para un trabajo
|
||||
ejecutable, se entiende por código fuente completo todo el
|
||||
código fuente para todos los módulos que contiene,
|
||||
más cualquier fichero asociado de definición de
|
||||
interfaces, más los guiones utilizados para controlar la
|
||||
compilación e instalación del ejecutable. Como
|
||||
excepción especial el código fuente distribuido no
|
||||
necesita incluir nada que sea distribuido normalmente (bien como fuente,
|
||||
bien en forma binaria) con los componentes principales (compilador,
|
||||
kernel y similares) del sistema operativo en el cual funciona el
|
||||
ejecutable, a no ser que el propio componente acompañe al
|
||||
ejecutable.
|
||||
<p>
|
||||
Si la distribución del ejecutable o del código objeto se
|
||||
hace mediante la oferta acceso para copiarlo de un cierto lugar,
|
||||
entonces se considera la oferta de acceso para copiar el código
|
||||
fuente del mismo lugar como distribución del código
|
||||
fuente, incluso aunque terceras partes no estén forzadas a
|
||||
copiar el fuente junto con el código objeto.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
No puede copiar, modificar, sublicenciar o distribuir el Programa
|
||||
excepto como prevé expresamente esta Licencia. Cualquier intento
|
||||
de copiar, modificar sublicenciar o distribuir el Programa de otra forma
|
||||
es inválida, y hará que cesen automáticamente los
|
||||
derechos que te proporciona esta Licencia. En cualquier caso, las partes
|
||||
que hayan recibido copias o derechos de usted bajo esta Licencia no
|
||||
cesarán en sus derechos mientras esas partes continúen
|
||||
cumpliéndola.
|
||||
</li>
|
||||
<li>
|
||||
No está obligado a aceptar esta licencia, ya que no la ha
|
||||
firmado. Sin embargo, no hay hada más que le proporcione permiso
|
||||
para modificar o distribuir el Programa o sus trabajos derivados. Estas
|
||||
acciones están prohibidas por la ley si no acepta esta Licencia.
|
||||
Por lo tanto, si modifica o distribuye el Programa (o cualquier trabajo
|
||||
basado en el Programa), está indicando que acepta esta Licencia
|
||||
para poder hacerlo, y todos sus términos y condiciones para
|
||||
copiar, distribuir o modificar el Programa o trabajos basados en
|
||||
él.
|
||||
</li>
|
||||
<li>
|
||||
Cada vez que redistribuya el Programa (o cualquier trabajo basado en el
|
||||
Programa), el receptor recibe automáticamente una licencia del
|
||||
licenciatario original para copiar, distribuir o modificar el Programa,
|
||||
de forma sujeta a estos términos y condiciones. No puede imponer
|
||||
al receptor ninguna restricción más sobre el ejercicio de
|
||||
los derechos aquí garantizados. No es usted responsable de hacer
|
||||
cumplir esta licencia por terceras partes.
|
||||
</li>
|
||||
<li>
|
||||
Si como consecuencia de una resolución judicial o de una
|
||||
alegación de infracción de patente o por cualquier otra
|
||||
razón (no limitada a asuntos relacionados con patentes) se le
|
||||
imponen condiciones (ya sea por mandato judicial, por acuerdo o por
|
||||
cualquier otra causa) que contradigan las condiciones de esta Licencia,
|
||||
ello no le exime de cumplir las condiciones de esta Licencia. Si no
|
||||
puede realizar distribuciones de forma que se satisfagan
|
||||
simultáneamente sus obligaciones bajo esta licencia y cualquier
|
||||
otra obligación pertinente entonces, como consecuencia, no puede
|
||||
distribuir el Programa de ninguna forma. Por ejemplo, si una patente no
|
||||
permite la redistribución libre de derechos de autor del Programa
|
||||
por parte de todos aquellos que reciban copias directa o indirectamente
|
||||
a través de usted, entonces la única forma en que
|
||||
podría satisfacer tanto esa condición como esta Licencia
|
||||
sería evitar completamente la distribución del Programa.
|
||||
<p>
|
||||
Si cualquier porción de este apartado se considera
|
||||
inválida o imposible de cumplir bajo cualquier circunstancia
|
||||
particular ha de cumplirse el resto y la sección por entero ha
|
||||
de cumplirse en cualquier otra circunstancia.
|
||||
</p>
|
||||
<p>
|
||||
No es el propósito de este apartado inducirle a infringir
|
||||
ninguna reivindicación de patente ni de ningún otro
|
||||
derecho de propiedad o impugnar la validez de ninguna de dichas
|
||||
reivindicaciones. Este apartado tiene el único propósito
|
||||
de proteger la integridad del sistema de distribución de
|
||||
software libre, que se realiza mediante prácticas de licencia
|
||||
pública. Mucha gente ha hecho contribuciones generosas a la
|
||||
gran variedad de software distribuido mediante ese sistema con la
|
||||
confianza de que el sistema se aplicará consistentemente.
|
||||
Será el autor/donante quien decida si quiere distribuir
|
||||
software mediante cualquier otro sistema y una licencia no puede
|
||||
imponer esa elección.
|
||||
</p>
|
||||
<p>
|
||||
Este apartado pretende dejar completamente claro lo que se cree que es
|
||||
una consecuencia del resto de esta Licencia.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Si la distribución y/o uso de el Programa está restringida
|
||||
en ciertos países, bien por patentes o por interfaces bajo
|
||||
copyright, el tenedor del copyright que coloca este Programa bajo esta
|
||||
Licencia puede añadir una limitación explícita de
|
||||
distribución geográfica excluyendo esos países, de
|
||||
forma que la distribución se permita sólo en o entre los
|
||||
países no excluidos de esta manera. En ese caso, esta Licencia
|
||||
incorporará la limitación como si estuviese escrita en el
|
||||
cuerpo de esta Licencia.
|
||||
</li>
|
||||
<li>
|
||||
La Free Software Foundation puede publicar versiones revisadas y/o
|
||||
nuevas de la Licencia Pública General de tiempo en tiempo. Dichas
|
||||
nuevas versiones serán similares en espíritu a la presente
|
||||
versión, pero pueden ser diferentes en detalles para considerar
|
||||
nuevos problemas o situaciones.
|
||||
<p>
|
||||
Cada versión recibe un número de versión que la
|
||||
distingue de otras. Si el Programa especifica un número de
|
||||
versión de esta Licencia que se refiere a ella y a
|
||||
«cualquier versión posterior», tienes la
|
||||
opción de seguir los términos y condiciones, bien de esa
|
||||
versión, bien de cualquier versión posterior publicada
|
||||
por la Free Software Foundation. Si el Programa no especifica un
|
||||
número de versión de esta Licencia, puedes escoger
|
||||
cualquier versión publicada por la Free Software Foundation.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Si quiere incorporar partes del Programa en otros programas libres cuyas
|
||||
condiciones de distribución son diferentes, escribe al autor para
|
||||
pedirle permiso. Si el software tiene copyright de la Free Software
|
||||
Foundation, escribe a la Free Software Foundation: algunas veces hacemos
|
||||
excepciones en estos casos. Nuestra decisión estará guiada
|
||||
por el doble objetivo de de preservar la libertad de todos los derivados
|
||||
de nuestro software libre y promover el que se comparta y reutilice el
|
||||
software en general.
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h3><a name="SEC3">Términos y condiciones para la copia,
|
||||
distribución y modificación</a></h3>
|
||||
<h3>AUSENCIA DE GARANTÍA</h3>
|
||||
|
||||
<ol type="1">
|
||||
<li>Esta Licencia se aplica a cualquier programa u otro tipo
|
||||
de trabajo que contenga una nota colocada por el tenedor del copyright
|
||||
diciendo que puede ser distribuido bajo los términos de esta Licencia
|
||||
Pública General. En adelante, «Programa» se referirá
|
||||
a cualquier programa o trabajo que cumpla esa condición y «trabajo
|
||||
basado en el Programa» se referirá bien al Programa o a cualquier
|
||||
trabajo derivado de él según la ley de copyright. Esto es,
|
||||
un trabajo que contenga el programa o una proción de él,
|
||||
bien en forma literal o con modificaciones y/o traducido en otro lenguaje.
|
||||
Por lo tanto, la traducción está incluida sin limitaciones
|
||||
en el término «modificación». Cada concesionario
|
||||
(licenciatario) será denominado «usted».
|
||||
<p>Cualquier otra actividad que no sea la copia, distribución o
|
||||
modificación no está cubierta por esta Licencia, está
|
||||
fuera de su ámbito. El acto de ejecutar el Programa no está
|
||||
restringido, y los resultados del Programa están cubiertos únicamente
|
||||
si sus contenidos constituyen un trabajo basado en el Programa, independientemente
|
||||
de haberlo producido mediante la ejecución del programa. El que
|
||||
esto se cumpla, depende de lo que haga el programa.
|
||||
</p></li><li>Usted puede copiar y distribuir copias literales del código fuente
|
||||
del Programa, según lo has recibido, en cualquier medio, supuesto
|
||||
que de forma adecuada y bien visible publique en cada copia un anuncio
|
||||
de copyright adecuado y un repudio de garantía, mantenga intactos
|
||||
todos los anuncios que se refieran a esta Licencia y a la ausencia de garantía,
|
||||
y proporcione a cualquier otro receptor del programa una copia de esta
|
||||
Licencia junto con el Programa.
|
||||
<p>Puede cobrar un precio por el acto físico de transferir una copia,
|
||||
y puede, según su libre albedrío, ofrecer garantía
|
||||
a cambio de unos honorarios.
|
||||
</p></li><li>Puede modificar su copia o copias del Programa o de cualquier porción
|
||||
de él, formando de esta manera un trabajo basado en el Programa,
|
||||
y copiar y distribuir esa modificación o trabajo bajo los términos
|
||||
del apartado 1, antedicho, supuesto que además cumpla las siguientes
|
||||
condiciones:
|
||||
<ol type="a"><li>Debe hacer que los ficheros modificados lleven anuncios
|
||||
prominentes indicando que los ha cambiado y la fecha de cualquier cambio.
|
||||
</li><li>Debe hacer que cualquier trabajo que distribuya o publique y que en
|
||||
todo o en parte contenga o sea derivado del Programa o de cualquier parte
|
||||
de él sea licenciada como un todo, sin carga alguna, a todas las
|
||||
terceras partes y bajo los términos de esta Licencia.
|
||||
</li><li>Si el programa modificado lee normalmente órdenes interactivamente
|
||||
cuando es ejecutado, debe hacer que, cuando comience su ejecución
|
||||
para ese uso interactivo de la forma más habitual, muestre o escriba
|
||||
un mensaje que incluya un anuncio de copyright y un anuncio de que no se
|
||||
ofrece ninguna garantía (o por el contrario que sí se ofrece
|
||||
garantía) y que los usuarios pueden redistribuir el programa bajo
|
||||
estas condiciones, e indicando al usuario cómo ver una copia de
|
||||
esta licencia. (Excepción: si el propio programa es interactivo
|
||||
pero normalmente no muestra ese anuncio, no se requiere que su trabajo
|
||||
basado en el Programa muestre ningún anuncio).</li></ol>
|
||||
Estos requisitos se aplican al trabajo modificado como un todo. Si partes
|
||||
identificables de ese trabajo no son derivadas del Programa, y pueden,
|
||||
razonablemente, ser consideradas trabajos independientes y separados por
|
||||
ellos mismos, entonces esta Licencia y sus términos no se aplican
|
||||
a esas partes cuando sean distribuidas como trabajos separados. Pero cuando
|
||||
distribuya esas mismas secciones como partes de un todo que es un trabajo
|
||||
basado en el Programa, la distribución del todo debe ser según
|
||||
los términos de esta licencia, cuyos permisos para otros licenciatarios
|
||||
se extienden al todo completo, y por lo tanto a todas y cada una de sus
|
||||
partes, con independencia de quién la escribió.
|
||||
<p>Por lo tanto, no es la intención de este apartado reclamar derechos
|
||||
o desafiar sus derechos sobre trabajos escritos totalmente por usted mismo.
|
||||
El intento es ejercer el derecho a controlar la distribución de
|
||||
trabajos derivados o colectivos basados en el Programa.
|
||||
</p><p>Además, el simple hecho de reunir un trabajo no basado en el
|
||||
Programa con el Programa (o con un trabajo basado en el Programa) en un
|
||||
volumen de almacenamiento o en un medio de distribución no hace
|
||||
que dicho trabajo entre dentro del ámbito cubierto por esta Licencia.
|
||||
</p></li><li>Puede copiar y distribuir el Programa (o un trabajo basado en él,
|
||||
según se especifica en el apartado 2, como código objeto
|
||||
o en formato ejecutable según los términos de los apartados
|
||||
1 y 2, supuesto que además cumpla una de las siguientes condiciones:
|
||||
<ol type="a"><li>Acompañarlo con el código fuente completo
|
||||
correspondiente, en formato electrónico, que debe ser distribuido
|
||||
según se especifica en los apartados 1 y 2 de esta Licencia en un
|
||||
medio habitualmente utilizado para el intercambio de programas, o
|
||||
</li><li>Acompañarlo con una oferta por escrito, válida durante
|
||||
al menos tres años, de proporcionar a cualquier tercera parte una
|
||||
copia completa en formato electrónico del código fuente correspondiente,
|
||||
a un coste no mayor que el de realizar físicamente la distribución
|
||||
del fuente, que será distribuido bajo las condiciones descritas
|
||||
en los apartados 1 y 2 anteriores, en un medio habitualmente utilizado
|
||||
para el intercambio de programas, o
|
||||
</li><li>Acompañarlo con la información que recibiste ofreciendo
|
||||
distribuir el código fuente correspondiente. (Esta opción
|
||||
se permite sólo para distribución no comercial y sólo
|
||||
si usted recibió el programa como código objeto o en formato
|
||||
ejecutable con tal oferta, de acuerdo con el apartado b anterior).</li></ol>
|
||||
Por código fuente de un trabajo se entiende la forma preferida del
|
||||
trabajo cuando se le hacen modificaciones. Para un trabajo ejecutable,
|
||||
se entiende por código fuente completo todo el código fuente
|
||||
para todos los módulos que contiene, más cualquier fichero
|
||||
asociado de definición de interfaces, más los guiones utilizados
|
||||
para controlar la compilación e instalación del ejecutable.
|
||||
Como excepción especial el código fuente distribuido no necesita
|
||||
incluir nada que sea distribuido normalmente (bien como fuente, bien en
|
||||
forma binaria) con los componentes principales (compilador, kernel y similares)
|
||||
del sistema operativo en el cual funciona el ejecutable, a no ser que el
|
||||
propio componente acompañe al ejecutable.
|
||||
<p>Si la distribución del ejecutable o del código objeto
|
||||
se hace mediante la oferta acceso para copiarlo de un cierto lugar, entonces
|
||||
se considera la oferta de acceso para copiar el código fuente del
|
||||
mismo lugar como distribución del código fuente, incluso
|
||||
aunque terceras partes no estén forzadas a copiar el fuente junto
|
||||
con el código objeto.
|
||||
</p></li><li>No puede copiar, modificar, sublicenciar o distribuir el Programa excepto
|
||||
como prevé expresamente esta Licencia. Cualquier intento de copiar,
|
||||
modificar sublicenciar o distribuir el Programa de otra forma es inválida,
|
||||
y hará que cesen automáticamente los derechos que te proporciona
|
||||
esta Licencia. En cualquier caso, las partes que hayan recibido copias
|
||||
o derechos de usted bajo esta Licencia no cesarán en sus derechos
|
||||
mientras esas partes continúen cumpliéndola.
|
||||
</li><li>No está obligado a aceptar esta licencia, ya que no la ha firmado.
|
||||
Sin embargo, no hay hada más que le proporcione permiso para modificar
|
||||
o distribuir el Programa o sus trabajos derivados. Estas acciones están
|
||||
prohibidas por la ley si no acepta esta Licencia. Por lo tanto, si modifica
|
||||
o distribuye el Programa (o cualquier trabajo basado en el Programa), está
|
||||
indicando que acepta esta Licencia para poder hacerlo, y todos sus términos
|
||||
y condiciones para copiar, distribuir o modificar el Programa o trabajos
|
||||
basados en él.
|
||||
</li><li>Cada vez que redistribuya el Programa (o cualquier trabajo basado en
|
||||
el Programa), el receptor recibe automáticamente una licencia del
|
||||
licenciatario original para copiar, distribuir o modificar el Programa,
|
||||
de forma sujeta a estos términos y condiciones. No puede imponer
|
||||
al receptor ninguna restricción más sobre el ejercicio de
|
||||
los derechos aquí garantizados. No es usted responsable de hacer
|
||||
cumplir esta licencia por terceras partes.
|
||||
</li><li>Si como consecuencia de una resolución judicial o de una alegación
|
||||
de infracción de patente o por cualquier otra razón (no limitada
|
||||
a asuntos relacionados con patentes) se le imponen condiciones (ya sea
|
||||
por mandato judicial, por acuerdo o por cualquier otra causa) que contradigan
|
||||
las condiciones de esta Licencia, ello no le exime de cumplir las condiciones
|
||||
de esta Licencia. Si no puede realizar distribuciones de forma que se satisfagan
|
||||
simultáneamente sus obligaciones bajo esta licencia y cualquier
|
||||
otra obligación pertinente entonces, como consecuencia, no puede
|
||||
distribuir el Programa de ninguna forma. Por ejemplo, si una patente no
|
||||
permite la redistribución libre de derechos de autor del Programa
|
||||
por parte de todos aquellos que reciban copias directa o indirectamente
|
||||
a través de usted, entonces la única forma en que podría
|
||||
satisfacer tanto esa condición como esta Licencia sería evitar
|
||||
completamente la distribución del Programa.
|
||||
<p>Si cualquier porción de este apartado se considera inválida
|
||||
o imposible de cumplir bajo cualquier circunstancia particular ha de cumplirse
|
||||
el resto y la sección por entero ha de cumplirse en cualquier otra
|
||||
circunstancia.
|
||||
</p><p>No es el propósito de este apartado inducirle a infringir ninguna
|
||||
reivindicación de patente ni de ningún otro derecho de propiedad
|
||||
o impugnar la validez de ninguna de dichas reivindicaciones. Este apartado
|
||||
tiene el único propósito de proteger la integridad del sistema
|
||||
de distribución de software libre, que se realiza mediante prácticas
|
||||
de licencia pública. Mucha gente ha hecho contribuciones generosas
|
||||
a la gran variedad de software distribuido mediante ese sistema con la
|
||||
confianza de que el sistema se aplicará consistentemente. Será
|
||||
el autor/donante quien decida si quiere distribuir software mediante cualquier
|
||||
otro sistema y una licencia no puede imponer esa elección.
|
||||
</p><p>Este apartado pretende dejar completamente claro lo que se cree que
|
||||
es una consecuencia del resto de esta Licencia.
|
||||
</p></li><li>Si la distribución y/o uso de el Programa está restringida
|
||||
en ciertos países, bien por patentes o por interfaces bajo copyright,
|
||||
el tenedor del copyright que coloca este Programa bajo esta Licencia puede
|
||||
añadir una limitación explícita de distribución
|
||||
geográfica excluyendo esos países, de forma que la distribución
|
||||
se permita sólo en o entre los países no excluidos de esta
|
||||
manera. En ese caso, esta Licencia incorporará la limitación
|
||||
como si estuviese escrita en el cuerpo de esta Licencia.
|
||||
</li><li>La Free Software Foundation puede publicar versiones revisadas y/o nuevas
|
||||
de la Licencia Pública General de tiempo en tiempo. Dichas nuevas
|
||||
versiones serán similares en espíritu a la presente versión,
|
||||
pero pueden ser diferentes en detalles para considerar nuevos problemas
|
||||
o situaciones.
|
||||
<p>Cada versión recibe un número de versión que la
|
||||
distingue de otras. Si el Programa especifica un número de versión
|
||||
de esta Licencia que se refiere a ella y a «cualquier versión
|
||||
posterior», tienes la opción de seguir los términos
|
||||
y condiciones, bien de esa versión, bien de cualquier versión
|
||||
posterior publicada por la Free Software Foundation. Si el Programa no
|
||||
especifica un número de versión de esta Licencia, puedes
|
||||
escoger cualquier versión publicada por la Free Software Foundation.
|
||||
</p></li><li>Si quiere incorporar partes del Programa en otros programas libres cuyas
|
||||
condiciones de distribución son diferentes, escribe al autor para
|
||||
pedirle permiso. Si el software tiene copyright de la Free Software Foundation,
|
||||
escribe a la Free Software Foundation: algunas veces hacemos excepciones
|
||||
en estos casos. Nuestra decisión estará guiada por el doble
|
||||
objetivo de de preservar la libertad de todos los derivados de nuestro
|
||||
software libre y promover el que se comparta y reutilice el software en
|
||||
general.</li></ol>
|
||||
<ol start="12" type="1">
|
||||
<li>
|
||||
Como el programa se licencia libre de cargas, no se ofrece ninguna
|
||||
garantía sobre el programa, en todas la extensión
|
||||
permitida por la legislación aplicable. Excepto cuando se indique
|
||||
de otra forma por escrito, los tenedores del copyright y/u otras partes
|
||||
proporcionan el programa «tal cual», sin garantía de
|
||||
ninguna clase, bien expresa o implícita, con inclusión,
|
||||
pero sin limitación a las garantías mercantiles
|
||||
implícitas o a la conveniencia para un propósito
|
||||
particular. Cualquier riesgo referente a la calidad y prestaciones del
|
||||
programa es asumido por usted. Si se probase que el Programa es
|
||||
defectuoso, asume el coste de cualquier servicio, reparación o
|
||||
corrección.
|
||||
</li>
|
||||
<li>
|
||||
En ningún caso, salvo que lo requiera la legislación
|
||||
aplicable o haya sido acordado por escrito, ningún tenedor del
|
||||
copyright ni ninguna otra parte que modifique y/o redistribuya el
|
||||
Programa según se permite en esta Licencia será
|
||||
responsable ante usted por daños, incluyendo cualquier
|
||||
daño general, especial, incidental o resultante producido por el
|
||||
uso o la imposibilidad de uso del Programa (con inclusión, pero
|
||||
sin limitación a la pérdida de datos o a la
|
||||
generación incorrecta de datos o a pérdidas sufridas por
|
||||
usted o por terceras partes o a un fallo del Programa al funcionar en
|
||||
combinación con cualquier otro programa), incluso si dicho
|
||||
tenedor u otra parte ha sido advertido de la posibilidad de dichos
|
||||
daños.
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h3>AUSENCIA DE GARANTÍA</h3>
|
||||
<h3>FIN DE TÉRMINOS Y CONDICIONES</h3>
|
||||
|
||||
<ol start="12" type="1">
|
||||
<li>Como el programa se licencia libre de cargas,
|
||||
no se ofrece ninguna garantía sobre el programa, en todas la extensión
|
||||
permitida por la legislación aplicable. Excepto cuando se indique
|
||||
de otra forma por escrito, los tenedores del copyright y/u otras partes
|
||||
proporcionan el programa «tal cual», sin garantía de
|
||||
ninguna clase, bien expresa o implícita, con inclusión, pero
|
||||
sin limitación a las garantías mercantiles implícitas
|
||||
o a la conveniencia para un propósito particular. Cualquier riesgo
|
||||
referente a la calidad y prestaciones del programa es asumido por usted.
|
||||
Si se probase que el Programa es defectuoso, asume el coste de cualquier
|
||||
servicio, reparación o corrección.
|
||||
</li><li>En ningún caso, salvo que lo requiera la legislación aplicable
|
||||
o haya sido acordado por escrito, ningún tenedor del copyright ni
|
||||
ninguna otra parte que modifique y/o redistribuya el Programa según
|
||||
se permite en esta Licencia será responsable ante usted por daños,
|
||||
incluyendo cualquier daño general, especial, incidental o resultante
|
||||
producido por el uso o la imposibilidad de uso del Programa (con inclusión,
|
||||
pero sin limitación a la pérdida de datos o a la generación
|
||||
incorrecta de datos o a pérdidas sufridas por usted o por terceras
|
||||
partes o a un fallo del Programa al funcionar en combinación con
|
||||
cualquier otro programa), incluso si dicho tenedor u otra parte ha sido
|
||||
advertido de la posibilidad de dichos daños.</li></ol>
|
||||
|
||||
<h3>FIN DE TÉRMINOS Y CONDICIONES</h3>
|
||||
|
||||
<h3><a name="APPENDIX">Apéndice</a>: Cómo aplicar estos
|
||||
términos a sus nuevos programas.</h3>
|
||||
<p>
|
||||
Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso posible
|
||||
para el público en general, la mejor forma de conseguirlo es convirtiéndolo
|
||||
en software libre que cualquiera pueda redistribuir y cambiar bajo estos
|
||||
términos.</p>
|
||||
<p>Para hacerlo, añada los siguientes anuncios al programa. Lo más
|
||||
seguro es añadirlos al principio de cada fichero fuente para transmitir
|
||||
lo más efectivamente posible la ausencia de garantía. Además
|
||||
cada fichero debería tener al menos la línea de «copyright»
|
||||
y un indicador a dónde puede encontrarse el anuncio completo.
|
||||
</p><div><una línea para indicar el nombre
|
||||
del programa y una rápida idea de qué hace.>
|
||||
<p>Copyright (C) 19aa <nombre del autor>
|
||||
</p><p>Este programa es software libre. Puede redistribuirlo y/o modificarlo
|
||||
bajo los términos de la Licencia Pública General de GNU según
|
||||
es publicada por la Free Software Foundation, bien de la versión
|
||||
2 de dicha Licencia o bien (según su elección) de cualquier
|
||||
versión posterior.
|
||||
</p><p>Este programa se distribuye con la esperanza de que sea útil,
|
||||
pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL
|
||||
implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO
|
||||
PARTICULAR. Véase la Licencia Pública General de GNU para
|
||||
más detalles.
|
||||
</p><p>Debería haber recibido una copia de la Licencia Pública
|
||||
General junto con este programa. Si no ha sido así, escriba a la
|
||||
Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.</p></div>
|
||||
<p>
|
||||
Añada también información sobre cómo contactar
|
||||
con usted mediante correo electrónico y postal.</p>
|
||||
<p>Si el programa es interactivo, haga que muestre un pequeño anuncio
|
||||
como el siguiente, cuando comienza a funcionar en modo interactivo:
|
||||
</p><div>Gnomovision versión 69, Copyright
|
||||
(C) 19aa nombre del autor
|
||||
<p>Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para más
|
||||
detalles escriba «show w».</p></div>
|
||||
<p>
|
||||
Los comandos hipotéticos «show w» y «show c»
|
||||
deberían mostrar las partes adecuadas de la Licencia Pública
|
||||
General. Por supuesto, los comandos que use pueden llamarse de cualquier
|
||||
otra manera. Podrían incluso ser pulsaciones del ratón o
|
||||
elementos de un menú (lo que sea apropiado para su programa).</p>
|
||||
<p>También deberías conseguir que su empleador (si trabaja
|
||||
como programador) o tu Universidad (si es el caso) firme un «renuncia
|
||||
de copyright» para el programa, si es necesario. A continuación
|
||||
se ofrece un ejemplo, altere los nombres según sea conveniente:
|
||||
</p>
|
||||
<div style="margin-left: 30px;">
|
||||
Yoyodyne, Inc. mediante este documento renuncia
|
||||
a cualquier interés de derechos de copyright con respecto al programa
|
||||
Gnomovision (que hace pasadas a compiladores) escrito por Pepe Programador.
|
||||
<p><firma de Pepito Grillo>, 20 de diciembre de 1996
|
||||
</p><p>Pepito Grillo, Presidente de Asuntillos Varios.</p>
|
||||
</div>
|
||||
<p>
|
||||
Esta Licencia Pública General no permite que incluya sus programas
|
||||
en programas propietarios. Si su programa es una biblioteca de subrutinas,
|
||||
puede considerar más útil el permitir el enlazado de aplicaciones
|
||||
propietarias con la biblioteca. Si este es el caso, use la Licencia Pública
|
||||
General de GNU para Bibliotecas en lugar de esta Licencia.</p>
|
||||
|
||||
</body></html>
|
||||
<h3>
|
||||
<a name="APPENDIX">Apéndice</a>: Cómo aplicar estos
|
||||
términos a sus nuevos programas.
|
||||
</h3>
|
||||
<p>
|
||||
Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso
|
||||
posible para el público en general, la mejor forma de conseguirlo
|
||||
es convirtiéndolo en software libre que cualquiera pueda
|
||||
redistribuir y cambiar bajo estos términos.
|
||||
</p>
|
||||
<p>
|
||||
Para hacerlo, añada los siguientes anuncios al programa. Lo
|
||||
más seguro es añadirlos al principio de cada fichero fuente
|
||||
para transmitir lo más efectivamente posible la ausencia de
|
||||
garantía. Además cada fichero debería tener al menos
|
||||
la línea de «copyright» y un indicador a dónde
|
||||
puede encontrarse el anuncio completo.
|
||||
</p>
|
||||
<div>
|
||||
<una línea para indicar el nombre del programa y una
|
||||
rápida idea de qué hace.>
|
||||
<p>Copyright (C) 19aa <nombre del autor></p>
|
||||
<p>
|
||||
Este programa es software libre. Puede redistribuirlo y/o modificarlo
|
||||
bajo los términos de la Licencia Pública General de GNU
|
||||
según es publicada por la Free Software Foundation, bien de la
|
||||
versión 2 de dicha Licencia o bien (según su
|
||||
elección) de cualquier versión posterior.
|
||||
</p>
|
||||
<p>
|
||||
Este programa se distribuye con la esperanza de que sea útil,
|
||||
pero SIN NINGUNA GARANTÍA, incluso sin la garantía
|
||||
MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
|
||||
PROPÓSITO PARTICULAR. Véase la Licencia Pública
|
||||
General de GNU para más detalles.
|
||||
</p>
|
||||
<p>
|
||||
Debería haber recibido una copia de la Licencia Pública
|
||||
General junto con este programa. Si no ha sido así, escriba a la
|
||||
Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139,
|
||||
EEUU.
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
Añada también información sobre cómo contactar
|
||||
con usted mediante correo electrónico y postal.
|
||||
</p>
|
||||
<p>
|
||||
Si el programa es interactivo, haga que muestre un pequeño anuncio
|
||||
como el siguiente, cuando comienza a funcionar en modo interactivo:
|
||||
</p>
|
||||
<div>
|
||||
Gnomovision versión 69, Copyright (C) 19aa nombre del autor
|
||||
<p>
|
||||
Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para
|
||||
más detalles escriba «show w».
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
Los comandos hipotéticos «show w» y «show
|
||||
c» deberían mostrar las partes adecuadas de la Licencia
|
||||
Pública General. Por supuesto, los comandos que use pueden llamarse
|
||||
de cualquier otra manera. Podrían incluso ser pulsaciones del
|
||||
ratón o elementos de un menú (lo que sea apropiado para su
|
||||
programa).
|
||||
</p>
|
||||
<p>
|
||||
También deberías conseguir que su empleador (si trabaja como
|
||||
programador) o tu Universidad (si es el caso) firme un «renuncia de
|
||||
copyright» para el programa, si es necesario. A continuación
|
||||
se ofrece un ejemplo, altere los nombres según sea conveniente:
|
||||
</p>
|
||||
<div style="margin-left: 30px;">
|
||||
Yoyodyne, Inc. mediante este documento renuncia a cualquier interés
|
||||
de derechos de copyright con respecto al programa Gnomovision (que hace
|
||||
pasadas a compiladores) escrito por Pepe Programador.
|
||||
<p><firma de Pepito Grillo>, 20 de diciembre de 1996</p>
|
||||
<p>Pepito Grillo, Presidente de Asuntillos Varios.</p>
|
||||
</div>
|
||||
<p>
|
||||
Esta Licencia Pública General no permite que incluya sus programas
|
||||
en programas propietarios. Si su programa es una biblioteca de subrutinas,
|
||||
puede considerar más útil el permitir el enlazado de
|
||||
aplicaciones propietarias con la biblioteca. Si este es el caso, use la
|
||||
Licencia Pública General de GNU para Bibliotecas en lugar de esta
|
||||
Licencia.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,348 +1,460 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Llicència Pública General de GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<head>
|
||||
<title>Llicència Pública General de GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Llicència Pública General de GNU</h2>
|
||||
|
||||
<h2>Llicència Pública General de GNU</h2>
|
||||
<h3>Advertiment</h3>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
Catalan. It was not published by the Free Software Foundation, and does not
|
||||
legally state the distribution terms for software that uses the GNU
|
||||
GPL--only the original English text of the GNU GPL does that. However, we
|
||||
hope that this translation will help Catalan speakers understand the GNU GPL
|
||||
better
|
||||
<p>
|
||||
Ve't aquí una traducció no oficial al català de la
|
||||
llicència pública general (GPL) de GNU. No ha estat
|
||||
publicada per la Free Software Foundation (fundació per al
|
||||
programari lliure), i no defineix legalment els termes de
|
||||
distribució del programari que utilitza la GPL de GNU --
|
||||
només el text original en anglès ho fa. Tot i això,
|
||||
esperem que aquesta traducció ajudi els catalanoparlants a entendre
|
||||
millor la GPL de GNU.
|
||||
</p>
|
||||
|
||||
<h3>Advertiment</h3>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
Catalan. It was not published by the Free Software Foundation, and does
|
||||
not legally state the distribution terms for software that uses the GNU
|
||||
GPL--only the original English text of the GNU GPL does that. However,
|
||||
we hope that this translation will help Catalan speakers understand the
|
||||
GNU GPL better
|
||||
<p>Ve't aquí una traducció no oficial al català de
|
||||
la llicència pública general (GPL) de GNU. No ha estat publicada
|
||||
per la Free Software Foundation (fundació per al programari lliure),
|
||||
i no defineix legalment els termes de distribució del programari
|
||||
que utilitza la GPL de GNU -- només el text original en anglès
|
||||
ho fa. Tot i això, esperem que aquesta traducció ajudi els
|
||||
catalanoparlants a entendre millor la GPL de GNU.</p>
|
||||
<h3>Índex</h3>
|
||||
|
||||
<h3>Índex</h3>
|
||||
<p></p>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>
|
||||
<a name="TOC1" href="#SEC1" name="TOC1"
|
||||
>LLICÈNCIA PÚBLICA GENERAL DE GNU</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a NAME="TOC1" HREF="#SEC1" NAME="TOC1">LLICÈNCIA
|
||||
PÚBLICA GENERAL DE GNU</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a name="TOC2" href="#SEC2" name="TOC2">Preàmbul</a></li>
|
||||
<li>
|
||||
<a name="TOC3" href="#SEC3" name="TOC3"
|
||||
>TERMES I CONDICIONS PER A LA CÒPIA, DISTRIBUCIÓ I
|
||||
MODIFICACIÓ</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a name="TOC4" href="#SEC4" name="TOC4"
|
||||
>Com podeu aplicar aquests termes als vostres programes nous</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a NAME="TOC2" HREF="#SEC2" NAME="TOC2">Preàmbul</a></li>
|
||||
<li>
|
||||
<a NAME="TOC3" HREF="#SEC3" NAME="TOC3">TERMES I CONDICIONS PER A LA CÒPIA, DISTRIBUCIÓ I MODIFICACIÓ</a></li>
|
||||
<li>
|
||||
<a NAME="TOC4" HREF="#SEC4" NAME="TOC4">Com
|
||||
podeu aplicar aquests termes als vostres programes nous</a></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h2>
|
||||
<a NAME="SEC1" HREF="gpl-cat.html#TOC1"></a><a NAME="SEC1" href="http://www.fsf.org/copyleft/gpl-cat.html#TOC1"></a><a NAME="SEC1" href="http://www.fsf.org/copyleft/gpl-cat.html#TOC1"></a><a href="http://www.fsf.org/copyleft/gpl-cat.html#TOC1" NAME="SEC1">LLICÈNCIA
|
||||
PÚBLICA GENERAL DE GNU</a></h2>
|
||||
Versió 2, Juny de 1991
|
||||
<pre>Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
<hr />
|
||||
<h2>
|
||||
<a name="SEC1" href="gpl-cat.html#TOC1"></a
|
||||
><a name="SEC1" href="http://www.fsf.org/copyleft/gpl-cat.html#TOC1"></a
|
||||
><a name="SEC1" href="http://www.fsf.org/copyleft/gpl-cat.html#TOC1"></a
|
||||
><a href="http://www.fsf.org/copyleft/gpl-cat.html#TOC1" name="SEC1"
|
||||
>LLICÈNCIA PÚBLICA GENERAL DE GNU</a
|
||||
>
|
||||
</h2>
|
||||
Versió 2, Juny de 1991
|
||||
<pre>
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
Es permet que tothom faci còpies literals d'aquest document de
|
||||
llicència i les distribueixi, però no és permès modificar-lo.
|
||||
</pre>
|
||||
</pre
|
||||
>
|
||||
|
||||
<h3><a NAME="SEC2" HREF="#TOC2" NAME="SEC2">Preàmbul</a></h3>
|
||||
Les llicències de la major part de programari estan pensades per
|
||||
prendre-us la llibertat de compartir-lo i modificar-lo. Contràriament,
|
||||
la Llicència pública general de GNU pretén garantir-vos
|
||||
la llibertat de compartir i modificar el programari lliure -- assegurar-se
|
||||
que el programari sigui lliure per a tots els seus usuaris i usuàries.
|
||||
Aquesta Llicència pública general de GNU afecta la majoria
|
||||
del programari de la Free Software Foundation (fundació pel programari
|
||||
lliure) i a qualsevol altre programa els autors o autores del qual decideixin
|
||||
usar-la (algun altre programari de la Free Software Foundation, en canvi,
|
||||
està protegit per la Llicència pública general per
|
||||
a biblioteques de GNU [NdeT: aquesta llicència, la LGPL, és
|
||||
la que actualment la FSF anomena Llicència pública menys
|
||||
general]). També podeu aplicar-la als vostres programes.
|
||||
<p>Quan parlem de programari lliure (free software) ens referim a la llibertat,
|
||||
no al preu [NdeT: en català no hi ha l'ambigüitat que hi ha
|
||||
en anglès]. Les nostres llicències públiques generals
|
||||
estan pensades per assegurar que tingueu la llibertat de distribuir còpies
|
||||
del programari lliure (i cobrar per aquest servei si així ho voleu),
|
||||
que rebeu el codi font o que el pugueu rebre si el voleu, que pugueu modificar
|
||||
el programari o fer-ne servir parts en programes lliures nous; i que sapigueu</p>
|
||||
que podeu fer aquestes coses.
|
||||
<p>Per protegir els vostres drets, hem d'imposar restriccions que prohibeixin
|
||||
a tothom denegar-vos aquests drets o demanar-vos que hi renuncieu. Aquestes
|
||||
restriccions suposen algunes responsabilitats per a vós si distribuïu
|
||||
còpies del programari o si el modifiqueu.</p>
|
||||
<p>Per exemple, si distribuïu còpies d'un aquests programes,
|
||||
tant si és de franc com per un preu, heu de donar als destinataris
|
||||
els mateixos drets que teniu vós. Us heu d'assegurar que també
|
||||
ells rebin o puguin obtenir el codi font. I els heu de fer saber aquests
|
||||
termes per tal que coneguin els seus drets.</p>
|
||||
<p>Protegim els vostres drets en dos passos: (1) Ens reservem el copyright
|
||||
del programari, i (2) us oferim aquesta llicència que us dóna
|
||||
permís legal per copiar, distribuir i/o modificar el programari.</p>
|
||||
<p>A més a més, per protegir-nos i protegir l'autor o autora,
|
||||
volem estar segurs que tothom entén que no hi ha cap garantia per
|
||||
a aquest programari lliure. Si algú modifica el programari i el
|
||||
passa, volem que els destinataris sàpiguen que el que tenen no és
|
||||
l'original, per tal que qualsevol problema que haguessin pogut introduir
|
||||
terceres persones no repercuteixi en la reputació de l'autor o autora
|
||||
original.</p>
|
||||
<p>Finalment, qualsevol programa lliure està constantment amenaçat
|
||||
per les patents de programari. Volem evitar el perill de que els redistribuïdors
|
||||
d'un programa lliure acabin obtenint llicències de patents, i de
|
||||
resultes el programa esdevingui propietat exclusiva d'algú. Per
|
||||
evitar-ho, he deixat clar que de qualsevol patent se n'han d'emetre llicències
|
||||
per a tothom o no emetre'n cap.</p>
|
||||
<p>Les condicions exactes per a la còpia, distribució i modificació
|
||||
són les següents.</p>
|
||||
<h3><a name="SEC2" href="#TOC2" name="SEC2">Preàmbul</a></h3>
|
||||
Les llicències de la major part de programari estan pensades per
|
||||
prendre-us la llibertat de compartir-lo i modificar-lo.
|
||||
Contràriament, la Llicència pública general de GNU
|
||||
pretén garantir-vos la llibertat de compartir i modificar el
|
||||
programari lliure -- assegurar-se que el programari sigui lliure per a tots
|
||||
els seus usuaris i usuàries. Aquesta Llicència pública
|
||||
general de GNU afecta la majoria del programari de la Free Software
|
||||
Foundation (fundació pel programari lliure) i a qualsevol altre
|
||||
programa els autors o autores del qual decideixin usar-la (algun altre
|
||||
programari de la Free Software Foundation, en canvi, està protegit
|
||||
per la Llicència pública general per a biblioteques de GNU
|
||||
[NdeT: aquesta llicència, la LGPL, és la que actualment la FSF
|
||||
anomena Llicència pública menys general]). També podeu
|
||||
aplicar-la als vostres programes.
|
||||
<p>
|
||||
Quan parlem de programari lliure (free software) ens referim a la
|
||||
llibertat, no al preu [NdeT: en català no hi ha l'ambigüitat
|
||||
que hi ha en anglès]. Les nostres llicències
|
||||
públiques generals estan pensades per assegurar que tingueu la
|
||||
llibertat de distribuir còpies del programari lliure (i cobrar per
|
||||
aquest servei si així ho voleu), que rebeu el codi font o que el
|
||||
pugueu rebre si el voleu, que pugueu modificar el programari o fer-ne
|
||||
servir parts en programes lliures nous; i que sapigueu
|
||||
</p>
|
||||
que podeu fer aquestes coses.
|
||||
<p>
|
||||
Per protegir els vostres drets, hem d'imposar restriccions que prohibeixin
|
||||
a tothom denegar-vos aquests drets o demanar-vos que hi renuncieu.
|
||||
Aquestes restriccions suposen algunes responsabilitats per a vós si
|
||||
distribuïu còpies del programari o si el modifiqueu.
|
||||
</p>
|
||||
<p>
|
||||
Per exemple, si distribuïu còpies d'un aquests programes, tant
|
||||
si és de franc com per un preu, heu de donar als destinataris els
|
||||
mateixos drets que teniu vós. Us heu d'assegurar que també
|
||||
ells rebin o puguin obtenir el codi font. I els heu de fer saber aquests
|
||||
termes per tal que coneguin els seus drets.
|
||||
</p>
|
||||
<p>
|
||||
Protegim els vostres drets en dos passos: (1) Ens reservem el copyright
|
||||
del programari, i (2) us oferim aquesta llicència que us
|
||||
dóna permís legal per copiar, distribuir i/o modificar el
|
||||
programari.
|
||||
</p>
|
||||
<p>
|
||||
A més a més, per protegir-nos i protegir l'autor o autora,
|
||||
volem estar segurs que tothom entén que no hi ha cap garantia per a
|
||||
aquest programari lliure. Si algú modifica el programari i el
|
||||
passa, volem que els destinataris sàpiguen que el que tenen no
|
||||
és l'original, per tal que qualsevol problema que haguessin pogut
|
||||
introduir terceres persones no repercuteixi en la reputació de
|
||||
l'autor o autora original.
|
||||
</p>
|
||||
<p>
|
||||
Finalment, qualsevol programa lliure està constantment
|
||||
amenaçat per les patents de programari. Volem evitar el perill de
|
||||
que els redistribuïdors d'un programa lliure acabin obtenint
|
||||
llicències de patents, i de resultes el programa esdevingui
|
||||
propietat exclusiva d'algú. Per evitar-ho, he deixat clar que de
|
||||
qualsevol patent se n'han d'emetre llicències per a tothom o no
|
||||
emetre'n cap.
|
||||
</p>
|
||||
<p>
|
||||
Les condicions exactes per a la còpia, distribució i
|
||||
modificació són les següents.
|
||||
</p>
|
||||
|
||||
<h3><a NAME="SEC3" HREF="#TOC3" NAME="SEC3">TERMES
|
||||
I CONDICIONS PER A LA CÒPIA, DISTRIBUCIÓ I MODIFICACIÓ</a></h3>
|
||||
<h3>
|
||||
<a name="SEC3" href="#TOC3" name="SEC3"
|
||||
>TERMES I CONDICIONS PER A LA CÒPIA, DISTRIBUCIÓ I
|
||||
MODIFICACIÓ</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
<b>0.</b> Aquesta llicència afecta a qualsevol programa o altra
|
||||
obra que contingui un avís del posseïdor del copyright que
|
||||
digui que es pot distribuir sota els termes d'aquesta llicència
|
||||
pública general. D'ara endavant, el "programa" es refereix a aquest
|
||||
programa o obra, i una "obra basada en el programa" voldrà dir el
|
||||
programa o qualsevol obra derivada segons la llei de copyright: és
|
||||
a dir una obra que contingui el programa o alguna part d'ell, ja sigui
|
||||
literalment o amb modificacions o bé traduït a altres llengües.
|
||||
(Per això mateix, les traduccions s'inclouen sense cap limitació
|
||||
en el terme "modificació"). Ens referim a Cada beneficiari de la
|
||||
llicència com a "vós".</p>
|
||||
<p>Les activitats que no siguin còpia, distribució o modificació
|
||||
no estan contemplades en aquesta llicència, queden fora del seu
|
||||
àmbit. No es restringeix l'acte d'executar el programa, i la sortida
|
||||
del programa queda contemplada només si el seu contingut constitueix
|
||||
una obra basada en el programa (independentment de que s'hagi creat executant
|
||||
el programa). Que aquest sigui el cas o no depèn de què faci
|
||||
el programa.</p>
|
||||
<p><b>1.</b> Podeu copiar i distribuir còpies literals del codi
|
||||
font del programa tal i com el rebeu, en qualsevol mitjà, sempre
|
||||
i quan publiqueu en cada còpia, de manera adient i ben visible,
|
||||
una nota de copyright i una renúncia de garantia; manteniu intactes
|
||||
tots els avisos que fan referència a aquesta llicència i
|
||||
a l'absència de garanties de cap mena; i lliureu a qualsevol altre
|
||||
destinatari del programa una còpia d'aquesta llicència juntament
|
||||
amb el programa.</p>
|
||||
<p>Podeu cobrar un preu per l'acte físic de trametre una còpia
|
||||
i podeu, si així ho voleu, oferir alguna garantia a canvi d'un preu.</p>
|
||||
<p><b>2.</b> Podeu modificar la còpia o còpies del programa
|
||||
o qualsevol tros, tot fornint una obra basada en el programa, i podeu copiar
|
||||
i distribuir aquestes modificacions o obres sota els termes de la Secció
|
||||
1 anterior, sempre i quan també compliu les següents condicions:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>a)</b> Heu de fer que els fitxers modificats portin indicacions ben
|
||||
visibles que diguin que heu modificat els fitxers i la data de la modificació.</li>
|
||||
<p>
|
||||
<b>0.</b> Aquesta llicència afecta a qualsevol programa o altra
|
||||
obra que contingui un avís del posseïdor del copyright que
|
||||
digui que es pot distribuir sota els termes d'aquesta llicència
|
||||
pública general. D'ara endavant, el "programa" es refereix a aquest
|
||||
programa o obra, i una "obra basada en el programa" voldrà dir el
|
||||
programa o qualsevol obra derivada segons la llei de copyright: és
|
||||
a dir una obra que contingui el programa o alguna part d'ell, ja sigui
|
||||
literalment o amb modificacions o bé traduït a altres
|
||||
llengües. (Per això mateix, les traduccions s'inclouen sense
|
||||
cap limitació en el terme "modificació"). Ens referim a Cada
|
||||
beneficiari de la llicència com a "vós".
|
||||
</p>
|
||||
<p>
|
||||
Les activitats que no siguin còpia, distribució o
|
||||
modificació no estan contemplades en aquesta llicència,
|
||||
queden fora del seu àmbit. No es restringeix l'acte d'executar el
|
||||
programa, i la sortida del programa queda contemplada només si el
|
||||
seu contingut constitueix una obra basada en el programa (independentment
|
||||
de que s'hagi creat executant el programa). Que aquest sigui el cas o no
|
||||
depèn de què faci el programa.
|
||||
</p>
|
||||
<p>
|
||||
<b>1.</b> Podeu copiar i distribuir còpies literals del codi font
|
||||
del programa tal i com el rebeu, en qualsevol mitjà, sempre i quan
|
||||
publiqueu en cada còpia, de manera adient i ben visible, una nota
|
||||
de copyright i una renúncia de garantia; manteniu intactes tots els
|
||||
avisos que fan referència a aquesta llicència i a
|
||||
l'absència de garanties de cap mena; i lliureu a qualsevol altre
|
||||
destinatari del programa una còpia d'aquesta llicència
|
||||
juntament amb el programa.
|
||||
</p>
|
||||
<p>
|
||||
Podeu cobrar un preu per l'acte físic de trametre una còpia
|
||||
i podeu, si així ho voleu, oferir alguna garantia a canvi d'un
|
||||
preu.
|
||||
</p>
|
||||
<p>
|
||||
<b>2.</b> Podeu modificar la còpia o còpies del programa o
|
||||
qualsevol tros, tot fornint una obra basada en el programa, i podeu copiar
|
||||
i distribuir aquestes modificacions o obres sota els termes de la
|
||||
Secció 1 anterior, sempre i quan també compliu les
|
||||
següents condicions:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>a)</b> Heu de fer que els fitxers modificats portin indicacions ben
|
||||
visibles que diguin que heu modificat els fitxers i la data de la
|
||||
modificació.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<b>b)</b> Heu d'atorgar gratuïtament a totes les terceres parts els
|
||||
termes d'aquesta mateixa llicència sobre la totalitat de qualsevol
|
||||
obra que distribuïu o publiqueu, que completament o en part contingui
|
||||
o sigui un derivat del programa o qualsevol part d'aquest.</li>
|
||||
<li>
|
||||
<b>b)</b> Heu d'atorgar gratuïtament a totes les terceres parts els
|
||||
termes d'aquesta mateixa llicència sobre la totalitat de
|
||||
qualsevol obra que distribuïu o publiqueu, que completament o en
|
||||
part contingui o sigui un derivat del programa o qualsevol part
|
||||
d'aquest.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<b>c)</b> Si el programa modificat normalment llegeix instruccions interactivament
|
||||
quan s'executa, heu de fer que quan s'arrenqui per a aquest ús interactiu
|
||||
de la manera més habitual, imprimeixi o mostri un missatge que inclogui
|
||||
una nota de copyright adient i un avís de que no hi ha garantia
|
||||
(o, si de cas, que digui que la garantia l'oferiu vós mateix) i
|
||||
que els usuaris poden redistribuir el programa sota aquestes condicions,
|
||||
i que indiqui a l'usuari o usuària com veure una còpia d'aquesta
|
||||
llicència. (Excepció: si el mateix programa és interactiu
|
||||
però normalment no escriu un missatge d'aquesta mena, la vostra
|
||||
obra basada en el programa tampoc cal que l'escrigui).</li>
|
||||
</ul>
|
||||
<p>
|
||||
Aquests requeriments afecten a l'obra modificada com un tot. Si hi ha parts
|
||||
identificables que no estan derivades del programa, i es poden considerar
|
||||
raonablement com a obres independents i separades en si mateixes, aleshores
|
||||
aquesta llicència i els seus termes no s'apliquen a aquelles parts
|
||||
quan les distribuïu com a obres separades. Però quan distribuïu
|
||||
aquestes mateixes parts integrades en un tot que sigui una obra basada
|
||||
en el programa, la distribució del tot s'ha de fer d'acord amb els
|
||||
termes d'aquesta llicència, i els permisos atorgats a altres beneficiaris
|
||||
abasten el tot sencer i, per tant, totes i cadascuna de les parts, independentment
|
||||
de qui les hagi escrites..
|
||||
<p>Així doncs, la intenció d'aquesta secció no és
|
||||
reclamar o disputar-vos cap dret a codi que hagueu escrit del tot vós
|
||||
mateix. La intenció és més aviat exercir el dret a
|
||||
controlar la distribució d'obres derivades o col·lectives
|
||||
basades en el programa.</p>
|
||||
<p>A més a més, la simple agregació amb el programa
|
||||
(o amb una obra basada en el programa) d'altres obres no basades en el
|
||||
programa en un volum d'un mitjà d'emmagatzemament o de distribució
|
||||
no posa aquestes altres obres sota l'àmbit de la llicència.</p>
|
||||
<p><b>3.</b> Podeu copiar i distribuir el programa (o una obra basada en
|
||||
el programa, segons la secció 2) en forma executable o de codi objecte
|
||||
d'acord amb els termes de les Seccions 1 i 2 anteriors, sempre i quan també
|
||||
feu una de les coses següents: <!-- we use this doubled UL to get the sub-sections indented, --><!-- while making the bullets as unobvious as
|
||||
possible. --></p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>a)</b> L'acompanyeu amb el codi font complet corresponent, capaç
|
||||
de ser llegit per un ordinador i en un mitjà utilitzat habitualment
|
||||
per a l'intercanvi de programari; o</li>
|
||||
<li>
|
||||
<b>c)</b> Si el programa modificat normalment llegeix instruccions
|
||||
interactivament quan s'executa, heu de fer que quan s'arrenqui per a
|
||||
aquest ús interactiu de la manera més habitual, imprimeixi
|
||||
o mostri un missatge que inclogui una nota de copyright adient i un
|
||||
avís de que no hi ha garantia (o, si de cas, que digui que la
|
||||
garantia l'oferiu vós mateix) i que els usuaris poden
|
||||
redistribuir el programa sota aquestes condicions, i que indiqui a
|
||||
l'usuari o usuària com veure una còpia d'aquesta
|
||||
llicència. (Excepció: si el mateix programa és
|
||||
interactiu però normalment no escriu un missatge d'aquesta mena,
|
||||
la vostra obra basada en el programa tampoc cal que l'escrigui).
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Aquests requeriments afecten a l'obra modificada com un tot. Si hi ha
|
||||
parts identificables que no estan derivades del programa, i es poden
|
||||
considerar raonablement com a obres independents i separades en si
|
||||
mateixes, aleshores aquesta llicència i els seus termes no
|
||||
s'apliquen a aquelles parts quan les distribuïu com a obres
|
||||
separades. Però quan distribuïu aquestes mateixes parts
|
||||
integrades en un tot que sigui una obra basada en el programa, la
|
||||
distribució del tot s'ha de fer d'acord amb els termes d'aquesta
|
||||
llicència, i els permisos atorgats a altres beneficiaris abasten el
|
||||
tot sencer i, per tant, totes i cadascuna de les parts, independentment de
|
||||
qui les hagi escrites..
|
||||
</p>
|
||||
|
||||
<li>
|
||||
<b>b)</b> L'acompanyeu amb un oferiment per escrit, amb validesa com a
|
||||
mínim fins al cap de tres anys, de subministrar a tota tercera part,
|
||||
i per un preu no superior al que us costi físicament realitzar la
|
||||
distribució, el codi font complet corresponent, que es distribuirà
|
||||
d'acord amb els termes de les seccions 1 i 2 anteriors en un mitjà
|
||||
utilitzat habitualment per a l'intercanvi de programari; o,</li>
|
||||
<p>
|
||||
Així doncs, la intenció d'aquesta secció no és
|
||||
reclamar o disputar-vos cap dret a codi que hagueu escrit del tot
|
||||
vós mateix. La intenció és més aviat exercir
|
||||
el dret a controlar la distribució d'obres derivades o
|
||||
col·lectives basades en el programa.
|
||||
</p>
|
||||
<p>
|
||||
A més a més, la simple agregació amb el programa (o
|
||||
amb una obra basada en el programa) d'altres obres no basades en el
|
||||
programa en un volum d'un mitjà d'emmagatzemament o de
|
||||
distribució no posa aquestes altres obres sota l'àmbit de la
|
||||
llicència.
|
||||
</p>
|
||||
<p>
|
||||
<b>3.</b> Podeu copiar i distribuir el programa (o una obra basada en el
|
||||
programa, segons la secció 2) en forma executable o de codi objecte
|
||||
d'acord amb els termes de les Seccions 1 i 2 anteriors, sempre i quan
|
||||
també feu una de les coses següents: <!-- we use this doubled UL to get the sub-sections indented, --><!-- while making the bullets as unobvious as
|
||||
possible. -->
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>a)</b> L'acompanyeu amb el codi font complet corresponent,
|
||||
capaç de ser llegit per un ordinador i en un mitjà
|
||||
utilitzat habitualment per a l'intercanvi de programari; o
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<b>c)</b> L'acompanyeu amb la informació que hagueu rebut de l'oferiment
|
||||
de distribuir el codi font corresponent (Aquesta alternativa només
|
||||
és permesa per a la distribució no comercial i només
|
||||
si heu rebut el programa en forma executable o de codi objecte amb aquest
|
||||
oferiment, d'acord amb la subsecció b anterior).</li>
|
||||
</ul>
|
||||
El codi font per a una obra vol dir la forma preferida de l'obra per tal
|
||||
de fer-hi modificacions. Per una obra executable, el codi font complet
|
||||
vol dir tot el codi font per tots els mòduls que conté, més
|
||||
tots els fitxers de definició d'interfícies associats si
|
||||
s'escau, més els <i>scripts</i> que es facin servir per controlar
|
||||
la compilació i la instal·lació de l'executable si
|
||||
s'escau. Tanmateix, fent una excepció especial, el codi font que
|
||||
es distribueixi no cal que inclogui res del que normalment es distribueixi
|
||||
(sia en forma binària o de codi font) amb els components principals
|
||||
(compilador, nucli o similars) del sistema operatiu en què s'executa
|
||||
el programa, tret que el component en qüestió acompanyi l'executable.
|
||||
<p>Si la distribució de l'executable consisteix en donar accés
|
||||
per copiar-lo d'un lloc determinat, aleshores serveix com a distribució
|
||||
del codi font el fet de donar un accés equivalent per copiar el
|
||||
codi font, encara que les terceres parts no estiguin obligades a copiar
|
||||
el codi font en copiar el codi objecte.</p>
|
||||
<p><b>4.</b> No podeu copiar, modificar, reemetre llicències, o
|
||||
distribuir el programa si no és de la forma expressa que atorga
|
||||
aquesta Llicència. Qualsevol altre intent de copiar, modificar,
|
||||
reemetre llicències, o distribuir el programa és il·lícit
|
||||
i finalitzarà automàticament els drets que hagueu obtingut
|
||||
d'aquesta llicència. Tanmateix, les parts que hagin rebut de vós
|
||||
còpies o drets d'acord amb aquesta llicència no veuran les
|
||||
seves llicències finalitzades mentre segueixin observant-les estrictament.</p>
|
||||
<p><b>5.</b> No esteu obligat a acceptar aquesta llicència, donat
|
||||
que no l'heu signada. Tanmateix, no hi ha cap altra opció que us
|
||||
doni permís per modificar o distribuir el programa o les seves obres
|
||||
derivades. Aquestes accions queden prohibides per la llei si no accepteu
|
||||
aquesta llicència. Així doncs, en modificar o distribuir
|
||||
el programa o les seves obres derivades, esteu indicant que accepteu aquesta
|
||||
llicència per fer-ho, i tots els seus termes i condicions per copiar,
|
||||
distribuir o modificar el programa o obres basades en ell.</p>
|
||||
<p><b>6.</b> Cada cop que distribuïu el programa (o qualsevol obra
|
||||
basada en el programa), el destinatari rep automàticament, de qui
|
||||
va emetre la llicència originàriament, una llicència
|
||||
per copiar, distribuir o modificar el programa sotmesa a aquests termes
|
||||
i condicions. No podeu imposar cap més restricció a l'exercici
|
||||
dels drets que aquí es confereixen. No sou responsable de fer complir
|
||||
aquesta llicència a terceres parts.</p>
|
||||
<p><b>7.</b> Si, a conseqüència d'una decisió judicial,
|
||||
una demanda per infracció d'una patent o per qualsevol altra raó
|
||||
(no exclusivament relacionada amb patents), se us imposen condicions (tant
|
||||
si és per ordre judicial, acord, o el que sigui) que contradiuen
|
||||
les condicions d'aquesta llicència, no quedeu excusat de les condicions
|
||||
d'aquesta llicència. Si no us és possible distribuir de manera
|
||||
que satisfeu alhora les obligacions que us imposa aquesta llicència
|
||||
i qualsevol altra obligació pertinent, aleshores resulta que no
|
||||
podeu distribuir el programa en absolut. Per exemple, si una llicència
|
||||
de patent no permetés redistribuir gratuïtament el programa
|
||||
a aquells que hagin rebut còpies de vós directament o indirecta,
|
||||
aleshores la única manera en què podríeu satisfer
|
||||
tant això com aquesta llicència seria abstenir-vos completament
|
||||
de distribuir el programa.</p>
|
||||
<p>Si qualsevol fragment d'aquesta secció quedés invalidat
|
||||
o no es pogués fer complir en qualsevol circumstància particular,
|
||||
la intenció és que s'apliqui el balanç de la secció,
|
||||
i que s'apliqui la secció en la seva totalitat en altres circumstàncies.</p>
|
||||
<p>El propòsit d'aquesta secció no és induir-vos a
|
||||
infringir cap patent ni cap altre requeriment del dret a la propietat,
|
||||
o a discutir-ne la validesa; l'únic propòsit d'aquesta secció
|
||||
és protegir la integritat del sistema de distribució de programari
|
||||
lliure, que s'implementa amb pràctiques de llicència pública.
|
||||
Molta gent ha fet generoses contribucions a l'ampli ventall de programari
|
||||
distribuït per aquest sistema refiant-se de l'aplicació consistent
|
||||
del sistema; li pertoca a l'autor, autora o donant decidir si vol distribuir
|
||||
programari per algun altre sistema, i un beneficiari de la llicència
|
||||
no pot imposar aquesta opció.</p>
|
||||
<p>Aquesta secció pretén deixar del tot clar el que es considera
|
||||
una conseqüència de la resta de la llicència.</p>
|
||||
<p><b>8.</b> Si hi ha països que restringeixen la distribució
|
||||
o l'ús del programari, ja sigui per patents o per interfícies
|
||||
sota copyright, el posseïdor del copyright original que posi el programa
|
||||
sota aquesta llicència pot afegir limitacions geogràfiques
|
||||
explícites que excloguin aquests països, de manera que la distribució
|
||||
només quedi permesa dintre dels països no exclosos, o entre
|
||||
ells. En tal cas, aquesta llicència incorpora la limitació
|
||||
com si estigués escrita en el text de la llicència.</p>
|
||||
<p><b>9.</b> La Free Software Foundation (Fundació per al programari
|
||||
lliure) pot publicar versions revisades o noves de la llicència
|
||||
pública general de tant en tant. Aquestes versions noves seran semblants
|
||||
en esperit a la versió present, però poden diferir en detalls
|
||||
per tractar nous neguits o problemes.</p>
|
||||
<p>Cada versió rep un número de versió distintiu.
|
||||
Si el programa especifica un número de versió d'aquesta llicència
|
||||
que li és aplicable i "qualsevol versió posterior", teniu
|
||||
l'opció de seguir els termes i condicions de la versió especificada
|
||||
o de qualsevol versió publicada posteriorment per la Free Software
|
||||
Foundation. Si el programa no especifica un número de versió
|
||||
d'aquesta llicència, podeu triar qualsevol versió que hagi
|
||||
publicat la Free Software Foundation en qualsevol data.</p>
|
||||
<p><b>10.</b> Si voleu incorporar parts del programa en altres programes
|
||||
lliures les condicions de distribució dels quals són diferents,
|
||||
escriviu a l'autor per demanar-li permís. Per al programari que
|
||||
està sota copyright de la Free Software Foundation, escriviu a la
|
||||
Free Software Foundation; de vegades fem excepcions per permetre-ho. Prendrem
|
||||
la nostra decisió guiats pels dos objectius de mantenir la condició
|
||||
de lliure de tots els derivats del nostre programari lliure i de promoure
|
||||
la compartició i la reutilització del programari en general.</p>
|
||||
<p><b>ABSÈNCIA DE GARANTIES</b></p>
|
||||
<p><b>11.</b> COM QUE LA LLICÈNCIA DEL PROGRAMA ÉS GRATUÏTA,
|
||||
NO HI HA GARANTIA PER AL PROGRAMA, EN LA MESURA QUE HO PERMETI LA LLEI
|
||||
APLICABLE. EXCEPTE EL QUE ALTRAMENT ES DIGUI PER ESCRIT, ELS POSSEÏDORS
|
||||
DEL COPYRIGHT I/O ALTRES PARTS SUBMINISTREN EL PROGRAMA "TAL QUAL" SENSE
|
||||
CAP MENA DE GARANTIA, NI EXPLÍCITA NI IMPLÍCITA, INCLOSES,
|
||||
ENTRE ALTRES, LES GARANTIES IMPLÍCITES DE COMERCIALITZABILITAT I
|
||||
APTITUD PER A PROPÒSITS DETERMINATS. TOT EL RISC PEL QUE FA A LA
|
||||
QUALITAT I RENDIMENT DEL PROGRAMA ÉS VOSTRE. EN CAS QUE EL PROGRAMA
|
||||
RESULTÉS DEFECTUÓS, VÓS ASSUMIU TOT EL COST D'ASSISTÈNCIA,
|
||||
REPARACIÓ O CORRECCIÓ.</p>
|
||||
<p><b>12.</b> EL POSSEÏDOR DEL COPYRIGHT, O QUALSEVOL ALTRA PART QUE
|
||||
PUGUI MODIFICAR O REDISTRIBUIR EL PROGRAMA TAL I COM ES PERMET MÉS
|
||||
AMUNT NO US HAURÀ DE RESPONDRE EN CAP CAS, TRET DEL QUE REQUEREIXI
|
||||
LA LLEI APLICABLE O ELS ACORDS PER ESCRIT, PER PERJUDICIS, INCLOSOS ELS
|
||||
INCIDENTALS, DERIVATS, ESPECIALS O GENERALS QUE ES DERIVIN DE L'ÚS
|
||||
O DE LA IMPOSSIBILITAT D'ÚS DEL PROGRAMA (INCLOSES ENTRE D'ALTRES
|
||||
LES PÈRDUES DE DADES, LES DADES QUE EL PROGRAMA HAGI MALMÈS,
|
||||
LES PÈRDUES QUE US HAGI PROVOCAT A VÓS O A TERCERS O LA IMPOSSIBILITAT
|
||||
DE QUE EL PROGRAMA FUNCIONI AMB QUALSEVOL ALTRE PROGRAMA), FINS I TOT SI
|
||||
AQUEST POSSEÏDOR O ALTRA PART HA ESTAT ADVERTIDA DE LA POSSIBILITAT
|
||||
D'AQUESTS PERJUDICIS.</p>
|
||||
<h3>FINAL DELS TERMES I CONDICIONS</h3>
|
||||
<li>
|
||||
<b>b)</b> L'acompanyeu amb un oferiment per escrit, amb validesa com a
|
||||
mínim fins al cap de tres anys, de subministrar a tota tercera
|
||||
part, i per un preu no superior al que us costi físicament
|
||||
realitzar la distribució, el codi font complet corresponent, que
|
||||
es distribuirà d'acord amb els termes de les seccions 1 i 2
|
||||
anteriors en un mitjà utilitzat habitualment per a l'intercanvi
|
||||
de programari; o,
|
||||
</li>
|
||||
|
||||
<h3>
|
||||
<a NAME="SEC4" HREF="#TOC4" NAME="SEC4">Com
|
||||
podeu aplicar aquests termes als vostres programes nous</a></h3>
|
||||
Si desenvolupeu un programa nou, i voleu que tingui l'ús més
|
||||
gran possible per part del públic, la millor manera d'aconseguir-ho
|
||||
és fer-lo programari lliure que tothom podrà redistribuir
|
||||
i modificar d'acord amb aquests termes.
|
||||
<p>Per fer-ho, afegiu els avisos següents al programa. El més
|
||||
segur és posar-los al començament de cada fitxer font per
|
||||
transmetre de la manera més efectiva l'exclusió de garanties;
|
||||
i cada fitxer hauria de portar com a mínim la línia de "copyright"
|
||||
i un apuntador que indiqui on es pot trobar la nota sencera.</p>
|
||||
<pre><i>Una línia amb el nom del programa i una idea de què fa.
|
||||
<li>
|
||||
<b>c)</b> L'acompanyeu amb la informació que hagueu rebut de
|
||||
l'oferiment de distribuir el codi font corresponent (Aquesta alternativa
|
||||
només és permesa per a la distribució no comercial
|
||||
i només si heu rebut el programa en forma executable o de codi
|
||||
objecte amb aquest oferiment, d'acord amb la subsecció b
|
||||
anterior).
|
||||
</li>
|
||||
</ul>
|
||||
El codi font per a una obra vol dir la forma preferida de l'obra per tal de
|
||||
fer-hi modificacions. Per una obra executable, el codi font complet vol dir
|
||||
tot el codi font per tots els mòduls que conté, més
|
||||
tots els fitxers de definició d'interfícies associats si
|
||||
s'escau, més els <i>scripts</i> que es facin servir per controlar la
|
||||
compilació i la instal·lació de l'executable si
|
||||
s'escau. Tanmateix, fent una excepció especial, el codi font que es
|
||||
distribueixi no cal que inclogui res del que normalment es distribueixi (sia
|
||||
en forma binària o de codi font) amb els components principals
|
||||
(compilador, nucli o similars) del sistema operatiu en què s'executa
|
||||
el programa, tret que el component en qüestió acompanyi
|
||||
l'executable.
|
||||
<p>
|
||||
Si la distribució de l'executable consisteix en donar accés
|
||||
per copiar-lo d'un lloc determinat, aleshores serveix com a
|
||||
distribució del codi font el fet de donar un accés
|
||||
equivalent per copiar el codi font, encara que les terceres parts no
|
||||
estiguin obligades a copiar el codi font en copiar el codi objecte.
|
||||
</p>
|
||||
<p>
|
||||
<b>4.</b> No podeu copiar, modificar, reemetre llicències, o
|
||||
distribuir el programa si no és de la forma expressa que atorga
|
||||
aquesta Llicència. Qualsevol altre intent de copiar, modificar,
|
||||
reemetre llicències, o distribuir el programa és
|
||||
il·lícit i finalitzarà automàticament els
|
||||
drets que hagueu obtingut d'aquesta llicència. Tanmateix, les parts
|
||||
que hagin rebut de vós còpies o drets d'acord amb aquesta
|
||||
llicència no veuran les seves llicències finalitzades mentre
|
||||
segueixin observant-les estrictament.
|
||||
</p>
|
||||
<p>
|
||||
<b>5.</b> No esteu obligat a acceptar aquesta llicència, donat que
|
||||
no l'heu signada. Tanmateix, no hi ha cap altra opció que us doni
|
||||
permís per modificar o distribuir el programa o les seves obres
|
||||
derivades. Aquestes accions queden prohibides per la llei si no accepteu
|
||||
aquesta llicència. Així doncs, en modificar o distribuir el
|
||||
programa o les seves obres derivades, esteu indicant que accepteu aquesta
|
||||
llicència per fer-ho, i tots els seus termes i condicions per
|
||||
copiar, distribuir o modificar el programa o obres basades en ell.
|
||||
</p>
|
||||
<p>
|
||||
<b>6.</b> Cada cop que distribuïu el programa (o qualsevol obra
|
||||
basada en el programa), el destinatari rep automàticament, de qui
|
||||
va emetre la llicència originàriament, una llicència
|
||||
per copiar, distribuir o modificar el programa sotmesa a aquests termes i
|
||||
condicions. No podeu imposar cap més restricció a l'exercici
|
||||
dels drets que aquí es confereixen. No sou responsable de fer
|
||||
complir aquesta llicència a terceres parts.
|
||||
</p>
|
||||
<p>
|
||||
<b>7.</b> Si, a conseqüència d'una decisió judicial,
|
||||
una demanda per infracció d'una patent o per qualsevol altra
|
||||
raó (no exclusivament relacionada amb patents), se us imposen
|
||||
condicions (tant si és per ordre judicial, acord, o el que sigui)
|
||||
que contradiuen les condicions d'aquesta llicència, no quedeu
|
||||
excusat de les condicions d'aquesta llicència. Si no us és
|
||||
possible distribuir de manera que satisfeu alhora les obligacions que us
|
||||
imposa aquesta llicència i qualsevol altra obligació
|
||||
pertinent, aleshores resulta que no podeu distribuir el programa en
|
||||
absolut. Per exemple, si una llicència de patent no permetés
|
||||
redistribuir gratuïtament el programa a aquells que hagin rebut
|
||||
còpies de vós directament o indirecta, aleshores la
|
||||
única manera en què podríeu satisfer tant això
|
||||
com aquesta llicència seria abstenir-vos completament de distribuir
|
||||
el programa.
|
||||
</p>
|
||||
<p>
|
||||
Si qualsevol fragment d'aquesta secció quedés invalidat o no
|
||||
es pogués fer complir en qualsevol circumstància particular,
|
||||
la intenció és que s'apliqui el balanç de la
|
||||
secció, i que s'apliqui la secció en la seva totalitat en
|
||||
altres circumstàncies.
|
||||
</p>
|
||||
<p>
|
||||
El propòsit d'aquesta secció no és induir-vos a
|
||||
infringir cap patent ni cap altre requeriment del dret a la propietat, o a
|
||||
discutir-ne la validesa; l'únic propòsit d'aquesta
|
||||
secció és protegir la integritat del sistema de
|
||||
distribució de programari lliure, que s'implementa amb
|
||||
pràctiques de llicència pública. Molta gent ha fet
|
||||
generoses contribucions a l'ampli ventall de programari distribuït
|
||||
per aquest sistema refiant-se de l'aplicació consistent del
|
||||
sistema; li pertoca a l'autor, autora o donant decidir si vol distribuir
|
||||
programari per algun altre sistema, i un beneficiari de la
|
||||
llicència no pot imposar aquesta opció.
|
||||
</p>
|
||||
<p>
|
||||
Aquesta secció pretén deixar del tot clar el que es
|
||||
considera una conseqüència de la resta de la llicència.
|
||||
</p>
|
||||
<p>
|
||||
<b>8.</b> Si hi ha països que restringeixen la distribució o
|
||||
l'ús del programari, ja sigui per patents o per interfícies
|
||||
sota copyright, el posseïdor del copyright original que posi el
|
||||
programa sota aquesta llicència pot afegir limitacions
|
||||
geogràfiques explícites que excloguin aquests països,
|
||||
de manera que la distribució només quedi permesa dintre dels
|
||||
països no exclosos, o entre ells. En tal cas, aquesta
|
||||
llicència incorpora la limitació com si estigués
|
||||
escrita en el text de la llicència.
|
||||
</p>
|
||||
<p>
|
||||
<b>9.</b> La Free Software Foundation (Fundació per al programari
|
||||
lliure) pot publicar versions revisades o noves de la llicència
|
||||
pública general de tant en tant. Aquestes versions noves seran
|
||||
semblants en esperit a la versió present, però poden diferir
|
||||
en detalls per tractar nous neguits o problemes.
|
||||
</p>
|
||||
<p>
|
||||
Cada versió rep un número de versió distintiu. Si el
|
||||
programa especifica un número de versió d'aquesta
|
||||
llicència que li és aplicable i "qualsevol versió
|
||||
posterior", teniu l'opció de seguir els termes i condicions de la
|
||||
versió especificada o de qualsevol versió publicada
|
||||
posteriorment per la Free Software Foundation. Si el programa no
|
||||
especifica un número de versió d'aquesta llicència,
|
||||
podeu triar qualsevol versió que hagi publicat la Free Software
|
||||
Foundation en qualsevol data.
|
||||
</p>
|
||||
<p>
|
||||
<b>10.</b> Si voleu incorporar parts del programa en altres programes
|
||||
lliures les condicions de distribució dels quals són
|
||||
diferents, escriviu a l'autor per demanar-li permís. Per al
|
||||
programari que està sota copyright de la Free Software Foundation,
|
||||
escriviu a la Free Software Foundation; de vegades fem excepcions per
|
||||
permetre-ho. Prendrem la nostra decisió guiats pels dos objectius
|
||||
de mantenir la condició de lliure de tots els derivats del nostre
|
||||
programari lliure i de promoure la compartició i la
|
||||
reutilització del programari en general.
|
||||
</p>
|
||||
<p><b>ABSÈNCIA DE GARANTIES</b></p>
|
||||
<p>
|
||||
<b>11.</b> COM QUE LA LLICÈNCIA DEL PROGRAMA ÉS
|
||||
GRATUÏTA, NO HI HA GARANTIA PER AL PROGRAMA, EN LA MESURA QUE HO
|
||||
PERMETI LA LLEI APLICABLE. EXCEPTE EL QUE ALTRAMENT ES DIGUI PER ESCRIT,
|
||||
ELS POSSEÏDORS DEL COPYRIGHT I/O ALTRES PARTS SUBMINISTREN EL
|
||||
PROGRAMA "TAL QUAL" SENSE CAP MENA DE GARANTIA, NI EXPLÍCITA NI
|
||||
IMPLÍCITA, INCLOSES, ENTRE ALTRES, LES GARANTIES IMPLÍCITES
|
||||
DE COMERCIALITZABILITAT I APTITUD PER A PROPÒSITS DETERMINATS. TOT
|
||||
EL RISC PEL QUE FA A LA QUALITAT I RENDIMENT DEL PROGRAMA ÉS
|
||||
VOSTRE. EN CAS QUE EL PROGRAMA RESULTÉS DEFECTUÓS,
|
||||
VÓS ASSUMIU TOT EL COST D'ASSISTÈNCIA, REPARACIÓ O
|
||||
CORRECCIÓ.
|
||||
</p>
|
||||
<p>
|
||||
<b>12.</b> EL POSSEÏDOR DEL COPYRIGHT, O QUALSEVOL ALTRA PART QUE
|
||||
PUGUI MODIFICAR O REDISTRIBUIR EL PROGRAMA TAL I COM ES PERMET MÉS
|
||||
AMUNT NO US HAURÀ DE RESPONDRE EN CAP CAS, TRET DEL QUE REQUEREIXI
|
||||
LA LLEI APLICABLE O ELS ACORDS PER ESCRIT, PER PERJUDICIS, INCLOSOS ELS
|
||||
INCIDENTALS, DERIVATS, ESPECIALS O GENERALS QUE ES DERIVIN DE L'ÚS
|
||||
O DE LA IMPOSSIBILITAT D'ÚS DEL PROGRAMA (INCLOSES ENTRE D'ALTRES
|
||||
LES PÈRDUES DE DADES, LES DADES QUE EL PROGRAMA HAGI MALMÈS,
|
||||
LES PÈRDUES QUE US HAGI PROVOCAT A VÓS O A TERCERS O LA
|
||||
IMPOSSIBILITAT DE QUE EL PROGRAMA FUNCIONI AMB QUALSEVOL ALTRE PROGRAMA),
|
||||
FINS I TOT SI AQUEST POSSEÏDOR O ALTRA PART HA ESTAT ADVERTIDA DE LA
|
||||
POSSIBILITAT D'AQUESTS PERJUDICIS.
|
||||
</p>
|
||||
<h3>FINAL DELS TERMES I CONDICIONS</h3>
|
||||
|
||||
<h3>
|
||||
<a name="SEC4" href="#TOC4" name="SEC4"
|
||||
>Com podeu aplicar aquests termes als vostres programes nous</a
|
||||
>
|
||||
</h3>
|
||||
Si desenvolupeu un programa nou, i voleu que tingui l'ús més
|
||||
gran possible per part del públic, la millor manera d'aconseguir-ho
|
||||
és fer-lo programari lliure que tothom podrà redistribuir i
|
||||
modificar d'acord amb aquests termes.
|
||||
<p>
|
||||
Per fer-ho, afegiu els avisos següents al programa. El més
|
||||
segur és posar-los al començament de cada fitxer font per
|
||||
transmetre de la manera més efectiva l'exclusió de
|
||||
garanties; i cada fitxer hauria de portar com a mínim la
|
||||
línia de "copyright" i un apuntador que indiqui on es pot trobar la
|
||||
nota sencera.
|
||||
</p>
|
||||
<pre><i>Una línia amb el nom del programa i una idea de què fa.
|
||||
</i>Copyright (C) <i>any</i> <i>nom de l'autor o autora
|
||||
|
||||
</i>Aquest programa és lliure; el podeu redistribuir i/o modificar
|
||||
|
@ -360,51 +472,67 @@ la Llicència general pública de GNU per a més detalls. 
|
|||
Hauríeu d'haver rebut una còpia de la llicència pública general
|
||||
de GNU amb aquest programa; si no, escriviu a la Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</pre>
|
||||
Poseu-hi la informació que calgui per contactar amb vós per
|
||||
correu electrònic i de paper.
|
||||
<p>Si el programa és interactiu, feu-lo treure una breu nota com
|
||||
aquesta quan arrenca en mode interactiu:</p>
|
||||
<pre>Gnomovisió versió 69, Copyright (C) <i>any</i> <i>nom de l'autor o autora
|
||||
Poseu-hi la informació que calgui per contactar amb vós per
|
||||
correu electrònic i de paper.
|
||||
<p>
|
||||
Si el programa és interactiu, feu-lo treure una breu nota com
|
||||
aquesta quan arrenca en mode interactiu:
|
||||
</p>
|
||||
<pre>Gnomovisió versió 69, Copyright (C) <i>any</i> <i>nom de l'autor o autora
|
||||
</i>El Gnomovisió va SENSE CAP MENA DE GARANTIA; premeu 'mostra g' per saber-ne
|
||||
els detalls. Això és programari lliure, i se us convida a redistribuir-lo
|
||||
d'acord amb certes condicions; piqueu 'mostra c' per saber-ne els detalls.</pre>
|
||||
<p></p>Les instruccions hipotètiques <tt>'mostra g'</tt> i <tt>'mostra
|
||||
c'</tt> haurien de mostrar les parts escaients de la llicència pública
|
||||
general. Naturalment, les instruccions poden tenir altres noms que no siguin
|
||||
<tt>'mostra
|
||||
g'</tt> i
|
||||
<tt>'mostra c'</tt>; fins i tot podrien ser pics amb el ratolí
|
||||
o opcions de menú, o el que li vagi bé al vostre programa.
|
||||
<p>També hauríeu d'aconseguir que l'empresari per qui treballeu
|
||||
(si treballeu de programador) o la vostra escola, si és el cas,
|
||||
signin una "renúncia de copyright" pel programa, si s'escau. Aquí
|
||||
teniu un exemple, canvieu-hi els noms:</p>
|
||||
<pre>Ioiodina, S.A. , per la present renuncia a tot interès
|
||||
<p></p>
|
||||
Les instruccions hipotètiques <tt>'mostra g'</tt> i
|
||||
<tt>'mostra c'</tt> haurien de mostrar les parts escaients de la
|
||||
llicència pública general. Naturalment, les instruccions poden
|
||||
tenir altres noms que no siguin <tt>'mostra g'</tt> i <tt>'mostra c'</tt>;
|
||||
fins i tot podrien ser pics amb el ratolí o opcions de menú, o
|
||||
el que li vagi bé al vostre programa.
|
||||
<p>
|
||||
També hauríeu d'aconseguir que l'empresari per qui treballeu
|
||||
(si treballeu de programador) o la vostra escola, si és el cas,
|
||||
signin una "renúncia de copyright" pel programa, si s'escau.
|
||||
Aquí teniu un exemple, canvieu-hi els noms:
|
||||
</p>
|
||||
<pre>Ioiodina, S.A. , per la present renuncia a tot interès
|
||||
en el copyright del programa `Gnomovisió' (que fa l'aleta
|
||||
als compiladors) escrit pel Jordi Pica Codi
|
||||
|
||||
<i>signat per Mag Nat</i>, 28 de desembre de 1989
|
||||
Mag Nat, Vici-President</pre>
|
||||
Aquesta Llicència pública general no us permet incorporar
|
||||
el vostre programa en programes de propietat. Si el vostre programa és
|
||||
una biblioteca de subrutines, potser trobeu més útil permetre
|
||||
enllaçar (link) aplicacions de propietat amb la biblioteca. Si és
|
||||
això el que voleu, feu servir la Llicència pública
|
||||
general per a biblioteques de GNU per comptes d'aquesta llicència
|
||||
[NdeT: la FSF ara li diu llicència pública menys general
|
||||
per comptes de llicència pública general per a biblioteques].
|
||||
<hr>Torna a <a href="http://www.fsf.org/home.html">la pàgina principal
|
||||
de GNU</a>.
|
||||
<p>Per preguntes i aclariments de GNU i la FSF escriviu a: <i><a href="mailto:gnu@gnu.org">gnu@gnu.org</a></i>.
|
||||
Altres <a href="http://www.fsf.org/home.html#ContactInfo">maneres de contactar
|
||||
</a>amb
|
||||
la FSF:</p>
|
||||
<p>Envieu comentaris sobre aquestes planes de web a <i><a href="mailto:webmasters@www.gnu.org">webmasters@www.gnu.org</a></i>,
|
||||
Envieu altres preguntes a <i><a href="mailto:gnu@gnu.org">gnu@gnu.org</a></i>.</p>
|
||||
<p>La nota de Copyright és més amunt.</p>
|
||||
<br>Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
MA 02111, USA
|
||||
<p>Actualitzat:<!-- hhmts start -->3 Jan 2000 rms<!-- hhmts end --></p>
|
||||
<hr>
|
||||
</body>
|
||||
</html>
|
||||
Aquesta Llicència pública general no us permet incorporar el
|
||||
vostre programa en programes de propietat. Si el vostre programa és
|
||||
una biblioteca de subrutines, potser trobeu més útil permetre
|
||||
enllaçar (link) aplicacions de propietat amb la biblioteca. Si
|
||||
és això el que voleu, feu servir la Llicència
|
||||
pública general per a biblioteques de GNU per comptes d'aquesta
|
||||
llicència [NdeT: la FSF ara li diu llicència pública
|
||||
menys general per comptes de llicència pública general per a
|
||||
biblioteques].
|
||||
<hr />
|
||||
Torna a
|
||||
<a href="http://www.fsf.org/home.html">la pàgina principal de GNU</a
|
||||
>.
|
||||
<p>
|
||||
Per preguntes i aclariments de GNU i la FSF escriviu a:
|
||||
<i><a href="mailto:gnu@gnu.org">gnu@gnu.org</a></i
|
||||
>. Altres
|
||||
<a href="http://www.fsf.org/home.html#ContactInfo"
|
||||
>maneres de contactar </a
|
||||
>amb la FSF:
|
||||
</p>
|
||||
<p>
|
||||
Envieu comentaris sobre aquestes planes de web a
|
||||
<i><a href="mailto:webmasters@www.gnu.org">webmasters@www.gnu.org</a></i
|
||||
>, Envieu altres preguntes a
|
||||
<i><a href="mailto:gnu@gnu.org">gnu@gnu.org</a></i
|
||||
>.
|
||||
</p>
|
||||
<p>La nota de Copyright és més amunt.</p>
|
||||
<br />Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
MA 02111, USA
|
||||
<p>Actualitzat:<!-- hhmts start -->3 Jan 2000 rms<!-- hhmts end --></p>
|
||||
<hr />
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,364 +1,353 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>GNU General Public License</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>GNU General Public License</h2>
|
||||
<h3>Table of Contents</h3>
|
||||
<ul>
|
||||
<li><a href="#SEC1">GNU GENERAL PUBLIC LICENSE</a></li>
|
||||
<li><a href="#SEC2">Preamble</a></li>
|
||||
<li><a href="#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</a>
|
||||
</ul>
|
||||
<hr />
|
||||
<p></p>
|
||||
<h3><a name="SEC1">GNU GENERAL PUBLIC LICENSE</a></h3>
|
||||
<p>Version 2, June 1991</p>
|
||||
<pre>Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
<html>
|
||||
<head>
|
||||
<title>GNU General Public License</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>GNU General Public License</h2>
|
||||
<h3>Table of Contents</h3>
|
||||
<ul>
|
||||
<li><a href="#SEC1">GNU GENERAL PUBLIC LICENSE</a></li>
|
||||
<li><a href="#SEC2">Preamble</a></li>
|
||||
<li>
|
||||
<a href="#SEC3"
|
||||
>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
<p></p>
|
||||
<h3><a name="SEC1">GNU GENERAL PUBLIC LICENSE</a></h3>
|
||||
<p>Version 2, June 1991</p>
|
||||
<pre>
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.</pre>
|
||||
of this license document, but changing it is not allowed.</pre
|
||||
>
|
||||
|
||||
<h3><a name="SEC2">Preamble</a></h3>
|
||||
<h3><a name="SEC2">Preamble</a></h3>
|
||||
|
||||
<p>
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
</p>
|
||||
<p>
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
</p>
|
||||
<p>
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
</p>
|
||||
<p>
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
</p>
|
||||
<p>
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
</p>
|
||||
<p>
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
</p>
|
||||
<p>
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
</p>
|
||||
<p>
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
</p>
|
||||
<p>
|
||||
The licenses for most software are designed to take away your freedom to
|
||||
share and change it. By contrast, the GNU General Public License is
|
||||
intended to guarantee your freedom to share and change free software--to
|
||||
make sure the software is free for all its users. This General Public
|
||||
License applies to most of the Free Software Foundation's software and to
|
||||
any other program whose authors commit to using it. (Some other Free
|
||||
Software Foundation software is covered by the GNU Library General Public
|
||||
License instead.) You can apply it to your programs, too.
|
||||
</p>
|
||||
<p>
|
||||
When we speak of free software, we are referring to freedom, not price.
|
||||
Our General Public Licenses are designed to make sure that you have the
|
||||
freedom to distribute copies of free software (and charge for this service
|
||||
if you wish), that you receive source code or can get it if you want it,
|
||||
that you can change the software or use pieces of it in new free programs;
|
||||
and that you know you can do these things.
|
||||
</p>
|
||||
<p>
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These
|
||||
restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
</p>
|
||||
<p>
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must give the recipients all the rights that you have. You
|
||||
must make sure that they, too, receive or can get the source code. And you
|
||||
must show them these terms so they know their rights.
|
||||
</p>
|
||||
<p>
|
||||
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||
offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
</p>
|
||||
<p>
|
||||
Also, for each author's protection and ours, we want to make certain that
|
||||
everyone understands that there is no warranty for this free software. If
|
||||
the software is modified by someone else and passed on, we want its
|
||||
recipients to know that what they have is not the original, so that any
|
||||
problems introduced by others will not reflect on the original authors'
|
||||
reputations.
|
||||
</p>
|
||||
<p>
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that redistributors of a free program will
|
||||
individually obtain patent licenses, in effect making the program
|
||||
proprietary. To prevent this, we have made it clear that any patent must
|
||||
be licensed for everyone's free use or not licensed at all.
|
||||
</p>
|
||||
<p>
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
</p>
|
||||
|
||||
<h3><a name="SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</a></h3>
|
||||
<h3>
|
||||
<a name="SEC3"
|
||||
>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
<strong>0.</strong>
|
||||
This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
</p>
|
||||
<p>
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
</p>
|
||||
<p>
|
||||
<strong>1.</strong>
|
||||
You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
</p>
|
||||
<p>
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
</p>
|
||||
<p>
|
||||
<strong>2.</strong>
|
||||
You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
</p>
|
||||
<p></p>
|
||||
<p>
|
||||
<strong>0.</strong> This License applies to any program or other work
|
||||
which contains a notice placed by the copyright holder saying it may be
|
||||
distributed under the terms of this General Public License. The "Program",
|
||||
below, refers to any such program or work, and a "work based on the
|
||||
Program" means either the Program or any derivative work under copyright
|
||||
law: that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in the
|
||||
term "modification".) Each licensee is addressed as "you".
|
||||
</p>
|
||||
<p>
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of running
|
||||
the Program is not restricted, and the output from the Program is covered
|
||||
only if its contents constitute a work based on the Program (independent
|
||||
of having been made by running the Program). Whether that is true depends
|
||||
on what the Program does.
|
||||
</p>
|
||||
<p>
|
||||
<strong>1.</strong> You may copy and distribute verbatim copies of the
|
||||
Program's source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the notices
|
||||
that refer to this License and to the absence of any warranty; and give
|
||||
any other recipients of the Program a copy of this License along with the
|
||||
Program.
|
||||
</p>
|
||||
<p>
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
</p>
|
||||
<p>
|
||||
<strong>2.</strong> You may modify your copy or copies of the Program or
|
||||
any portion of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1 above,
|
||||
provided that you also meet all of these conditions:
|
||||
</p>
|
||||
<p></p>
|
||||
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>a)</strong>
|
||||
You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>b)</strong>
|
||||
You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>c)</strong>
|
||||
If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
</dd>
|
||||
</dl>
|
||||
<p>
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
</p>
|
||||
<p>
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
</p>
|
||||
<p>In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
</p>
|
||||
<p><strong>3.</strong>
|
||||
You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
</p>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>a)</strong>
|
||||
Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
</dd>
|
||||
<dd>
|
||||
<strong>b)</strong>
|
||||
Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>c)</strong>
|
||||
Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
</dd>
|
||||
</dl>
|
||||
<p>
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
</p>
|
||||
<p>
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
</p>
|
||||
<p>
|
||||
<strong>4.</strong>
|
||||
You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
</p>
|
||||
<p>
|
||||
<strong>5.</strong>
|
||||
You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
</p>
|
||||
<p>
|
||||
<strong>6.</strong>
|
||||
Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>7.</strong>
|
||||
If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
</p>
|
||||
<p>
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
</p>
|
||||
<p>
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
</p>
|
||||
<p>
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>8.</strong>
|
||||
If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>9.</strong>
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
</p>
|
||||
<p>
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
</p>
|
||||
<p>
|
||||
<strong>10.</strong>
|
||||
If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
</p>
|
||||
<p>
|
||||
<strong>NO WARRANTY</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>11.</strong>
|
||||
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
</p>
|
||||
<p>
|
||||
<strong>12.</strong>
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
</p>
|
||||
<p></p>
|
||||
<h3>END OF TERMS AND CONDITIONS</h3>
|
||||
</body></html>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>a)</strong> You must cause the modified files to carry prominent
|
||||
notices stating that you changed the files and the date of any change.
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>b)</strong> You must cause any work that you distribute or
|
||||
publish, that in whole or in part contains or is derived from the
|
||||
Program or any part thereof, to be licensed as a whole at no charge to
|
||||
all third parties under the terms of this License.
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>c)</strong> If the modified program normally reads commands
|
||||
interactively when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a notice that
|
||||
there is no warranty (or else, saying that you provide a warranty) and
|
||||
that users may redistribute the program under these conditions, and
|
||||
telling the user how to view a copy of this License. (Exception: if the
|
||||
Program itself is interactive but does not normally print such an
|
||||
announcement, your work based on the Program is not required to print an
|
||||
announcement.)
|
||||
</dd>
|
||||
</dl>
|
||||
<p>
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Program, and can be
|
||||
reasonably considered independent and separate works in themselves, then
|
||||
this License, and its terms, do not apply to those sections when you
|
||||
distribute them as separate works. But when you distribute the same
|
||||
sections as part of a whole which is a work based on the Program, the
|
||||
distribution of the whole must be on the terms of this License, whose
|
||||
permissions for other licensees extend to the entire whole, and thus to
|
||||
each and every part regardless of who wrote it.
|
||||
</p>
|
||||
<p>
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works
|
||||
based on the Program.
|
||||
</p>
|
||||
<p>
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of a
|
||||
storage or distribution medium does not bring the other work under the
|
||||
scope of this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>3.</strong> You may copy and distribute the Program (or a work
|
||||
based on it, under Section 2) in object code or executable form under the
|
||||
terms of Sections 1 and 2 above provided that you also do one of the
|
||||
following:
|
||||
</p>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>a)</strong> Accompany it with the complete corresponding
|
||||
machine-readable source code, which must be distributed under the terms
|
||||
of Sections 1 and 2 above on a medium customarily used for software
|
||||
interchange; or,
|
||||
</dd>
|
||||
<dd>
|
||||
<strong>b)</strong> Accompany it with a written offer, valid for at
|
||||
least three years, to give any third party, for a charge no more than
|
||||
your cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>c)</strong> Accompany it with the information you received as to
|
||||
the offer to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you received the
|
||||
program in object code or executable form with such an offer, in accord
|
||||
with Subsection b above.)
|
||||
</dd>
|
||||
</dl>
|
||||
<p>
|
||||
The source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable work, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the executable. However, as a special exception, the
|
||||
source code distributed need not include anything that is normally
|
||||
distributed (in either source or binary form) with the major components
|
||||
(compiler, kernel, and so on) of the operating system on which the
|
||||
executable runs, unless that component itself accompanies the executable.
|
||||
</p>
|
||||
<p>
|
||||
If distribution of executable or object code is made by offering access to
|
||||
copy from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place counts as distribution of the source code,
|
||||
even though third parties are not compelled to copy the source along with
|
||||
the object code.
|
||||
</p>
|
||||
<p>
|
||||
<strong>4.</strong> You may not copy, modify, sublicense, or distribute
|
||||
the Program except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is void,
|
||||
and will automatically terminate your rights under this License. However,
|
||||
parties who have received copies, or rights, from you under this License
|
||||
will not have their licenses terminated so long as such parties remain in
|
||||
full compliance.
|
||||
</p>
|
||||
<p>
|
||||
<strong>5.</strong> You are not required to accept this License, since you
|
||||
have not signed it. However, nothing else grants you permission to modify
|
||||
or distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the Program),
|
||||
you indicate your acceptance of this License to do so, and all its terms
|
||||
and conditions for copying, distributing or modifying the Program or works
|
||||
based on it.
|
||||
</p>
|
||||
<p>
|
||||
<strong>6.</strong> Each time you redistribute the Program (or any work
|
||||
based on the Program), the recipient automatically receives a license from
|
||||
the original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further restrictions on
|
||||
the recipients' exercise of the rights granted herein. You are not
|
||||
responsible for enforcing compliance by third parties to this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>7.</strong> If, as a consequence of a court judgment or allegation
|
||||
of patent infringement or for any other reason (not limited to patent
|
||||
issues), conditions are imposed on you (whether by court order, agreement
|
||||
or otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot distribute
|
||||
so as to satisfy simultaneously your obligations under this License and
|
||||
any other pertinent obligations, then as a consequence you may not
|
||||
distribute the Program at all. For example, if a patent license would not
|
||||
permit royalty-free redistribution of the Program by all those who receive
|
||||
copies directly or indirectly through you, then the only way you could
|
||||
satisfy both it and this License would be to refrain entirely from
|
||||
distribution of the Program.
|
||||
</p>
|
||||
<p>
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
</p>
|
||||
<p>
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any such
|
||||
claims; this section has the sole purpose of protecting the integrity of
|
||||
the free software distribution system, which is implemented by public
|
||||
license practices. Many people have made generous contributions to the
|
||||
wide range of software distributed through that system in reliance on
|
||||
consistent application of that system; it is up to the author/donor to
|
||||
decide if he or she is willing to distribute software through any other
|
||||
system and a licensee cannot impose that choice.
|
||||
</p>
|
||||
<p>
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>8.</strong> If the distribution and/or use of the Program is
|
||||
restricted in certain countries either by patents or by copyrighted
|
||||
interfaces, the original copyright holder who places the Program under
|
||||
this License may add an explicit geographical distribution limitation
|
||||
excluding those countries, so that distribution is permitted only in or
|
||||
among countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
</p>
|
||||
<p>
|
||||
<strong>9.</strong> The Free Software Foundation may publish revised
|
||||
and/or new versions of the General Public License from time to time. Such
|
||||
new versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
</p>
|
||||
<p>
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free
|
||||
Software Foundation.
|
||||
</p>
|
||||
<p>
|
||||
<strong>10.</strong> If you wish to incorporate parts of the Program into
|
||||
other free programs whose distribution conditions are different, write to
|
||||
the author to ask for permission. For software which is copyrighted by the
|
||||
Free Software Foundation, write to the Free Software Foundation; we
|
||||
sometimes make exceptions for this. Our decision will be guided by the two
|
||||
goals of preserving the free status of all derivatives of our free
|
||||
software and of promoting the sharing and reuse of software generally.
|
||||
</p>
|
||||
<p><strong>NO WARRANTY</strong></p>
|
||||
<p>
|
||||
<strong>11.</strong> BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE
|
||||
IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
|
||||
PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
||||
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
|
||||
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
|
||||
SERVICING, REPAIR OR CORRECTION.
|
||||
</p>
|
||||
<p>
|
||||
<strong>12.</strong> IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
|
||||
AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
|
||||
MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO
|
||||
YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
||||
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
|
||||
PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
|
||||
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
</p>
|
||||
<p></p>
|
||||
<h3>END OF TERMS AND CONDITIONS</h3>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,391 +1,542 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Licencia Pública GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<html>
|
||||
<head>
|
||||
<title>Licencia Pública GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Licencia Pública GNU</h2>
|
||||
<h3>Contenido</h3>
|
||||
|
||||
<h2>Licencia Pública GNU</h2>
|
||||
<h3>Contenido</h3>
|
||||
<ul>
|
||||
<li><a href="#SEC1">Licencia Pública GNU</a></li>
|
||||
<li><a href="#SEC2">Preámbulo</a></li>
|
||||
<li>
|
||||
<a href="#SEC3"
|
||||
>Términos y condiciones para la copia, distribución y
|
||||
modificación</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#APPENDIX"
|
||||
>Apéndice: Cómo aplicar estos términos a sus
|
||||
nuevos programas</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
<h3><a name="SEC1">Licencia Pública GNU</a></h3>
|
||||
<p>
|
||||
Esta es la conocida GNU Public License (GPL), versión 2 (de junio
|
||||
de 1.991), que cubre la mayor parte del software de la Free Software
|
||||
Foundation, y muchos más programas.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="#SEC1">Licencia Pública GNU</a></li>
|
||||
<li><a href="#SEC2">Preámbulo</a></li>
|
||||
<li><a href="#SEC3">Términos y condiciones para la copia,
|
||||
distribución y modificación</a></li>
|
||||
<li><a href="#APPENDIX">Apéndice: Cómo aplicar estos
|
||||
términos a sus nuevos programas</a></li>
|
||||
</ul>
|
||||
<br>
|
||||
<h3><a name="SEC1">Licencia Pública GNU</a></h3>
|
||||
<p>
|
||||
Esta es la conocida GNU Public License (GPL), versión 2 (de junio
|
||||
de 1.991), que cubre la mayor parte del software de la Free Software Foundation,
|
||||
y muchos más programas.</p>
|
||||
<p>Los autores de esta traducción son:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="mailto:jgb@computer.org"
|
||||
>Jesús González Barahona</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mailto:pheras@acm.org">Pedro de las Heras Quirós</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Los autores de esta traducción son:
|
||||
</p><ul><li><a href="mailto:jgb@computer.org">Jesús González Barahona</a>
|
||||
</li><li><a href="mailto:pheras@acm.org">Pedro de las Heras Quirós</a>
|
||||
</li></ul>
|
||||
<blockquote>
|
||||
<hr />
|
||||
<b>NOTA IMPORTANTE:</b>
|
||||
<p>
|
||||
Esta es una traducción no oficial al español de la GNU
|
||||
General Public License. No ha sido publicada por la Free Software
|
||||
Foundation, y no establece legalmente las condiciones de
|
||||
distribución para el software que usa la GNU GPL. Estas
|
||||
condiciones se establecen solamente por el texto original, en
|
||||
inglés, de la GNU GPL. Sin embargo, esperamos que esta
|
||||
traducción ayude a los hispanohablantes a entender mejor la GNU
|
||||
GPL.
|
||||
</p>
|
||||
<p><b>IMPORTANT NOTICE:</b></p>
|
||||
<p>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
Spanish. It was not published by the Free Software Foundation, and does
|
||||
not legally state the distribution terms for software that uses the GNU
|
||||
GPL--only the original English text of the GNU GPL does that. However,
|
||||
we hope that this translation will help Spanish speakers understand the
|
||||
GNU GPL better.
|
||||
</p>
|
||||
<p></p>
|
||||
<hr />
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<hr>
|
||||
<b>NOTA IMPORTANTE:</b>
|
||||
<p>
|
||||
Esta es una traducción no oficial al español de la GNU General Public
|
||||
License. No ha sido publicada por la Free Software Foundation, y no
|
||||
establece legalmente las condiciones de distribución para el software
|
||||
que usa la GNU GPL. Estas condiciones se establecen solamente por
|
||||
el texto original, en inglés, de la GNU GPL. Sin embargo, esperamos
|
||||
que esta traducción ayude a los hispanohablantes a entender mejor la
|
||||
GNU GPL.
|
||||
</p><p>
|
||||
<p>Copyright (C) 1989, 1991 Free Software Foundation, Inc.</p>
|
||||
<p>675 Mass Ave, Cambridge, MA 02139, EEUU</p>
|
||||
<p>
|
||||
Se permite la copia y distribución de copias literales de este
|
||||
documento, pero no se permite su modificación.
|
||||
</p>
|
||||
|
||||
<b>IMPORTANT NOTICE:</b>
|
||||
</p><p>
|
||||
This is an unofficial translation of the GNU General Public License
|
||||
into Spanish. It was not published by the Free Software
|
||||
Foundation, and does not legally state the distribution terms for
|
||||
software that uses the GNU GPL--only the original English text of
|
||||
the GNU GPL does that. However, we hope that this translation will
|
||||
help Spanish speakers understand the GNU GPL better.
|
||||
</p><p>
|
||||
</p><hr>
|
||||
</blockquote>
|
||||
<h3><a name="SEC2">Preámbulo</a></h3>
|
||||
<p>
|
||||
Las licencias que cubren la mayor parte del software están
|
||||
diseñadas para quitarle a usted la libertad de compartirlo y
|
||||
modificarlo. Por el contrario, la Licencia Pública General de GNU
|
||||
pretende garantizarle la libertad de compartir y modificar software libre,
|
||||
para asegurar que el software es libre para todos sus usuarios. Esta
|
||||
Licencia Pública General se aplica a la mayor parte del software
|
||||
del la Free Software Foundation y a cualquier otro programa si sus autores
|
||||
se comprometen a utilizarla. (Existe otro software de la Free Software
|
||||
Foundation que está cubierto por la Licencia Pública General
|
||||
de GNU para Bibliotecas). Si quiere, también puede aplicarla a sus
|
||||
propios programas.
|
||||
</p>
|
||||
<p>
|
||||
Cuando hablamos de software libre, estamos refiriéndonos a
|
||||
libertad, no a precio. Nuestras Licencias Públicas Generales
|
||||
están diseñadas para asegurarnos de que tenga la libertad de
|
||||
distribuir copias de software libre (y cobrar por ese servicio si quiere),
|
||||
de que reciba el código fuente o que pueda conseguirlo si lo
|
||||
quiere, de que pueda modificar el software o usar fragmentos de él
|
||||
en nuevos programas libres, y de que sepa que puede hacer todas estas
|
||||
cosas.
|
||||
</p>
|
||||
<p>
|
||||
Para proteger sus derechos necesitamos algunas restricciones que prohiban
|
||||
a cualquiera negarle a usted estos derechos o pedirle que renuncie a
|
||||
ellos. Estas restricciones se traducen en ciertas obligaciones que le
|
||||
afectan si distribuye copias del software, o si lo modifica.
|
||||
</p>
|
||||
<p>
|
||||
Por ejemplo, si distribuye copias de uno de estos programas, sea
|
||||
gratuitamente, o a cambio de una contraprestación, debe dar a los
|
||||
receptores todos los derechos que tiene. Debe asegurarse de que ellos
|
||||
también reciben, o pueden conseguir, el código fuente. Y
|
||||
debe mostrarles estas condiciones de forma que conozcan sus derechos.
|
||||
</p>
|
||||
<p>Protegemos sus derechos con la combinación de dos medidas:</p>
|
||||
<ol type="1">
|
||||
<li>Ponemos el software bajo copyright y</li>
|
||||
<li>
|
||||
le ofrecemos esta licencia, que le da permiso legal para copiar,
|
||||
distribuir y/o modificar el software.
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
También, para la protección de cada autor y la nuestra
|
||||
propia, queremos asegurarnos de que todo el mundo comprende que no se
|
||||
proporciona ninguna garantía para este software libre. Si el
|
||||
software se modifica por cualquiera y éste a su vez lo distribuye,
|
||||
queremos que sus receptores sepan que lo que tienen no es el original, de
|
||||
forma que cualquier problema introducido por otros no afecte a la
|
||||
reputación de los autores originales.
|
||||
</p>
|
||||
<p>
|
||||
Por último, cualquier programa libre está constantemente
|
||||
amenazado por patentes sobre el software. Queremos evitar el peligro de
|
||||
que los redistribuidores de un programa libre obtengan patentes por su
|
||||
cuenta, convirtiendo de facto el programa en propietario. Para evitar
|
||||
esto, hemos dejado claro que cualquier patente debe ser pedida para el uso
|
||||
libre de cualquiera, o no ser pedida.
|
||||
</p>
|
||||
<p>
|
||||
Los términos exactos y las condiciones para la copia,
|
||||
distribución y modificación se exponen a
|
||||
continuación.
|
||||
</p>
|
||||
|
||||
<p>Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
</p><p>675 Mass Ave, Cambridge, MA 02139, EEUU
|
||||
</p><p>Se permite la copia y distribución de copias literales de este
|
||||
documento, pero no se permite su modificación.
|
||||
</p>
|
||||
<h3>
|
||||
<a name="SEC3"
|
||||
>Términos y condiciones para la copia, distribución y
|
||||
modificación</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<ol type="1">
|
||||
<li>
|
||||
Esta Licencia se aplica a cualquier programa u otro tipo de trabajo que
|
||||
contenga una nota colocada por el tenedor del copyright diciendo que
|
||||
puede ser distribuido bajo los términos de esta Licencia
|
||||
Pública General. En adelante, <20>Programa<6D> se referirá a
|
||||
cualquier programa o trabajo que cumpla esa condición y <20>trabajo
|
||||
basado en el Programa<6D> se referirá bien al Programa o a cualquier
|
||||
trabajo derivado de él según la ley de copyright. Esto es,
|
||||
un trabajo que contenga el programa o una proción de él,
|
||||
bien en forma literal o con modificaciones y/o traducido en otro
|
||||
lenguaje. Por lo tanto, la traducción está incluida sin
|
||||
limitaciones en el término <20>modificación<EFBFBD>. Cada
|
||||
concesionario (licenciatario) será denominado <20>usted<65>.
|
||||
<p>
|
||||
Cualquier otra actividad que no sea la copia, distribución o
|
||||
modificación no está cubierta por esta Licencia,
|
||||
está fuera de su ámbito. El acto de ejecutar el Programa
|
||||
no está restringido, y los resultados del Programa están
|
||||
cubiertos únicamente si sus contenidos constituyen un trabajo
|
||||
basado en el Programa, independientemente de haberlo producido
|
||||
mediante la ejecución del programa. El que esto se cumpla,
|
||||
depende de lo que haga el programa.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Usted puede copiar y distribuir copias literales del código
|
||||
fuente del Programa, según lo has recibido, en cualquier medio,
|
||||
supuesto que de forma adecuada y bien visible publique en cada copia un
|
||||
anuncio de copyright adecuado y un repudio de garantía, mantenga
|
||||
intactos todos los anuncios que se refieran a esta Licencia y a la
|
||||
ausencia de garantía, y proporcione a cualquier otro receptor del
|
||||
programa una copia de esta Licencia junto con el Programa.
|
||||
<p>
|
||||
Puede cobrar un precio por el acto físico de transferir una
|
||||
copia, y puede, según su libre albedrío, ofrecer
|
||||
garantía a cambio de unos honorarios.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Puede modificar su copia o copias del Programa o de cualquier
|
||||
porción de él, formando de esta manera un trabajo basado
|
||||
en el Programa, y copiar y distribuir esa modificación o trabajo
|
||||
bajo los términos del apartado 1, antedicho, supuesto que
|
||||
además cumpla las siguientes condiciones:
|
||||
<ol type="a">
|
||||
<li>
|
||||
Debe hacer que los ficheros modificados lleven anuncios prominentes
|
||||
indicando que los ha cambiado y la fecha de cualquier cambio.
|
||||
</li>
|
||||
<li>
|
||||
Debe hacer que cualquier trabajo que distribuya o publique y que en
|
||||
todo o en parte contenga o sea derivado del Programa o de cualquier
|
||||
parte de él sea licenciada como un todo, sin carga alguna, a
|
||||
todas las terceras partes y bajo los términos de esta
|
||||
Licencia.
|
||||
</li>
|
||||
<li>
|
||||
Si el programa modificado lee normalmente órdenes
|
||||
interactivamente cuando es ejecutado, debe hacer que, cuando
|
||||
comience su ejecución para ese uso interactivo de la forma
|
||||
más habitual, muestre o escriba un mensaje que incluya un
|
||||
anuncio de copyright y un anuncio de que no se ofrece ninguna
|
||||
garantía (o por el contrario que sí se ofrece
|
||||
garantía) y que los usuarios pueden redistribuir el programa
|
||||
bajo estas condiciones, e indicando al usuario cómo ver una
|
||||
copia de esta licencia. (Excepción: si el propio programa es
|
||||
interactivo pero normalmente no muestra ese anuncio, no se requiere
|
||||
que su trabajo basado en el Programa muestre ningún anuncio).
|
||||
</li>
|
||||
</ol>
|
||||
Estos requisitos se aplican al trabajo modificado como un todo. Si
|
||||
partes identificables de ese trabajo no son derivadas del Programa, y
|
||||
pueden, razonablemente, ser consideradas trabajos independientes y
|
||||
separados por ellos mismos, entonces esta Licencia y sus términos
|
||||
no se aplican a esas partes cuando sean distribuidas como trabajos
|
||||
separados. Pero cuando distribuya esas mismas secciones como partes de
|
||||
un todo que es un trabajo basado en el Programa, la distribución
|
||||
del todo debe ser según los términos de esta licencia,
|
||||
cuyos permisos para otros licenciatarios se extienden al todo completo,
|
||||
y por lo tanto a todas y cada una de sus partes, con independencia de
|
||||
quién la escribió.
|
||||
<p>
|
||||
Por lo tanto, no es la intención de este apartado reclamar
|
||||
derechos o desafiar sus derechos sobre trabajos escritos totalmente
|
||||
por usted mismo. El intento es ejercer el derecho a controlar la
|
||||
distribución de trabajos derivados o colectivos basados en el
|
||||
Programa.
|
||||
</p>
|
||||
<p>
|
||||
Además, el simple hecho de reunir un trabajo no basado en el
|
||||
Programa con el Programa (o con un trabajo basado en el Programa) en
|
||||
un volumen de almacenamiento o en un medio de distribución no
|
||||
hace que dicho trabajo entre dentro del ámbito cubierto por
|
||||
esta Licencia.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Puede copiar y distribuir el Programa (o un trabajo basado en él,
|
||||
según se especifica en el apartado 2, como código objeto o
|
||||
en formato ejecutable según los términos de los apartados
|
||||
1 y 2, supuesto que además cumpla una de las siguientes
|
||||
condiciones:
|
||||
<ol type="a">
|
||||
<li>
|
||||
Acompañarlo con el código fuente completo
|
||||
correspondiente, en formato electrónico, que debe ser
|
||||
distribuido según se especifica en los apartados 1 y 2 de
|
||||
esta Licencia en un medio habitualmente utilizado para el
|
||||
intercambio de programas, o
|
||||
</li>
|
||||
<li>
|
||||
Acompañarlo con una oferta por escrito, válida durante
|
||||
al menos tres años, de proporcionar a cualquier tercera parte
|
||||
una copia completa en formato electrónico del código
|
||||
fuente correspondiente, a un coste no mayor que el de realizar
|
||||
físicamente la distribución del fuente, que
|
||||
será distribuido bajo las condiciones descritas en los
|
||||
apartados 1 y 2 anteriores, en un medio habitualmente utilizado para
|
||||
el intercambio de programas, o
|
||||
</li>
|
||||
<li>
|
||||
Acompañarlo con la información que recibiste
|
||||
ofreciendo distribuir el código fuente correspondiente. (Esta
|
||||
opción se permite sólo para distribución no
|
||||
comercial y sólo si usted recibió el programa como
|
||||
código objeto o en formato ejecutable con tal oferta, de
|
||||
acuerdo con el apartado b anterior).
|
||||
</li>
|
||||
</ol>
|
||||
Por código fuente de un trabajo se entiende la forma preferida
|
||||
del trabajo cuando se le hacen modificaciones. Para un trabajo
|
||||
ejecutable, se entiende por código fuente completo todo el
|
||||
código fuente para todos los módulos que contiene,
|
||||
más cualquier fichero asociado de definición de
|
||||
interfaces, más los guiones utilizados para controlar la
|
||||
compilación e instalación del ejecutable. Como
|
||||
excepción especial el código fuente distribuido no
|
||||
necesita incluir nada que sea distribuido normalmente (bien como fuente,
|
||||
bien en forma binaria) con los componentes principales (compilador,
|
||||
kernel y similares) del sistema operativo en el cual funciona el
|
||||
ejecutable, a no ser que el propio componente acompañe al
|
||||
ejecutable.
|
||||
<p>
|
||||
Si la distribución del ejecutable o del código objeto se
|
||||
hace mediante la oferta acceso para copiarlo de un cierto lugar,
|
||||
entonces se considera la oferta de acceso para copiar el código
|
||||
fuente del mismo lugar como distribución del código
|
||||
fuente, incluso aunque terceras partes no estén forzadas a
|
||||
copiar el fuente junto con el código objeto.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
No puede copiar, modificar, sublicenciar o distribuir el Programa
|
||||
excepto como prevé expresamente esta Licencia. Cualquier intento
|
||||
de copiar, modificar sublicenciar o distribuir el Programa de otra forma
|
||||
es inválida, y hará que cesen automáticamente los
|
||||
derechos que te proporciona esta Licencia. En cualquier caso, las partes
|
||||
que hayan recibido copias o derechos de usted bajo esta Licencia no
|
||||
cesarán en sus derechos mientras esas partes continúen
|
||||
cumpliéndola.
|
||||
</li>
|
||||
<li>
|
||||
No está obligado a aceptar esta licencia, ya que no la ha
|
||||
firmado. Sin embargo, no hay hada más que le proporcione permiso
|
||||
para modificar o distribuir el Programa o sus trabajos derivados. Estas
|
||||
acciones están prohibidas por la ley si no acepta esta Licencia.
|
||||
Por lo tanto, si modifica o distribuye el Programa (o cualquier trabajo
|
||||
basado en el Programa), está indicando que acepta esta Licencia
|
||||
para poder hacerlo, y todos sus términos y condiciones para
|
||||
copiar, distribuir o modificar el Programa o trabajos basados en
|
||||
él.
|
||||
</li>
|
||||
<li>
|
||||
Cada vez que redistribuya el Programa (o cualquier trabajo basado en el
|
||||
Programa), el receptor recibe automáticamente una licencia del
|
||||
licenciatario original para copiar, distribuir o modificar el Programa,
|
||||
de forma sujeta a estos términos y condiciones. No puede imponer
|
||||
al receptor ninguna restricción más sobre el ejercicio de
|
||||
los derechos aquí garantizados. No es usted responsable de hacer
|
||||
cumplir esta licencia por terceras partes.
|
||||
</li>
|
||||
<li>
|
||||
Si como consecuencia de una resolución judicial o de una
|
||||
alegación de infracción de patente o por cualquier otra
|
||||
razón (no limitada a asuntos relacionados con patentes) se le
|
||||
imponen condiciones (ya sea por mandato judicial, por acuerdo o por
|
||||
cualquier otra causa) que contradigan las condiciones de esta Licencia,
|
||||
ello no le exime de cumplir las condiciones de esta Licencia. Si no
|
||||
puede realizar distribuciones de forma que se satisfagan
|
||||
simultáneamente sus obligaciones bajo esta licencia y cualquier
|
||||
otra obligación pertinente entonces, como consecuencia, no puede
|
||||
distribuir el Programa de ninguna forma. Por ejemplo, si una patente no
|
||||
permite la redistribución libre de derechos de autor del Programa
|
||||
por parte de todos aquellos que reciban copias directa o indirectamente
|
||||
a través de usted, entonces la única forma en que
|
||||
podría satisfacer tanto esa condición como esta Licencia
|
||||
sería evitar completamente la distribución del Programa.
|
||||
<p>
|
||||
Si cualquier porción de este apartado se considera
|
||||
inválida o imposible de cumplir bajo cualquier circunstancia
|
||||
particular ha de cumplirse el resto y la sección por entero ha
|
||||
de cumplirse en cualquier otra circunstancia.
|
||||
</p>
|
||||
<p>
|
||||
No es el propósito de este apartado inducirle a infringir
|
||||
ninguna reivindicación de patente ni de ningún otro
|
||||
derecho de propiedad o impugnar la validez de ninguna de dichas
|
||||
reivindicaciones. Este apartado tiene el único propósito
|
||||
de proteger la integridad del sistema de distribución de
|
||||
software libre, que se realiza mediante prácticas de licencia
|
||||
pública. Mucha gente ha hecho contribuciones generosas a la
|
||||
gran variedad de software distribuido mediante ese sistema con la
|
||||
confianza de que el sistema se aplicará consistentemente.
|
||||
Será el autor/donante quien decida si quiere distribuir
|
||||
software mediante cualquier otro sistema y una licencia no puede
|
||||
imponer esa elección.
|
||||
</p>
|
||||
<p>
|
||||
Este apartado pretende dejar completamente claro lo que se cree que es
|
||||
una consecuencia del resto de esta Licencia.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Si la distribución y/o uso de el Programa está restringida
|
||||
en ciertos países, bien por patentes o por interfaces bajo
|
||||
copyright, el tenedor del copyright que coloca este Programa bajo esta
|
||||
Licencia puede añadir una limitación explícita de
|
||||
distribución geográfica excluyendo esos países, de
|
||||
forma que la distribución se permita sólo en o entre los
|
||||
países no excluidos de esta manera. En ese caso, esta Licencia
|
||||
incorporará la limitación como si estuviese escrita en el
|
||||
cuerpo de esta Licencia.
|
||||
</li>
|
||||
<li>
|
||||
La Free Software Foundation puede publicar versiones revisadas y/o
|
||||
nuevas de la Licencia Pública General de tiempo en tiempo. Dichas
|
||||
nuevas versiones serán similares en espíritu a la presente
|
||||
versión, pero pueden ser diferentes en detalles para considerar
|
||||
nuevos problemas o situaciones.
|
||||
<p>
|
||||
Cada versión recibe un número de versión que la
|
||||
distingue de otras. Si el Programa especifica un número de
|
||||
versión de esta Licencia que se refiere a ella y a <20>cualquier
|
||||
versión posterior<6F>, tienes la opción de seguir los
|
||||
términos y condiciones, bien de esa versión, bien de
|
||||
cualquier versión posterior publicada por la Free Software
|
||||
Foundation. Si el Programa no especifica un número de
|
||||
versión de esta Licencia, puedes escoger cualquier
|
||||
versión publicada por la Free Software Foundation.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Si quiere incorporar partes del Programa en otros programas libres cuyas
|
||||
condiciones de distribución son diferentes, escribe al autor para
|
||||
pedirle permiso. Si el software tiene copyright de la Free Software
|
||||
Foundation, escribe a la Free Software Foundation: algunas veces hacemos
|
||||
excepciones en estos casos. Nuestra decisión estará guiada
|
||||
por el doble objetivo de de preservar la libertad de todos los derivados
|
||||
de nuestro software libre y promover el que se comparta y reutilice el
|
||||
software en general.
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h3><a name="SEC2">Preámbulo</a></h3>
|
||||
<p>
|
||||
Las licencias que cubren la mayor parte del software están diseñadas
|
||||
para quitarle a usted la libertad de compartirlo y modificarlo. Por el
|
||||
contrario, la Licencia Pública General de GNU pretende garantizarle
|
||||
la libertad de compartir y modificar software libre, para asegurar que
|
||||
el software es libre para todos sus usuarios. Esta Licencia Pública
|
||||
General se aplica a la mayor parte del software del la Free Software Foundation
|
||||
y a cualquier otro programa si sus autores se comprometen a utilizarla.
|
||||
(Existe otro software de la Free Software Foundation que está cubierto
|
||||
por la Licencia Pública General de GNU para Bibliotecas). Si quiere,
|
||||
también puede aplicarla a sus propios programas.</p>
|
||||
<p>Cuando hablamos de software libre, estamos refiriéndonos a libertad,
|
||||
no a precio. Nuestras Licencias Públicas Generales están
|
||||
diseñadas para asegurarnos de que tenga la libertad de distribuir
|
||||
copias de software libre (y cobrar por ese servicio si quiere), de que
|
||||
reciba el código fuente o que pueda conseguirlo si lo quiere, de
|
||||
que pueda modificar el software o usar fragmentos de él en nuevos
|
||||
programas libres, y de que sepa que puede hacer todas estas cosas.
|
||||
</p><p>Para proteger sus derechos necesitamos algunas restricciones que prohiban
|
||||
a cualquiera negarle a usted estos derechos o pedirle que renuncie a ellos.
|
||||
Estas restricciones se traducen en ciertas obligaciones que le afectan
|
||||
si distribuye copias del software, o si lo modifica.
|
||||
</p><p>Por ejemplo, si distribuye copias de uno de estos programas, sea gratuitamente,
|
||||
o a cambio de una contraprestación, debe dar a los receptores todos
|
||||
los derechos que tiene. Debe asegurarse de que ellos también reciben,
|
||||
o pueden conseguir, el código fuente. Y debe mostrarles estas condiciones
|
||||
de forma que conozcan sus derechos.
|
||||
</p><p>Protegemos sus derechos con la combinación de dos medidas:
|
||||
</p><ol type="1">
|
||||
<li>Ponemos el software bajo copyright y
|
||||
</li><li>le ofrecemos esta licencia, que le da permiso legal para copiar, distribuir
|
||||
y/o modificar el software.</li></ol>
|
||||
<p>
|
||||
También, para la protección de cada autor y la nuestra propia,
|
||||
queremos asegurarnos de que todo el mundo comprende que no se proporciona
|
||||
ninguna garantía para este software libre. Si el software se modifica
|
||||
por cualquiera y éste a su vez lo distribuye, queremos que sus receptores
|
||||
sepan que lo que tienen no es el original, de forma que cualquier problema
|
||||
introducido por otros no afecte a la reputación de los autores originales.</p>
|
||||
<p>Por último, cualquier programa libre está constantemente
|
||||
amenazado por patentes sobre el software. Queremos evitar el peligro de
|
||||
que los redistribuidores de un programa libre obtengan patentes por su
|
||||
cuenta, convirtiendo de facto el programa en propietario. Para evitar esto,
|
||||
hemos dejado claro que cualquier patente debe ser pedida para el uso libre
|
||||
de cualquiera, o no ser pedida.
|
||||
</p><p>Los términos exactos y las condiciones para la copia, distribución
|
||||
y modificación se exponen a continuación.</p>
|
||||
<h3>AUSENCIA DE GARANTÍA</h3>
|
||||
|
||||
<h3><a name="SEC3">Términos y condiciones para la copia,
|
||||
distribución y modificación</a></h3>
|
||||
<ol start="12" type="1">
|
||||
<li>
|
||||
Como el programa se licencia libre de cargas, no se ofrece ninguna
|
||||
garantía sobre el programa, en todas la extensión
|
||||
permitida por la legislación aplicable. Excepto cuando se indique
|
||||
de otra forma por escrito, los tenedores del copyright y/u otras partes
|
||||
proporcionan el programa <20>tal cual<61>, sin garantía de ninguna
|
||||
clase, bien expresa o implícita, con inclusión, pero sin
|
||||
limitación a las garantías mercantiles implícitas o
|
||||
a la conveniencia para un propósito particular. Cualquier riesgo
|
||||
referente a la calidad y prestaciones del programa es asumido por usted.
|
||||
Si se probase que el Programa es defectuoso, asume el coste de cualquier
|
||||
servicio, reparación o corrección.
|
||||
</li>
|
||||
<li>
|
||||
En ningún caso, salvo que lo requiera la legislación
|
||||
aplicable o haya sido acordado por escrito, ningún tenedor del
|
||||
copyright ni ninguna otra parte que modifique y/o redistribuya el
|
||||
Programa según se permite en esta Licencia será
|
||||
responsable ante usted por daños, incluyendo cualquier
|
||||
daño general, especial, incidental o resultante producido por el
|
||||
uso o la imposibilidad de uso del Programa (con inclusión, pero
|
||||
sin limitación a la pérdida de datos o a la
|
||||
generación incorrecta de datos o a pérdidas sufridas por
|
||||
usted o por terceras partes o a un fallo del Programa al funcionar en
|
||||
combinación con cualquier otro programa), incluso si dicho
|
||||
tenedor u otra parte ha sido advertido de la posibilidad de dichos
|
||||
daños.
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<ol type="1">
|
||||
<li>Esta Licencia se aplica a cualquier programa u otro tipo
|
||||
de trabajo que contenga una nota colocada por el tenedor del copyright
|
||||
diciendo que puede ser distribuido bajo los términos de esta Licencia
|
||||
Pública General. En adelante, <20>Programa<6D> se referirá
|
||||
a cualquier programa o trabajo que cumpla esa condición y <20>trabajo
|
||||
basado en el Programa<6D> se referirá bien al Programa o a cualquier
|
||||
trabajo derivado de él según la ley de copyright. Esto es,
|
||||
un trabajo que contenga el programa o una proción de él,
|
||||
bien en forma literal o con modificaciones y/o traducido en otro lenguaje.
|
||||
Por lo tanto, la traducción está incluida sin limitaciones
|
||||
en el término <20>modificación<EFBFBD>. Cada concesionario
|
||||
(licenciatario) será denominado <20>usted<65>.
|
||||
<p>Cualquier otra actividad que no sea la copia, distribución o
|
||||
modificación no está cubierta por esta Licencia, está
|
||||
fuera de su ámbito. El acto de ejecutar el Programa no está
|
||||
restringido, y los resultados del Programa están cubiertos únicamente
|
||||
si sus contenidos constituyen un trabajo basado en el Programa, independientemente
|
||||
de haberlo producido mediante la ejecución del programa. El que
|
||||
esto se cumpla, depende de lo que haga el programa.
|
||||
</p></li><li>Usted puede copiar y distribuir copias literales del código fuente
|
||||
del Programa, según lo has recibido, en cualquier medio, supuesto
|
||||
que de forma adecuada y bien visible publique en cada copia un anuncio
|
||||
de copyright adecuado y un repudio de garantía, mantenga intactos
|
||||
todos los anuncios que se refieran a esta Licencia y a la ausencia de garantía,
|
||||
y proporcione a cualquier otro receptor del programa una copia de esta
|
||||
Licencia junto con el Programa.
|
||||
<p>Puede cobrar un precio por el acto físico de transferir una copia,
|
||||
y puede, según su libre albedrío, ofrecer garantía
|
||||
a cambio de unos honorarios.
|
||||
</p></li><li>Puede modificar su copia o copias del Programa o de cualquier porción
|
||||
de él, formando de esta manera un trabajo basado en el Programa,
|
||||
y copiar y distribuir esa modificación o trabajo bajo los términos
|
||||
del apartado 1, antedicho, supuesto que además cumpla las siguientes
|
||||
condiciones:
|
||||
<ol type="a"><li>Debe hacer que los ficheros modificados lleven anuncios
|
||||
prominentes indicando que los ha cambiado y la fecha de cualquier cambio.
|
||||
</li><li>Debe hacer que cualquier trabajo que distribuya o publique y que en
|
||||
todo o en parte contenga o sea derivado del Programa o de cualquier parte
|
||||
de él sea licenciada como un todo, sin carga alguna, a todas las
|
||||
terceras partes y bajo los términos de esta Licencia.
|
||||
</li><li>Si el programa modificado lee normalmente órdenes interactivamente
|
||||
cuando es ejecutado, debe hacer que, cuando comience su ejecución
|
||||
para ese uso interactivo de la forma más habitual, muestre o escriba
|
||||
un mensaje que incluya un anuncio de copyright y un anuncio de que no se
|
||||
ofrece ninguna garantía (o por el contrario que sí se ofrece
|
||||
garantía) y que los usuarios pueden redistribuir el programa bajo
|
||||
estas condiciones, e indicando al usuario cómo ver una copia de
|
||||
esta licencia. (Excepción: si el propio programa es interactivo
|
||||
pero normalmente no muestra ese anuncio, no se requiere que su trabajo
|
||||
basado en el Programa muestre ningún anuncio).</li></ol>
|
||||
Estos requisitos se aplican al trabajo modificado como un todo. Si partes
|
||||
identificables de ese trabajo no son derivadas del Programa, y pueden,
|
||||
razonablemente, ser consideradas trabajos independientes y separados por
|
||||
ellos mismos, entonces esta Licencia y sus términos no se aplican
|
||||
a esas partes cuando sean distribuidas como trabajos separados. Pero cuando
|
||||
distribuya esas mismas secciones como partes de un todo que es un trabajo
|
||||
basado en el Programa, la distribución del todo debe ser según
|
||||
los términos de esta licencia, cuyos permisos para otros licenciatarios
|
||||
se extienden al todo completo, y por lo tanto a todas y cada una de sus
|
||||
partes, con independencia de quién la escribió.
|
||||
<p>Por lo tanto, no es la intención de este apartado reclamar derechos
|
||||
o desafiar sus derechos sobre trabajos escritos totalmente por usted mismo.
|
||||
El intento es ejercer el derecho a controlar la distribución de
|
||||
trabajos derivados o colectivos basados en el Programa.
|
||||
</p><p>Además, el simple hecho de reunir un trabajo no basado en el
|
||||
Programa con el Programa (o con un trabajo basado en el Programa) en un
|
||||
volumen de almacenamiento o en un medio de distribución no hace
|
||||
que dicho trabajo entre dentro del ámbito cubierto por esta Licencia.
|
||||
</p></li><li>Puede copiar y distribuir el Programa (o un trabajo basado en él,
|
||||
según se especifica en el apartado 2, como código objeto
|
||||
o en formato ejecutable según los términos de los apartados
|
||||
1 y 2, supuesto que además cumpla una de las siguientes condiciones:
|
||||
<ol type="a"><li>Acompañarlo con el código fuente completo
|
||||
correspondiente, en formato electrónico, que debe ser distribuido
|
||||
según se especifica en los apartados 1 y 2 de esta Licencia en un
|
||||
medio habitualmente utilizado para el intercambio de programas, o
|
||||
</li><li>Acompañarlo con una oferta por escrito, válida durante
|
||||
al menos tres años, de proporcionar a cualquier tercera parte una
|
||||
copia completa en formato electrónico del código fuente correspondiente,
|
||||
a un coste no mayor que el de realizar físicamente la distribución
|
||||
del fuente, que será distribuido bajo las condiciones descritas
|
||||
en los apartados 1 y 2 anteriores, en un medio habitualmente utilizado
|
||||
para el intercambio de programas, o
|
||||
</li><li>Acompañarlo con la información que recibiste ofreciendo
|
||||
distribuir el código fuente correspondiente. (Esta opción
|
||||
se permite sólo para distribución no comercial y sólo
|
||||
si usted recibió el programa como código objeto o en formato
|
||||
ejecutable con tal oferta, de acuerdo con el apartado b anterior).</li></ol>
|
||||
Por código fuente de un trabajo se entiende la forma preferida del
|
||||
trabajo cuando se le hacen modificaciones. Para un trabajo ejecutable,
|
||||
se entiende por código fuente completo todo el código fuente
|
||||
para todos los módulos que contiene, más cualquier fichero
|
||||
asociado de definición de interfaces, más los guiones utilizados
|
||||
para controlar la compilación e instalación del ejecutable.
|
||||
Como excepción especial el código fuente distribuido no necesita
|
||||
incluir nada que sea distribuido normalmente (bien como fuente, bien en
|
||||
forma binaria) con los componentes principales (compilador, kernel y similares)
|
||||
del sistema operativo en el cual funciona el ejecutable, a no ser que el
|
||||
propio componente acompañe al ejecutable.
|
||||
<p>Si la distribución del ejecutable o del código objeto
|
||||
se hace mediante la oferta acceso para copiarlo de un cierto lugar, entonces
|
||||
se considera la oferta de acceso para copiar el código fuente del
|
||||
mismo lugar como distribución del código fuente, incluso
|
||||
aunque terceras partes no estén forzadas a copiar el fuente junto
|
||||
con el código objeto.
|
||||
</p></li><li>No puede copiar, modificar, sublicenciar o distribuir el Programa excepto
|
||||
como prevé expresamente esta Licencia. Cualquier intento de copiar,
|
||||
modificar sublicenciar o distribuir el Programa de otra forma es inválida,
|
||||
y hará que cesen automáticamente los derechos que te proporciona
|
||||
esta Licencia. En cualquier caso, las partes que hayan recibido copias
|
||||
o derechos de usted bajo esta Licencia no cesarán en sus derechos
|
||||
mientras esas partes continúen cumpliéndola.
|
||||
</li><li>No está obligado a aceptar esta licencia, ya que no la ha firmado.
|
||||
Sin embargo, no hay hada más que le proporcione permiso para modificar
|
||||
o distribuir el Programa o sus trabajos derivados. Estas acciones están
|
||||
prohibidas por la ley si no acepta esta Licencia. Por lo tanto, si modifica
|
||||
o distribuye el Programa (o cualquier trabajo basado en el Programa), está
|
||||
indicando que acepta esta Licencia para poder hacerlo, y todos sus términos
|
||||
y condiciones para copiar, distribuir o modificar el Programa o trabajos
|
||||
basados en él.
|
||||
</li><li>Cada vez que redistribuya el Programa (o cualquier trabajo basado en
|
||||
el Programa), el receptor recibe automáticamente una licencia del
|
||||
licenciatario original para copiar, distribuir o modificar el Programa,
|
||||
de forma sujeta a estos términos y condiciones. No puede imponer
|
||||
al receptor ninguna restricción más sobre el ejercicio de
|
||||
los derechos aquí garantizados. No es usted responsable de hacer
|
||||
cumplir esta licencia por terceras partes.
|
||||
</li><li>Si como consecuencia de una resolución judicial o de una alegación
|
||||
de infracción de patente o por cualquier otra razón (no limitada
|
||||
a asuntos relacionados con patentes) se le imponen condiciones (ya sea
|
||||
por mandato judicial, por acuerdo o por cualquier otra causa) que contradigan
|
||||
las condiciones de esta Licencia, ello no le exime de cumplir las condiciones
|
||||
de esta Licencia. Si no puede realizar distribuciones de forma que se satisfagan
|
||||
simultáneamente sus obligaciones bajo esta licencia y cualquier
|
||||
otra obligación pertinente entonces, como consecuencia, no puede
|
||||
distribuir el Programa de ninguna forma. Por ejemplo, si una patente no
|
||||
permite la redistribución libre de derechos de autor del Programa
|
||||
por parte de todos aquellos que reciban copias directa o indirectamente
|
||||
a través de usted, entonces la única forma en que podría
|
||||
satisfacer tanto esa condición como esta Licencia sería evitar
|
||||
completamente la distribución del Programa.
|
||||
<p>Si cualquier porción de este apartado se considera inválida
|
||||
o imposible de cumplir bajo cualquier circunstancia particular ha de cumplirse
|
||||
el resto y la sección por entero ha de cumplirse en cualquier otra
|
||||
circunstancia.
|
||||
</p><p>No es el propósito de este apartado inducirle a infringir ninguna
|
||||
reivindicación de patente ni de ningún otro derecho de propiedad
|
||||
o impugnar la validez de ninguna de dichas reivindicaciones. Este apartado
|
||||
tiene el único propósito de proteger la integridad del sistema
|
||||
de distribución de software libre, que se realiza mediante prácticas
|
||||
de licencia pública. Mucha gente ha hecho contribuciones generosas
|
||||
a la gran variedad de software distribuido mediante ese sistema con la
|
||||
confianza de que el sistema se aplicará consistentemente. Será
|
||||
el autor/donante quien decida si quiere distribuir software mediante cualquier
|
||||
otro sistema y una licencia no puede imponer esa elección.
|
||||
</p><p>Este apartado pretende dejar completamente claro lo que se cree que
|
||||
es una consecuencia del resto de esta Licencia.
|
||||
</p></li><li>Si la distribución y/o uso de el Programa está restringida
|
||||
en ciertos países, bien por patentes o por interfaces bajo copyright,
|
||||
el tenedor del copyright que coloca este Programa bajo esta Licencia puede
|
||||
añadir una limitación explícita de distribución
|
||||
geográfica excluyendo esos países, de forma que la distribución
|
||||
se permita sólo en o entre los países no excluidos de esta
|
||||
manera. En ese caso, esta Licencia incorporará la limitación
|
||||
como si estuviese escrita en el cuerpo de esta Licencia.
|
||||
</li><li>La Free Software Foundation puede publicar versiones revisadas y/o nuevas
|
||||
de la Licencia Pública General de tiempo en tiempo. Dichas nuevas
|
||||
versiones serán similares en espíritu a la presente versión,
|
||||
pero pueden ser diferentes en detalles para considerar nuevos problemas
|
||||
o situaciones.
|
||||
<p>Cada versión recibe un número de versión que la
|
||||
distingue de otras. Si el Programa especifica un número de versión
|
||||
de esta Licencia que se refiere a ella y a <20>cualquier versión
|
||||
posterior<EFBFBD>, tienes la opción de seguir los términos
|
||||
y condiciones, bien de esa versión, bien de cualquier versión
|
||||
posterior publicada por la Free Software Foundation. Si el Programa no
|
||||
especifica un número de versión de esta Licencia, puedes
|
||||
escoger cualquier versión publicada por la Free Software Foundation.
|
||||
</p></li><li>Si quiere incorporar partes del Programa en otros programas libres cuyas
|
||||
condiciones de distribución son diferentes, escribe al autor para
|
||||
pedirle permiso. Si el software tiene copyright de la Free Software Foundation,
|
||||
escribe a la Free Software Foundation: algunas veces hacemos excepciones
|
||||
en estos casos. Nuestra decisión estará guiada por el doble
|
||||
objetivo de de preservar la libertad de todos los derivados de nuestro
|
||||
software libre y promover el que se comparta y reutilice el software en
|
||||
general.</li></ol>
|
||||
<h3>FIN DE TÉRMINOS Y CONDICIONES</h3>
|
||||
|
||||
<h3>AUSENCIA DE GARANTÍA</h3>
|
||||
|
||||
<ol start="12" type="1">
|
||||
<li>Como el programa se licencia libre de cargas,
|
||||
no se ofrece ninguna garantía sobre el programa, en todas la extensión
|
||||
permitida por la legislación aplicable. Excepto cuando se indique
|
||||
de otra forma por escrito, los tenedores del copyright y/u otras partes
|
||||
proporcionan el programa <20>tal cual<61>, sin garantía de
|
||||
ninguna clase, bien expresa o implícita, con inclusión, pero
|
||||
sin limitación a las garantías mercantiles implícitas
|
||||
o a la conveniencia para un propósito particular. Cualquier riesgo
|
||||
referente a la calidad y prestaciones del programa es asumido por usted.
|
||||
Si se probase que el Programa es defectuoso, asume el coste de cualquier
|
||||
servicio, reparación o corrección.
|
||||
</li><li>En ningún caso, salvo que lo requiera la legislación aplicable
|
||||
o haya sido acordado por escrito, ningún tenedor del copyright ni
|
||||
ninguna otra parte que modifique y/o redistribuya el Programa según
|
||||
se permite en esta Licencia será responsable ante usted por daños,
|
||||
incluyendo cualquier daño general, especial, incidental o resultante
|
||||
producido por el uso o la imposibilidad de uso del Programa (con inclusión,
|
||||
pero sin limitación a la pérdida de datos o a la generación
|
||||
incorrecta de datos o a pérdidas sufridas por usted o por terceras
|
||||
partes o a un fallo del Programa al funcionar en combinación con
|
||||
cualquier otro programa), incluso si dicho tenedor u otra parte ha sido
|
||||
advertido de la posibilidad de dichos daños.</li></ol>
|
||||
|
||||
<h3>FIN DE TÉRMINOS Y CONDICIONES</h3>
|
||||
|
||||
<h3><a name="APPENDIX">Apéndice</a>: Cómo aplicar estos
|
||||
términos a sus nuevos programas.</h3>
|
||||
<p>
|
||||
Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso posible
|
||||
para el público en general, la mejor forma de conseguirlo es convirtiéndolo
|
||||
en software libre que cualquiera pueda redistribuir y cambiar bajo estos
|
||||
términos.</p>
|
||||
<p>Para hacerlo, añada los siguientes anuncios al programa. Lo más
|
||||
seguro es añadirlos al principio de cada fichero fuente para transmitir
|
||||
lo más efectivamente posible la ausencia de garantía. Además
|
||||
cada fichero debería tener al menos la línea de <20>copyright<68>
|
||||
y un indicador a dónde puede encontrarse el anuncio completo.
|
||||
</p><div><una línea para indicar el nombre
|
||||
del programa y una rápida idea de qué hace.>
|
||||
<p>Copyright (C) 19aa <nombre del autor>
|
||||
</p><p>Este programa es software libre. Puede redistribuirlo y/o modificarlo
|
||||
bajo los términos de la Licencia Pública General de GNU según
|
||||
es publicada por la Free Software Foundation, bien de la versión
|
||||
2 de dicha Licencia o bien (según su elección) de cualquier
|
||||
versión posterior.
|
||||
</p><p>Este programa se distribuye con la esperanza de que sea útil,
|
||||
pero SIN NINGUNA GARANT<4E>A, incluso sin la garantía MERCANTIL
|
||||
implícita o sin garantizar la CONVENIENCIA PARA UN PROP<4F>SITO
|
||||
PARTICULAR. Véase la Licencia Pública General de GNU para
|
||||
más detalles.
|
||||
</p><p>Debería haber recibido una copia de la Licencia Pública
|
||||
General junto con este programa. Si no ha sido así, escriba a la
|
||||
Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.</p></div>
|
||||
<p>
|
||||
Añada también información sobre cómo contactar
|
||||
con usted mediante correo electrónico y postal.</p>
|
||||
<p>Si el programa es interactivo, haga que muestre un pequeño anuncio
|
||||
como el siguiente, cuando comienza a funcionar en modo interactivo:
|
||||
</p><div>Gnomovision versión 69, Copyright
|
||||
(C) 19aa nombre del autor
|
||||
<p>Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para más
|
||||
detalles escriba <20>show w<>.</p></div>
|
||||
<p>
|
||||
Los comandos hipotéticos <20>show w<> y <20>show c<>
|
||||
deberían mostrar las partes adecuadas de la Licencia Pública
|
||||
General. Por supuesto, los comandos que use pueden llamarse de cualquier
|
||||
otra manera. Podrían incluso ser pulsaciones del ratón o
|
||||
elementos de un menú (lo que sea apropiado para su programa).</p>
|
||||
<p>También deberías conseguir que su empleador (si trabaja
|
||||
como programador) o tu Universidad (si es el caso) firme un <20>renuncia
|
||||
de copyright<68> para el programa, si es necesario. A continuación
|
||||
se ofrece un ejemplo, altere los nombres según sea conveniente:
|
||||
</p><ol>
|
||||
<li>
|
||||
Yoyodyne, Inc. mediante este documento renuncia
|
||||
a cualquier interés de derechos de copyright con respecto al programa
|
||||
Gnomovision (que hace pasadas a compiladores) escrito por Pepe Programador.
|
||||
<p><firma de Pepito Grillo>, 20 de diciembre de 1996
|
||||
</p><p>Pepito Grillo, Presidente de Asuntillos Varios.</p></li></ol>
|
||||
<p>
|
||||
Esta Licencia Pública General no permite que incluya sus programas
|
||||
en programas propietarios. Si su programa es una biblioteca de subrutinas,
|
||||
puede considerar más útil el permitir el enlazado de aplicaciones
|
||||
propietarias con la biblioteca. Si este es el caso, use la Licencia Pública
|
||||
General de GNU para Bibliotecas en lugar de esta Licencia.</p>
|
||||
|
||||
</body></html>
|
||||
<h3>
|
||||
<a name="APPENDIX">Apéndice</a>: Cómo aplicar estos
|
||||
términos a sus nuevos programas.
|
||||
</h3>
|
||||
<p>
|
||||
Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso
|
||||
posible para el público en general, la mejor forma de conseguirlo
|
||||
es convirtiéndolo en software libre que cualquiera pueda
|
||||
redistribuir y cambiar bajo estos términos.
|
||||
</p>
|
||||
<p>
|
||||
Para hacerlo, añada los siguientes anuncios al programa. Lo
|
||||
más seguro es añadirlos al principio de cada fichero fuente
|
||||
para transmitir lo más efectivamente posible la ausencia de
|
||||
garantía. Además cada fichero debería tener al menos
|
||||
la línea de <20>copyright<68> y un indicador a dónde puede
|
||||
encontrarse el anuncio completo.
|
||||
</p>
|
||||
<div>
|
||||
<una línea para indicar el nombre del programa y una
|
||||
rápida idea de qué hace.>
|
||||
<p>Copyright (C) 19aa <nombre del autor></p>
|
||||
<p>
|
||||
Este programa es software libre. Puede redistribuirlo y/o modificarlo
|
||||
bajo los términos de la Licencia Pública General de GNU
|
||||
según es publicada por la Free Software Foundation, bien de la
|
||||
versión 2 de dicha Licencia o bien (según su
|
||||
elección) de cualquier versión posterior.
|
||||
</p>
|
||||
<p>
|
||||
Este programa se distribuye con la esperanza de que sea útil,
|
||||
pero SIN NINGUNA GARANT<4E>A, incluso sin la garantía MERCANTIL
|
||||
implícita o sin garantizar la CONVENIENCIA PARA UN PROP<4F>SITO
|
||||
PARTICULAR. Véase la Licencia Pública General de GNU para
|
||||
más detalles.
|
||||
</p>
|
||||
<p>
|
||||
Debería haber recibido una copia de la Licencia Pública
|
||||
General junto con este programa. Si no ha sido así, escriba a la
|
||||
Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139,
|
||||
EEUU.
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
Añada también información sobre cómo contactar
|
||||
con usted mediante correo electrónico y postal.
|
||||
</p>
|
||||
<p>
|
||||
Si el programa es interactivo, haga que muestre un pequeño anuncio
|
||||
como el siguiente, cuando comienza a funcionar en modo interactivo:
|
||||
</p>
|
||||
<div>
|
||||
Gnomovision versión 69, Copyright (C) 19aa nombre del autor
|
||||
<p>
|
||||
Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para
|
||||
más detalles escriba <20>show w<>.
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
Los comandos hipotéticos <20>show w<> y <20>show c<> deberían
|
||||
mostrar las partes adecuadas de la Licencia Pública General. Por
|
||||
supuesto, los comandos que use pueden llamarse de cualquier otra manera.
|
||||
Podrían incluso ser pulsaciones del ratón o elementos de un
|
||||
menú (lo que sea apropiado para su programa).
|
||||
</p>
|
||||
<p>
|
||||
También deberías conseguir que su empleador (si trabaja como
|
||||
programador) o tu Universidad (si es el caso) firme un <20>renuncia de
|
||||
copyright<68> para el programa, si es necesario. A continuación se
|
||||
ofrece un ejemplo, altere los nombres según sea conveniente:
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Yoyodyne, Inc. mediante este documento renuncia a cualquier
|
||||
interés de derechos de copyright con respecto al programa
|
||||
Gnomovision (que hace pasadas a compiladores) escrito por Pepe
|
||||
Programador.
|
||||
<p><firma de Pepito Grillo>, 20 de diciembre de 1996</p>
|
||||
<p>Pepito Grillo, Presidente de Asuntillos Varios.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
Esta Licencia Pública General no permite que incluya sus programas
|
||||
en programas propietarios. Si su programa es una biblioteca de subrutinas,
|
||||
puede considerar más útil el permitir el enlazado de
|
||||
aplicaciones propietarias con la biblioteca. Si este es el caso, use la
|
||||
Licencia Pública General de GNU para Bibliotecas en lugar de esta
|
||||
Licencia.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,437 +1,553 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Licence Publique Générale GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Licence Publique Générale GNU</h2>
|
||||
<head>
|
||||
<title>Licence Publique Générale GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Licence Publique Générale GNU</h2>
|
||||
|
||||
<p><b>Benjamin Drieu, APRIL (<a href="mailto:bdrieu@april.org">bdrieu@april.org</a>), Mélanie
|
||||
Clément-Fontaine (<a href="mailto:melanie@amberlab.net">melanie@amberlab.net</a>),
|
||||
Arnaud Fontaine (<a href="mailto:arnaud@crao.net">arnaud@crao.net</a>), Lo<4C>c Dachary
|
||||
(<a href="mailto:loic@gnu.org">loic@gnu.org</a>), Frédéric Couchet (<a href="mailto:fcouchet@fsffrance.org">fcouchet@fsffrance.org</a>).
|
||||
</b></p>
|
||||
<h3>Advertiment</h3>
|
||||
<p>
|
||||
This is an unofficial translation of the GNU General Public
|
||||
License into French. It was not published by the Free Software
|
||||
Foundation, and does not legally state the distribution terms
|
||||
for software that uses the GNU GPL--only the original English
|
||||
text of the GNU GPL does that. However, we hope that this
|
||||
translation will help French speakers understand the GNU GPL
|
||||
better.
|
||||
</p>
|
||||
<p>
|
||||
<b
|
||||
>Benjamin Drieu, APRIL (<a href="mailto:bdrieu@april.org"
|
||||
>bdrieu@april.org</a
|
||||
>), Mélanie Clément-Fontaine (<a
|
||||
href="mailto:melanie@amberlab.net"
|
||||
>melanie@amberlab.net</a
|
||||
>), Arnaud Fontaine (<a href="mailto:arnaud@crao.net">arnaud@crao.net</a
|
||||
>), Lo<4C>c Dachary (<a href="mailto:loic@gnu.org">loic@gnu.org</a>),
|
||||
Frédéric Couchet (<a href="mailto:fcouchet@fsffrance.org"
|
||||
>fcouchet@fsffrance.org</a
|
||||
>).
|
||||
</b>
|
||||
</p>
|
||||
<h3>Advertiment</h3>
|
||||
<p>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
French. It was not published by the Free Software Foundation, and does not
|
||||
legally state the distribution terms for software that uses the GNU
|
||||
GPL--only the original English text of the GNU GPL does that. However, we
|
||||
hope that this translation will help French speakers understand the GNU
|
||||
GPL better.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ceci est une traduction non officielle de la GNU General Public
|
||||
License en fran<61>ais. Elle n'a pas été publiée par la Free
|
||||
Software Foundation, et ne détermine pas les termes de
|
||||
distribution pour les logiciels qui utilisent la GNU GPL, seul
|
||||
le texte anglais original de la GNU GPL déterminent ces
|
||||
termes. Cependant, nous espérons que cette traduction aidera les
|
||||
francophones à mieux comprendre la GNU GPL.
|
||||
</p>
|
||||
<p>
|
||||
Ceci est une traduction non officielle de la GNU General Public License en
|
||||
fran<61>ais. Elle n'a pas été publiée par la Free
|
||||
Software Foundation, et ne détermine pas les termes de distribution
|
||||
pour les logiciels qui utilisent la GNU GPL, seul le texte anglais
|
||||
original de la GNU GPL déterminent ces termes. Cependant, nous
|
||||
espérons que cette traduction aidera les francophones à
|
||||
mieux comprendre la GNU GPL.
|
||||
</p>
|
||||
|
||||
<h2>Licence Publique Générale GNU</h2>
|
||||
<p>Les licences de la plupart des logiciels sont
|
||||
con<EFBFBD>ues pour vous enlever toute liberté de les partager et de les
|
||||
modifier. </p>
|
||||
<p>A contrario, la Licence Publique Générale est destinée à garantir
|
||||
votre liberté de partager et de modifier les logiciels libres,
|
||||
et à assurer que ces logiciels soient libres pour tous leurs
|
||||
utilisateurs.</p>
|
||||
<p>La présente Licence Publique Générale s'applique à la
|
||||
plupart des logiciels de la Free Software Foundation, ainsi
|
||||
qu'à tout autre programme pour lequel ses auteurs s'engagent à
|
||||
l'utiliser.</p>
|
||||
<p>(Certains autres logiciels de la Free Software Foundation
|
||||
sont couverts par la GNU Lesser General Public License à la place.)</p>
|
||||
<p>Vous pouvez aussi l'appliquer aux programmes qui sont les v<>tres.</p>
|
||||
<p>Quand nous parlons de logiciels libres, nous parlons de
|
||||
liberté, non de prix.</p>
|
||||
<p>Nos licences publiques générales sont con<6F>ues pour vous donner
|
||||
l'assurance d'<27>tre libres de distribuer des copies des
|
||||
logiciels libres (et de facturer ce service, si vous le
|
||||
souhaitez), de recevoir le code source ou de pouvoir
|
||||
l'obtenir si vous le souhaitez, de pouvoir modifier les
|
||||
logiciels ou en utiliser des éléments dans de nouveaux
|
||||
programmes libres et de savoir que vous pouvez le
|
||||
faire. </p>
|
||||
<p>Pour protéger vos droits, il nous est nécessaire d'imposer
|
||||
des limitations qui interdisent à quiconque de vous refuser
|
||||
ces droits ou de vous demander d'y renoncer.</p>
|
||||
<p>Certaines responsabilités vous incombent en raison de ces
|
||||
limitations si vous distribuez des copies de ces logiciels, ou
|
||||
si vous les modifiez.</p>
|
||||
<p>Par exemple, si vous distribuez des copies d'un tel
|
||||
programme, à titre gratuit ou contre une rémunération, vous devez
|
||||
accorder aux destinataires tous les droits dont vous disposez.
|
||||
</p>
|
||||
<p>Vous devez vous assurer qu'eux aussi re<72>oivent ou puissent
|
||||
disposer du code source.</p>
|
||||
<p>Et vous devez leur montrer les présentes conditions afin
|
||||
qu'ils aient connaissance de leurs droits.</p>
|
||||
<p>Nous protégeons vos droits en deux étapes : (1) nous sommes
|
||||
titulaires des droits d'auteur du logiciel, et
|
||||
(2) nous vous delivrons cette licence, qui vous donne
|
||||
l'autorisation légale de copier, distribuer et/ou modifier
|
||||
le logiciel.</p>
|
||||
<p>En outre, pour la protection de chaque auteur ainsi que la n<>tre,
|
||||
nous voulons nous assurer que chacun comprenne que ce logiciel libre ne fait l'objet
|
||||
d'aucune garantie.</p>
|
||||
<p>Si le logiciel est modifié par quelqu'un d'autre puis
|
||||
transmis à des tiers, nous voulons que les destinataires
|
||||
soient mis au courant que ce qu'ils ont re<72>u n'est pas le logiciel d'origine, de sorte
|
||||
que tout problème introduit par d'autres ne puisse entacher
|
||||
la réputation de
|
||||
l'auteur originel.</p>
|
||||
<p>En définitive, un programme libre restera à la merci des
|
||||
brevets de logiciels.</p>
|
||||
<p>Nous souhaitons éviter le risque que les redistributeurs
|
||||
d'un programme libre fassent des demandes individuelles de
|
||||
licence de brevet, ceci ayant pour effet de rendre le programme
|
||||
propriétaire.
|
||||
</p>
|
||||
<p>Pour éviter cela, nous établissons clairement que toute licence de brevet
|
||||
doit <20>tre concédée de fa<66>on a ce que l'usage en soit libre pour tous
|
||||
ou bien qu'aucune licence ne soit concédée.</p>
|
||||
<p>Les termes exacts et les conditions de copie, distribution et
|
||||
modification sont les suivants:</p>
|
||||
<h2>Conditions de copie, distribution
|
||||
et modification de la Licence Publique Générale GNU.</h2>
|
||||
<p>0. La présente Licence s'applique à tout programme
|
||||
ou tout autre ouvrage contenant un avis, apposé par le titulaire des
|
||||
droits d'auteur, stipulant qu'il peut <20>tre distribué au titre
|
||||
des conditions de la présente Licence Publique
|
||||
Générale.</p>
|
||||
<p>Ci-après, le "Programme" désigne l'un quelconque de ces
|
||||
programmes ou ouvrages, et un "ouvrage fondé sur le Programme"
|
||||
désigne soit le Programme, soit un ouvrage qui en dérive au
|
||||
titre des lois sur le droit d'auteur: en d'autres termes,
|
||||
un ouvrage contenant le Programme ou une partie de
|
||||
ce dernier, soit à l'identique, soit avec des modifications et/ou
|
||||
traduit dans un autre langage.</p>
|
||||
<p>(Ci-après, le terme "modification" implique, sans s'y réduire, le terme traduction)</p>
|
||||
<p>Chaque concessionaire sera désigné par "vous".</p>
|
||||
<p>Les activités autres que la copie, la distribution et
|
||||
la modification ne sont pas couvertes par la présente Licence
|
||||
; elles sont hors de son champ d'application.</p>
|
||||
<p>L'opération consistant à exécuter le Programme n'est soumise à aucune limitation
|
||||
et les sorties du programme ne sont couvertes que si leur
|
||||
contenu constitue un ouvrage fondé sur le Programme
|
||||
(indépendamment du fait qu'il ait été réalisé par l'exécution
|
||||
du Programme).</p>
|
||||
<p>La validité de ce qui précède dépend de ce que fait le
|
||||
Programme.</p>
|
||||
<p>1. Vous pouvez copier et distribuer des copies à
|
||||
l'identique du code source du Programme tel que vous l'avez
|
||||
re<EFBFBD>u, sur n'importe quel support, du moment que vous apposiez
|
||||
sur chaque copie, de manière ad hoc et parfaitement
|
||||
visible, l'avis de droit d'auteur adéquat et
|
||||
une exonération de garantie ; que vous gardiez intacts tous les
|
||||
avis faisant référence à la présente Licence et à l'absence de
|
||||
toute garantie ; et que vous fournissiez à tout destinataire du
|
||||
Programme autre que vous m<>me un exemplaire de la présente
|
||||
Licence en m<>me temps que le Programme.</p>
|
||||
<p>Vous pouvez faire payer l'acte physique de
|
||||
transmission d'une copie, et vous pouvez, à votre discrétion,
|
||||
proposer une garantie contre rémunération.</p>
|
||||
<p>2. Vous pouvez modifier votre copie ou des copies du Programme
|
||||
ou n'importe quelle partie de celui-ci, créant ainsi un ouvrage
|
||||
fondé sur le Programme, et copier et distribuer de telles modifications ou ouvrage selon les
|
||||
termes de l'Article 1 ci-dessus, à condition de vous conformer également
|
||||
à chacune des obligations suivantes:</p>
|
||||
<p>a) Vous devez munir les fichiers modifiés d'avis bien visibles
|
||||
stipulants que vous avez modifié ces
|
||||
fichiers, ainsi que la date de chaque modification;</p>
|
||||
<p>b) Vous devez prendre les dispositions nécessaires pour que
|
||||
tout ouvrage
|
||||
que vous distribuez ou publiez, et qui, en totalité ou en partie,
|
||||
contient ou est fondé sur le Programme - ou une partie
|
||||
quelconque de ce dernier - soit concédé comme un tout,
|
||||
à titre gratuit, à n'importe quel tiers, au titre des conditions
|
||||
de la présente Licence.</p>
|
||||
<p>c) Si le programme modifié lit habituellement des instructions
|
||||
de fa<66>on interactive lorsqu'on l'exécute, vous devez,
|
||||
quand il commence son exécution pour ladite
|
||||
utilisation interactive de la manière la plus usuelle, faire
|
||||
en sorte qu'il imprime ou affiche une annonce
|
||||
comprenant un avis de droit d'auteur ad hoc, et un avis
|
||||
stipulant qu'il n'y a pas de garantie (ou bien indiquant que
|
||||
c'est vous qui fournissez la garantie), et que
|
||||
les utilisateurs peuvent redistribuer le programme en respectant
|
||||
les présentes obligations, et expliquant à l'utilisateur comment
|
||||
voir une copie de la présente Licence.</p>
|
||||
<p>(Exception : si le Programme est lui-m<>me interactif
|
||||
mais n'imprime pas habituellement une telle annonce, votre
|
||||
ouvrage fondé sur le Programme n'est pas obligé
|
||||
d'imprimer une annonce).</p>
|
||||
<p>Ces obligations s'appliquent à l'ouvrage modifié
|
||||
pris comme un tout.
|
||||
</p>
|
||||
<p>Si des éléments identifiables
|
||||
de cet ouvrage ne sont pas fondées sur le Programme et peuvent
|
||||
raisonnablement <20>tre considérées comme des ouvrages indépendants
|
||||
distincts en eux m<>mes, alors la présente Licence et
|
||||
ses conditions ne
|
||||
s'appliquent pas à ces éléments lorsque vous les distribuez
|
||||
en tant qu'ouvrages distincts.</p>
|
||||
<p>
|
||||
Mais lorsque vous distribuez ces m<>mes éléments comme partie
|
||||
d'un tout, lequel constitue un ouvrage fondé sur le Programme,
|
||||
la distribution de ce tout doit <20>tre soumise aux conditions de
|
||||
la présente Licence, et les autorisations qu'elle octroie aux
|
||||
autres concessionaires s'étendent à l'ensemble de l'ouvrage et
|
||||
par conséquent à chaque et toute partie indifférement de qui
|
||||
l'a écrite.
|
||||
</p>
|
||||
<p>Par conséquent, l'objet du présent article n'est pas de revendiquer des droits
|
||||
ou de contester vos droits sur un ouvrage entièrement écrit par
|
||||
vous; son objet est plut<75>t d'exercer le droit de contr<74>ler
|
||||
la distribution d'ouvrages dérivés ou d'ouvrages collectifs fondés
|
||||
sur le Programme.
|
||||
</p>
|
||||
<p>
|
||||
De plus, la simple proximité du Programme avec un autre
|
||||
ouvrage qui n'est pas fondé sur le Programme (ou un ouvrage
|
||||
fondé sur le Programme) sur une partition d'un espace de
|
||||
stockage ou un support de distribution ne place pas cet autre
|
||||
ouvrage dans le champ d'application de la présente Licence.
|
||||
</p>
|
||||
<p>3. Vous pouvez copier et distribuer le Programme (ou un
|
||||
ouvrage fondé sur lui, selon l'Article 2) sous forme de code
|
||||
objet ou d'exécutable, selon les termes des Articles 1 et 2
|
||||
ci-dessus, à condition que vous accomplissiez l'un des points
|
||||
suivants :</p>
|
||||
<p>a) L'accompagner de l'intégralité du code source correspondant,
|
||||
sous une forme lisible par un ordinateur, lequel doit <20>tre distribué
|
||||
au titre
|
||||
des termes des Articles 1 et 2 ci-dessus, sur un support
|
||||
habituellement utilisé pour l'échange de logiciels; ou,</p>
|
||||
<p>b) L'accompagner d'une proposition écrite, valable pendant
|
||||
au moins trois ans, de fournir à tout tiers, à un tarif qui
|
||||
ne soit pas supérieur à ce que vous co<63>te l'acte physique de
|
||||
réaliser une distribution source, une copie intégrale du code
|
||||
source correspondant sous une forme lisible par un
|
||||
ordinateur, qui sera distribuée au titre des termes des
|
||||
Articles 1 et 2 ci-dessus, sur un support habituellement
|
||||
utilisé pour l'échange de logiciels; ou,
|
||||
</p>
|
||||
<p>c) L'accompagner des informations re<72>ues par vous concernant la proposition de distribution du code source correspondant. (Cette
|
||||
solution n'est autorisée que dans le cas d'une distribution non-commerciale
|
||||
et seulement si vous avez re<72>u le programme sous forme de code objet ou
|
||||
d'éxécutable accompagné d'une telle proposition - en conformité avec le
|
||||
sous-Article b ci-dessus.)
|
||||
</p>
|
||||
<p>Le code source d'un ouvrage désigne la forme favorite pour
|
||||
travailler à des modifications de cet ouvrage. Pour un
|
||||
ouvrage exécutable, le code source intégral désigne la
|
||||
totalité du code source de la totalité des modules qu'il
|
||||
contient, ainsi que les éventuels fichiers de définition des
|
||||
interfaces qui y sont associés, ainsi que les scripts utilisés
|
||||
pour contr<74>ler la compilation et l'installation de
|
||||
l'exécutable. Cependant, par exception spéciale, le code
|
||||
source distribué n'est pas censé inclure quoi que ce soit de
|
||||
normalement distribué (que ce soit sous forme source ou
|
||||
binaire) avec les composants principaux (compilateur, noyau,
|
||||
et autre) du système d'exploitation sur lequel l'exécutable
|
||||
tourne, à moins que ce composant lui-m<>me n'accompagne
|
||||
l'exécutable.
|
||||
</p>
|
||||
<p>
|
||||
Si distribuer un exécutable ou un code objet consiste à
|
||||
offrir un accès permettant leur copie depuis un
|
||||
endroit particulier, alors l'offre d'un accès équivalent pour
|
||||
copier le code source depuis le m<>me endroit compte comme une
|
||||
distribution du code source - m<>me si les tiers ne sont pas
|
||||
contraints de copier le source en m<>me temps que le code
|
||||
objet.
|
||||
</p>
|
||||
<p>4. Vous ne pouvez copier, modifier, concéder en sous-licence, ou distribuer
|
||||
le Programme, sauf tel qu'expressément prévu par la présente Licence.
|
||||
Toute tentative de copier, modifier, concéder en sous-licence, ou
|
||||
distribuer le Programme d'une autre manière est réputée non valable, et met
|
||||
immédiatement fin à vos droits au titre de la présente Licence.
|
||||
Toutefois, les tiers ayant re<72>u de vous des copies, ou des droits,
|
||||
au titre de la présente Licence ne verront pas leurs autorisations résiliées
|
||||
aussi longtemps que ledits tiers se conforment pleinement à elle.
|
||||
</p>
|
||||
<p>5. Vous n'<27>tes pas obligé d'accepter la présente Licence étant donné que vous ne
|
||||
l'avez pas signée. Cependant, rien d'autre
|
||||
ne vous accorde l'autorisation de modifier ou
|
||||
distribuer le Programme ou les ouvrages fondés sur lui. Ces actions sont
|
||||
interdites par la loi si vous n'acceptez pas la présente Licence.
|
||||
En conséquence, en modifiant ou
|
||||
distribuant le Programme (ou un ouvrage quelconque fondé sur
|
||||
le Programme), vous signifiez votre acceptation de la présente Licence en le faisant,
|
||||
et de toutes ses conditions concernant la copie, la
|
||||
distribution ou la modification du Programme ou d'ouvrages fondés
|
||||
sur lui.</p>
|
||||
<p>
|
||||
6. Chaque fois que vous redistribuez le Programme (ou n'importe quel
|
||||
ouvrage fondé sur le Programme), une licence est automatiquement
|
||||
concédée au destinataire par le concédant originel de la licence,
|
||||
l'autorisant à
|
||||
copier, distribuer ou modifier le Programme, sous réserve
|
||||
des présentes conditions. Vous ne pouvez imposer
|
||||
une quelconque limitation supplémentaire à l'exercice des
|
||||
droits octroyés au titre des présentes par le destinataire. Vous
|
||||
n'avez pas la responsabilité d'imposer le respect de
|
||||
la présente Licence à des tiers. </p>
|
||||
<p>
|
||||
7. Si, conséquement à une décision de justice ou l'allégation
|
||||
d'une transgression de brevet ou pour toute autre raison (non limitée à un
|
||||
probleme de brevet), des obligations vous sont imposées (que ce soit par jugement,
|
||||
conciliation ou autre) qui contredisent les conditions de la présente Licence, elles
|
||||
ne vous excusent pas des conditions de la présente Licence. Si vous ne pouvez
|
||||
distribuer de manière à satisfaire simultanément vos obligations au titre
|
||||
de la présente Licence et toute autre obligation pertinente, alors il en découle que vous ne pouvez pas du tout distribuer le Programme. Par exemple,
|
||||
si une licence de brevet ne permettait pas une redistribution sans redevance du
|
||||
Programme par tous ceux qui re<72>oivent une copie directement ou indirectement
|
||||
par votre intermédiaire, alors la seule fa<66>on pour vous de satisfaire à la
|
||||
fois à la licence du brevet et à la présente Licence serait de vous abstenir
|
||||
totalement de toute distribution du Programme.
|
||||
</p>
|
||||
<p>Si une partie quelconque de cet article est tenue pour
|
||||
nulle ou inopposable dans une circonstance particulière
|
||||
quelconque, l'intention est que le reste de l'article
|
||||
s'applique. La totalité de la section s'appliquera dans toutes les
|
||||
autres circonstances.</p>
|
||||
<p>Cet article n'a pas pour but de vous induire à transgresser un
|
||||
quelconque brevet ou d'autres revendications à un droit de propriété ou
|
||||
à contester la validité de la moindre de ces revendications ; cet article a pour
|
||||
seul objectif de protéger l'intégrité du système de distribution
|
||||
du logiciel libre, qui est mis en oeuvre par la pratique des licenses
|
||||
publiques. De nombreuses personnes ont fait de généreuses contributions
|
||||
au large spectre de logiciels distribués par ce système en se fiant à
|
||||
l'application cohérente de ce système ; il appartient à chaque auteur/donateur
|
||||
de décider si il ou elle veut distribuer du logiciel par l'intermédiaire
|
||||
d'un quelconque autre système et un concessionaire ne peut imposer ce
|
||||
choix.
|
||||
</p>
|
||||
<p>Cet article a pour but de rendre totalement limpide ce que l'on pense
|
||||
<EFBFBD>tre une conséquence du reste de la présente Licence.</p>
|
||||
<p>8. Si la distribution et/ou l'utilisation du Programme est limitée
|
||||
dans certains pays que ce soit par des brevets ou par des interfaces soumises
|
||||
au droit d'auteur, le titulaire originel des droits d'auteur
|
||||
qui décide de couvrir le Programme par la présente Licence peut ajouter
|
||||
une limitation géographique de distribution explicite qui exclue ces pays afin
|
||||
que la distribution soit permise seulement dans ou entre les pays qui ne sont
|
||||
pas ainsi exclus. Dans ce cas, la présente Licence incorpore la limitation
|
||||
comme si elle était écrite dans le corps de la présente Licence.
|
||||
</p>
|
||||
<p>9. La Free Software Foundation peut, de temps à autre, publier des
|
||||
versions révisées et/ou nouvelles de la Licence Publique Générale. De telles
|
||||
nouvelles versions seront similaires à la présente version dans l'esprit
|
||||
mais pourront différer dans le détail pour prendre en compte
|
||||
de nouvelles problématiques ou inquiétudes.
|
||||
</p>
|
||||
<p>Chaque version possède un numéro de version la distinguant. Si le Programme
|
||||
précise le numéro de version de la présente Licence qui s'y applique
|
||||
et "une version ultérieure quelconque", vous avez le choix
|
||||
de suivre les
|
||||
conditions de
|
||||
la présente version ou de toute autre version ultérieure publiée par la
|
||||
Free Software Foundation. Si le Programme ne spécifie aucun numéro de
|
||||
version de la présente Licence, vous pouvez choisir une version quelconque
|
||||
publiée par la Free Software Foundation à quelque moment que ce soit.</p>
|
||||
<p>10. Si vous souhaitez incorporer des parties du Programme
|
||||
dans d'autres programmes libres dont les conditions de
|
||||
distribution sont différentes, écrivez à l'auteur pour lui en demander
|
||||
l'autorisation. Pour les logiciels dont la Free Software Foundation est
|
||||
titulaire des droits d'auteur, écrivez à la Free Software Foundation ;
|
||||
nous faisons parfois des exceptions dans ce sens. Notre décision sera guidée
|
||||
par le double objectif de préserver le statut libre de tous les dérivés de nos
|
||||
logiciels libres et de promouvoir le partage et la réutilisation des logiciels
|
||||
en général.
|
||||
</p>
|
||||
<h2>ABSENCE DE GARANTIE</h2>
|
||||
<p>11. COMME LA LICENCE DU PROGRAMME EST CONCEDEE A TITRE GRATUIT,
|
||||
AUCUNE GARANTIE NE S'APPLIQUE AU PROGRAMME, DANS LES LIMITES
|
||||
AUTORISEES PAR LA LOI APPLICABLE. SAUF MENTION CONTRAIRE ECRITE,
|
||||
LES TITULAIRES DU DROIT D'AUTEUR ET/OU LES AUTRES PARTIES FOURNISSENT
|
||||
LE PROGRAMME "EN L'ETAT", SANS AUCUNE GARANTIE DE
|
||||
QUELQUE NATURE QUE CE SOIT, EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS
|
||||
SANS Y ETRE LIMITE, LES GARANTIES IMPLICITES DE COMMERCIABILITE ET
|
||||
DE LA CONFORMITE A UNE UTILISATION PARTICULIERE. VOUS
|
||||
ASSUMEZ LA TOTALITE DES RISQUES LIES A LA QUALITE ET AUX PERFORMANCES DU PROGRAMME.
|
||||
SI LE PROGRAMME SE REVELAIT DEFECTUEUX, LE COUT DE L'ENTRETIEN,
|
||||
DES REPARATIONS OU DES CORRECTIONS NECESSAIRES
|
||||
VOUS INCOMBENT INTEGRALEMENT.</p>
|
||||
<p>12. EN AUCUN CAS, SAUF LORSQUE LA LOI APPLICABLE OU UNE CONVENTION ECRITE L'EXIGE, UN TITULAIRE DE DROIT D'AUTEUR QUEL QU'IL SOIT, OU TOUTE PARTIE QUI POURRAIT MODIFIER ET/OU REDISTRIBUER LE PROGRAMME COMME PERMIS CI-DESSUS, NE POURRAIT ETRE TENU POUR RESPONSABLE A VOTRE EGARD DES DOMMAGES, INCLUANT LES DOMMAGES GENERIQUES, SPECIFIQUES, SECONDAIRES OU CONSECUTIFS, RESULTANT DE L'UTILISATION OU DE L'INCAPACITE D'UTILISER LE PROGRAMME (Y COMPRIS, MAIS SANS Y ETRE LIMITE, LA PERTE DE DONNEES, OU LE FAIT QUE DES DONNEES SOIENT RENDUES IMPRECISES, OU LES PERTES EPROUVEES PAR VOUS OU PAR DES TIERS, OU LE FAIT QUE LE PROGRAMME ECHOUE A INTEROPERER AVEC UN AUTRE PROGRAMME QUEL QU'IL SOIT) MEME SI LE DIT TITULAIRE DU DROIT D'AUTEUR OU LE PARTIE CONCERNEE A ETE AVERTI DE L'EVENTUALITE DE TELS DOMMAGES.
|
||||
</p>
|
||||
<h2>FIN DES CONDITIONS</h2>
|
||||
<h2>Comment appliquer ces conditions à vos nouveaux programmes</h2>
|
||||
<p> Si vous développez un nouveau programme, et si vous voulez qu'il soit de la plus grande utilité possible pour le public, le meilleur moyen d'y parvenir est d'en faire un logiciel libre que chacun peut redistribuer et modifier au titre des présentes conditions.</p>
|
||||
<p>Pour ce faire, munissez le programme des avis qui suivent.
|
||||
Le plus s<>r est de les ajouter au début de chaque fichier source
|
||||
pour véhiculer le plus efficacement possible l'absence
|
||||
de toute garantie; chaque fichier devrait aussi contenir au moins
|
||||
la ligne "copyright" et une indication de l'endroit où se trouve l'avis
|
||||
compl<EFBFBD>t.
|
||||
</p>
|
||||
<p> [Une ligne donnant le nom du programme et une courte idée de ce qu'il fait.]
|
||||
</p>
|
||||
<p>
|
||||
Copyright (C) [année] [nom de l'auteur]
|
||||
</p>
|
||||
<p>
|
||||
Ce programme est un logiciel libre ; vous pouvez le
|
||||
redistribuer et/ou le modifier au titre des clauses de la
|
||||
Licence Publique Générale GNU, telle que publiée par la Free
|
||||
Software Foundation ; soit la version 2 de la Licence, ou (à
|
||||
votre discrétion) une version ultérieure quelconque.
|
||||
</p>
|
||||
<p>
|
||||
Ce programme est distribué dans l'espoir qu'il sera utile,
|
||||
mais SANS AUCUNE GARANTIE ; sans m<>me une garantie implicite de
|
||||
COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION
|
||||
PARTICULIERE. Voir la Licence Publique
|
||||
Générale GNU pour plus de détails.
|
||||
</p>
|
||||
<p>
|
||||
Vous devriez avoir re<72>u un exemplaire de la Licence Publique
|
||||
Générale GNU avec ce programme ; si ce n'est pas le cas,
|
||||
écrivez à la Free Software Foundation Inc., 51 Franklin
|
||||
Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
|
||||
<p>Ajoutez aussi des informations sur la manière de vous contacter
|
||||
par courrier électronique et courrier postal.</p>
|
||||
<p>Si le programme est interactif, faites en sorte qu'il
|
||||
affiche un court avis tel que celui-ci lorsqu'il démarre en
|
||||
mode interactif :
|
||||
</p>
|
||||
<p>Gnomovision version 69, Copyright (C) année nom de l'auteur
|
||||
Gnomovision n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE ; pour plus de
|
||||
détails tapez "show w". Ceci est un logiciel libre et vous <20>tes
|
||||
invité à le redistribuer en respectant certaines obligations ; pour plus
|
||||
de détails tapez "show c".</p>
|
||||
<p>Les instructions hypothétiques "show w" et "show c" sont supposées montrer
|
||||
les parties ad hoc de la Licence Publique Générale. Bien
|
||||
entendu, les instructions que vous utilisez peuvent porter d'autres
|
||||
noms que "show w" et "show c" ; elles peuvent m<>me <20>tre des
|
||||
clics de souris ou des éléments d'un menu ou tout ce qui convient à
|
||||
votre programme.</p>
|
||||
<p>Vous devriez aussi obtenir de votre employeur (si vous
|
||||
travaillez en tant que développeur) ou de votre école, si c'est
|
||||
le cas, qu'il (ou elle) signe une "renonciation aux droits
|
||||
d'auteur" concernant le programme, si nécessaire. Voici un
|
||||
exemple (changez les noms) :
|
||||
</p>
|
||||
<p>Yoyodyne, Inc., déclare par la présente renoncer à toute prétention
|
||||
sur les droits d'auteur du programme "Gnomovision" (qui fait des
|
||||
avances aux compilateurs) écrit par James Hacker.
|
||||
</p>
|
||||
<p>
|
||||
[signature de Ty Coon], 1er avril 1989
|
||||
</p>
|
||||
<p>
|
||||
Ty Coon, President du Vice</p>
|
||||
<p>La présente Licence Publique Générale n'autorise pas l'incorporation de votre
|
||||
programme dans des programmes
|
||||
propriétaires. Si votre programme est une bibliothèque de
|
||||
sous-programmes, vous pouvez considérer plus utile
|
||||
d'autoriser l'édition de liens d'applications propriétaires avec
|
||||
la bibliothèque. Si c'est ce que vous voulez faire, utilisez la
|
||||
GNU Lesser General Public License au lieu de la présente Licence.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
<h2>Licence Publique Générale GNU</h2>
|
||||
<p>
|
||||
Les licences de la plupart des logiciels sont con<6F>ues pour vous enlever
|
||||
toute liberté de les partager et de les modifier.
|
||||
</p>
|
||||
<p>
|
||||
A contrario, la Licence Publique Générale est
|
||||
destinée à garantir votre liberté de partager et de
|
||||
modifier les logiciels libres, et à assurer que ces logiciels
|
||||
soient libres pour tous leurs utilisateurs.
|
||||
</p>
|
||||
<p>
|
||||
La présente Licence Publique Générale s'applique
|
||||
à la plupart des logiciels de la Free Software Foundation, ainsi
|
||||
qu'à tout autre programme pour lequel ses auteurs s'engagent
|
||||
à l'utiliser.
|
||||
</p>
|
||||
<p>
|
||||
(Certains autres logiciels de la Free Software Foundation sont couverts
|
||||
par la GNU Lesser General Public License à la place.)
|
||||
</p>
|
||||
<p>Vous pouvez aussi l'appliquer aux programmes qui sont les v<>tres.</p>
|
||||
<p>
|
||||
Quand nous parlons de logiciels libres, nous parlons de liberté,
|
||||
non de prix.
|
||||
</p>
|
||||
<p>
|
||||
Nos licences publiques générales sont con<6F>ues pour vous
|
||||
donner l'assurance d'<27>tre libres de distribuer des copies des logiciels
|
||||
libres (et de facturer ce service, si vous le souhaitez), de recevoir le
|
||||
code source ou de pouvoir l'obtenir si vous le souhaitez, de pouvoir
|
||||
modifier les logiciels ou en utiliser des éléments dans de
|
||||
nouveaux programmes libres et de savoir que vous pouvez le faire.
|
||||
</p>
|
||||
<p>
|
||||
Pour protéger vos droits, il nous est nécessaire d'imposer
|
||||
des limitations qui interdisent à quiconque de vous refuser ces
|
||||
droits ou de vous demander d'y renoncer.
|
||||
</p>
|
||||
<p>
|
||||
Certaines responsabilités vous incombent en raison de ces
|
||||
limitations si vous distribuez des copies de ces logiciels, ou si vous les
|
||||
modifiez.
|
||||
</p>
|
||||
<p>
|
||||
Par exemple, si vous distribuez des copies d'un tel programme, à
|
||||
titre gratuit ou contre une rémunération, vous devez
|
||||
accorder aux destinataires tous les droits dont vous disposez.
|
||||
</p>
|
||||
<p>
|
||||
Vous devez vous assurer qu'eux aussi re<72>oivent ou puissent disposer du
|
||||
code source.
|
||||
</p>
|
||||
<p>
|
||||
Et vous devez leur montrer les présentes conditions afin qu'ils
|
||||
aient connaissance de leurs droits.
|
||||
</p>
|
||||
<p>
|
||||
Nous protégeons vos droits en deux étapes : (1) nous sommes
|
||||
titulaires des droits d'auteur du logiciel, et (2) nous vous delivrons
|
||||
cette licence, qui vous donne l'autorisation légale de copier,
|
||||
distribuer et/ou modifier le logiciel.
|
||||
</p>
|
||||
<p>
|
||||
En outre, pour la protection de chaque auteur ainsi que la n<>tre, nous
|
||||
voulons nous assurer que chacun comprenne que ce logiciel libre ne fait
|
||||
l'objet d'aucune garantie.
|
||||
</p>
|
||||
<p>
|
||||
Si le logiciel est modifié par quelqu'un d'autre puis transmis
|
||||
à des tiers, nous voulons que les destinataires soient mis au
|
||||
courant que ce qu'ils ont re<72>u n'est pas le logiciel d'origine, de sorte
|
||||
que tout problème introduit par d'autres ne puisse entacher la
|
||||
réputation de l'auteur originel.
|
||||
</p>
|
||||
<p>
|
||||
En définitive, un programme libre restera à la merci des
|
||||
brevets de logiciels.
|
||||
</p>
|
||||
<p>
|
||||
Nous souhaitons éviter le risque que les redistributeurs d'un
|
||||
programme libre fassent des demandes individuelles de licence de brevet,
|
||||
ceci ayant pour effet de rendre le programme propriétaire.
|
||||
</p>
|
||||
<p>
|
||||
Pour éviter cela, nous établissons clairement que toute
|
||||
licence de brevet doit <20>tre concédée de fa<66>on a ce que
|
||||
l'usage en soit libre pour tous ou bien qu'aucune licence ne soit
|
||||
concédée.
|
||||
</p>
|
||||
<p>
|
||||
Les termes exacts et les conditions de copie, distribution et modification
|
||||
sont les suivants:
|
||||
</p>
|
||||
<h2>
|
||||
Conditions de copie, distribution et modification de la Licence Publique
|
||||
Générale GNU.
|
||||
</h2>
|
||||
<p>
|
||||
0. La présente Licence s'applique à tout programme ou tout
|
||||
autre ouvrage contenant un avis, apposé par le titulaire des droits
|
||||
d'auteur, stipulant qu'il peut <20>tre distribué au titre des
|
||||
conditions de la présente Licence Publique Générale.
|
||||
</p>
|
||||
<p>
|
||||
Ci-après, le "Programme" désigne l'un quelconque de ces
|
||||
programmes ou ouvrages, et un "ouvrage fondé sur le Programme"
|
||||
désigne soit le Programme, soit un ouvrage qui en dérive au
|
||||
titre des lois sur le droit d'auteur: en d'autres termes, un ouvrage
|
||||
contenant le Programme ou une partie de ce dernier, soit à
|
||||
l'identique, soit avec des modifications et/ou traduit dans un autre
|
||||
langage.
|
||||
</p>
|
||||
<p>
|
||||
(Ci-après, le terme "modification" implique, sans s'y
|
||||
réduire, le terme traduction)
|
||||
</p>
|
||||
<p>Chaque concessionaire sera désigné par "vous".</p>
|
||||
<p>
|
||||
Les activités autres que la copie, la distribution et la
|
||||
modification ne sont pas couvertes par la présente Licence ; elles
|
||||
sont hors de son champ d'application.
|
||||
</p>
|
||||
<p>
|
||||
L'opération consistant à exécuter le Programme n'est
|
||||
soumise à aucune limitation et les sorties du programme ne sont
|
||||
couvertes que si leur contenu constitue un ouvrage fondé sur le
|
||||
Programme (indépendamment du fait qu'il ait été
|
||||
réalisé par l'exécution du Programme).
|
||||
</p>
|
||||
<p>
|
||||
La validité de ce qui précède dépend de ce que
|
||||
fait le Programme.
|
||||
</p>
|
||||
<p>
|
||||
1. Vous pouvez copier et distribuer des copies à l'identique du
|
||||
code source du Programme tel que vous l'avez re<72>u, sur n'importe quel
|
||||
support, du moment que vous apposiez sur chaque copie, de manière
|
||||
ad hoc et parfaitement visible, l'avis de droit d'auteur adéquat et
|
||||
une exonération de garantie ; que vous gardiez intacts tous les
|
||||
avis faisant référence à la présente Licence
|
||||
et à l'absence de toute garantie ; et que vous fournissiez à
|
||||
tout destinataire du Programme autre que vous m<>me un exemplaire de la
|
||||
présente Licence en m<>me temps que le Programme.
|
||||
</p>
|
||||
<p>
|
||||
Vous pouvez faire payer l'acte physique de transmission d'une copie, et
|
||||
vous pouvez, à votre discrétion, proposer une garantie
|
||||
contre rémunération.
|
||||
</p>
|
||||
<p>
|
||||
2. Vous pouvez modifier votre copie ou des copies du Programme ou
|
||||
n'importe quelle partie de celui-ci, créant ainsi un ouvrage
|
||||
fondé sur le Programme, et copier et distribuer de telles
|
||||
modifications ou ouvrage selon les termes de l'Article 1 ci-dessus,
|
||||
à condition de vous conformer également à chacune des
|
||||
obligations suivantes:
|
||||
</p>
|
||||
<p>
|
||||
a) Vous devez munir les fichiers modifiés d'avis bien visibles
|
||||
stipulants que vous avez modifié ces fichiers, ainsi que la date de
|
||||
chaque modification;
|
||||
</p>
|
||||
<p>
|
||||
b) Vous devez prendre les dispositions nécessaires pour que tout
|
||||
ouvrage que vous distribuez ou publiez, et qui, en totalité ou en
|
||||
partie, contient ou est fondé sur le Programme - ou une partie
|
||||
quelconque de ce dernier - soit concédé comme un tout,
|
||||
à titre gratuit, à n'importe quel tiers, au titre des
|
||||
conditions de la présente Licence.
|
||||
</p>
|
||||
<p>
|
||||
c) Si le programme modifié lit habituellement des instructions de
|
||||
fa<66>on interactive lorsqu'on l'exécute, vous devez, quand il
|
||||
commence son exécution pour ladite utilisation interactive de la
|
||||
manière la plus usuelle, faire en sorte qu'il imprime ou affiche
|
||||
une annonce comprenant un avis de droit d'auteur ad hoc, et un avis
|
||||
stipulant qu'il n'y a pas de garantie (ou bien indiquant que c'est vous
|
||||
qui fournissez la garantie), et que les utilisateurs peuvent redistribuer
|
||||
le programme en respectant les présentes obligations, et expliquant
|
||||
à l'utilisateur comment voir une copie de la présente
|
||||
Licence.
|
||||
</p>
|
||||
<p>
|
||||
(Exception : si le Programme est lui-m<>me interactif mais n'imprime pas
|
||||
habituellement une telle annonce, votre ouvrage fondé sur le
|
||||
Programme n'est pas obligé d'imprimer une annonce).
|
||||
</p>
|
||||
<p>
|
||||
Ces obligations s'appliquent à l'ouvrage modifié pris comme
|
||||
un tout.
|
||||
</p>
|
||||
<p>
|
||||
Si des éléments identifiables de cet ouvrage ne sont pas
|
||||
fondées sur le Programme et peuvent raisonnablement <20>tre
|
||||
considérées comme des ouvrages indépendants distincts
|
||||
en eux m<>mes, alors la présente Licence et ses conditions ne
|
||||
s'appliquent pas à ces éléments lorsque vous les
|
||||
distribuez en tant qu'ouvrages distincts.
|
||||
</p>
|
||||
<p>
|
||||
Mais lorsque vous distribuez ces m<>mes éléments comme partie
|
||||
d'un tout, lequel constitue un ouvrage fondé sur le Programme, la
|
||||
distribution de ce tout doit <20>tre soumise aux conditions de la
|
||||
présente Licence, et les autorisations qu'elle octroie aux autres
|
||||
concessionaires s'étendent à l'ensemble de l'ouvrage et par
|
||||
conséquent à chaque et toute partie indifférement de
|
||||
qui l'a écrite.
|
||||
</p>
|
||||
<p>
|
||||
Par conséquent, l'objet du présent article n'est pas de
|
||||
revendiquer des droits ou de contester vos droits sur un ouvrage
|
||||
entièrement écrit par vous; son objet est plut<75>t d'exercer
|
||||
le droit de contr<74>ler la distribution d'ouvrages dérivés ou
|
||||
d'ouvrages collectifs fondés sur le Programme.
|
||||
</p>
|
||||
<p>
|
||||
De plus, la simple proximité du Programme avec un autre ouvrage qui
|
||||
n'est pas fondé sur le Programme (ou un ouvrage fondé sur le
|
||||
Programme) sur une partition d'un espace de stockage ou un support de
|
||||
distribution ne place pas cet autre ouvrage dans le champ d'application de
|
||||
la présente Licence.
|
||||
</p>
|
||||
<p>
|
||||
3. Vous pouvez copier et distribuer le Programme (ou un ouvrage
|
||||
fondé sur lui, selon l'Article 2) sous forme de code objet ou
|
||||
d'exécutable, selon les termes des Articles 1 et 2 ci-dessus,
|
||||
à condition que vous accomplissiez l'un des points suivants :
|
||||
</p>
|
||||
<p>
|
||||
a) L'accompagner de l'intégralité du code source
|
||||
correspondant, sous une forme lisible par un ordinateur, lequel doit <20>tre
|
||||
distribué au titre des termes des Articles 1 et 2 ci-dessus, sur un
|
||||
support habituellement utilisé pour l'échange de logiciels;
|
||||
ou,
|
||||
</p>
|
||||
<p>
|
||||
b) L'accompagner d'une proposition écrite, valable pendant au moins
|
||||
trois ans, de fournir à tout tiers, à un tarif qui ne soit
|
||||
pas supérieur à ce que vous co<63>te l'acte physique de
|
||||
réaliser une distribution source, une copie intégrale du
|
||||
code source correspondant sous une forme lisible par un ordinateur, qui
|
||||
sera distribuée au titre des termes des Articles 1 et 2 ci-dessus,
|
||||
sur un support habituellement utilisé pour l'échange de
|
||||
logiciels; ou,
|
||||
</p>
|
||||
<p>
|
||||
c) L'accompagner des informations re<72>ues par vous concernant la
|
||||
proposition de distribution du code source correspondant. (Cette solution
|
||||
n'est autorisée que dans le cas d'une distribution non-commerciale
|
||||
et seulement si vous avez re<72>u le programme sous forme de code objet ou
|
||||
d'éxécutable accompagné d'une telle proposition - en
|
||||
conformité avec le sous-Article b ci-dessus.)
|
||||
</p>
|
||||
<p>
|
||||
Le code source d'un ouvrage désigne la forme favorite pour
|
||||
travailler à des modifications de cet ouvrage. Pour un ouvrage
|
||||
exécutable, le code source intégral désigne la
|
||||
totalité du code source de la totalité des modules qu'il
|
||||
contient, ainsi que les éventuels fichiers de définition des
|
||||
interfaces qui y sont associés, ainsi que les scripts
|
||||
utilisés pour contr<74>ler la compilation et l'installation de
|
||||
l'exécutable. Cependant, par exception spéciale, le code
|
||||
source distribué n'est pas censé inclure quoi que ce soit de
|
||||
normalement distribué (que ce soit sous forme source ou binaire)
|
||||
avec les composants principaux (compilateur, noyau, et autre) du
|
||||
système d'exploitation sur lequel l'exécutable tourne,
|
||||
à moins que ce composant lui-m<>me n'accompagne l'exécutable.
|
||||
</p>
|
||||
<p>
|
||||
Si distribuer un exécutable ou un code objet consiste à
|
||||
offrir un accès permettant leur copie depuis un endroit
|
||||
particulier, alors l'offre d'un accès équivalent pour copier
|
||||
le code source depuis le m<>me endroit compte comme une distribution du
|
||||
code source - m<>me si les tiers ne sont pas contraints de copier le source
|
||||
en m<>me temps que le code objet.
|
||||
</p>
|
||||
<p>
|
||||
4. Vous ne pouvez copier, modifier, concéder en sous-licence, ou
|
||||
distribuer le Programme, sauf tel qu'expressément prévu par
|
||||
la présente Licence. Toute tentative de copier, modifier,
|
||||
concéder en sous-licence, ou distribuer le Programme d'une autre
|
||||
manière est réputée non valable, et met
|
||||
immédiatement fin à vos droits au titre de la
|
||||
présente Licence. Toutefois, les tiers ayant re<72>u de vous des
|
||||
copies, ou des droits, au titre de la présente Licence ne verront
|
||||
pas leurs autorisations résiliées aussi longtemps que ledits
|
||||
tiers se conforment pleinement à elle.
|
||||
</p>
|
||||
<p>
|
||||
5. Vous n'<27>tes pas obligé d'accepter la présente Licence
|
||||
étant donné que vous ne l'avez pas signée. Cependant,
|
||||
rien d'autre ne vous accorde l'autorisation de modifier ou distribuer le
|
||||
Programme ou les ouvrages fondés sur lui. Ces actions sont
|
||||
interdites par la loi si vous n'acceptez pas la présente Licence.
|
||||
En conséquence, en modifiant ou distribuant le Programme (ou un
|
||||
ouvrage quelconque fondé sur le Programme), vous signifiez votre
|
||||
acceptation de la présente Licence en le faisant, et de toutes ses
|
||||
conditions concernant la copie, la distribution ou la modification du
|
||||
Programme ou d'ouvrages fondés sur lui.
|
||||
</p>
|
||||
<p>
|
||||
6. Chaque fois que vous redistribuez le Programme (ou n'importe quel
|
||||
ouvrage fondé sur le Programme), une licence est automatiquement
|
||||
concédée au destinataire par le concédant originel de
|
||||
la licence, l'autorisant à copier, distribuer ou modifier le
|
||||
Programme, sous réserve des présentes conditions. Vous ne
|
||||
pouvez imposer une quelconque limitation supplémentaire à
|
||||
l'exercice des droits octroyés au titre des présentes par le
|
||||
destinataire. Vous n'avez pas la responsabilité d'imposer le
|
||||
respect de la présente Licence à des tiers.
|
||||
</p>
|
||||
<p>
|
||||
7. Si, conséquement à une décision de justice ou
|
||||
l'allégation d'une transgression de brevet ou pour toute autre
|
||||
raison (non limitée à un probleme de brevet), des
|
||||
obligations vous sont imposées (que ce soit par jugement,
|
||||
conciliation ou autre) qui contredisent les conditions de la
|
||||
présente Licence, elles ne vous excusent pas des conditions de la
|
||||
présente Licence. Si vous ne pouvez distribuer de manière
|
||||
à satisfaire simultanément vos obligations au titre de la
|
||||
présente Licence et toute autre obligation pertinente, alors il en
|
||||
découle que vous ne pouvez pas du tout distribuer le Programme. Par
|
||||
exemple, si une licence de brevet ne permettait pas une redistribution
|
||||
sans redevance du Programme par tous ceux qui re<72>oivent une copie
|
||||
directement ou indirectement par votre intermédiaire, alors la
|
||||
seule fa<66>on pour vous de satisfaire à la fois à la licence
|
||||
du brevet et à la présente Licence serait de vous abstenir
|
||||
totalement de toute distribution du Programme.
|
||||
</p>
|
||||
<p>
|
||||
Si une partie quelconque de cet article est tenue pour nulle ou
|
||||
inopposable dans une circonstance particulière quelconque,
|
||||
l'intention est que le reste de l'article s'applique. La totalité
|
||||
de la section s'appliquera dans toutes les autres circonstances.
|
||||
</p>
|
||||
<p>
|
||||
Cet article n'a pas pour but de vous induire à transgresser un
|
||||
quelconque brevet ou d'autres revendications à un droit de
|
||||
propriété ou à contester la validité de la
|
||||
moindre de ces revendications ; cet article a pour seul objectif de
|
||||
protéger l'intégrité du système de
|
||||
distribution du logiciel libre, qui est mis en oeuvre par la pratique des
|
||||
licenses publiques. De nombreuses personnes ont fait de
|
||||
généreuses contributions au large spectre de logiciels
|
||||
distribués par ce système en se fiant à l'application
|
||||
cohérente de ce système ; il appartient à chaque
|
||||
auteur/donateur de décider si il ou elle veut distribuer du
|
||||
logiciel par l'intermédiaire d'un quelconque autre système
|
||||
et un concessionaire ne peut imposer ce choix.
|
||||
</p>
|
||||
<p>
|
||||
Cet article a pour but de rendre totalement limpide ce que l'on pense <20>tre
|
||||
une conséquence du reste de la présente Licence.
|
||||
</p>
|
||||
<p>
|
||||
8. Si la distribution et/ou l'utilisation du Programme est limitée
|
||||
dans certains pays que ce soit par des brevets ou par des interfaces
|
||||
soumises au droit d'auteur, le titulaire originel des droits d'auteur qui
|
||||
décide de couvrir le Programme par la présente Licence peut
|
||||
ajouter une limitation géographique de distribution explicite qui
|
||||
exclue ces pays afin que la distribution soit permise seulement dans ou
|
||||
entre les pays qui ne sont pas ainsi exclus. Dans ce cas, la
|
||||
présente Licence incorpore la limitation comme si elle était
|
||||
écrite dans le corps de la présente Licence.
|
||||
</p>
|
||||
<p>
|
||||
9. La Free Software Foundation peut, de temps à autre, publier des
|
||||
versions révisées et/ou nouvelles de la Licence Publique
|
||||
Générale. De telles nouvelles versions seront similaires
|
||||
à la présente version dans l'esprit mais pourront
|
||||
différer dans le détail pour prendre en compte de nouvelles
|
||||
problématiques ou inquiétudes.
|
||||
</p>
|
||||
<p>
|
||||
Chaque version possède un numéro de version la distinguant.
|
||||
Si le Programme précise le numéro de version de la
|
||||
présente Licence qui s'y applique et "une version ultérieure
|
||||
quelconque", vous avez le choix de suivre les conditions de la
|
||||
présente version ou de toute autre version ultérieure
|
||||
publiée par la Free Software Foundation. Si le Programme ne
|
||||
spécifie aucun numéro de version de la présente
|
||||
Licence, vous pouvez choisir une version quelconque publiée par la
|
||||
Free Software Foundation à quelque moment que ce soit.
|
||||
</p>
|
||||
<p>
|
||||
10. Si vous souhaitez incorporer des parties du Programme dans d'autres
|
||||
programmes libres dont les conditions de distribution sont
|
||||
différentes, écrivez à l'auteur pour lui en demander
|
||||
l'autorisation. Pour les logiciels dont la Free Software Foundation est
|
||||
titulaire des droits d'auteur, écrivez à la Free Software
|
||||
Foundation ; nous faisons parfois des exceptions dans ce sens. Notre
|
||||
décision sera guidée par le double objectif de
|
||||
préserver le statut libre de tous les dérivés de nos
|
||||
logiciels libres et de promouvoir le partage et la réutilisation
|
||||
des logiciels en général.
|
||||
</p>
|
||||
<h2>ABSENCE DE GARANTIE</h2>
|
||||
<p>
|
||||
11. COMME LA LICENCE DU PROGRAMME EST CONCEDEE A TITRE GRATUIT, AUCUNE
|
||||
GARANTIE NE S'APPLIQUE AU PROGRAMME, DANS LES LIMITES AUTORISEES PAR LA
|
||||
LOI APPLICABLE. SAUF MENTION CONTRAIRE ECRITE, LES TITULAIRES DU DROIT
|
||||
D'AUTEUR ET/OU LES AUTRES PARTIES FOURNISSENT LE PROGRAMME "EN L'ETAT",
|
||||
SANS AUCUNE GARANTIE DE QUELQUE NATURE QUE CE SOIT, EXPRESSE OU IMPLICITE,
|
||||
Y COMPRIS, MAIS SANS Y ETRE LIMITE, LES GARANTIES IMPLICITES DE
|
||||
COMMERCIABILITE ET DE LA CONFORMITE A UNE UTILISATION PARTICULIERE. VOUS
|
||||
ASSUMEZ LA TOTALITE DES RISQUES LIES A LA QUALITE ET AUX PERFORMANCES DU
|
||||
PROGRAMME. SI LE PROGRAMME SE REVELAIT DEFECTUEUX, LE COUT DE L'ENTRETIEN,
|
||||
DES REPARATIONS OU DES CORRECTIONS NECESSAIRES VOUS INCOMBENT
|
||||
INTEGRALEMENT.
|
||||
</p>
|
||||
<p>
|
||||
12. EN AUCUN CAS, SAUF LORSQUE LA LOI APPLICABLE OU UNE CONVENTION ECRITE
|
||||
L'EXIGE, UN TITULAIRE DE DROIT D'AUTEUR QUEL QU'IL SOIT, OU TOUTE PARTIE
|
||||
QUI POURRAIT MODIFIER ET/OU REDISTRIBUER LE PROGRAMME COMME PERMIS
|
||||
CI-DESSUS, NE POURRAIT ETRE TENU POUR RESPONSABLE A VOTRE EGARD DES
|
||||
DOMMAGES, INCLUANT LES DOMMAGES GENERIQUES, SPECIFIQUES, SECONDAIRES OU
|
||||
CONSECUTIFS, RESULTANT DE L'UTILISATION OU DE L'INCAPACITE D'UTILISER LE
|
||||
PROGRAMME (Y COMPRIS, MAIS SANS Y ETRE LIMITE, LA PERTE DE DONNEES, OU LE
|
||||
FAIT QUE DES DONNEES SOIENT RENDUES IMPRECISES, OU LES PERTES EPROUVEES
|
||||
PAR VOUS OU PAR DES TIERS, OU LE FAIT QUE LE PROGRAMME ECHOUE A
|
||||
INTEROPERER AVEC UN AUTRE PROGRAMME QUEL QU'IL SOIT) MEME SI LE DIT
|
||||
TITULAIRE DU DROIT D'AUTEUR OU LE PARTIE CONCERNEE A ETE AVERTI DE
|
||||
L'EVENTUALITE DE TELS DOMMAGES.
|
||||
</p>
|
||||
<h2>FIN DES CONDITIONS</h2>
|
||||
<h2>Comment appliquer ces conditions à vos nouveaux programmes</h2>
|
||||
<p>
|
||||
Si vous développez un nouveau programme, et si vous voulez qu'il
|
||||
soit de la plus grande utilité possible pour le public, le meilleur
|
||||
moyen d'y parvenir est d'en faire un logiciel libre que chacun peut
|
||||
redistribuer et modifier au titre des présentes conditions.
|
||||
</p>
|
||||
<p>
|
||||
Pour ce faire, munissez le programme des avis qui suivent. Le plus s<>r est
|
||||
de les ajouter au début de chaque fichier source pour
|
||||
véhiculer le plus efficacement possible l'absence de toute
|
||||
garantie; chaque fichier devrait aussi contenir au moins la ligne
|
||||
"copyright" et une indication de l'endroit où se trouve l'avis
|
||||
compl<70>t.
|
||||
</p>
|
||||
<p>
|
||||
[Une ligne donnant le nom du programme et une courte idée de ce
|
||||
qu'il fait.]
|
||||
</p>
|
||||
<p>Copyright (C) [année] [nom de l'auteur]</p>
|
||||
<p>
|
||||
Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le
|
||||
modifier au titre des clauses de la Licence Publique
|
||||
Générale GNU, telle que publiée par la Free Software
|
||||
Foundation ; soit la version 2 de la Licence, ou (à votre
|
||||
discrétion) une version ultérieure quelconque.
|
||||
</p>
|
||||
<p>
|
||||
Ce programme est distribué dans l'espoir qu'il sera utile, mais
|
||||
SANS AUCUNE GARANTIE ; sans m<>me une garantie implicite de COMMERCIABILITE
|
||||
ou DE CONFORMITE A UNE UTILISATION PARTICULIERE. Voir la Licence Publique
|
||||
Générale GNU pour plus de détails.
|
||||
</p>
|
||||
<p>
|
||||
Vous devriez avoir re<72>u un exemplaire de la Licence Publique
|
||||
Générale GNU avec ce programme ; si ce n'est pas le cas,
|
||||
écrivez à la Free Software Foundation Inc., 51 Franklin
|
||||
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
</p>
|
||||
<p>
|
||||
Ajoutez aussi des informations sur la manière de vous contacter par
|
||||
courrier électronique et courrier postal.
|
||||
</p>
|
||||
<p>
|
||||
Si le programme est interactif, faites en sorte qu'il affiche un court
|
||||
avis tel que celui-ci lorsqu'il démarre en mode interactif :
|
||||
</p>
|
||||
<p>
|
||||
Gnomovision version 69, Copyright (C) année nom de l'auteur
|
||||
Gnomovision n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE ; pour
|
||||
plus de détails tapez "show w". Ceci est un logiciel libre et vous
|
||||
<20>tes invité à le redistribuer en respectant certaines
|
||||
obligations ; pour plus de détails tapez "show c".
|
||||
</p>
|
||||
<p>
|
||||
Les instructions hypothétiques "show w" et "show c" sont
|
||||
supposées montrer les parties ad hoc de la Licence Publique
|
||||
Générale. Bien entendu, les instructions que vous utilisez
|
||||
peuvent porter d'autres noms que "show w" et "show c" ; elles peuvent m<>me
|
||||
<20>tre des clics de souris ou des éléments d'un menu ou tout
|
||||
ce qui convient à votre programme.
|
||||
</p>
|
||||
<p>
|
||||
Vous devriez aussi obtenir de votre employeur (si vous travaillez en tant
|
||||
que développeur) ou de votre école, si c'est le cas, qu'il
|
||||
(ou elle) signe une "renonciation aux droits d'auteur" concernant le
|
||||
programme, si nécessaire. Voici un exemple (changez les noms) :
|
||||
</p>
|
||||
<p>
|
||||
Yoyodyne, Inc., déclare par la présente renoncer à
|
||||
toute prétention sur les droits d'auteur du programme "Gnomovision"
|
||||
(qui fait des avances aux compilateurs) écrit par James Hacker.
|
||||
</p>
|
||||
<p>[signature de Ty Coon], 1er avril 1989</p>
|
||||
<p>Ty Coon, President du Vice</p>
|
||||
<p>
|
||||
La présente Licence Publique Générale n'autorise pas
|
||||
l'incorporation de votre programme dans des programmes
|
||||
propriétaires. Si votre programme est une bibliothèque de
|
||||
sous-programmes, vous pouvez considérer plus utile d'autoriser
|
||||
l'édition de liens d'applications propriétaires avec la
|
||||
bibliothèque. Si c'est ce que vous voulez faire, utilisez la GNU
|
||||
Lesser General Public License au lieu de la présente Licence.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,279 +1,304 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Licenze GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<head>
|
||||
<title>Licenze GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h3>Licenze GNU</h3>
|
||||
|
||||
<h3>Licenze GNU</h3>
|
||||
<h4>Sommario</h4>
|
||||
|
||||
<ul>
|
||||
<li><a href="#Intro" id="TOIntro">Introduzione</a></li>
|
||||
<li><a href="#GPL" id="TOCGPL"> La Licenza Pubblica Generica GNU</a></li>
|
||||
<li>
|
||||
<a href="#LGPL" id="TOCLGPL"
|
||||
>La Licenza Pubblica Generica Attenuata GNU</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#FDL" id="TOCFDL">La Licenza per Documentazione Libera GNU</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#VerbatimCopying" id="TOCVerbatimCopying"
|
||||
>Copie letterali e distribuzione</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#LicenseList" id="TOCLicenseList"
|
||||
>Elenco di licenze per il software libero</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#WhatIsCopyleft" id="TOCWhatIsCopyleft"
|
||||
>Cos'è il permesso d'autore (copyleft)?</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#OtherWorks" id="TOCOtherWorks"
|
||||
>Licenze per altri tipi di opere</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Sommario</h4>
|
||||
<hr />
|
||||
|
||||
<ul>
|
||||
<li><a href="#Intro" id="TOIntro">Introduzione</a></li>
|
||||
<li><a href="#GPL" id="TOCGPL">
|
||||
La Licenza Pubblica Generica GNU</a></li>
|
||||
<li><a href="#LGPL"
|
||||
id="TOCLGPL">La Licenza Pubblica Generica Attenuata GNU</a></li>
|
||||
<li><a href="#FDL"
|
||||
id="TOCFDL">La Licenza per Documentazione Libera GNU</a></li>
|
||||
<li><a href="#VerbatimCopying"
|
||||
id="TOCVerbatimCopying">Copie letterali e distribuzione</a></li>
|
||||
<li><a href="#LicenseList"
|
||||
id="TOCLicenseList">Elenco di licenze per il software libero</a></li>
|
||||
<li><a href="#WhatIsCopyleft"
|
||||
id="TOCWhatIsCopyleft">Cos'è il permesso d'autore (copyleft)?</a></li>
|
||||
<li><a href="#OtherWorks"
|
||||
id="TOCOtherWorks">Licenze per altri tipi di opere</a></li>
|
||||
</ul>
|
||||
<h3><a href="TOCIntro" id="Intro">Introduzione</a></h3>
|
||||
|
||||
<hr />
|
||||
<p>
|
||||
Tutto il software pubblicato dovrebbe essere software libero.
|
||||
Perché sia libero, bisogna pubblicarlo con una licenza per il
|
||||
software libero. Normalmente utilizziamo la
|
||||
<a href="GPL">Licenza Pubblica Generica GNU</a> (GNU GPL), ma talvolta
|
||||
utilizziamo anche
|
||||
<a href="LicenseList">altre licenze per software libero</a>. Per il
|
||||
software GNU utilizziamo solo licenze compatibili con la GNU GPL.
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCIntro" id="Intro">Introduzione</a></h3>
|
||||
<p>
|
||||
La documentazione per il software libero dovrebbe essere documentazione
|
||||
libera, in modo che si possa distribuire e migliorare assieme al software
|
||||
che essa descrive. Per rendere libera la documentazione occorre
|
||||
rilasciarla con una licenza di documentazione libera. Normalmente
|
||||
utilizziamo la
|
||||
<a href="FDL">Licenza per Documentazione Libera GNU</a> (GNU FDL), ma
|
||||
talvolta utilizziamo anche
|
||||
<a href="LicenseList">altre licenze per la documentazione libera</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Tutto il software pubblicato dovrebbe essere software libero. Perché sia
|
||||
libero, bisogna pubblicarlo con una licenza per il software libero.
|
||||
Normalmente utilizziamo la <a href="GPL">Licenza
|
||||
Pubblica Generica GNU</a> (GNU GPL), ma talvolta utilizziamo anche <a
|
||||
href="LicenseList">altre licenze per software
|
||||
libero</a>. Per il software GNU utilizziamo solo licenze compatibili
|
||||
con la GNU GPL.
|
||||
</p>
|
||||
<h3><a href="TOCGPL" id="GPL">La Licenza Pubblica Generica GNU</a></h3>
|
||||
|
||||
<p>
|
||||
La documentazione per il software libero dovrebbe
|
||||
essere documentazione
|
||||
libera, in modo che si possa distribuire e migliorare assieme al
|
||||
software che essa descrive. Per rendere libera la documentazione
|
||||
occorre rilasciarla con una licenza di documentazione
|
||||
libera. Normalmente utilizziamo
|
||||
la <a href="FDL">Licenza per Documentazione Libera
|
||||
GNU</a> (GNU FDL), ma talvolta utilizziamo
|
||||
anche <a href="LicenseList">altre licenze per la
|
||||
documentazione libera</a>.
|
||||
</p>
|
||||
<p>
|
||||
La Licenza Pubblica Generica GNU è spesso indicata brevemente come
|
||||
GNU GPL; è usata dalla maggioranza dei programmi GNU, e da
|
||||
più della metà di tutti i pacchetti di software libero.
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCGPL"
|
||||
id="GPL">La Licenza Pubblica Generica GNU</a></h3>
|
||||
<h3>
|
||||
<a href="TOCLGPL" id="LGPL">Licenza Pubblica Generica Attenuata GNU</a>
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
La Licenza Pubblica Generica GNU è spesso indicata brevemente come GNU
|
||||
GPL; è usata dalla maggioranza dei programmi GNU, e da più della metà di
|
||||
tutti i pacchetti di software libero.
|
||||
</p>
|
||||
<p>
|
||||
La Licenza Pubblica Generica Attenuata GNU è utilizzata da alcune
|
||||
(non tutte) delle librerie GNU. Questa licenza era originariamente
|
||||
chiamata la GPL per Librerie, ma in seguito le cambiammo nome
|
||||
perché il vecchio nome ne incoraggiava un uso più frequente
|
||||
del dovuto.
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCLGPL"
|
||||
id="LGPL">Licenza Pubblica Generica Attenuata GNU</a></h3>
|
||||
<h3>
|
||||
<a href="TOCFDL" id="FDL">La Licenza per Documentazione Libera GNU</a>
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
La Licenza Pubblica Generica Attenuata GNU è utilizzata da alcune (non
|
||||
tutte) delle librerie GNU. Questa licenza era originariamente chiamata
|
||||
la GPL per Librerie, ma in seguito le cambiammo nome perché il vecchio
|
||||
nome ne incoraggiava un uso più frequente del dovuto.
|
||||
</p>
|
||||
<p>
|
||||
La licenza di Documentazione Libera è una forma di permesso
|
||||
d'autore (copyleft) pensata per un manuale, libro di testo o altro
|
||||
documento, in modo da garantire a chiunque l'effettiva libertà di
|
||||
usarlo e distribuirlo, con o senza modifiche, commercialmente o meno.
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
<a href="TOCVerbatimCopying" id="VerbatimCopying"
|
||||
>Copie letterali e distribuzione</a
|
||||
>
|
||||
</h3>
|
||||
<p>
|
||||
La nota standard di copyright per le pagine web GNU recita:
|
||||
<em
|
||||
>La copia letterale e la distribuzione di questo articolo nella sua
|
||||
integrità sono permesse con qualsiasi mezzo, a condizione che
|
||||
questa nota sia riprodotta</em
|
||||
>. Si tenga presente questo commento di Eben Moglen:
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCFDL"
|
||||
id="FDL">La Licenza per Documentazione Libera GNU</a></h3>
|
||||
<p>
|
||||
«Con la frase "copia letterale con qualsiasi mezzo" non intendiamo
|
||||
richiedere il mantenimento di intestazioni, piè di pagina o altre
|
||||
caratteristiche di formattazione. Si richiede tuttavia di mantenere link
|
||||
web sia per i media ipertestuali sia per quelli non ipertestuali (in forma
|
||||
di note o URL riportate letteralmente su media non HTML).»
|
||||
</p>
|
||||
|
||||
<p>
|
||||
La licenza di Documentazione Libera è una forma di permesso d'autore
|
||||
(copyleft) pensata per un manuale, libro di testo o altro documento, in
|
||||
modo da garantire a chiunque l'effettiva libertà di usarlo e
|
||||
distribuirlo, con o senza modifiche, commercialmente o meno.
|
||||
</p>
|
||||
<h3>
|
||||
<a href="TOCLicenseList" id="LicenseList"
|
||||
>Elenco di licenze per il software libero</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<h3><a href="TOCVerbatimCopying"
|
||||
id="VerbatimCopying">Copie letterali e distribuzione</a></h3>
|
||||
<p>
|
||||
La nota standard di copyright per le pagine web GNU recita: <em>La copia
|
||||
letterale e la distribuzione di questo articolo nella sua integrità sono
|
||||
permesse con qualsiasi mezzo, a condizione che questa nota sia
|
||||
riprodotta</em>. Si tenga presente questo commento di Eben Moglen:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Elenco di licenze per il software libero
|
||||
|
||||
<p>
|
||||
«Con la frase "copia letterale con qualsiasi mezzo" non intendiamo
|
||||
richiedere il mantenimento di intestazioni, piè di pagina o altre
|
||||
caratteristiche di formattazione. Si richiede tuttavia di mantenere link
|
||||
web sia per i media ipertestuali sia per quelli non ipertestuali (in
|
||||
forma di note o URL riportate letteralmente su media non HTML).»
|
||||
</p>
|
||||
<p>
|
||||
Se state pensando di scrivere una nuova licenza, vi preghiamo di
|
||||
contattare la FSF scrivendo a
|
||||
<a href="mailto:licensing@fsf.org"><licensing@fsf.org></a>. Il
|
||||
proliferare di diverse licenze di software libero significa un aumento
|
||||
di lavoro per gli utenti per la loro comprensione. Potremmo essere in
|
||||
grado di aiutarvi a trovare una licenza esistente per software libero
|
||||
che soddisfi le vostre esigenze.
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCLicenseList"
|
||||
id="LicenseList">Elenco di licenze per il software libero</a></h3>
|
||||
<p>
|
||||
Nel caso ciò non sia possibile, se effettivamente avete bisogno
|
||||
di una nuova licenza con il nostro aiuto potete assicuravi che la
|
||||
vostra licenza sia effettivamente una licenza per software libero, ed
|
||||
evitare vari problemi pratici.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Elenco di licenze per il software libero
|
||||
<h3>
|
||||
<a href="TOCWhatIsCopyleft" id="WhatIsCopyleft"
|
||||
>Cos'è il permesso d'autore (copyleft)?</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<p> Se state pensando di scrivere una nuova licenza, vi preghiamo di
|
||||
contattare la FSF scrivendo a <a
|
||||
href="mailto:licensing@fsf.org"><licensing@fsf.org></a>. Il
|
||||
proliferare di diverse licenze di software libero significa un aumento
|
||||
di lavoro per gli utenti per la loro comprensione. Potremmo essere in
|
||||
grado di aiutarvi a trovare una licenza esistente per software libero
|
||||
che soddisfi le vostre esigenze.
|
||||
</p>
|
||||
<p>
|
||||
Il <em>permesso d'autore</em> (<em>copyleft</em>) è un metodo
|
||||
generico per rendere un programma libero ed imporre che tutte le modifiche
|
||||
e versioni estese del programma siano anch'esse software libero.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Nel caso ciò non sia possibile, se effettivamente avete bisogno di una
|
||||
nuova licenza con il nostro aiuto potete assicuravi che la vostra
|
||||
licenza sia effettivamente una licenza per software libero, ed evitare
|
||||
vari problemi pratici.
|
||||
</p>
|
||||
<p>
|
||||
[NdT: si tratta di un gioco di parole, che qui viene reso con "permesso di
|
||||
autore": copyright (diritto di autore) è formato dalle parola
|
||||
"copy" (copia) e "right" (diritto, ma anche destra), opposto di "left"
|
||||
(sinistra, ma anche lasciato).]
|
||||
</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Il modo più semplice per rendere un programma libero è
|
||||
dichiararlo di dominio pubblico, privo di copyright. [NdT: in Italia
|
||||
questo concetto a rigore non esiste, perché l'autore non può
|
||||
rinunciare alla paternità dell'opera; effetti simili si possono
|
||||
ottenere con l'uso di una licenza permissiva, come la licenza di X del
|
||||
MIT]. Ciò permette a chiunque di condividere il programma e i suoi
|
||||
miglioramenti. Tuttavia permette anche a chi non vuol cooperare di
|
||||
convertire il programma in software proprietario. Costoro possono infatti
|
||||
apportare modifiche, che siano significative o meno, e distribuire il
|
||||
risultato come prodotto proprietario. Chi riceve il programma nella forma
|
||||
modificata non ha la libertà data dall'autore originario;
|
||||
l'intermediario l'avrà rimossa.
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCWhatIsCopyleft"
|
||||
id="WhatIsCopyleft">Cos'è il permesso d'autore (copyleft)?</a></h3>
|
||||
<p>
|
||||
Nel Progetto GNU, la nostra intenzione è dare a <em>tutti</em> gli
|
||||
utenti la libertà di ridistribuire e modificare software GNU. Se
|
||||
l'intermediario potesse rimuoverne la libertà, potremmo avere molti
|
||||
utenti, ma costoro non avrebbero libertà. Così, invece di
|
||||
rilasciare il software GNU come dominio pubblico, utilizziamo il permesso
|
||||
d'autore. Il permesso d'autore (copyleft) significa che chiunque
|
||||
distribuisca il software, con o senza modifiche, deve accompagnarlo con la
|
||||
libertà di ulteriori copie o modifiche. Il permesso d'autore
|
||||
garantisce che ogni utente sia libero.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Il <em>permesso d'autore</em> (<em>copyleft</em>) è un metodo generico
|
||||
per rendere un programma libero ed imporre che tutte le modifiche e
|
||||
versioni estese del programma siano anch'esse software libero.
|
||||
</p>
|
||||
<p>
|
||||
Il permesso d'autore costituisce anche un incentivo per altri
|
||||
programmatori ad incrementare il software libero. Alcuni programmi liberi
|
||||
importanti, come il compilatore GNU C++, esistono solo grazie a questo.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
[NdT: si tratta di un gioco di parole, che qui viene reso con "permesso
|
||||
di autore": copyright (diritto di autore) è formato dalle parola "copy"
|
||||
(copia) e "right" (diritto, ma anche destra), opposto di "left"
|
||||
(sinistra, ma anche lasciato).]
|
||||
</p>
|
||||
<p>
|
||||
Il permesso d'autore aiuta anche i programmatori che desiderano
|
||||
contribuire con miglioramenti al software libero ad ottenerne il permesso.
|
||||
Questi programmatori spesso lavorano per aziende o università che
|
||||
farebbero quasi qualunque cosa per avere più denaro. Un
|
||||
programmatore potrebbe voler cedere le sue modifiche alla comunità,
|
||||
ma il suo superiore potrebbe volerne fare un prodotto software
|
||||
proprietario.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Il modo più semplice per rendere un programma libero è dichiararlo di dominio
|
||||
pubblico, privo di copyright. [NdT: in Italia questo concetto a
|
||||
rigore non esiste, perché l'autore non può rinunciare alla paternità
|
||||
dell'opera; effetti simili si possono ottenere con l'uso di una licenza
|
||||
permissiva, come la licenza di X del MIT]. Ciò permette a chiunque di
|
||||
condividere il programma e i suoi miglioramenti. Tuttavia permette anche
|
||||
a chi non vuol cooperare di convertire il programma in software
|
||||
proprietario. Costoro possono infatti apportare modifiche, che
|
||||
siano significative o meno, e distribuire il risultato come prodotto
|
||||
proprietario. Chi riceve il programma nella forma modificata non ha la
|
||||
libertà data dall'autore originario; l'intermediario l'avrà rimossa.
|
||||
</p>
|
||||
<p>
|
||||
Quando spieghiamo ai datori di lavoro che è illegale distribuire la
|
||||
versione migliorata se non come software libero, questi normalmente
|
||||
decidono di rilasciarla come software libero piuttosto che buttarla via.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Nel Progetto GNU, la nostra
|
||||
intenzione è dare a <em>tutti</em> gli utenti la libertà di
|
||||
ridistribuire e modificare software GNU. Se l'intermediario potesse
|
||||
rimuoverne la libertà, potremmo avere molti utenti, ma costoro non
|
||||
avrebbero libertà. Così, invece di rilasciare il software GNU come
|
||||
dominio pubblico, utilizziamo il permesso d'autore. Il permesso
|
||||
d'autore (copyleft) significa che chiunque distribuisca il software, con
|
||||
o senza modifiche, deve accompagnarlo con la libertà di ulteriori
|
||||
copie o modifiche. Il permesso d'autore garantisce che ogni utente sia
|
||||
libero.
|
||||
</p>
|
||||
<p>
|
||||
Nel rendere un programma copyleft, per prima cosa mettiamo in chiaro che
|
||||
è soggetto a diritto d'autore; poi aggiungiamo le condizioni di
|
||||
distribuzione, che sono uno strumento legale per dare a chiunque i diritti
|
||||
d'uso, di modifica e ridistribuzione del codice del programma
|
||||
<em>ed ogni programma da esso derivato</em>, ma solo se si lasciano
|
||||
invariati i termini di distribuzione. Così, il codice e le
|
||||
libertà divengono legalmente inseparabili.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Il permesso d'autore costituisce anche un incentivo per altri
|
||||
programmatori ad incrementare il software libero. Alcuni programmi
|
||||
liberi importanti, come il compilatore GNU C++, esistono solo grazie a
|
||||
questo.
|
||||
</p>
|
||||
<p>
|
||||
Gli sviluppatori di software proprietario utilizzano il diritto d'autore
|
||||
per togliere la libertà agli utenti. Noi lo utilizziamo per
|
||||
garantire la loro libertà. Ecco perché invertiamo il
|
||||
termine, trasformando "diritto d'autore" in "permesso d'autore"
|
||||
("copyright" in "copyleft").
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Il permesso d'autore aiuta anche i programmatori che desiderano
|
||||
contribuire con miglioramenti al software libero ad ottenerne il
|
||||
permesso. Questi programmatori spesso lavorano per aziende o università
|
||||
che farebbero quasi qualunque cosa per avere più denaro. Un
|
||||
programmatore potrebbe voler cedere le sue modifiche alla comunità, ma
|
||||
il suo superiore potrebbe volerne fare un prodotto software
|
||||
proprietario.
|
||||
</p>
|
||||
<p>
|
||||
Il permesso d'autore è un concetto generale; ci sono molti modi di
|
||||
completare i dettagli. Nel Progetto GNU, le specifiche condizioni di
|
||||
distribuzione che utilizziamo sono contenute nella Licenza Pubblica
|
||||
Generica GNU, la Licenza Pubblica Generica Attenuata GNU e la Licenza per
|
||||
Documentazione Libera GNU.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Quando spieghiamo ai datori di lavoro che è illegale distribuire la
|
||||
versione migliorata se non come software libero, questi normalmente
|
||||
decidono di rilasciarla come software libero piuttosto che buttarla via.
|
||||
</p>
|
||||
<p>
|
||||
La licenza appropriata è inclusa in molti manuali e in ogni
|
||||
distribuzione di codice sorgente GNU.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Nel rendere un programma copyleft, per prima cosa mettiamo in chiaro che
|
||||
è soggetto a diritto d'autore; poi aggiungiamo le condizioni di
|
||||
distribuzione, che sono uno strumento legale per dare a chiunque i
|
||||
diritti d'uso, di modifica e ridistribuzione del codice del programma
|
||||
<em>ed ogni programma da esso derivato</em>, ma solo se si lasciano
|
||||
invariati i termini di distribuzione. Così, il codice e le libertà
|
||||
divengono legalmente inseparabili.
|
||||
</p>
|
||||
<p>
|
||||
La GNU GPL è progettata perché possiate applicarla
|
||||
facilmente ai vostri programmi se siete i titolari dei relativi diritti.
|
||||
Per far questo non dovete modificare la GNU GPL ma solo aggiungere nel
|
||||
programma una nota che vi faccia riferimento. Vi preghiamo di tener
|
||||
presente che se usate la GNU GPL dovete usare il testo integrale della
|
||||
licenza. E' un tutto unico, versioni parziali non sono consentite (lo
|
||||
stesso vale per la LGPL e la FDL).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Gli sviluppatori di software proprietario utilizzano il diritto d'autore
|
||||
per togliere la libertà agli utenti. Noi lo utilizziamo per garantire la
|
||||
loro libertà. Ecco perché invertiamo il termine, trasformando "diritto
|
||||
d'autore" in "permesso d'autore" ("copyright" in "copyleft").
|
||||
</p>
|
||||
<p>
|
||||
Usare gli stessi termini di distribuzione per molti programmi rende facile
|
||||
copiare codice tra programmi diversi. Dato che tutti hanno gli stessi
|
||||
termini di distribuzione, non c'è bisogno di preoccuparsi se i
|
||||
termini siano compatibili. La GPL Attenuata include una clausola che
|
||||
permette di trasformare i termini di distribuzione nella GPL ordinaria, in
|
||||
modo che possiate copiare codice in un altro programma coperto dalla GPL.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Il permesso d'autore è un concetto generale; ci sono molti modi di
|
||||
completare i dettagli. Nel Progetto GNU, le specifiche condizioni di
|
||||
distribuzione che utilizziamo sono contenute nella Licenza Pubblica
|
||||
Generica GNU, la Licenza Pubblica Generica Attenuata GNU e la Licenza
|
||||
per Documentazione Libera GNU.
|
||||
</p>
|
||||
<h3>
|
||||
<a href="TOCOtherWorks" id="OtherWorks"
|
||||
>Licenze per altri tipi di opere</a
|
||||
>
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
La licenza appropriata è inclusa in molti manuali e in ogni
|
||||
distribuzione di codice sorgente GNU.
|
||||
</p>
|
||||
<p>
|
||||
Noi crediamo che il software e la documentazione che si pubblicano debbano
|
||||
essere <a href="Intro">software libero e documentazione libera</a>.
|
||||
Consigliamo di rendere ugualmente libera ogni genere di opera educativa e
|
||||
di riferimento, utilizzando licenze di documentazione libera come la
|
||||
<a href="FDL">Licenza per Documentazione Libera GNU</a> (GNU FDL).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
La GNU GPL è progettata perché possiate applicarla facilmente ai vostri
|
||||
programmi se siete i titolari dei relativi diritti. Per far questo non
|
||||
dovete modificare la GNU GPL ma solo aggiungere nel programma una nota
|
||||
che vi faccia riferimento. Vi preghiamo di tener presente che se usate
|
||||
la GNU GPL dovete usare il testo integrale della licenza. E' un tutto
|
||||
unico, versioni parziali non sono consentite (lo stesso vale per la LGPL
|
||||
e la FDL).
|
||||
</p>
|
||||
<p>
|
||||
Per saggi o pubblicazioni scientifiche, consigliamo la semplice licenza di
|
||||
"copia letterale" utilizzata ad esempio per questa pagina Web.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Usare gli stessi termini di distribuzione per molti programmi rende
|
||||
facile copiare codice tra programmi diversi. Dato che tutti hanno gli
|
||||
stessi termini di distribuzione, non c'è bisogno di preoccuparsi se i
|
||||
termini siano compatibili. La GPL Attenuata include una clausola che
|
||||
permette di trasformare i termini di distribuzione nella GPL ordinaria,
|
||||
in modo che possiate copiare codice in un altro programma coperto dalla
|
||||
GPL.
|
||||
</p>
|
||||
<p>
|
||||
Non prendiamo posizione sull'idea che i lavori artistici o letterari
|
||||
debbano essere liberi, ma se volete fare in modo che un vostro lavoro lo
|
||||
sia vi consigliamo la
|
||||
<a href="http://artlibre.org/licence/lalgb.html">Free Art License</a> (in
|
||||
inglese).
|
||||
</p>
|
||||
|
||||
<h3><a href="TOCOtherWorks"
|
||||
id="OtherWorks">Licenze per altri tipi di opere</a></h3>
|
||||
|
||||
<p>
|
||||
Noi crediamo che il software e la documentazione che si pubblicano
|
||||
debbano essere <a href="Intro">software libero e
|
||||
documentazione libera</a>. Consigliamo di rendere ugualmente libera
|
||||
ogni genere di opera educativa e di riferimento, utilizzando licenze di
|
||||
documentazione libera come la <a href="FDL">Licenza per
|
||||
Documentazione Libera GNU</a> (GNU FDL).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Per saggi o pubblicazioni scientifiche, consigliamo la semplice licenza
|
||||
di "copia letterale" utilizzata ad esempio per questa pagina Web.</p>
|
||||
|
||||
<p>
|
||||
Non prendiamo posizione sull'idea che i lavori artistici o letterari
|
||||
debbano essere liberi, ma se volete fare in modo che un vostro lavoro
|
||||
lo sia vi consigliamo la <a href="http://artlibre.org/licence/lalgb.html">Free
|
||||
Art License</a> (in inglese).</p>
|
||||
|
||||
|
||||
<p>
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2003, 2004, 2005 Free Software Foundation, Inc.,
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110, USA
|
||||
<br />
|
||||
La copia letterale e la distribuzione di questo articolo nella sua
|
||||
integrità sono permesse con qualsiasi mezzo gratuitamente a
|
||||
condizione che questa nota sia riprodotta.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
<p>
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2003, 2004, 2005 Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
|
||||
<br />
|
||||
La copia letterale e la distribuzione di questo articolo nella sua
|
||||
integrità sono permesse con qualsiasi mezzo gratuitamente a
|
||||
condizione che questa nota sia riprodotta.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,436 +1,433 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>GNU 一般公衆利用許諾契約書 - GNU プロジェクト - フリーソフトウェア財団 (FSF)</title>
|
||||
</head>
|
||||
<body>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<title>
|
||||
GNU 一般公衆利用許諾契約書 - GNU プロジェクト - フリーソフトウェア財団
|
||||
(FSF)
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
本訳は、<a href="http://www.opensource.jp/gpl/gpl.ja.html.euc-jp"
|
||||
>http://www.opensource.jp/gpl/gpl.ja.html.euc-jp</a
|
||||
>より転載している。
|
||||
|
||||
本訳は、<a href="http://www.opensource.jp/gpl/gpl.ja.html.euc-jp">http://www.opensource.jp/gpl/gpl.ja.html.euc-jp</a>より転載している。
|
||||
<hr />
|
||||
|
||||
<hr>
|
||||
<h2>GNU 一般公衆利用許諾契約書</h2>
|
||||
|
||||
<h2>GNU 一般公衆利用許諾契約書</h2>
|
||||
<h3>もくじ</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#SEC1">GNU 一般公衆利用許諾契約書</a>
|
||||
<ul>
|
||||
<li><a href="#SEC2">はじめに</a></li>
|
||||
<li><a href="#SEC3">複製、頒布、改変に関する条件と制約</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>もくじ</h3>
|
||||
<ul>
|
||||
<hr />
|
||||
<p></p>
|
||||
<h3><a name="SEC1">GNU 一般公衆利用許諾契約書</a></h3>
|
||||
<p>
|
||||
バージョン 2、1991年6月<br />
|
||||
日本語訳、2002年8月28日
|
||||
</p>
|
||||
|
||||
<li><a href="#SEC1">GNU 一般公衆利用許諾契約書</a>
|
||||
<ul>
|
||||
<li><a href="#SEC2">はじめに</a></li>
|
||||
<li><a href="#SEC3">複製、頒布、改変に関する条件と制約</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>
|
||||
<h3><a name="SEC1">GNU 一般公衆利用許諾契約書</a></h3>
|
||||
<p>
|
||||
バージョン 2、1991年6月<br>
|
||||
日本語訳、2002年8月28日
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
<pre>
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
この利用許諾契約書を、一字一句そのままに複製し頒布することは許可する。
|
||||
しかし変更は認めない。
|
||||
</pre>
|
||||
</pre
|
||||
>
|
||||
|
||||
<blockquote>
|
||||
This is an unofficial translation of the GNU General Public License
|
||||
into Japanese. It was not published by the Free Software Foundation,
|
||||
and does not legally state the distribution terms for software that
|
||||
uses the GNU GPL--only the original English text of the GNU GPL does
|
||||
that. However, we hope that this translation will help Japanese
|
||||
speakers understand the GNU GPL better.
|
||||
</blockquote>
|
||||
<blockquote>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
Japanese. It was not published by the Free Software Foundation, and does
|
||||
not legally state the distribution terms for software that uses the GNU
|
||||
GPL--only the original English text of the GNU GPL does that. However, we
|
||||
hope that this translation will help Japanese speakers understand the GNU
|
||||
GPL better.
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
(訳: 以下はGNU General Public Licenseの非公式な日本語訳です。これはフ
|
||||
リーソフトウェア財団(the Free Software Foundation)によって発表されたも
|
||||
のではなく、GNU GPLを適用したソフトウェアの頒布条件を法的に有効な形で
|
||||
述べたものではありません。頒布条件としてはGNU GPLの英語版テキストで指
|
||||
定されているもののみが有効です。しかしながら、私たちはこの翻訳が、日本
|
||||
語を使用する人々にとってGNU GPLをより良く理解する助けとなることを望ん
|
||||
でいます。)
|
||||
</blockquote>
|
||||
<blockquote>
|
||||
(訳: 以下はGNU General Public Licenseの非公式な日本語訳です。これはフ
|
||||
リーソフトウェア財団(the Free Software Foundation)によって発表されたも
|
||||
のではなく、GNU GPLを適用したソフトウェアの頒布条件を法的に有効な形で
|
||||
述べたものではありません。頒布条件としてはGNU GPLの英語版テキストで指
|
||||
定されているもののみが有効です。しかしながら、私たちはこの翻訳が、日本
|
||||
語を使用する人々にとってGNU GPLをより良く理解する助けとなることを望ん
|
||||
でいます。)
|
||||
</blockquote>
|
||||
|
||||
<BLOCKQUOTE>
|
||||
翻訳は 八田真行<<A
|
||||
HREF="mailto:mhatta@gnu.org">mhatta@gnu.org</A>>が行った。原文は<A
|
||||
HREF="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</A>
|
||||
である。誤訳の指摘や改善案を歓迎する。
|
||||
</BLOCKQUOTE>
|
||||
<blockquote>
|
||||
翻訳は 八田真行<<a href="mailto:mhatta@gnu.org">mhatta@gnu.org</a
|
||||
>>が行った。原文は<a href="http://www.gnu.org/licenses/gpl.html"
|
||||
>http://www.gnu.org/licenses/gpl.html</a
|
||||
>
|
||||
である。誤訳の指摘や改善案を歓迎する。
|
||||
</blockquote>
|
||||
|
||||
<h3><a name="SEC2">はじめに</a></h3>
|
||||
<h3><a name="SEC2">はじめに</a></h3>
|
||||
|
||||
<p>
|
||||
ソフトウェア向けライセンスの大半は、あなたがそのソフトウェアを共有した
|
||||
り変更したりする自由を奪うように設計されています。対照的に、GNU 一般公
|
||||
衆利用許諾契約書は、あなたがフリーソフトウェアを共有したり変更したりす
|
||||
る自由を保証する--すなわち、ソフトウェアがそのユーザすべてにとってフリー
|
||||
であることを保証することを目的としています。この一般公衆利用許諾契約書
|
||||
はフリーソフトウェア財団のソフトウェアのほとんどに適用されており、また
|
||||
GNU GPLを適用すると決めたフリーソフトウェア財団以外の作者によるプログ
|
||||
ラムにも適用されています(いくつかのフリーソフトウェア財団のソフトウェ
|
||||
アには、GNU GPLではなくGNU ライブラリ一般公衆利用許諾契約書が適用され
|
||||
ています)。あなたもまた、ご自分のプログラムにGNU GPLを適用することが可
|
||||
能です。
|
||||
<p>
|
||||
ソフトウェア向けライセンスの大半は、あなたがそのソフトウェアを共有した
|
||||
り変更したりする自由を奪うように設計されています。対照的に、GNU 一般公
|
||||
衆利用許諾契約書は、あなたがフリーソフトウェアを共有したり変更したりす
|
||||
る自由を保証する--すなわち、ソフトウェアがそのユーザすべてにとってフリー
|
||||
であることを保証することを目的としています。この一般公衆利用許諾契約書
|
||||
はフリーソフトウェア財団のソフトウェアのほとんどに適用されており、また GNU
|
||||
GPLを適用すると決めたフリーソフトウェア財団以外の作者によるプログ
|
||||
ラムにも適用されています(いくつかのフリーソフトウェア財団のソフトウェ
|
||||
アには、GNU GPLではなくGNU ライブラリ一般公衆利用許諾契約書が適用され
|
||||
ています)。あなたもまた、ご自分のプログラムにGNU GPLを適用することが可
|
||||
能です。
|
||||
</p>
|
||||
<p>
|
||||
私たちがフリーソフトウェアと言うとき、それは利用の自由について言及して
|
||||
いるのであって、価格は問題にしていません。私たちの一般公衆利用許諾契約
|
||||
書は、あなたがフリーソフトウェアの複製物を頒布する自由を保証するよう設
|
||||
計されています(希望に応じてその種のサービスに手数料を課す自由も保証さ
|
||||
れます)。また、あなたがソースコードを受け取るか、あるいは望めばそれを
|
||||
入手することが可能であるということ、あなたがソフトウェアを変更し、その
|
||||
一部を新たなフリーのプログラムで利用できるということ、そして、以上で述
|
||||
べたようなことができるということがあなたに知らされるということも保証さ
|
||||
れます。
|
||||
</p>
|
||||
<p>
|
||||
あなたの権利を守るため、私たちは誰かがあなたの有するこれらの権利を否定
|
||||
することや、これらの権利を放棄するよう要求することを禁止するという制限
|
||||
を加える必要があります。よって、あなたがソフトウェアの複製物を頒布した
|
||||
りそれを変更したりする場合には、そういった制限のためにあなたにある種の
|
||||
責任が発生することになります。
|
||||
</p>
|
||||
<p>
|
||||
例えば、あなたがフリーなプログラムの複製物を頒布する場合、有料か無料に
|
||||
関わらず、あなたは自分が有する権利を全て受領者に与えなければなりません。
|
||||
また、あなたは彼らもソースコードを受け取るか手に入れることができるよう
|
||||
保証しなければなりません。そして、あなたは彼らに対して以下で述べる条件
|
||||
を示し、彼らに自らの持つ権利について知らしめるようにしなければなりませ
|
||||
ん。
|
||||
</p>
|
||||
<p>
|
||||
私たちはあなたの権利を二段階の手順を踏んで保護します。(1) まずソフトウェ
|
||||
アに対して著作権を主張し、そして (2) あなたに対して、ソフトウェアの複
|
||||
製や頒布または改変についての法的な許可を与えるこの契約書を提示します。
|
||||
</p>
|
||||
<p>
|
||||
また、各作者や私たちを保護するため、私たちはこのフリーソフトウェアには
|
||||
何の保証も無いということを誰もが確実に理解するようにし、またソフトウェ
|
||||
アが誰か他人によって改変され、それが次々と頒布されていったとしても、そ
|
||||
の受領者は彼らが手に入れたソフトウェアがオリジナルのバージョンでは無い
|
||||
こと、そして原作者の名声は他人によって持ち込まれた可能性のある問題によっ
|
||||
て影響されることがないということを周知させたいと思います。
|
||||
</p>
|
||||
<p>
|
||||
最後に、ソフトウェア特許がいかなるフリーのプログラムの存在にも不断の脅
|
||||
威を投げかけていますが、私たちは、フリーなプログラムの再頒布者が個々に
|
||||
特許ライセンスを取得することによって、事実上プログラムを独占的にしてし
|
||||
まうという危険を避けたいと思います。こういった事態を予防するため、私た
|
||||
ちはいかなる特許も誰もが自由に利用できるようライセンスされるか、全くラ
|
||||
イセンスされないかのどちらかでなければならないことを明確にしました。
|
||||
</p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
私たちがフリーソフトウェアと言うとき、それは利用の自由について言及して
|
||||
いるのであって、価格は問題にしていません。私たちの一般公衆利用許諾契約
|
||||
書は、あなたがフリーソフトウェアの複製物を頒布する自由を保証するよう設
|
||||
計されています(希望に応じてその種のサービスに手数料を課す自由も保証さ
|
||||
れます)。また、あなたがソースコードを受け取るか、あるいは望めばそれを
|
||||
入手することが可能であるということ、あなたがソフトウェアを変更し、その
|
||||
一部を新たなフリーのプログラムで利用できるということ、そして、以上で述
|
||||
べたようなことができるということがあなたに知らされるということも保証さ
|
||||
れます。
|
||||
<blockquote>
|
||||
(訳注: 本契約書で「独占的(proprietary)」とは、ソフトウェアの利用や再頒
|
||||
布、改変が禁止されているか、許可を得ることが必要とされているか、あるい
|
||||
は厳しい制限が課せられていて自由にそうすることが事実上できなくなってい
|
||||
る状態のことを指す。詳しくは<a
|
||||
href="http://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftware"
|
||||
>http://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftware</a
|
||||
>
|
||||
を参照せよ。)
|
||||
</blockquote>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
あなたの権利を守るため、私たちは誰かがあなたの有するこれらの権利を否定
|
||||
することや、これらの権利を放棄するよう要求することを禁止するという制限
|
||||
を加える必要があります。よって、あなたがソフトウェアの複製物を頒布した
|
||||
りそれを変更したりする場合には、そういった制限のためにあなたにある種の
|
||||
責任が発生することになります。
|
||||
<p>複製や頒布、改変についての正確な条件と制約を以下で述べていきます。</p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
例えば、あなたがフリーなプログラムの複製物を頒布する場合、有料か無料に
|
||||
関わらず、あなたは自分が有する権利を全て受領者に与えなければなりません。
|
||||
また、あなたは彼らもソースコードを受け取るか手に入れることができるよう
|
||||
保証しなければなりません。そして、あなたは彼らに対して以下で述べる条件
|
||||
を示し、彼らに自らの持つ権利について知らしめるようにしなければなりませ
|
||||
ん。
|
||||
<h3><a name="SEC3">複製、頒布、改変に関する条件と制約</a></h3>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
私たちはあなたの権利を二段階の手順を踏んで保護します。(1) まずソフトウェ
|
||||
アに対して著作権を主張し、そして (2) あなたに対して、ソフトウェアの複
|
||||
製や頒布または改変についての法的な許可を与えるこの契約書を提示します。
|
||||
<p>
|
||||
<strong>0.</strong>
|
||||
この利用許諾契約書は、そのプログラム(またはその他の著作物)をこの一般公
|
||||
衆利用許諾契約書の定める条件の下で頒布できる、という告知が著作権者によっ
|
||||
て記載されたプログラムまたはその他の著作物全般に適用される。以下では、
|
||||
「『プログラム』」とはそのようにしてこの契約書が適用されたプログラムや
|
||||
著作物全般を意味し、また「『プログラム』を基にした著作物」とは『プログ
|
||||
ラム』やその他著作権法の下で派生物と見なされるもの全般を指す。すなわち、
|
||||
『プログラム』かその一部を、全く同一のままか、改変を加えたか、あるいは
|
||||
他の言語に翻訳された形で含む著作物のことである(「改変」という語の本来
|
||||
の意味からはずれるが、以下では翻訳も改変の一種と見なす)。それぞれの契
|
||||
約者は「あなた」と表現される。
|
||||
</p>
|
||||
<p>
|
||||
複製や頒布、改変以外の活動はこの契約書ではカバーされない。それらはこの
|
||||
契約書の対象外である。『プログラム』を実行する行為自体に制限はない。ま
|
||||
た、そのような『プログラム』の出力結果は、その内容が『プログラム』を基
|
||||
にした著作物を構成する場合のみこの契約書によって保護される(『プログラ
|
||||
ム』を実行したことによって作成されたということとは無関係である)。この
|
||||
ような線引きの妥当性は、『プログラム』が何をするのかに依存する。
|
||||
</p>
|
||||
<p>
|
||||
<strong>1.</strong>
|
||||
それぞれの複製物において適切な著作権表示と保証の否認声明(disclaimer of
|
||||
warranty)を目立つよう適切に掲載し、またこの契約書および一切の保証の不
|
||||
在に触れた告知すべてをそのまま残し、そしてこの契約書の複製物を『プログ
|
||||
ラム』のいかなる受領者にも『プログラム』と共に頒布する限り、あなたは
|
||||
『プログラム』のソースコードの複製物を、あなたが受け取った通りの形で複
|
||||
製または頒布することができる。媒体は問わない。
|
||||
</p>
|
||||
<p>
|
||||
あなたは、物理的に複製物を譲渡するという行為に関して手数料を課しても良
|
||||
いし、希望によっては手数料を取って交換における保護の保証を提供しても良
|
||||
い。
|
||||
</p>
|
||||
<p>
|
||||
<strong>2.</strong>
|
||||
あなたは自分の『プログラム』の複製物かその一部を改変して『プログラム』
|
||||
を基にした著作物を形成し、そのような改変点や著作物を上記第1節の定める
|
||||
条件の下で複製または頒布することができる。ただし、そのためには以下の条
|
||||
件すべてを満たしていなければならない:
|
||||
</p>
|
||||
<p></p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>a)</strong>
|
||||
あなたがそれらのファイルを変更したということと変更した日時が良く
|
||||
分かるよう、改変されたファイルに告示しなければならない。
|
||||
|
||||
</p>
|
||||
<p>
|
||||
また、各作者や私たちを保護するため、私たちはこのフリーソフトウェアには
|
||||
何の保証も無いということを誰もが確実に理解するようにし、またソフトウェ
|
||||
アが誰か他人によって改変され、それが次々と頒布されていったとしても、そ
|
||||
の受領者は彼らが手に入れたソフトウェアがオリジナルのバージョンでは無い
|
||||
こと、そして原作者の名声は他人によって持ち込まれた可能性のある問題によっ
|
||||
て影響されることがないということを周知させたいと思います。
|
||||
<p></p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>b)</strong>
|
||||
『プログラム』またはその一部を含む著作物、あるいは『プログラム』
|
||||
かその一部から派生した著作物を頒布あるいは発表する場合には、その
|
||||
全体をこの契約書の条件に従って第三者へ無償で利用許諾しなけれ
|
||||
ばならない。
|
||||
|
||||
</p>
|
||||
<p>
|
||||
最後に、ソフトウェア特許がいかなるフリーのプログラムの存在にも不断の脅
|
||||
威を投げかけていますが、私たちは、フリーなプログラムの再頒布者が個々に
|
||||
特許ライセンスを取得することによって、事実上プログラムを独占的にしてし
|
||||
まうという危険を避けたいと思います。こういった事態を予防するため、私た
|
||||
ちはいかなる特許も誰もが自由に利用できるようライセンスされるか、全くラ
|
||||
イセンスされないかのどちらかでなければならないことを明確にしました。
|
||||
<p></p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>c)</strong>
|
||||
改変されたプログラムが、通常実行する際に対話的にコマンドを読むよ
|
||||
うになっているならば、そのプログラムを最も一般的な方法で対話的に
|
||||
実行する際、適切な著作権表示、無保証であること(あるいはあなたが保
|
||||
証を提供するということ)、ユーザがプログラムをこの契約書で述べた条
|
||||
件の下で頒布することができるということ、そしてこの契約書の複製物
|
||||
を閲覧するにはどうしたらよいかというユーザへの説明を含む告知が印
|
||||
刷されるか、あるいは画面に表示されるようにしなければならない(例外
|
||||
として、『プログラム』そのものは対話的であっても通常そのような告
|
||||
知を印刷しない場合には、『プログラム』を基にしたあなたの著作物に
|
||||
そのような告知を印刷させる必要はない)。
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
以上の必要条件は全体としての改変された著作物に適用される。著作物の一部
|
||||
が『プログラム』から派生したものではないと確認でき、それら自身別の独立
|
||||
した著作物であると合理的に考えられるならば、あなたがそれらを別の著作物
|
||||
として分けて頒布する場合、そういった部分にはこの契約書とその条件は適用
|
||||
されない。しかし、あなたが同じ部分を『プログラム』を基にした著作物全体
|
||||
の一部として頒布するならば、全体としての頒布物は、この契約書が課す条件
|
||||
に従わなければならない。というのは、この契約書が他の契約者に与える許可
|
||||
は『プログラム』丸ごと全体に及び、誰が書いたかは関係なく各部分のすべて
|
||||
を保護するからである。
|
||||
<p>
|
||||
よって、すべてあなたによって書かれた著作物に対し、権利を主張したりあな
|
||||
たの権利に異議を申し立てることはこの節の意図するところではない。むしろ、
|
||||
その趣旨は『プログラム』を基にした派生物ないし集合著作物の頒布を管理す
|
||||
る権利を行使するということにある。
|
||||
</p>
|
||||
<p>
|
||||
また、『プログラム』を基にしていないその他の著作物を『プログラム』(あ
|
||||
るいは『プログラム』を基にした著作物)と一緒に集めただけのものを一巻の
|
||||
保管装置ないし頒布媒体に収めても、その他の著作物までこの契約書が保護す
|
||||
る対象になるということにはならない。
|
||||
</p>
|
||||
<p>
|
||||
<strong>3.</strong>
|
||||
あなたは上記第1節および2節の条件に従い、『プログラム』(あるいは第2節に
|
||||
おける派生物)をオブジェクトコードないし実行形式で複製または頒布するこ
|
||||
とができる。ただし、その場合あなたは以下のうちどれか一つを実施しなけれ
|
||||
ばならない:
|
||||
|
||||
<blockquote>
|
||||
(訳注: 本契約書で「独占的(proprietary)」とは、ソフトウェアの利用や再頒
|
||||
布、改変が禁止されているか、許可を得ることが必要とされているか、あるい
|
||||
は厳しい制限が課せられていて自由にそうすることが事実上できなくなってい
|
||||
る状態のことを指す。詳しくは<a href="http://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftware">http://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftware</a>
|
||||
を参照せよ。)
|
||||
</blockquote>
|
||||
<!-- we use this doubled UL to get the sub-sections indented, -->
|
||||
<!-- while making the bullets as unobvious as possible. -->
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>a)</strong>
|
||||
著作物に、『プログラム』に対応した完全かつ機械で読み取り可能なソー
|
||||
スコードを添付する。ただし、ソースコードは上記第1節および2節の条
|
||||
件に従いソフトウェアの交換で習慣的に使われる媒体で頒布しなければ
|
||||
ならない。あるいは、
|
||||
<p></p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>b)</strong>
|
||||
著作物に、いかなる第三者に対しても、『プログラム』に対応した完全
|
||||
かつ機械で読み取り可能なソースコードを、頒布に要する物理的コスト
|
||||
を上回らない程度の手数料と引き換えに提供する旨述べた少なくとも3年
|
||||
間は有効な書面になった申し出を添える。ただし、ソースコードは上記
|
||||
第1節および2節の条件に従いソフトウェアの交換で習慣的に使われる媒
|
||||
体で頒布しなければならない。あるいは、
|
||||
<p></p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>c)</strong>
|
||||
対応するソースコード頒布の申し出に際して、あなたが得た情報を一緒
|
||||
に引き渡す(この選択肢は、営利を目的としない頒布であって、かつあな
|
||||
たが上記小節bで指定されているような申し出と共にオブジェクトコード
|
||||
あるいは実行形式のプログラムしか入手していない場合に限り許可され る)。
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
複製や頒布、改変についての正確な条件と制約を以下で述べていきます。
|
||||
著作物のソースコードとは、それに対して改変を加える上で好ましいとされる
|
||||
著作物の形式を意味する。ある実行形式の著作物にとって完全なソースコード
|
||||
とは、それが含むモジュールすべてのソースコード全部に加え、関連するイン
|
||||
ターフェース定義ファイルのすべてとライブラリのコンパイルやインストール
|
||||
を制御するために使われるスクリプトをも加えたものを意味する。しかし特別
|
||||
な例外として、そのコンポーネント自体が実行形式に付随するのでは無い限り、
|
||||
頒布されるものの中に、実行形式が実行されるオペレーティングシステムの主
|
||||
要なコンポーネント(コンパイラやカーネル等)と通常一緒に(ソースかバイナ
|
||||
リ形式のどちらかで)頒布されるものを含んでいる必要はないとする。
|
||||
<p>
|
||||
実行形式またはオブジェクトコードの頒布が、指定された場所からコピーする
|
||||
ためのアクセス手段を提供することで為されるとして、その上でソースコード
|
||||
も同等のアクセス手段によって同じ場所からコピーできるようになっているな
|
||||
らば、第三者がオブジェクトコードと一緒にソースも強制的にコピーさせられ
|
||||
るようになっていなくてもソースコード頒布の条件を満たしているものとする。
|
||||
</p>
|
||||
<p>
|
||||
<strong>4.</strong>
|
||||
あなたは『プログラム』を、この契約書において明確に提示された行為を除き
|
||||
複製や改変、サブライセンス、あるいは頒布してはならない。他に『プログラ
|
||||
ム』を複製や改変、サブライセンス、あるいは頒布する企てはすべて無効であ
|
||||
り、この契約書の下でのあなたの権利を自動的に終結させることになろう。し
|
||||
かし、複製物や権利をこの契約書に従ってあなたから得た人々に関しては、そ
|
||||
のような人々がこの契約書に完全に従っている限り彼らのライセンスまで終結
|
||||
することはない。
|
||||
</p>
|
||||
<p>
|
||||
<strong>5.</strong>
|
||||
あなたはこの契約書を受諾する必要は無い。というのは、あなたはこれに署名
|
||||
していないからである。しかし、この契約書以外にあなたに対して『プログラ
|
||||
ム』やその派生物を改変または頒布する許可を与えるものは存在しない。これ
|
||||
らの行為は、あなたがこの契約書を受け入れない限り法によって禁じられてい
|
||||
る。そこで、『プログラム』(あるいは『プログラム』を基にした著作物全般)
|
||||
を改変ないし頒布することにより、あなたは自分がそのような行為を行うため
|
||||
にこの契約書を受諾したということ、そして『プログラム』とそれに基づく著
|
||||
作物の複製や頒布、改変についてこの契約書が課す制約と条件をすべて受け入
|
||||
れたということを示したものと見なす。
|
||||
</p>
|
||||
<p>
|
||||
<strong>6.</strong>
|
||||
あなたが『プログラム』(または『プログラム』を基にした著作物全般)を再頒
|
||||
布するたびに、その受領者は元々のライセンス許可者から、この契約書で指定
|
||||
された条件と制約の下で『プログラム』を複製や頒布、あるいは改変する許可
|
||||
を自動的に得るものとする。あなたは、受領者がここで認められた権利を行使
|
||||
することに関してこれ以上他のいかなる制限も課してはならない。あなたには、
|
||||
第三者がこの契約書に従うことを強制する責任はない。
|
||||
</p>
|
||||
<p>
|
||||
<strong>7.</strong>
|
||||
特許侵害あるいはその他の理由(特許関係に限らない)から、裁判所の判決ある
|
||||
いは申し立ての結果としてあなたに(裁判所命令や契約などにより)このライセ
|
||||
ンスの条件と矛盾する制約が課された場合でも、あなたがこの契約書の条
|
||||
件を免除されるわけではない。もしこの契約書の下であなたに課せられた
|
||||
責任と他の関連する責任を同時に満たすような形で頒布できないならば、結果
|
||||
としてあなたは『プログラム』を頒布することが全くできないということであ
|
||||
る。例えば特許ライセンスが、あなたから直接間接を問わずコピーを受け取っ
|
||||
た人が誰でも『プログラム』を使用料無料で再頒布することを認めていない場
|
||||
合、あなたがその制約とこの契約書を両方とも満たすには『プログラム』
|
||||
の頒布を完全に中止するしかないだろう。
|
||||
</p>
|
||||
<p>
|
||||
この節の一部分が特定の状況の下で無効ないし実施不可能な場合でも、節の残
|
||||
りの部分は適用されるよう意図されている。その他の状況では節が全体として
|
||||
適用されるよう意図されている。
|
||||
</p>
|
||||
<p>
|
||||
特許やその他の財産権を侵害したり、そのような権利の主張の効力に異議を唱
|
||||
えたりするようあなたを誘惑することがこの節の目的ではない。この節には、
|
||||
人々によってライセンス慣行として実現されてきた、フリーソフトウェア頒布
|
||||
のシステムの完全性を護るという目的しかない。多くの人々が、フリーソフト
|
||||
ウェアの頒布システムが首尾一貫して適用されているという信頼に基づき、こ
|
||||
のシステムを通じて頒布される多様なソフトウェアに寛大な貢献をしてきたの
|
||||
は事実であるが、人がどのようなシステムを通じてソフトウェアを頒布したい
|
||||
と思うかはあくまでも作者/寄与者次第であり、あなたが選択を押しつけるこ
|
||||
とはできない。
|
||||
</p>
|
||||
<p>
|
||||
この節は、この契約書のこの節以外の部分の一帰結になると考えられるケー
|
||||
スを徹底的に明らかにすることを目的としている。
|
||||
</p>
|
||||
<p>
|
||||
<strong>8.</strong>
|
||||
『プログラム』の頒布や利用が、ある国においては特許または著作権が主張さ
|
||||
れたインターフェースのいずれかによって制限されている場合、『プログラム』
|
||||
にこの契約書を適用した元の著作権者は、そういった国々を排除した明確
|
||||
な地理的頒布制限を加え、そこで排除されていない国の中やそれらの国々の間
|
||||
でのみ頒布が許可されるようにしても構わない。その場合、そのような制限は
|
||||
この契約書本文で書かれているのと同様に見なされる。
|
||||
</p>
|
||||
<p>
|
||||
<strong>9.</strong>
|
||||
フリーソフトウェア財団は、時によって改訂または新版の一般公衆利用許諾書
|
||||
を発表することができる。そのような新版は現在のバージョンとその精神にお
|
||||
いては似たものになるだろうが、新たな問題や懸念を解決するため細部では異
|
||||
なる可能性がある。
|
||||
</p>
|
||||
<p>
|
||||
それぞれのバージョンには、見分けが付くようにバージョン番号が振られてい
|
||||
る。『プログラム』においてそれに適用されるこの契約書のバージョン番号が
|
||||
指定されていて、更に「それ以降のいかなるバージョン(any later version)」
|
||||
も適用して良いとなっていた場合、あなたは従う条件と制約として、指定のバー
|
||||
ジョンか、フリーソフトウェア財団によって発行された指定のバージョン以降
|
||||
の版のどれか一つのどちらかを選ぶことが出来る。『プログラム』でライセン
|
||||
スのバージョン番号が指定されていないならば、あなたは今までにフリーソフ
|
||||
トウェア財団から発行されたバージョンの中から好きに選んで構わない。
|
||||
</p>
|
||||
<p>
|
||||
<strong>10.</strong>
|
||||
もしあなたが『プログラム』の一部を、その頒布条件がこの契約書と異なる他
|
||||
のフリーなプログラムと統合したいならば、作者に連絡して許可を求めよ。フ
|
||||
リーソフトウェア財団が著作権を保有するソフトウェアについては、フリーソ
|
||||
フトウェア財団に連絡せよ。私たちは、このような場合のために特別な例外を
|
||||
設けることもある。私たちが決定を下すにあたっては、私たちのフリーソフト
|
||||
ウェアの派生物すべてがフリーな状態に保たれるということと、一般的にソフ
|
||||
トウェアの共有と再利用を促進するという二つの目標を規準に検討されるであ
|
||||
ろう。
|
||||
</p>
|
||||
<p><strong>無保証について</strong></p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<strong>11.</strong>
|
||||
<strong>
|
||||
『プログラム』は代価無しに利用が許可されるので、適切な法が認める限りに
|
||||
おいて、『プログラム』に関するいかなる保証も存在しない。書面で別に述べ
|
||||
る場合を除いて、著作権者、またはその他の団体は、『プログラム』を、表明
|
||||
されたか言外にかは問わず、商業的適性を保証するほのめかしやある特定の目
|
||||
的への適合性(に限られない)を含む一切の保証無しに「あるがまま」で提供す
|
||||
る。『プログラム』の質と性能に関するリスクのすべてはあなたに帰属する。
|
||||
『プログラム』に欠陥があると判明した場合、あなたは必要な保守点検や補修、
|
||||
修正に要するコストのすべてを引き受けることになる。
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>12.</strong>
|
||||
<strong>
|
||||
適切な法か書面での同意によって命ぜられない限り、著作権者、または上記で
|
||||
許可されている通りに『プログラム』を改変または再頒布したその他の団体は、
|
||||
あなたに対して『プログラム』の利用ないし利用不能で生じた通常損害や特別
|
||||
損害、偶発損害、間接損害(データの消失や不正確な処理、あなたか第三者が
|
||||
被った損失、あるいは『プログラム』が他のソフトウェアと一緒に動作しない
|
||||
という不具合などを含むがそれらに限らない)に一切の責任を負わない。その
|
||||
ような損害が生ずる可能性について彼らが忠告されていたとしても同様である。
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
|
||||
<h3><a name="SEC3">複製、頒布、改変に関する条件と制約</a></h3>
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
<strong>0.</strong>
|
||||
この利用許諾契約書は、そのプログラム(またはその他の著作物)をこの一般公
|
||||
衆利用許諾契約書の定める条件の下で頒布できる、という告知が著作権者によっ
|
||||
て記載されたプログラムまたはその他の著作物全般に適用される。以下では、
|
||||
「『プログラム』」とはそのようにしてこの契約書が適用されたプログラムや
|
||||
著作物全般を意味し、また「『プログラム』を基にした著作物」とは『プログ
|
||||
ラム』やその他著作権法の下で派生物と見なされるもの全般を指す。すなわち、
|
||||
『プログラム』かその一部を、全く同一のままか、改変を加えたか、あるいは
|
||||
他の言語に翻訳された形で含む著作物のことである(「改変」という語の本来
|
||||
の意味からはずれるが、以下では翻訳も改変の一種と見なす)。それぞれの契
|
||||
約者は「あなた」と表現される。
|
||||
</p><p>
|
||||
|
||||
複製や頒布、改変以外の活動はこの契約書ではカバーされない。それらはこの
|
||||
契約書の対象外である。『プログラム』を実行する行為自体に制限はない。ま
|
||||
た、そのような『プログラム』の出力結果は、その内容が『プログラム』を基
|
||||
にした著作物を構成する場合のみこの契約書によって保護される(『プログラ
|
||||
ム』を実行したことによって作成されたということとは無関係である)。この
|
||||
ような線引きの妥当性は、『プログラム』が何をするのかに依存する。
|
||||
</p><p>
|
||||
|
||||
<strong>1.</strong>
|
||||
それぞれの複製物において適切な著作権表示と保証の否認声明(disclaimer of
|
||||
warranty)を目立つよう適切に掲載し、またこの契約書および一切の保証の不
|
||||
在に触れた告知すべてをそのまま残し、そしてこの契約書の複製物を『プログ
|
||||
ラム』のいかなる受領者にも『プログラム』と共に頒布する限り、あなたは
|
||||
『プログラム』のソースコードの複製物を、あなたが受け取った通りの形で複
|
||||
製または頒布することができる。媒体は問わない。
|
||||
</p><p>
|
||||
|
||||
あなたは、物理的に複製物を譲渡するという行為に関して手数料を課しても良
|
||||
いし、希望によっては手数料を取って交換における保護の保証を提供しても良
|
||||
い。
|
||||
</p><p>
|
||||
|
||||
<strong>2.</strong>
|
||||
あなたは自分の『プログラム』の複製物かその一部を改変して『プログラム』
|
||||
を基にした著作物を形成し、そのような改変点や著作物を上記第1節の定める
|
||||
条件の下で複製または頒布することができる。ただし、そのためには以下の条
|
||||
件すべてを満たしていなければならない:
|
||||
</p><p>
|
||||
|
||||
</p><ul>
|
||||
|
||||
<li><strong>a)</strong>
|
||||
あなたがそれらのファイルを変更したということと変更した日時が良く
|
||||
分かるよう、改変されたファイルに告示しなければならない。
|
||||
|
||||
<p>
|
||||
</p></li><li><strong>b)</strong>
|
||||
『プログラム』またはその一部を含む著作物、あるいは『プログラム』
|
||||
かその一部から派生した著作物を頒布あるいは発表する場合には、その
|
||||
全体をこの契約書の条件に従って第三者へ無償で利用許諾しなけれ
|
||||
ばならない。
|
||||
|
||||
<p>
|
||||
</p></li><li><strong>c)</strong>
|
||||
改変されたプログラムが、通常実行する際に対話的にコマンドを読むよ
|
||||
うになっているならば、そのプログラムを最も一般的な方法で対話的に
|
||||
実行する際、適切な著作権表示、無保証であること(あるいはあなたが保
|
||||
証を提供するということ)、ユーザがプログラムをこの契約書で述べた条
|
||||
件の下で頒布することができるということ、そしてこの契約書の複製物
|
||||
を閲覧するにはどうしたらよいかというユーザへの説明を含む告知が印
|
||||
刷されるか、あるいは画面に表示されるようにしなければならない(例外
|
||||
として、『プログラム』そのものは対話的であっても通常そのような告
|
||||
知を印刷しない場合には、『プログラム』を基にしたあなたの著作物に
|
||||
そのような告知を印刷させる必要はない)。
|
||||
</li></ul>
|
||||
|
||||
以上の必要条件は全体としての改変された著作物に適用される。著作物の一部
|
||||
が『プログラム』から派生したものではないと確認でき、それら自身別の独立
|
||||
した著作物であると合理的に考えられるならば、あなたがそれらを別の著作物
|
||||
として分けて頒布する場合、そういった部分にはこの契約書とその条件は適用
|
||||
されない。しかし、あなたが同じ部分を『プログラム』を基にした著作物全体
|
||||
の一部として頒布するならば、全体としての頒布物は、この契約書が課す条件
|
||||
に従わなければならない。というのは、この契約書が他の契約者に与える許可
|
||||
は『プログラム』丸ごと全体に及び、誰が書いたかは関係なく各部分のすべて
|
||||
を保護するからである。
|
||||
<p>
|
||||
|
||||
よって、すべてあなたによって書かれた著作物に対し、権利を主張したりあな
|
||||
たの権利に異議を申し立てることはこの節の意図するところではない。むしろ、
|
||||
その趣旨は『プログラム』を基にした派生物ないし集合著作物の頒布を管理す
|
||||
る権利を行使するということにある。
|
||||
</p><p>
|
||||
|
||||
また、『プログラム』を基にしていないその他の著作物を『プログラム』(あ
|
||||
るいは『プログラム』を基にした著作物)と一緒に集めただけのものを一巻の
|
||||
保管装置ないし頒布媒体に収めても、その他の著作物までこの契約書が保護す
|
||||
る対象になるということにはならない。
|
||||
</p><p>
|
||||
|
||||
<strong>3.</strong>
|
||||
あなたは上記第1節および2節の条件に従い、『プログラム』(あるいは第2節に
|
||||
おける派生物)をオブジェクトコードないし実行形式で複製または頒布するこ
|
||||
とができる。ただし、その場合あなたは以下のうちどれか一つを実施しなけれ
|
||||
ばならない:
|
||||
|
||||
<!-- we use this doubled UL to get the sub-sections indented, -->
|
||||
<!-- while making the bullets as unobvious as possible. -->
|
||||
</p><ul>
|
||||
|
||||
<li><strong>a)</strong>
|
||||
著作物に、『プログラム』に対応した完全かつ機械で読み取り可能なソー
|
||||
スコードを添付する。ただし、ソースコードは上記第1節および2節の条
|
||||
件に従いソフトウェアの交換で習慣的に使われる媒体で頒布しなければ
|
||||
ならない。あるいは、
|
||||
<p>
|
||||
</p></li><li><strong>b)</strong>
|
||||
著作物に、いかなる第三者に対しても、『プログラム』に対応した完全
|
||||
かつ機械で読み取り可能なソースコードを、頒布に要する物理的コスト
|
||||
を上回らない程度の手数料と引き換えに提供する旨述べた少なくとも3年
|
||||
間は有効な書面になった申し出を添える。ただし、ソースコードは上記
|
||||
第1節および2節の条件に従いソフトウェアの交換で習慣的に使われる媒
|
||||
体で頒布しなければならない。あるいは、
|
||||
<p>
|
||||
</p></li><li><strong>c)</strong>
|
||||
対応するソースコード頒布の申し出に際して、あなたが得た情報を一緒
|
||||
に引き渡す(この選択肢は、営利を目的としない頒布であって、かつあな
|
||||
たが上記小節bで指定されているような申し出と共にオブジェクトコード
|
||||
あるいは実行形式のプログラムしか入手していない場合に限り許可され
|
||||
る)。
|
||||
</li></ul>
|
||||
|
||||
著作物のソースコードとは、それに対して改変を加える上で好ましいとされる
|
||||
著作物の形式を意味する。ある実行形式の著作物にとって完全なソースコード
|
||||
とは、それが含むモジュールすべてのソースコード全部に加え、関連するイン
|
||||
ターフェース定義ファイルのすべてとライブラリのコンパイルやインストール
|
||||
を制御するために使われるスクリプトをも加えたものを意味する。しかし特別
|
||||
な例外として、そのコンポーネント自体が実行形式に付随するのでは無い限り、
|
||||
頒布されるものの中に、実行形式が実行されるオペレーティングシステムの主
|
||||
要なコンポーネント(コンパイラやカーネル等)と通常一緒に(ソースかバイナ
|
||||
リ形式のどちらかで)頒布されるものを含んでいる必要はないとする。
|
||||
<p>
|
||||
|
||||
実行形式またはオブジェクトコードの頒布が、指定された場所からコピーする
|
||||
ためのアクセス手段を提供することで為されるとして、その上でソースコード
|
||||
も同等のアクセス手段によって同じ場所からコピーできるようになっているな
|
||||
らば、第三者がオブジェクトコードと一緒にソースも強制的にコピーさせられ
|
||||
るようになっていなくてもソースコード頒布の条件を満たしているものとする。
|
||||
</p><p>
|
||||
|
||||
<strong>4.</strong>
|
||||
あなたは『プログラム』を、この契約書において明確に提示された行為を除き
|
||||
複製や改変、サブライセンス、あるいは頒布してはならない。他に『プログラ
|
||||
ム』を複製や改変、サブライセンス、あるいは頒布する企てはすべて無効であ
|
||||
り、この契約書の下でのあなたの権利を自動的に終結させることになろう。し
|
||||
かし、複製物や権利をこの契約書に従ってあなたから得た人々に関しては、そ
|
||||
のような人々がこの契約書に完全に従っている限り彼らのライセンスまで終結
|
||||
することはない。
|
||||
</p><p>
|
||||
|
||||
<strong>5.</strong>
|
||||
あなたはこの契約書を受諾する必要は無い。というのは、あなたはこれに署名
|
||||
していないからである。しかし、この契約書以外にあなたに対して『プログラ
|
||||
ム』やその派生物を改変または頒布する許可を与えるものは存在しない。これ
|
||||
らの行為は、あなたがこの契約書を受け入れない限り法によって禁じられてい
|
||||
る。そこで、『プログラム』(あるいは『プログラム』を基にした著作物全般)
|
||||
を改変ないし頒布することにより、あなたは自分がそのような行為を行うため
|
||||
にこの契約書を受諾したということ、そして『プログラム』とそれに基づく著
|
||||
作物の複製や頒布、改変についてこの契約書が課す制約と条件をすべて受け入
|
||||
れたということを示したものと見なす。
|
||||
</p><p>
|
||||
|
||||
<strong>6.</strong>
|
||||
あなたが『プログラム』(または『プログラム』を基にした著作物全般)を再頒
|
||||
布するたびに、その受領者は元々のライセンス許可者から、この契約書で指定
|
||||
された条件と制約の下で『プログラム』を複製や頒布、あるいは改変する許可
|
||||
を自動的に得るものとする。あなたは、受領者がここで認められた権利を行使
|
||||
することに関してこれ以上他のいかなる制限も課してはならない。あなたには、
|
||||
第三者がこの契約書に従うことを強制する責任はない。
|
||||
|
||||
</p><p>
|
||||
|
||||
<strong>7.</strong>
|
||||
特許侵害あるいはその他の理由(特許関係に限らない)から、裁判所の判決ある
|
||||
いは申し立ての結果としてあなたに(裁判所命令や契約などにより)このライセ
|
||||
ンスの条件と矛盾する制約が課された場合でも、あなたがこの契約書の条
|
||||
件を免除されるわけではない。もしこの契約書の下であなたに課せられた
|
||||
責任と他の関連する責任を同時に満たすような形で頒布できないならば、結果
|
||||
としてあなたは『プログラム』を頒布することが全くできないということであ
|
||||
る。例えば特許ライセンスが、あなたから直接間接を問わずコピーを受け取っ
|
||||
た人が誰でも『プログラム』を使用料無料で再頒布することを認めていない場
|
||||
合、あなたがその制約とこの契約書を両方とも満たすには『プログラム』
|
||||
の頒布を完全に中止するしかないだろう。
|
||||
|
||||
</p><p>
|
||||
|
||||
この節の一部分が特定の状況の下で無効ないし実施不可能な場合でも、節の残
|
||||
りの部分は適用されるよう意図されている。その他の状況では節が全体として
|
||||
適用されるよう意図されている。
|
||||
|
||||
</p><p>
|
||||
|
||||
特許やその他の財産権を侵害したり、そのような権利の主張の効力に異議を唱
|
||||
えたりするようあなたを誘惑することがこの節の目的ではない。この節には、
|
||||
人々によってライセンス慣行として実現されてきた、フリーソフトウェア頒布
|
||||
のシステムの完全性を護るという目的しかない。多くの人々が、フリーソフト
|
||||
ウェアの頒布システムが首尾一貫して適用されているという信頼に基づき、こ
|
||||
のシステムを通じて頒布される多様なソフトウェアに寛大な貢献をしてきたの
|
||||
は事実であるが、人がどのようなシステムを通じてソフトウェアを頒布したい
|
||||
と思うかはあくまでも作者/寄与者次第であり、あなたが選択を押しつけるこ
|
||||
とはできない。
|
||||
|
||||
</p><p>
|
||||
|
||||
この節は、この契約書のこの節以外の部分の一帰結になると考えられるケー
|
||||
スを徹底的に明らかにすることを目的としている。
|
||||
|
||||
</p><p>
|
||||
|
||||
<strong>8.</strong>
|
||||
『プログラム』の頒布や利用が、ある国においては特許または著作権が主張さ
|
||||
れたインターフェースのいずれかによって制限されている場合、『プログラム』
|
||||
にこの契約書を適用した元の著作権者は、そういった国々を排除した明確
|
||||
な地理的頒布制限を加え、そこで排除されていない国の中やそれらの国々の間
|
||||
でのみ頒布が許可されるようにしても構わない。その場合、そのような制限は
|
||||
この契約書本文で書かれているのと同様に見なされる。
|
||||
|
||||
</p><p>
|
||||
|
||||
<strong>9.</strong>
|
||||
フリーソフトウェア財団は、時によって改訂または新版の一般公衆利用許諾書
|
||||
を発表することができる。そのような新版は現在のバージョンとその精神にお
|
||||
いては似たものになるだろうが、新たな問題や懸念を解決するため細部では異
|
||||
なる可能性がある。
|
||||
|
||||
</p><p>
|
||||
それぞれのバージョンには、見分けが付くようにバージョン番号が振られてい
|
||||
る。『プログラム』においてそれに適用されるこの契約書のバージョン番号が
|
||||
指定されていて、更に「それ以降のいかなるバージョン(any later version)」
|
||||
も適用して良いとなっていた場合、あなたは従う条件と制約として、指定のバー
|
||||
ジョンか、フリーソフトウェア財団によって発行された指定のバージョン以降
|
||||
の版のどれか一つのどちらかを選ぶことが出来る。『プログラム』でライセン
|
||||
スのバージョン番号が指定されていないならば、あなたは今までにフリーソフ
|
||||
トウェア財団から発行されたバージョンの中から好きに選んで構わない。
|
||||
|
||||
</p><p>
|
||||
|
||||
|
||||
<strong>10.</strong>
|
||||
もしあなたが『プログラム』の一部を、その頒布条件がこの契約書と異なる他
|
||||
のフリーなプログラムと統合したいならば、作者に連絡して許可を求めよ。フ
|
||||
リーソフトウェア財団が著作権を保有するソフトウェアについては、フリーソ
|
||||
フトウェア財団に連絡せよ。私たちは、このような場合のために特別な例外を
|
||||
設けることもある。私たちが決定を下すにあたっては、私たちのフリーソフト
|
||||
ウェアの派生物すべてがフリーな状態に保たれるということと、一般的にソフ
|
||||
トウェアの共有と再利用を促進するという二つの目標を規準に検討されるであ
|
||||
ろう。
|
||||
|
||||
</p><p><strong>無保証について</strong></p>
|
||||
|
||||
<p>
|
||||
|
||||
<strong>11.</strong>
|
||||
<strong>
|
||||
『プログラム』は代価無しに利用が許可されるので、適切な法が認める限りに
|
||||
おいて、『プログラム』に関するいかなる保証も存在しない。書面で別に述べ
|
||||
る場合を除いて、著作権者、またはその他の団体は、『プログラム』を、表明
|
||||
されたか言外にかは問わず、商業的適性を保証するほのめかしやある特定の目
|
||||
的への適合性(に限られない)を含む一切の保証無しに「あるがまま」で提供す
|
||||
る。『プログラム』の質と性能に関するリスクのすべてはあなたに帰属する。
|
||||
『プログラム』に欠陥があると判明した場合、あなたは必要な保守点検や補修、
|
||||
修正に要するコストのすべてを引き受けることになる。
|
||||
</strong>
|
||||
|
||||
</p><p>
|
||||
|
||||
<strong>12.</strong>
|
||||
<strong>
|
||||
適切な法か書面での同意によって命ぜられない限り、著作権者、または上記で
|
||||
許可されている通りに『プログラム』を改変または再頒布したその他の団体は、
|
||||
あなたに対して『プログラム』の利用ないし利用不能で生じた通常損害や特別
|
||||
損害、偶発損害、間接損害(データの消失や不正確な処理、あなたか第三者が
|
||||
被った損失、あるいは『プログラム』が他のソフトウェアと一緒に動作しない
|
||||
という不具合などを含むがそれらに限らない)に一切の責任を負わない。その
|
||||
ような損害が生ずる可能性について彼らが忠告されていたとしても同様である。
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3>条件と制約終わり</h3>
|
||||
</body></html>
|
||||
<h3>条件と制約終わり</h3>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,424 +1,457 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Licen<EFBFBD>a Pública Geral GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h3>LICEN<EFBFBD>A P<>BLICA GERAL GNU</h3>
|
||||
<p>Vers<EFBFBD>o 2, junho de 1991</p>
|
||||
<p>
|
||||
This is an unofficial translation of the GNU General Public License
|
||||
into Brazilian Portuguese. It was not published by the Free Software
|
||||
Foundation, and does not legally state the distribution terms for
|
||||
software that uses the GNU GPL -- only the original English text of
|
||||
the GNU GPL does that. However, we hope that this translation will
|
||||
help Brazilian Portuguese speakers understand the GNU GPL better.
|
||||
</p>
|
||||
<p>
|
||||
Esta <20> uma tradu<64><75>o n<>o-oficial da Licen<65>a P<>blica Geral GNU ("GPL
|
||||
GNU") para o portugu<67>s do Brasil. Ela n<>o foi publicada pela Free
|
||||
Software Foundation, e legalmente n<>o afirma os termos de distribui<75><69>o
|
||||
de software que utiliza a GPL GNU -- apenas o texto original da GPL
|
||||
GNU, em ingl<67>s, faz isso. Contudo, esperamos que esta tradu<64><75>o ajude
|
||||
aos que utilizam o portugu<67>s do Brasil a entender melhor a GPL GNU.
|
||||
</p>
|
||||
<p>Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA</p>
|
||||
<p>
|
||||
A qualquer pessoa <20> permitido copiar e distribuir c<>pias desse
|
||||
documento de licen<65>a, desde que sem qualquer altera<72><61>o.
|
||||
</p>
|
||||
|
||||
<h3>Introdu<EFBFBD><EFBFBD>o</h3>
|
||||
|
||||
<p>As licen<65>as de muitos software s<>o desenvolvidas para restringir sua
|
||||
liberdade de compartilh<6C>-lo e mud<75>-lo. Contr<74>ria a isso, a Licen<65>a
|
||||
P<EFBFBD>blica Geral GNU pretende garantir sua liberdade de compartilhar e
|
||||
alterar software livres -- garantindo que o software ser<65> livre e
|
||||
gratuito para os seus usu<73>rios. Esta Licen<65>a P<>blica Geral aplica-se <20>
|
||||
maioria dos software da Free Software Foundation e a qualquer outro
|
||||
programa cujo autor decida aplic<69>-la. (Alguns outros software da FSF
|
||||
s<EFBFBD>o cobertos pela Licen<65>a P<>blica Geral de Bibliotecas, no entanto.)
|
||||
Voc<EFBFBD> pode aplic<69>-la tamb<6D>m aos seus programas.</p>
|
||||
|
||||
<p>Quando nos referimos a software livre, estamos nos referindo a
|
||||
liberdade e n<>o a pre<72>o. Nossa Licen<65>a P<>blica Geral foi desenvolvida
|
||||
para garantir que voc<6F> tenha a liberdade de distribuir c<>pias de
|
||||
software livre (e cobrar por isso, se quiser); que voc<6F> receba o
|
||||
c<EFBFBD>digo-fonte ou tenha acesso a ele, se quiser; que voc<6F> possa mudar o
|
||||
software ou utilizar partes dele em novos programas livres e
|
||||
gratuitos; e que voc<6F> saiba que pode fazer tudo isso.</p>
|
||||
|
||||
<p>Para proteger seus direitos, precisamos fazer restri<72><69>es que impe<70>am
|
||||
a qualquer um negar estes direitos ou solicitar que voc<6F> deles
|
||||
abdique. Estas restri<72><69>es traduzem-se em certas responsabilidades para
|
||||
voc<EFBFBD>, se voc<6F> for distribuir c<>pias do software ou modific<69>-lo.</p>
|
||||
|
||||
<p>Por exemplo, se voc<6F> distribuir c<>pias de um programa, gratuitamente
|
||||
ou por alguma quantia, voc<6F> tem que fornecer aos recebedores todos os
|
||||
direitos que voc<6F> possui. Voc<6F> tem que garantir que eles tamb<6D>m
|
||||
recebam ou possam obter o c<>digo-fonte. E voc<6F> tem que mostrar-lhes
|
||||
estes termos para que eles possam conhecer seus direitos.</p>
|
||||
|
||||
<p>N<EFBFBD>s protegemos seus direitos em dois passos: (1) com copyright do
|
||||
software e (2) com a oferta desta licen<65>a, que lhe d<> permiss<73>o legal
|
||||
para copiar, distribuir e/ou modificar o software.</p>
|
||||
|
||||
<p>Al<EFBFBD>m disso, tanto para a prote<74><65>o do autor quanto a nossa,
|
||||
gostar<EFBFBD>amos de certificar-nos que todos entendam que n<>o h<> qualquer
|
||||
garantia nestes software livres. Se o software <20> modificado por algu<67>m
|
||||
mais e passado adiante, queremos que seus recebedores saibam que o que
|
||||
eles obtiveram n<>o <20> original, de forma que qualquer problema
|
||||
introduzido por terceiros n<>o interfira na reputa<74><61>o do autor
|
||||
original.</p>
|
||||
|
||||
<p>Finalmente, qualquer programa <20> amea<65>ado constantemente por patentes
|
||||
de software. Queremos evitar o perigo de que distribuidores de
|
||||
software livre obtenham patentes individuais, o que tem o efeito de
|
||||
tornar o programa propriet<65>rio. Para prevenir isso, deixamos claro que
|
||||
qualquer patente tem que ser licenciada para uso livre e gratuito por
|
||||
qualquer pessoa, ou ent<6E>o que nem necessite ser licenciada.
|
||||
</p>
|
||||
|
||||
<p>Os termos e condi<64><69>es precisas para c<>pia, distribui<75><69>o e
|
||||
modifica<EFBFBD><EFBFBD>o se encontram abaixo:</p>
|
||||
|
||||
<h3>LICEN<EFBFBD>A P<>BLICA GERAL GNU TERMOS E CONDI<44><49>ES PARA C<>PIA, DISTRIBUI<55><49>O E MODIFICA<43><41>O</h3>
|
||||
|
||||
<p>
|
||||
<strong>0.</strong>Esta licen<65>a se aplica a qualquer programa ou outro trabalho que
|
||||
contenha um aviso colocado pelo detentor dos direitos autorais
|
||||
informando que aquele pode ser distribu<62>do sob as condi<64><69>es desta
|
||||
Licen<EFBFBD>a P<>blica Geral. O "Programa" abaixo refere-se a qualquer
|
||||
programa ou trabalho, e "trabalho baseado no Programa" significa tanto
|
||||
o Programa em si como quaisquer trabalhos derivados, de acordo com a
|
||||
lei de direitos autorais: isto quer dizer um trabalho que contenha o
|
||||
Programa ou parte dele, tanto originalmente ou com modifica<63><61>es, e/ou
|
||||
tradu<EFBFBD><EFBFBD>o para outros idiomas. (Doravante o processo de tradu<64><75>o est<73>
|
||||
inclu<EFBFBD>do sem limites no termo "modifica<63><61>o".) Cada licenciado <20>
|
||||
mencionado como "voc<6F>".</p>
|
||||
<p>
|
||||
Atividades outras que a c<>pia, a distribui<75><69>o e modifica<63><61>o n<>o est<73>o
|
||||
cobertas por esta Licen<65>a; elas est<73>o fora de seu escopo. O ato de
|
||||
executar o Programa n<>o <20> restringido e o resultado do Programa <20>
|
||||
coberto apenas se seu conte<74>do contenha trabalhos baseados no Programa
|
||||
(independentemente de terem sido gerados pela execu<63><75>o do
|
||||
Programa). Se isso <20> verdadeiro depende do que o programa faz.</p>
|
||||
|
||||
<p>
|
||||
<strong>1.</strong>Voc<EFBFBD> pode copiar e distribuir c<>pias fi<66>is do c<>digo-fonte do
|
||||
Programa da mesma forma que voc<6F> o recebeu, usando qualquer meio,
|
||||
deste que voc<6F> consp<73>cua e apropriadamente publique em cada c<>pia um
|
||||
aviso de direitos autorais e uma declara<72><61>o de inexist<73>ncia de
|
||||
garantias; mantenha intactas todos os avisos que se referem a esta
|
||||
Licen<EFBFBD>a e <20> aus<75>ncia total de garantias; e forne<6E>a a outros
|
||||
recebedores do Programa uma c<>pia desta Licen<65>a, junto com o Programa.
|
||||
</p>
|
||||
<p>
|
||||
Voc<EFBFBD> pode cobrar pelo ato f<>sico de transferir uma c<>pia e pode,
|
||||
opcionalmente, oferecer garantia em troca de pagamento.
|
||||
</p>
|
||||
<p>
|
||||
<strong>2.</strong> Voc<6F> pode modificar sua c<>pia ou c<>pias do Programa, ou qualquer
|
||||
parte dele, assim gerando um trabalho baseado no Programa, e copiar e
|
||||
distribuir essas modifica<63><61>es ou trabalhos sob os temos da se<73><65>o 1
|
||||
acima, desde que voc<6F> tamb<6D>m se enquadre em todas estas condi<64><69>es:</p>
|
||||
<dl><dd>
|
||||
<strong>a)</strong> Voc<6F> tem que fazer com que os arquivos modificados levem avisos
|
||||
proeminentes afirmando que voc<6F> alterou os arquivos, incluindo a
|
||||
data de qualquer altera<72><61>o.
|
||||
</dd></dl>
|
||||
|
||||
<dl><dd>
|
||||
<strong>b)</strong> Voc<6F> tem que fazer com que quaisquer trabalhos que voc<6F>
|
||||
distribua ou publique, e que integralmente ou em partes contenham
|
||||
ou sejam derivados do Programa ou de suas partes, sejam
|
||||
licenciados, integralmente e sem custo algum para quaisquer
|
||||
terceiros, sob os termos desta Licen<65>a.
|
||||
</dd></dl>
|
||||
|
||||
<dl><dd>
|
||||
<strong>c)</strong> Se qualquer programa modificado normalmente l<> comandos
|
||||
interativamente quando executados, voc<6F> tem que fazer com que,
|
||||
quando iniciado tal uso interativo da forma mais simples, seja
|
||||
impresso ou mostrado um an<61>ncio de que n<>o h<> qualquer garantia
|
||||
(ou ent<6E>o que voc<6F> fornece a garantia) e que os usu<73>rios podem
|
||||
redistribuir o programa sob estas condi<64><69>es, ainda informando os
|
||||
usu<73>rios como consultar uma c<>pia desta Licen<65>a. (Exce<63><65>o: se o
|
||||
Programa em si <20> interativo mas normalmente n<>o imprime estes
|
||||
tipos de an<61>ncios, seu trabalho baseado no Programa n<>o precisa
|
||||
imprimir um an<61>ncio.)
|
||||
</dd></dl>
|
||||
<p>
|
||||
Estas exig<69>ncias aplicam-se ao trabalho modificado como um todo. Se
|
||||
se<EFBFBD><EFBFBD>es identific<69>veis de tal trabalho n<>o s<>o derivadas do Programa, e
|
||||
podem ser razoavelmente consideradas trabalhos independentes e
|
||||
separados por si s<>, ent<6E>o esta Licen<65>a, e seus termos, n<>o se aplicam
|
||||
a estas se<73><65>es quando voc<6F> distribui-las como trabalhos em
|
||||
separado. Mas quando voc<6F> distribuir as mesmas se<73><65>es como parte de um
|
||||
todo que <20> trabalho baseado no Programa, a distribui<75><69>o como um todo
|
||||
tem que se enquadrar nos termos desta Licen<65>a, cujas permiss<73>es para
|
||||
outros licenciados se estendem ao todo, portanto tamb<6D>m para cada e
|
||||
toda parte independente de quem a escreveu.
|
||||
</p>
|
||||
<p>
|
||||
Desta forma, esta se<73><65>o n<>o tem a inten<65><6E>o de reclamar direitos os
|
||||
contestar seus direitos sobre o trabalho escrito completamente por
|
||||
voc<EFBFBD>; ao inv<6E>s disso, a inten<65><6E>o <20> a de exercitar o direito de
|
||||
controlar a distribui<75><69>o de trabalhos, derivados ou coletivos,
|
||||
baseados no Programa.
|
||||
</p>
|
||||
<p>
|
||||
Adicionalmente, a mera adi<64><69>o ao Programa de outro trabalho n<>o
|
||||
baseado no Programa (ou de trabalho baseado no Programa) em um volume
|
||||
de armazenamento ou meio de distribui<75><69>o n<>o faz o outro trabalho
|
||||
parte do escopo desta Licen<65>a.
|
||||
</p>
|
||||
<p><strong>3.</strong> Voc<6F> pode copiar e distribuir o Programa (ou trabalho baseado
|
||||
nele, conforme descrito na Se<53><65>o 2) em c<>digo-objeto ou em forma
|
||||
execut<EFBFBD>vel sob os termos das Se<53><65>es 1 e 2 acima, desde que voc<6F>
|
||||
fa<EFBFBD>a um dos seguintes:
|
||||
</p>
|
||||
<dl><dd>
|
||||
<strong>a)</strong>O acompanhe com o c<>digo-fonte completo e em forma acess<73>vel
|
||||
por m<>quinas, que tem que ser distribu<62>do sob os termos das Se<53><65>es
|
||||
1 e 2 acima e em meio normalmente utilizado para o interc<72>mbio de
|
||||
software; ou,
|
||||
</dd></dl>
|
||||
|
||||
<dl><dd>
|
||||
<strong>b)</strong> O acompanhe com uma oferta escrita, v<>lida por pelo menos tr<74>s
|
||||
anos, de fornecer a qualquer um, com um custo n<>o superior ao
|
||||
custo de distribui<75><69>o f<>sica do material, uma c<>pia do
|
||||
c<>digo-fonte completo e em forma acess<73>vel por m<>quinas, que tem
|
||||
que ser distribu<62>do sob os termos das Se<53><65>es 1 e 2 acima e em meio
|
||||
normalmente utilizado para o interc<72>mbio de software; ou,
|
||||
</dd></dl>
|
||||
|
||||
<dl><dd>
|
||||
<p>
|
||||
<strong>c)</strong> O acompanhe com a informa<6D><61>o que voc<6F> recebeu em rela<6C><61>o <20>
|
||||
oferta de distribui<75><69>o do c<>digo-fonte correspondente. (Esta
|
||||
alternativa <20> permitida somente em distribui<75><69>o n<>o comerciais, e
|
||||
apenas se voc<6F> recebeu o programa em forma de c<>digo-objeto ou
|
||||
execut<75>vel, com oferta de acordo com a Subse<73><65>o b acima.)
|
||||
</p>
|
||||
</dd></dl>
|
||||
<p>
|
||||
O c<>digo-fonte de um trabalho corresponde <20> forma de trabalho
|
||||
preferida para se fazer modifica<63><61>es. Para um trabalho em forma
|
||||
execut<EFBFBD>vel, o c<>digo-fonte completo significa todo o c<>digo-fonte de
|
||||
todos os m<>dulos que ele cont<6E>m, mais quaisquer arquivos de defini<6E><69>o
|
||||
de "interface", mais os "scripts" utilizados para se controlar a
|
||||
compila<EFBFBD><EFBFBD>o e a instala<6C><61>o do execut<75>vel. Contudo, como exce<63><65>o
|
||||
especial, o c<>digo-fonte distribu<62>do n<>o precisa incluir qualquer
|
||||
componente normalmente distribu<62>do (tanto em forma original quanto
|
||||
bin<EFBFBD>ria) com os maiores componentes (o compilador, o "kernel" etc.) do
|
||||
sistema operacional sob o qual o execut<75>vel funciona, a menos que o
|
||||
componente em si acompanhe o execut<75>vel.
|
||||
</p>
|
||||
<p>
|
||||
Se a distribui<75><69>o do execut<75>vel ou c<>digo-objeto <20> feita atrav<61>s da
|
||||
oferta de acesso a c<>pias de algum lugar, ent<6E>o ofertar o acesso
|
||||
equivalente a c<>pia, do mesmo lugar, do c<>digo-fonte equivale <20>
|
||||
distribui<EFBFBD><EFBFBD>o do c<>digo-fonte, mesmo que terceiros n<>o sejam compelidos
|
||||
a copiar o c<>digo-fonte com o c<>digo-objeto.
|
||||
</p>
|
||||
<p>
|
||||
<strong>4.</strong> Voc<6F> n<>o pode copiar, modificar, sub-licenciar ou distribuir o
|
||||
Programa, exceto de acordo com as condi<64><69>es expressas nesta
|
||||
Licen<EFBFBD>a. Qualquer outra tentativa de c<>pia, modifica<63><61>o,
|
||||
sub-licenciamento ou distribui<75><69>o do Programa n<>o <20> valida, e
|
||||
cancelar<EFBFBD> automaticamente os direitos que lhe foram fornecidos por
|
||||
esta Licen<65>a. No entanto, terceiros que de voc<6F> receberam c<>pias ou
|
||||
direitos, fornecidos sob os termos desta Licen<65>a, n<>o ter<65>o suas
|
||||
licen<EFBFBD>as terminadas, desde que permane<6E>am em total concord<72>ncia com
|
||||
ela.
|
||||
</p>
|
||||
<p>
|
||||
<strong>5.</strong> Voc<6F> n<>o <20> obrigado a aceitar esta Licen<65>a j<> que n<>o a
|
||||
assinou. No entanto, nada mais o dar<61> permiss<73>o para modificar ou
|
||||
distribuir o Programa ou trabalhos derivados deste. Estas a<><61>es s<>o
|
||||
proibidas por lei, caso voc<6F> n<>o aceite esta Licen<65>a. Desta forma, ao
|
||||
modificar ou distribuir o Programa (ou qualquer trabalho derivado do
|
||||
Programa), voc<6F> estar<61> indicando sua total aceita<74><61>o desta Licen<65>a
|
||||
para faz<61>-los, e todos os seus termos e condi<64><69>es para copiar,
|
||||
distribuir ou modificar o Programa, ou trabalhos baseados nele.
|
||||
</p>
|
||||
<p>
|
||||
<strong>6.</strong> Cada vez que voc<6F> redistribuir o Programa (ou qualquer trabalho
|
||||
baseado nele), os recebedores adquirir<69>o automaticamente do
|
||||
licenciador original uma licen<65>a para copiar, distribuir ou modificar
|
||||
o Programa, sujeitos a estes termos e condi<64><69>es. Voc<6F> n<>o poder<65> impor
|
||||
aos recebedores qualquer outra restri<72><69>o ao exerc<72>cio dos direitos
|
||||
ent<EFBFBD>o adquiridos. Voc<6F> n<>o <20> respons<6E>vel em garantir a concord<72>ncia de
|
||||
terceiros a esta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>7.</strong> Se, em conseq<65><71>ncia de decis<69>es judiciais ou alega<67><61>es de
|
||||
infringimento de patentes ou quaisquer outras raz<61>es (n<>o limitadas a
|
||||
assuntos relacionados a patentes), condi<64><69>es forem impostas a voc<6F>
|
||||
(por ordem judicial, acordos ou outras formas) e que contradigam as
|
||||
condi<EFBFBD><EFBFBD>es desta Licen<65>a, elas n<>o o livram das condi<64><69>es desta
|
||||
Licen<EFBFBD>a. Se voc<6F> n<>o puder distribuir de forma a satisfazer
|
||||
simultaneamente suas obriga<67><61>es para com esta Licen<65>a e para com as
|
||||
outras obriga<67><61>es pertinentes, ent<6E>o como conseq<65><71>ncia voc<6F> n<>o poder<65>
|
||||
distribuir o Programa. Por exemplo, se uma licen<65>a de patente n<>o
|
||||
permitir<EFBFBD> a redistribui<75><69>o, livre de "royalties", do Programa, por
|
||||
todos aqueles que receberem c<>pias direta ou indiretamente de voc<6F>,
|
||||
ent<EFBFBD>o a <20>nica forma de voc<6F> satisfazer a ela e a esta Licen<65>a seria a
|
||||
de desistir completamente de distribuir o Programa.
|
||||
</p>
|
||||
<p>
|
||||
Se qualquer parte desta se<73><65>o for considerada inv<6E>lida ou n<>o
|
||||
aplic<EFBFBD>vel em qualquer circunst<73>ncia particular, o restante da se<73><65>o se
|
||||
aplica, e a se<73><65>o como um todo se aplica em outras circunst<73>ncias.
|
||||
</p>
|
||||
<p>
|
||||
O prop<6F>sito desta se<73><65>o n<>o <20> o de induzi-lo a infringir quaisquer
|
||||
patentes ou reivindica<63><61>o de direitos de propriedade outros, ou a
|
||||
contestar a validade de quaisquer dessas reivindica<63><61>es; esta se<73><65>o
|
||||
tem como <20>nico prop<6F>sito proteger a integridade dos sistemas de
|
||||
distribui<EFBFBD><EFBFBD>o de software livres, o que <20> implementado pela pr<70>tica de
|
||||
licen<EFBFBD>as p<>blicas. V<>rias pessoas t<>m contribu<62>do generosamente e em
|
||||
grande escala para os software distribu<62>dos usando este sistema, na
|
||||
certeza de que sua aplica<63><61>o <20> feita de forma consistente; fica a
|
||||
crit<EFBFBD>rio do autor/doador decidir se ele ou ela est<73> disposto a
|
||||
distribuir software utilizando outro sistema, e um licenciado n<>o pode
|
||||
impor qualquer escolha.
|
||||
</p>
|
||||
<p>
|
||||
Esta se<73><65>o destina-se a tornar bastante claro o que se acredita ser
|
||||
conseq<EFBFBD><EFBFBD>ncia do restante desta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>8.</strong> Se a distribui<75><69>o e/ou uso do Programa s<>o restringidos em certos
|
||||
pa<EFBFBD>ses por patentes ou direitos autorais, o detentor dos direitos
|
||||
autorais original, e que colocou o Programa sob esta Licen<65>a, pode
|
||||
incluir uma limita<74><61>o geogr<67>fica de distribui<75><69>o, excluindo aqueles
|
||||
pa<EFBFBD>ses de forma a tornar a distribui<75><69>o permitida apenas naqueles ou
|
||||
entre aqueles pa<70>ses ent<6E>o n<>o exclu<6C>dos. Nestes casos, esta Licen<65>a
|
||||
incorpora a limita<74><61>o como se a mesma constasse escrita nesta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>9.</strong> A Free Software Foundation pode publicar vers<72>es revisadas e/ou
|
||||
novas da Licen<65>a P<>blica Geral de tempos em tempos. Estas novas
|
||||
vers<EFBFBD>es ser<65>o similares em esp<73>rito <20> vers<72>o atual, mas podem diferir
|
||||
em detalhes que resolvem novos problemas ou situa<75><61>es.
|
||||
</p>
|
||||
<p>
|
||||
A cada vers<72>o <20> dada um n<>mero distinto. Se o Programa especifica um
|
||||
n<EFBFBD>mero de vers<72>o espec<65>fico desta Licen<65>a que se aplica a ele e a
|
||||
"qualquer nova vers<72>o", voc<6F> tem a op<6F><70>o de aceitar os termos e
|
||||
condi<EFBFBD><EFBFBD>es daquela vers<72>o ou de qualquer outra vers<72>o publicada pela
|
||||
Free Software Foundation. Se o programa n<>o especifica um n<>mero de
|
||||
vers<EFBFBD>o desta Licen<65>a, voc<6F> pode escolher qualquer vers<72>o j<> publicada
|
||||
pela Free Software Foundation.
|
||||
</p>
|
||||
<p>
|
||||
<strong>10.</strong> Se voc<6F> pretende incorporar partes do Programa em outros
|
||||
programas livres cujas condi<64><69>es de distribui<75><69>o s<>o diferentes,
|
||||
escreva ao autor e solicite permiss<73>o. Para o software que a Free
|
||||
Software Foundation det<65>m direitos autorais, escreva <20> Free Software
|
||||
Foundation; <20>s vezes n<>s permitimos exce<63><65>es a este caso. Nossa
|
||||
decis<EFBFBD>o ser<65> guiada pelos dois objetivos de preservar a condi<64><69>o de
|
||||
liberdade de todas as deriva<76><61>es do nosso software livre, e de
|
||||
promover o compartilhamento e reutiliza<7A><61>o de software em aspectos
|
||||
gerais.
|
||||
</p>
|
||||
<p>
|
||||
<strong>AUS<EFBFBD>NCIA DE GARANTIAS</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>11.</strong> UMA VEZ QUE O PROGRAMA <20> LICENCIADO SEM <20>NUS, N<>O H<> QUALQUER
|
||||
GARANTIA PARA O PROGRAMA, NA EXTENS<4E>O PERMITIDA PELAS LEIS
|
||||
APLIC<EFBFBD>VEIS. EXCETO QUANDO EXPRESSADO DE FORMA ESCRITA, OS DETENTORES
|
||||
DOS DIREITOS AUTORAIS E/OU TERCEIROS DISPONIBILIZAM O PROGRAMA "NO
|
||||
ESTADO", SEM QUALQUER TIPO DE GARANTIAS, EXPRESSAS OU IMPL<50>CITAS,
|
||||
INCLUINDO, MAS N<>O LIMITADO A, AS GARANTIAS IMPL<50>CITAS DE
|
||||
COMERCIALIZA<EFBFBD><EFBFBD>O E AS DE ADEQUA<55><41>O A QUALQUER PROP<4F>SITO. O RISCO TOTAL
|
||||
COM A QUALIDADE E DESEMPENHO DO PROGRAMA <20> SEU. SE O PROGRAMA SE
|
||||
MOSTRAR DEFEITUOSO, VOC<4F> ASSUME OS CUSTOS DE TODAS AS MANUTEN<45><4E>ES,
|
||||
REPAROS E CORRE<52><45>ES.
|
||||
</p>
|
||||
<p>
|
||||
<strong>12.</strong> EM NENHUMA OCASI<53>O, A MENOS QUE EXIGIDO PELAS LEIS APLIC<49>VEIS OU
|
||||
ACORDO ESCRITO, OS DETENTORES DOS DIREITOS AUTORAIS, OU QUALQUER OUTRA
|
||||
PARTE QUE POSSA MODIFICAR E/OU REDISTRIBUIR O PROGRAMA CONFORME
|
||||
PERMITIDO ACIMA, SER<45>O RESPONSABILIZADOS POR VOC<4F> POR DANOS, INCLUINDO
|
||||
QUALQUER DANO EM GERAL, ESPECIAL, ACIDENTAL OU CONSEQ<45>ENTE,
|
||||
RESULTANTES DO USO OU INCAPACIDADE DE USO DO PROGRAMA (INCLUINDO, MAS
|
||||
N<EFBFBD>O LIMITADO A, A PERDA DE DADOS OU DADOS TORNADOS INCORRETOS, OU
|
||||
PERDAS SOFRIDAS POR VOC<4F> OU POR OUTRAS PARTES, OU FALHAS DO PROGRAMA
|
||||
AO OPERAR COM QUALQUER OUTRO PROGRAMA), MESMO QUE TAL DETENTOR OU
|
||||
PARTE TENHAM SIDO AVISADOS DA POSSIBILIDADE DE TAIS DANOS.
|
||||
</p>
|
||||
<h3>FIM DOS TERMOS E CONDI<44><49>ES</h3>
|
||||
<html>
|
||||
<head>
|
||||
<title>Licen<EFBFBD>a Pública Geral GNU</title>
|
||||
</head>
|
||||
<body>
|
||||
<h3>LICEN<EFBFBD>A P<>BLICA GERAL GNU</h3>
|
||||
<p>Vers<EFBFBD>o 2, junho de 1991</p>
|
||||
<p>
|
||||
This is an unofficial translation of the GNU General Public License into
|
||||
Brazilian Portuguese. It was not published by the Free Software
|
||||
Foundation, and does not legally state the distribution terms for software
|
||||
that uses the GNU GPL -- only the original English text of the GNU GPL
|
||||
does that. However, we hope that this translation will help Brazilian
|
||||
Portuguese speakers understand the GNU GPL better.
|
||||
</p>
|
||||
<p>
|
||||
Esta <20> uma tradu<64><75>o n<>o-oficial da Licen<65>a P<>blica Geral GNU ("GPL GNU")
|
||||
para o portugu<67>s do Brasil. Ela n<>o foi publicada pela Free Software
|
||||
Foundation, e legalmente n<>o afirma os termos de distribui<75><69>o de software
|
||||
que utiliza a GPL GNU -- apenas o texto original da GPL GNU, em ingl<67>s,
|
||||
faz isso. Contudo, esperamos que esta tradu<64><75>o ajude aos que utilizam o
|
||||
portugu<67>s do Brasil a entender melhor a GPL GNU.
|
||||
</p>
|
||||
<p>
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA
|
||||
</p>
|
||||
<p>
|
||||
A qualquer pessoa <20> permitido copiar e distribuir c<>pias desse documento
|
||||
de licen<65>a, desde que sem qualquer altera<72><61>o.
|
||||
</p>
|
||||
|
||||
<h3>Como Aplicar Estes Termos aos Seus Novos Programas</h3>
|
||||
|
||||
<p>Se voc<6F> desenvolver um novo programa, e quer que ele seja utilizado
|
||||
amplamente pelo p<>blico, a melhor forma de alcan<61>ar este objetivo <20>
|
||||
torn<EFBFBD>-lo software livre que qualquer um pode redistribuir e alterar,
|
||||
sob estes termos.
|
||||
</p>
|
||||
<p>Para isso, anexe os seguintes avisos ao programa. <20> mais seguro
|
||||
anex<EFBFBD>-los logo no in<69>cio de cada arquivo-fonte para refor<6F>arem mais
|
||||
efetivamente a inexist<73>ncia de garantias; e cada arquivo deve possuir
|
||||
pelo menos a linha de "copyright" e uma indica<63><61>o de onde o texto
|
||||
completo se encontra.
|
||||
</p>
|
||||
<p><uma linha que forne<6E>a o nome do programa e uma id<69>ia do que ele faz.>
|
||||
Copyright (C) <ano> <nome do autor>
|
||||
</p>
|
||||
<p>Este programa <20> software livre; voc<6F> pode redistribu<62>-lo e/ou
|
||||
modific<69>-lo sob os termos da Licen<65>a P<>blica Geral GNU, conforme
|
||||
publicada pela Free Software Foundation; tanto a vers<72>o 2 da
|
||||
Licen<65>a como (a seu crit<69>rio) qualquer vers<72>o mais nova.
|
||||
</p>
|
||||
<p> Este programa <20> distribu<62>do na expectativa de ser <20>til, mas SEM
|
||||
QUALQUER GARANTIA; sem mesmo a garantia impl<70>cita de
|
||||
COMERCIALIZA<5A><41>O ou de ADEQUA<55><41>O A QUALQUER PROP<4F>SITO EM
|
||||
PARTICULAR. Consulte a Licen<65>a P<>blica Geral GNU para obter mais
|
||||
detalhes.
|
||||
</p>
|
||||
<p> Voc<6F> deve ter recebido uma c<>pia da Licen<65>a P<>blica Geral GNU
|
||||
junto com este programa; se n<>o, escreva para a Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307, USA.
|
||||
</p>
|
||||
<p>Inclua tamb<6D>m informa<6D><61>es sobre como contact<63>-lo eletronicamente e por carta.</p>
|
||||
<p>Se o programa <20> interativo, fa<66>a-o mostrar um aviso breve como este, ao iniciar um modo interativo:
|
||||
</p>
|
||||
<p>Gnomovision vers<72>o 69, Copyright (C) ano nome do autor
|
||||
O Gnomovision n<>o possui QUALQUER GARANTIA; para obter mais
|
||||
detalhes digite `show w'. Ele <20> software livre e voc<6F> est<73>
|
||||
convidado a redistribui-lo sob certas condi<64><69>es; digite `show c'
|
||||
para obter detalhes.
|
||||
</p>
|
||||
<p>Os comandos hipot<6F>ticos `show w' e `show c' devem mostrar as partes
|
||||
apropriadas da Licen<65>a P<>blica Geral. Claro, os comandos que voc<6F> usar
|
||||
podem ser ativados de outra forma que `show w' e `show c'; eles podem
|
||||
at<EFBFBD> ser cliques do mouse ou itens de um menu -- o que melhor se
|
||||
adequar ao programa.
|
||||
</p>
|
||||
<p>Voc<EFBFBD> tamb<6D>m deve obter do seu empregador (se voc<6F> trabalha como
|
||||
programador) ou escola, se houver, uma "declara<72><61>o de aus<75>ncia de
|
||||
direitos autorais" sobre o programa, se necess<73>rio. Aqui est<73> um
|
||||
exemplo; altere os nomes:
|
||||
</p>
|
||||
<p>Yoyodyne, Inc., aqui declara a aus<75>ncia de quaisquer direitos
|
||||
autorais sobre o programa `Gnomovision' (que executa interpreta<74><61>es
|
||||
em compiladores) escrito por James Hacker.
|
||||
</p>
|
||||
<p><assinatura de Ty Coon>, 1o. de abril de 1989
|
||||
</p>
|
||||
<p>Ty Con, Vice-presidente
|
||||
|
||||
</p>
|
||||
<p>Esta Licen<65>a P<>blica Geral n<>o permite incorporar seu programa em
|
||||
programas propriet<65>rios. Se seu programa <20> uma biblioteca de
|
||||
sub-rotinas, voc<6F> deve considerar mais <20>til permitir ligar aplica<63><61>es
|
||||
propriet<EFBFBD>rias com a biblioteca. Se isto <20> o que voc<6F> deseja, use a
|
||||
Licen<EFBFBD>a P<>blica Geral de Bibliotecas GNU, ao inv<6E>s desta Licen<65>a.
|
||||
</p>
|
||||
</body></html>
|
||||
<h3>Introdu<EFBFBD><EFBFBD>o</h3>
|
||||
|
||||
<p>
|
||||
As licen<65>as de muitos software s<>o desenvolvidas para restringir sua
|
||||
liberdade de compartilh<6C>-lo e mud<75>-lo. Contr<74>ria a isso, a Licen<65>a P<>blica
|
||||
Geral GNU pretende garantir sua liberdade de compartilhar e alterar
|
||||
software livres -- garantindo que o software ser<65> livre e gratuito para os
|
||||
seus usu<73>rios. Esta Licen<65>a P<>blica Geral aplica-se <20> maioria dos software
|
||||
da Free Software Foundation e a qualquer outro programa cujo autor decida
|
||||
aplic<69>-la. (Alguns outros software da FSF s<>o cobertos pela Licen<65>a
|
||||
P<>blica Geral de Bibliotecas, no entanto.) Voc<6F> pode aplic<69>-la tamb<6D>m aos
|
||||
seus programas.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Quando nos referimos a software livre, estamos nos referindo a liberdade e
|
||||
n<>o a pre<72>o. Nossa Licen<65>a P<>blica Geral foi desenvolvida para garantir
|
||||
que voc<6F> tenha a liberdade de distribuir c<>pias de software livre (e
|
||||
cobrar por isso, se quiser); que voc<6F> receba o c<>digo-fonte ou tenha
|
||||
acesso a ele, se quiser; que voc<6F> possa mudar o software ou utilizar
|
||||
partes dele em novos programas livres e gratuitos; e que voc<6F> saiba que
|
||||
pode fazer tudo isso.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Para proteger seus direitos, precisamos fazer restri<72><69>es que impe<70>am a
|
||||
qualquer um negar estes direitos ou solicitar que voc<6F> deles abdique.
|
||||
Estas restri<72><69>es traduzem-se em certas responsabilidades para voc<6F>, se
|
||||
voc<6F> for distribuir c<>pias do software ou modific<69>-lo.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Por exemplo, se voc<6F> distribuir c<>pias de um programa, gratuitamente ou
|
||||
por alguma quantia, voc<6F> tem que fornecer aos recebedores todos os
|
||||
direitos que voc<6F> possui. Voc<6F> tem que garantir que eles tamb<6D>m recebam ou
|
||||
possam obter o c<>digo-fonte. E voc<6F> tem que mostrar-lhes estes termos para
|
||||
que eles possam conhecer seus direitos.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
N<>s protegemos seus direitos em dois passos: (1) com copyright do software
|
||||
e (2) com a oferta desta licen<65>a, que lhe d<> permiss<73>o legal para copiar,
|
||||
distribuir e/ou modificar o software.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Al<41>m disso, tanto para a prote<74><65>o do autor quanto a nossa, gostar<61>amos de
|
||||
certificar-nos que todos entendam que n<>o h<> qualquer garantia nestes
|
||||
software livres. Se o software <20> modificado por algu<67>m mais e passado
|
||||
adiante, queremos que seus recebedores saibam que o que eles obtiveram n<>o
|
||||
<20> original, de forma que qualquer problema introduzido por terceiros n<>o
|
||||
interfira na reputa<74><61>o do autor original.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Finalmente, qualquer programa <20> amea<65>ado constantemente por patentes de
|
||||
software. Queremos evitar o perigo de que distribuidores de software livre
|
||||
obtenham patentes individuais, o que tem o efeito de tornar o programa
|
||||
propriet<65>rio. Para prevenir isso, deixamos claro que qualquer patente tem
|
||||
que ser licenciada para uso livre e gratuito por qualquer pessoa, ou ent<6E>o
|
||||
que nem necessite ser licenciada.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Os termos e condi<64><69>es precisas para c<>pia, distribui<75><69>o e modifica<63><61>o se
|
||||
encontram abaixo:
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
LICEN<45>A P<>BLICA GERAL GNU TERMOS E CONDI<44><49>ES PARA C<>PIA, DISTRIBUI<55><49>O E
|
||||
MODIFICA<43><41>O
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
<strong>0.</strong>Esta licen<65>a se aplica a qualquer programa ou outro
|
||||
trabalho que contenha um aviso colocado pelo detentor dos direitos
|
||||
autorais informando que aquele pode ser distribu<62>do sob as condi<64><69>es desta
|
||||
Licen<65>a P<>blica Geral. O "Programa" abaixo refere-se a qualquer programa
|
||||
ou trabalho, e "trabalho baseado no Programa" significa tanto o Programa
|
||||
em si como quaisquer trabalhos derivados, de acordo com a lei de direitos
|
||||
autorais: isto quer dizer um trabalho que contenha o Programa ou parte
|
||||
dele, tanto originalmente ou com modifica<63><61>es, e/ou tradu<64><75>o para outros
|
||||
idiomas. (Doravante o processo de tradu<64><75>o est<73> inclu<6C>do sem limites no
|
||||
termo "modifica<63><61>o".) Cada licenciado <20> mencionado como "voc<6F>".
|
||||
</p>
|
||||
<p>
|
||||
Atividades outras que a c<>pia, a distribui<75><69>o e modifica<63><61>o n<>o est<73>o
|
||||
cobertas por esta Licen<65>a; elas est<73>o fora de seu escopo. O ato de
|
||||
executar o Programa n<>o <20> restringido e o resultado do Programa <20> coberto
|
||||
apenas se seu conte<74>do contenha trabalhos baseados no Programa
|
||||
(independentemente de terem sido gerados pela execu<63><75>o do Programa). Se
|
||||
isso <20> verdadeiro depende do que o programa faz.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>1.</strong>Voc<EFBFBD> pode copiar e distribuir c<>pias fi<66>is do
|
||||
c<>digo-fonte do Programa da mesma forma que voc<6F> o recebeu, usando
|
||||
qualquer meio, deste que voc<6F> consp<73>cua e apropriadamente publique em cada
|
||||
c<>pia um aviso de direitos autorais e uma declara<72><61>o de inexist<73>ncia de
|
||||
garantias; mantenha intactas todos os avisos que se referem a esta Licen<65>a
|
||||
e <20> aus<75>ncia total de garantias; e forne<6E>a a outros recebedores do
|
||||
Programa uma c<>pia desta Licen<65>a, junto com o Programa.
|
||||
</p>
|
||||
<p>
|
||||
Voc<6F> pode cobrar pelo ato f<>sico de transferir uma c<>pia e pode,
|
||||
opcionalmente, oferecer garantia em troca de pagamento.
|
||||
</p>
|
||||
<p>
|
||||
<strong>2.</strong> Voc<6F> pode modificar sua c<>pia ou c<>pias do Programa,
|
||||
ou qualquer parte dele, assim gerando um trabalho baseado no Programa, e
|
||||
copiar e distribuir essas modifica<63><61>es ou trabalhos sob os temos da se<73><65>o
|
||||
1 acima, desde que voc<6F> tamb<6D>m se enquadre em todas estas condi<64><69>es:
|
||||
</p>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>a)</strong> Voc<6F> tem que fazer com que os arquivos modificados
|
||||
levem avisos proeminentes afirmando que voc<6F> alterou os arquivos,
|
||||
incluindo a data de qualquer altera<72><61>o.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>b)</strong> Voc<6F> tem que fazer com que quaisquer trabalhos que
|
||||
voc<6F> distribua ou publique, e que integralmente ou em partes contenham
|
||||
ou sejam derivados do Programa ou de suas partes, sejam licenciados,
|
||||
integralmente e sem custo algum para quaisquer terceiros, sob os termos
|
||||
desta Licen<65>a.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>c)</strong> Se qualquer programa modificado normalmente l<>
|
||||
comandos interativamente quando executados, voc<6F> tem que fazer com que,
|
||||
quando iniciado tal uso interativo da forma mais simples, seja impresso
|
||||
ou mostrado um an<61>ncio de que n<>o h<> qualquer garantia (ou ent<6E>o que
|
||||
voc<6F> fornece a garantia) e que os usu<73>rios podem redistribuir o programa
|
||||
sob estas condi<64><69>es, ainda informando os usu<73>rios como consultar uma
|
||||
c<>pia desta Licen<65>a. (Exce<63><65>o: se o Programa em si <20> interativo mas
|
||||
normalmente n<>o imprime estes tipos de an<61>ncios, seu trabalho baseado no
|
||||
Programa n<>o precisa imprimir um an<61>ncio.)
|
||||
</dd>
|
||||
</dl>
|
||||
<p>
|
||||
Estas exig<69>ncias aplicam-se ao trabalho modificado como um todo. Se se<73><65>es
|
||||
identific<69>veis de tal trabalho n<>o s<>o derivadas do Programa, e podem ser
|
||||
razoavelmente consideradas trabalhos independentes e separados por si s<>,
|
||||
ent<6E>o esta Licen<65>a, e seus termos, n<>o se aplicam a estas se<73><65>es quando
|
||||
voc<6F> distribui-las como trabalhos em separado. Mas quando voc<6F> distribuir
|
||||
as mesmas se<73><65>es como parte de um todo que <20> trabalho baseado no Programa,
|
||||
a distribui<75><69>o como um todo tem que se enquadrar nos termos desta Licen<65>a,
|
||||
cujas permiss<73>es para outros licenciados se estendem ao todo, portanto
|
||||
tamb<6D>m para cada e toda parte independente de quem a escreveu.
|
||||
</p>
|
||||
<p>
|
||||
Desta forma, esta se<73><65>o n<>o tem a inten<65><6E>o de reclamar direitos os
|
||||
contestar seus direitos sobre o trabalho escrito completamente por voc<6F>;
|
||||
ao inv<6E>s disso, a inten<65><6E>o <20> a de exercitar o direito de controlar a
|
||||
distribui<75><69>o de trabalhos, derivados ou coletivos, baseados no Programa.
|
||||
</p>
|
||||
<p>
|
||||
Adicionalmente, a mera adi<64><69>o ao Programa de outro trabalho n<>o baseado no
|
||||
Programa (ou de trabalho baseado no Programa) em um volume de
|
||||
armazenamento ou meio de distribui<75><69>o n<>o faz o outro trabalho parte do
|
||||
escopo desta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>3.</strong> Voc<6F> pode copiar e distribuir o Programa (ou trabalho
|
||||
baseado nele, conforme descrito na Se<53><65>o 2) em c<>digo-objeto ou em forma
|
||||
execut<75>vel sob os termos das Se<53><65>es 1 e 2 acima, desde que voc<6F> fa<66>a um
|
||||
dos seguintes:
|
||||
</p>
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>a)</strong>O acompanhe com o c<>digo-fonte completo e em forma
|
||||
acess<73>vel por m<>quinas, que tem que ser distribu<62>do sob os termos das
|
||||
Se<53><65>es 1 e 2 acima e em meio normalmente utilizado para o interc<72>mbio de
|
||||
software; ou,
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dd>
|
||||
<strong>b)</strong> O acompanhe com uma oferta escrita, v<>lida por pelo
|
||||
menos tr<74>s anos, de fornecer a qualquer um, com um custo n<>o superior ao
|
||||
custo de distribui<75><69>o f<>sica do material, uma c<>pia do c<>digo-fonte
|
||||
completo e em forma acess<73>vel por m<>quinas, que tem que ser distribu<62>do
|
||||
sob os termos das Se<53><65>es 1 e 2 acima e em meio normalmente utilizado
|
||||
para o interc<72>mbio de software; ou,
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dd>
|
||||
<p>
|
||||
<strong>c)</strong> O acompanhe com a informa<6D><61>o que voc<6F> recebeu em
|
||||
rela<6C><61>o <20> oferta de distribui<75><69>o do c<>digo-fonte correspondente. (Esta
|
||||
alternativa <20> permitida somente em distribui<75><69>o n<>o comerciais, e
|
||||
apenas se voc<6F> recebeu o programa em forma de c<>digo-objeto ou
|
||||
execut<75>vel, com oferta de acordo com a Subse<73><65>o b acima.)
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p>
|
||||
O c<>digo-fonte de um trabalho corresponde <20> forma de trabalho preferida
|
||||
para se fazer modifica<63><61>es. Para um trabalho em forma execut<75>vel, o
|
||||
c<>digo-fonte completo significa todo o c<>digo-fonte de todos os m<>dulos
|
||||
que ele cont<6E>m, mais quaisquer arquivos de defini<6E><69>o de "interface", mais
|
||||
os "scripts" utilizados para se controlar a compila<6C><61>o e a instala<6C><61>o do
|
||||
execut<75>vel. Contudo, como exce<63><65>o especial, o c<>digo-fonte distribu<62>do n<>o
|
||||
precisa incluir qualquer componente normalmente distribu<62>do (tanto em
|
||||
forma original quanto bin<69>ria) com os maiores componentes (o compilador, o
|
||||
"kernel" etc.) do sistema operacional sob o qual o execut<75>vel funciona, a
|
||||
menos que o componente em si acompanhe o execut<75>vel.
|
||||
</p>
|
||||
<p>
|
||||
Se a distribui<75><69>o do execut<75>vel ou c<>digo-objeto <20> feita atrav<61>s da oferta
|
||||
de acesso a c<>pias de algum lugar, ent<6E>o ofertar o acesso equivalente a
|
||||
c<>pia, do mesmo lugar, do c<>digo-fonte equivale <20> distribui<75><69>o do
|
||||
c<>digo-fonte, mesmo que terceiros n<>o sejam compelidos a copiar o
|
||||
c<>digo-fonte com o c<>digo-objeto.
|
||||
</p>
|
||||
<p>
|
||||
<strong>4.</strong> Voc<6F> n<>o pode copiar, modificar, sub-licenciar ou
|
||||
distribuir o Programa, exceto de acordo com as condi<64><69>es expressas nesta
|
||||
Licen<65>a. Qualquer outra tentativa de c<>pia, modifica<63><61>o, sub-licenciamento
|
||||
ou distribui<75><69>o do Programa n<>o <20> valida, e cancelar<61> automaticamente os
|
||||
direitos que lhe foram fornecidos por esta Licen<65>a. No entanto, terceiros
|
||||
que de voc<6F> receberam c<>pias ou direitos, fornecidos sob os termos desta
|
||||
Licen<65>a, n<>o ter<65>o suas licen<65>as terminadas, desde que permane<6E>am em total
|
||||
concord<72>ncia com ela.
|
||||
</p>
|
||||
<p>
|
||||
<strong>5.</strong> Voc<6F> n<>o <20> obrigado a aceitar esta Licen<65>a j<> que n<>o
|
||||
a assinou. No entanto, nada mais o dar<61> permiss<73>o para modificar ou
|
||||
distribuir o Programa ou trabalhos derivados deste. Estas a<><61>es s<>o
|
||||
proibidas por lei, caso voc<6F> n<>o aceite esta Licen<65>a. Desta forma, ao
|
||||
modificar ou distribuir o Programa (ou qualquer trabalho derivado do
|
||||
Programa), voc<6F> estar<61> indicando sua total aceita<74><61>o desta Licen<65>a para
|
||||
faz<61>-los, e todos os seus termos e condi<64><69>es para copiar, distribuir ou
|
||||
modificar o Programa, ou trabalhos baseados nele.
|
||||
</p>
|
||||
<p>
|
||||
<strong>6.</strong> Cada vez que voc<6F> redistribuir o Programa (ou qualquer
|
||||
trabalho baseado nele), os recebedores adquirir<69>o automaticamente do
|
||||
licenciador original uma licen<65>a para copiar, distribuir ou modificar o
|
||||
Programa, sujeitos a estes termos e condi<64><69>es. Voc<6F> n<>o poder<65> impor aos
|
||||
recebedores qualquer outra restri<72><69>o ao exerc<72>cio dos direitos ent<6E>o
|
||||
adquiridos. Voc<6F> n<>o <20> respons<6E>vel em garantir a concord<72>ncia de terceiros
|
||||
a esta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>7.</strong> Se, em conseq<65><71>ncia de decis<69>es judiciais ou alega<67><61>es
|
||||
de infringimento de patentes ou quaisquer outras raz<61>es (n<>o limitadas a
|
||||
assuntos relacionados a patentes), condi<64><69>es forem impostas a voc<6F> (por
|
||||
ordem judicial, acordos ou outras formas) e que contradigam as condi<64><69>es
|
||||
desta Licen<65>a, elas n<>o o livram das condi<64><69>es desta Licen<65>a. Se voc<6F> n<>o
|
||||
puder distribuir de forma a satisfazer simultaneamente suas obriga<67><61>es
|
||||
para com esta Licen<65>a e para com as outras obriga<67><61>es pertinentes, ent<6E>o
|
||||
como conseq<65><71>ncia voc<6F> n<>o poder<65> distribuir o Programa. Por exemplo, se
|
||||
uma licen<65>a de patente n<>o permitir<69> a redistribui<75><69>o, livre de
|
||||
"royalties", do Programa, por todos aqueles que receberem c<>pias direta ou
|
||||
indiretamente de voc<6F>, ent<6E>o a <20>nica forma de voc<6F> satisfazer a ela e a
|
||||
esta Licen<65>a seria a de desistir completamente de distribuir o Programa.
|
||||
</p>
|
||||
<p>
|
||||
Se qualquer parte desta se<73><65>o for considerada inv<6E>lida ou n<>o aplic<69>vel em
|
||||
qualquer circunst<73>ncia particular, o restante da se<73><65>o se aplica, e a
|
||||
se<73><65>o como um todo se aplica em outras circunst<73>ncias.
|
||||
</p>
|
||||
<p>
|
||||
O prop<6F>sito desta se<73><65>o n<>o <20> o de induzi-lo a infringir quaisquer
|
||||
patentes ou reivindica<63><61>o de direitos de propriedade outros, ou a
|
||||
contestar a validade de quaisquer dessas reivindica<63><61>es; esta se<73><65>o tem
|
||||
como <20>nico prop<6F>sito proteger a integridade dos sistemas de distribui<75><69>o
|
||||
de software livres, o que <20> implementado pela pr<70>tica de licen<65>as
|
||||
p<>blicas. V<>rias pessoas t<>m contribu<62>do generosamente e em grande escala
|
||||
para os software distribu<62>dos usando este sistema, na certeza de que sua
|
||||
aplica<63><61>o <20> feita de forma consistente; fica a crit<69>rio do autor/doador
|
||||
decidir se ele ou ela est<73> disposto a distribuir software utilizando outro
|
||||
sistema, e um licenciado n<>o pode impor qualquer escolha.
|
||||
</p>
|
||||
<p>
|
||||
Esta se<73><65>o destina-se a tornar bastante claro o que se acredita ser
|
||||
conseq<65><71>ncia do restante desta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>8.</strong> Se a distribui<75><69>o e/ou uso do Programa s<>o
|
||||
restringidos em certos pa<70>ses por patentes ou direitos autorais, o
|
||||
detentor dos direitos autorais original, e que colocou o Programa sob esta
|
||||
Licen<65>a, pode incluir uma limita<74><61>o geogr<67>fica de distribui<75><69>o, excluindo
|
||||
aqueles pa<70>ses de forma a tornar a distribui<75><69>o permitida apenas naqueles
|
||||
ou entre aqueles pa<70>ses ent<6E>o n<>o exclu<6C>dos. Nestes casos, esta Licen<65>a
|
||||
incorpora a limita<74><61>o como se a mesma constasse escrita nesta Licen<65>a.
|
||||
</p>
|
||||
<p>
|
||||
<strong>9.</strong> A Free Software Foundation pode publicar vers<72>es
|
||||
revisadas e/ou novas da Licen<65>a P<>blica Geral de tempos em tempos. Estas
|
||||
novas vers<72>es ser<65>o similares em esp<73>rito <20> vers<72>o atual, mas podem
|
||||
diferir em detalhes que resolvem novos problemas ou situa<75><61>es.
|
||||
</p>
|
||||
<p>
|
||||
A cada vers<72>o <20> dada um n<>mero distinto. Se o Programa especifica um
|
||||
n<>mero de vers<72>o espec<65>fico desta Licen<65>a que se aplica a ele e a
|
||||
"qualquer nova vers<72>o", voc<6F> tem a op<6F><70>o de aceitar os termos e condi<64><69>es
|
||||
daquela vers<72>o ou de qualquer outra vers<72>o publicada pela Free Software
|
||||
Foundation. Se o programa n<>o especifica um n<>mero de vers<72>o desta
|
||||
Licen<65>a, voc<6F> pode escolher qualquer vers<72>o j<> publicada pela Free
|
||||
Software Foundation.
|
||||
</p>
|
||||
<p>
|
||||
<strong>10.</strong> Se voc<6F> pretende incorporar partes do Programa em
|
||||
outros programas livres cujas condi<64><69>es de distribui<75><69>o s<>o diferentes,
|
||||
escreva ao autor e solicite permiss<73>o. Para o software que a Free Software
|
||||
Foundation det<65>m direitos autorais, escreva <20> Free Software Foundation; <20>s
|
||||
vezes n<>s permitimos exce<63><65>es a este caso. Nossa decis<69>o ser<65> guiada pelos
|
||||
dois objetivos de preservar a condi<64><69>o de liberdade de todas as deriva<76><61>es
|
||||
do nosso software livre, e de promover o compartilhamento e reutiliza<7A><61>o
|
||||
de software em aspectos gerais.
|
||||
</p>
|
||||
<p><strong>AUS<EFBFBD>NCIA DE GARANTIAS</strong></p>
|
||||
<p>
|
||||
<strong>11.</strong> UMA VEZ QUE O PROGRAMA <20> LICENCIADO SEM <20>NUS, N<>O H<>
|
||||
QUALQUER GARANTIA PARA O PROGRAMA, NA EXTENS<4E>O PERMITIDA PELAS LEIS
|
||||
APLIC<49>VEIS. EXCETO QUANDO EXPRESSADO DE FORMA ESCRITA, OS DETENTORES DOS
|
||||
DIREITOS AUTORAIS E/OU TERCEIROS DISPONIBILIZAM O PROGRAMA "NO ESTADO",
|
||||
SEM QUALQUER TIPO DE GARANTIAS, EXPRESSAS OU IMPL<50>CITAS, INCLUINDO, MAS
|
||||
N<>O LIMITADO A, AS GARANTIAS IMPL<50>CITAS DE COMERCIALIZA<5A><41>O E AS DE
|
||||
ADEQUA<55><41>O A QUALQUER PROP<4F>SITO. O RISCO TOTAL COM A QUALIDADE E DESEMPENHO
|
||||
DO PROGRAMA <20> SEU. SE O PROGRAMA SE MOSTRAR DEFEITUOSO, VOC<4F> ASSUME OS
|
||||
CUSTOS DE TODAS AS MANUTEN<45><4E>ES, REPAROS E CORRE<52><45>ES.
|
||||
</p>
|
||||
<p>
|
||||
<strong>12.</strong> EM NENHUMA OCASI<53>O, A MENOS QUE EXIGIDO PELAS LEIS
|
||||
APLIC<49>VEIS OU ACORDO ESCRITO, OS DETENTORES DOS DIREITOS AUTORAIS, OU
|
||||
QUALQUER OUTRA PARTE QUE POSSA MODIFICAR E/OU REDISTRIBUIR O PROGRAMA
|
||||
CONFORME PERMITIDO ACIMA, SER<45>O RESPONSABILIZADOS POR VOC<4F> POR DANOS,
|
||||
INCLUINDO QUALQUER DANO EM GERAL, ESPECIAL, ACIDENTAL OU CONSEQ<45>ENTE,
|
||||
RESULTANTES DO USO OU INCAPACIDADE DE USO DO PROGRAMA (INCLUINDO, MAS N<>O
|
||||
LIMITADO A, A PERDA DE DADOS OU DADOS TORNADOS INCORRETOS, OU PERDAS
|
||||
SOFRIDAS POR VOC<4F> OU POR OUTRAS PARTES, OU FALHAS DO PROGRAMA AO OPERAR
|
||||
COM QUALQUER OUTRO PROGRAMA), MESMO QUE TAL DETENTOR OU PARTE TENHAM SIDO
|
||||
AVISADOS DA POSSIBILIDADE DE TAIS DANOS.
|
||||
</p>
|
||||
<h3>FIM DOS TERMOS E CONDI<44><49>ES</h3>
|
||||
|
||||
<h3>Como Aplicar Estes Termos aos Seus Novos Programas</h3>
|
||||
|
||||
<p>
|
||||
Se voc<6F> desenvolver um novo programa, e quer que ele seja utilizado
|
||||
amplamente pelo p<>blico, a melhor forma de alcan<61>ar este objetivo <20>
|
||||
torn<72>-lo software livre que qualquer um pode redistribuir e alterar, sob
|
||||
estes termos.
|
||||
</p>
|
||||
<p>
|
||||
Para isso, anexe os seguintes avisos ao programa. <20> mais seguro anex<65>-los
|
||||
logo no in<69>cio de cada arquivo-fonte para refor<6F>arem mais efetivamente a
|
||||
inexist<73>ncia de garantias; e cada arquivo deve possuir pelo menos a linha
|
||||
de "copyright" e uma indica<63><61>o de onde o texto completo se encontra.
|
||||
</p>
|
||||
<p>
|
||||
<uma linha que forne<6E>a o nome do programa e uma id<69>ia do que ele
|
||||
faz.> Copyright (C) <ano> <nome do autor>
|
||||
</p>
|
||||
<p>
|
||||
Este programa <20> software livre; voc<6F> pode redistribu<62>-lo e/ou modific<69>-lo
|
||||
sob os termos da Licen<65>a P<>blica Geral GNU, conforme publicada pela Free
|
||||
Software Foundation; tanto a vers<72>o 2 da Licen<65>a como (a seu crit<69>rio)
|
||||
qualquer vers<72>o mais nova.
|
||||
</p>
|
||||
<p>
|
||||
Este programa <20> distribu<62>do na expectativa de ser <20>til, mas SEM QUALQUER
|
||||
GARANTIA; sem mesmo a garantia impl<70>cita de COMERCIALIZA<5A><41>O ou de
|
||||
ADEQUA<55><41>O A QUALQUER PROP<4F>SITO EM PARTICULAR. Consulte a Licen<65>a P<>blica
|
||||
Geral GNU para obter mais detalhes.
|
||||
</p>
|
||||
<p>
|
||||
Voc<6F> deve ter recebido uma c<>pia da Licen<65>a P<>blica Geral GNU junto com
|
||||
este programa; se n<>o, escreva para a Free Software Foundation, Inc., 59
|
||||
Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
</p>
|
||||
<p>
|
||||
Inclua tamb<6D>m informa<6D><61>es sobre como contact<63>-lo eletronicamente e por
|
||||
carta.
|
||||
</p>
|
||||
<p>
|
||||
Se o programa <20> interativo, fa<66>a-o mostrar um aviso breve como este, ao
|
||||
iniciar um modo interativo:
|
||||
</p>
|
||||
<p>
|
||||
Gnomovision vers<72>o 69, Copyright (C) ano nome do autor O Gnomovision n<>o
|
||||
possui QUALQUER GARANTIA; para obter mais detalhes digite `show w'. Ele <20>
|
||||
software livre e voc<6F> est<73> convidado a redistribui-lo sob certas
|
||||
condi<64><69>es; digite `show c' para obter detalhes.
|
||||
</p>
|
||||
<p>
|
||||
Os comandos hipot<6F>ticos `show w' e `show c' devem mostrar as partes
|
||||
apropriadas da Licen<65>a P<>blica Geral. Claro, os comandos que voc<6F> usar
|
||||
podem ser ativados de outra forma que `show w' e `show c'; eles podem at<61>
|
||||
ser cliques do mouse ou itens de um menu -- o que melhor se adequar ao
|
||||
programa.
|
||||
</p>
|
||||
<p>
|
||||
Voc<6F> tamb<6D>m deve obter do seu empregador (se voc<6F> trabalha como
|
||||
programador) ou escola, se houver, uma "declara<72><61>o de aus<75>ncia de direitos
|
||||
autorais" sobre o programa, se necess<73>rio. Aqui est<73> um exemplo; altere os
|
||||
nomes:
|
||||
</p>
|
||||
<p>
|
||||
Yoyodyne, Inc., aqui declara a aus<75>ncia de quaisquer direitos autorais
|
||||
sobre o programa `Gnomovision' (que executa interpreta<74><61>es em
|
||||
compiladores) escrito por James Hacker.
|
||||
</p>
|
||||
<p><assinatura de Ty Coon>, 1o. de abril de 1989</p>
|
||||
<p>Ty Con, Vice-presidente</p>
|
||||
<p>
|
||||
Esta Licen<65>a P<>blica Geral n<>o permite incorporar seu programa em
|
||||
programas propriet<65>rios. Se seu programa <20> uma biblioteca de sub-rotinas,
|
||||
voc<6F> deve considerar mais <20>til permitir ligar aplica<63><61>es propriet<65>rias com
|
||||
a biblioteca. Se isto <20> o que voc<6F> deseja, use a Licen<65>a P<>blica Geral de
|
||||
Bibliotecas GNU, ao inv<6E>s desta Licen<65>a.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -4,24 +4,21 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; version 2
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
$sql = 'SELECT link, name FROM tlink ORDER BY name';
|
||||
$result = db_get_all_rows_sql ($sql);
|
||||
$result = db_get_all_rows_sql($sql);
|
||||
if ($result !== false) {
|
||||
echo '<div class="tit bg4">:: '.__('Links').' ::</div>';
|
||||
echo '<div class="menu"><ul>';
|
||||
foreach ($result as $link) {
|
||||
echo '<li class="links"><a href="'.$link["link"].'" target="_blank">'.$link["name"].'</a></li>';
|
||||
}
|
||||
echo '</ul></div>';
|
||||
echo '<div class="tit bg4">:: '.__('Links').' ::</div>';
|
||||
echo '<div class="menu"><ul>';
|
||||
foreach ($result as $link) {
|
||||
echo '<li class="links"><a href="'.$link['link'].'" target="_blank">'.$link['name'].'</a></li>';
|
||||
}
|
||||
|
||||
echo '</ul></div>';
|
||||
}
|
||||
?>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue