fixed system stuff & added new icons
8
.htaccess
Normal file
@ -0,0 +1,8 @@
|
||||
RewriteEngine On
|
||||
|
||||
RewriteRule ^(.*)/fonts/fontawesome-webfont(.*)$ lib/system/lib/font_awesome/lib/fonts/fontawesome-webfont$2 [L]
|
||||
RewriteRule ^sai$ sai.php$1 [L]
|
||||
|
||||
# not working for some reason
|
||||
RewriteRule ^(.*)/files/([^/]+)/([^/]+)$ api.php?call=files&cat=$2&id=$3 [L]
|
||||
RewriteRule ^cache/([^/]+)/([^/]+)$ api.php?call=cache&id=$1&ident=$2 [L]
|
||||
10
api.php
@ -1,13 +1,5 @@
|
||||
<?php
|
||||
require_once 'lib/autoload.inc'; //SYSTEM Classes
|
||||
require_once 'teamspeak/autoload.inc'; //Project Classes
|
||||
require_once '/home/web/web/config/get_config.php';
|
||||
|
||||
\SYSTEM\system::start(\WEBCRAFT\get_config(dirname(__FILE__)));
|
||||
\SYSTEM\system::include_ExceptionShortcut();
|
||||
\SYSTEM\system::include_ResultShortcut();
|
||||
\SYSTEM\system::register_errorhandler_dbwriter();
|
||||
\SYSTEM\system::register_errorhandler_jsonoutput();
|
||||
include 'index.inc';
|
||||
|
||||
echo \SYSTEM\API\api::run('\SYSTEM\API\verify','api_teamspeak',array_merge($_POST,$_GET));
|
||||
new \SYSTEM\LOG\COUNTER("API was called sucessfully.");
|
||||
0
cache/.gitkeep
vendored
Normal file
912
cache/10d9a1614f9c96588814bde7136f0cfbadc1d20f
vendored
Normal file
@ -0,0 +1,912 @@
|
||||
/* jqBootstrapValidation
|
||||
* A plugin for automating validation on Twitter Bootstrap formatted forms.
|
||||
*
|
||||
* v1.3.6
|
||||
*
|
||||
* License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file
|
||||
*
|
||||
* http://ReactiveRaven.github.com/jqBootstrapValidation/
|
||||
*/
|
||||
|
||||
(function( $ ){
|
||||
|
||||
var createdElements = [];
|
||||
|
||||
var defaults = {
|
||||
options: {
|
||||
prependExistingHelpBlock: false,
|
||||
sniffHtml: true, // sniff for 'required', 'maxlength', etc
|
||||
preventSubmit: true, // stop the form submit event from firing if validation fails
|
||||
submitError: false, // function called if there is an error when trying to submit
|
||||
submitSuccess: false, // function called just before a successful submit event is sent to the server
|
||||
semanticallyStrict: false, // set to true to tidy up generated HTML output
|
||||
autoAdd: {
|
||||
helpBlocks: true
|
||||
},
|
||||
filter: function () {
|
||||
// return $(this).is(":visible"); // only validate elements you can see
|
||||
return true; // validate everything
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init : function( options ) {
|
||||
|
||||
var settings = $.extend(true, {}, defaults);
|
||||
|
||||
settings.options = $.extend(true, settings.options, options);
|
||||
|
||||
var $siblingElements = this;
|
||||
|
||||
var uniqueForms = $.unique(
|
||||
$siblingElements.map( function () {
|
||||
return $(this).parents("form")[0];
|
||||
}).toArray()
|
||||
);
|
||||
|
||||
$(uniqueForms).bind("submit", function (e) {
|
||||
var $form = $(this);
|
||||
var warningsFound = 0;
|
||||
var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);
|
||||
$inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
|
||||
|
||||
$inputs.each(function (i, el) {
|
||||
var $this = $(el),
|
||||
$controlGroup = $this.parents(".control-group").first();
|
||||
if (
|
||||
$controlGroup.hasClass("warning")
|
||||
) {
|
||||
$controlGroup.removeClass("warning").addClass("error");
|
||||
warningsFound++;
|
||||
}
|
||||
});
|
||||
|
||||
$inputs.trigger("validationLostFocus.validation");
|
||||
|
||||
if (warningsFound) {
|
||||
if (settings.options.preventSubmit) {
|
||||
e.preventDefault();
|
||||
}
|
||||
$form.addClass("error");
|
||||
if ($.isFunction(settings.options.submitError)) {
|
||||
settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true));
|
||||
}
|
||||
} else {
|
||||
$form.removeClass("error");
|
||||
if ($.isFunction(settings.options.submitSuccess)) {
|
||||
settings.options.submitSuccess($form, e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return this.each(function(){
|
||||
|
||||
// Get references to everything we're interested in
|
||||
var $this = $(this),
|
||||
$controlGroup = $this.parents(".control-group").first(),
|
||||
$helpBlock = $controlGroup.find(".help-block").first(),
|
||||
$form = $this.parents("form").first(),
|
||||
validatorNames = [];
|
||||
|
||||
// create message container if not exists
|
||||
if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {
|
||||
$helpBlock = $('<div class="help-block" />');
|
||||
$controlGroup.find('.controls').append($helpBlock);
|
||||
createdElements.push($helpBlock[0]);
|
||||
}
|
||||
|
||||
// =============================================================
|
||||
// SNIFF HTML FOR VALIDATORS
|
||||
// =============================================================
|
||||
|
||||
// *snort sniff snuffle*
|
||||
|
||||
if (settings.options.sniffHtml) {
|
||||
var message = "";
|
||||
// ---------------------------------------------------------
|
||||
// PATTERN
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("pattern") !== undefined) {
|
||||
message = "Not in the expected format<!-- data-validation-pattern-message to override -->";
|
||||
if ($this.data("validationPatternMessage")) {
|
||||
message = $this.data("validationPatternMessage");
|
||||
}
|
||||
$this.data("validationPatternMessage", message);
|
||||
$this.data("validationPatternRegex", $this.attr("pattern"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MAX
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) {
|
||||
var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax"));
|
||||
message = "Too high: Maximum of '" + max + "'<!-- data-validation-max-message to override -->";
|
||||
if ($this.data("validationMaxMessage")) {
|
||||
message = $this.data("validationMaxMessage");
|
||||
}
|
||||
$this.data("validationMaxMessage", message);
|
||||
$this.data("validationMaxMax", max);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MIN
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) {
|
||||
var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin"));
|
||||
message = "Too low: Minimum of '" + min + "'<!-- data-validation-min-message to override -->";
|
||||
if ($this.data("validationMinMessage")) {
|
||||
message = $this.data("validationMinMessage");
|
||||
}
|
||||
$this.data("validationMinMessage", message);
|
||||
$this.data("validationMinMin", min);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MAXLENGTH
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("maxlength") !== undefined) {
|
||||
message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters<!-- data-validation-maxlength-message to override -->";
|
||||
if ($this.data("validationMaxlengthMessage")) {
|
||||
message = $this.data("validationMaxlengthMessage");
|
||||
}
|
||||
$this.data("validationMaxlengthMessage", message);
|
||||
$this.data("validationMaxlengthMaxlength", $this.attr("maxlength"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MINLENGTH
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("minlength") !== undefined) {
|
||||
message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters<!-- data-validation-minlength-message to override -->";
|
||||
if ($this.data("validationMinlengthMessage")) {
|
||||
message = $this.data("validationMinlengthMessage");
|
||||
}
|
||||
$this.data("validationMinlengthMessage", message);
|
||||
$this.data("validationMinlengthMinlength", $this.attr("minlength"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// REQUIRED
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) {
|
||||
message = settings.builtInValidators.required.message;
|
||||
if ($this.data("validationRequiredMessage")) {
|
||||
message = $this.data("validationRequiredMessage");
|
||||
}
|
||||
$this.data("validationRequiredMessage", message);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// NUMBER
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") {
|
||||
message = settings.builtInValidators.number.message;
|
||||
if ($this.data("validationNumberMessage")) {
|
||||
message = $this.data("validationNumberMessage");
|
||||
}
|
||||
$this.data("validationNumberMessage", message);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// EMAIL
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") {
|
||||
message = "Not a valid email address<!-- data-validator-validemail-message to override -->";
|
||||
if ($this.data("validationValidemailMessage")) {
|
||||
message = $this.data("validationValidemailMessage");
|
||||
} else if ($this.data("validationEmailMessage")) {
|
||||
message = $this.data("validationEmailMessage");
|
||||
}
|
||||
$this.data("validationValidemailMessage", message);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MINCHECKED
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("minchecked") !== undefined) {
|
||||
message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required<!-- data-validation-minchecked-message to override -->";
|
||||
if ($this.data("validationMincheckedMessage")) {
|
||||
message = $this.data("validationMincheckedMessage");
|
||||
}
|
||||
$this.data("validationMincheckedMessage", message);
|
||||
$this.data("validationMincheckedMinchecked", $this.attr("minchecked"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MAXCHECKED
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("maxchecked") !== undefined) {
|
||||
message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required<!-- data-validation-maxchecked-message to override -->";
|
||||
if ($this.data("validationMaxcheckedMessage")) {
|
||||
message = $this.data("validationMaxcheckedMessage");
|
||||
}
|
||||
$this.data("validationMaxcheckedMessage", message);
|
||||
$this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked"));
|
||||
}
|
||||
}
|
||||
|
||||
// =============================================================
|
||||
// COLLECT VALIDATOR NAMES
|
||||
// =============================================================
|
||||
|
||||
// Get named validators
|
||||
if ($this.data("validation") !== undefined) {
|
||||
validatorNames = $this.data("validation").split(",");
|
||||
}
|
||||
|
||||
// Get extra ones defined on the element's data attributes
|
||||
$.each($this.data(), function (i, el) {
|
||||
var parts = i.replace(/([A-Z])/g, ",$1").split(",");
|
||||
if (parts[0] === "validation" && parts[1]) {
|
||||
validatorNames.push(parts[1]);
|
||||
}
|
||||
});
|
||||
|
||||
// =============================================================
|
||||
// NORMALISE VALIDATOR NAMES
|
||||
// =============================================================
|
||||
|
||||
var validatorNamesToInspect = validatorNames;
|
||||
var newValidatorNamesToInspect = [];
|
||||
|
||||
do // repeatedly expand 'shortcut' validators into their real validators
|
||||
{
|
||||
// Uppercase only the first letter of each name
|
||||
$.each(validatorNames, function (i, el) {
|
||||
validatorNames[i] = formatValidatorName(el);
|
||||
});
|
||||
|
||||
// Remove duplicate validator names
|
||||
validatorNames = $.unique(validatorNames);
|
||||
|
||||
// Pull out the new validator names from each shortcut
|
||||
newValidatorNamesToInspect = [];
|
||||
$.each(validatorNamesToInspect, function(i, el) {
|
||||
if ($this.data("validation" + el + "Shortcut") !== undefined) {
|
||||
// Are these custom validators?
|
||||
// Pull them out!
|
||||
$.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) {
|
||||
newValidatorNamesToInspect.push(el2);
|
||||
});
|
||||
} else if (settings.builtInValidators[el.toLowerCase()]) {
|
||||
// Is this a recognised built-in?
|
||||
// Pull it out!
|
||||
var validator = settings.builtInValidators[el.toLowerCase()];
|
||||
if (validator.type.toLowerCase() === "shortcut") {
|
||||
$.each(validator.shortcut.split(","), function (i, el) {
|
||||
el = formatValidatorName(el);
|
||||
newValidatorNamesToInspect.push(el);
|
||||
validatorNames.push(el);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
validatorNamesToInspect = newValidatorNamesToInspect;
|
||||
|
||||
} while (validatorNamesToInspect.length > 0)
|
||||
|
||||
// =============================================================
|
||||
// SET UP VALIDATOR ARRAYS
|
||||
// =============================================================
|
||||
|
||||
var validators = {};
|
||||
|
||||
$.each(validatorNames, function (i, el) {
|
||||
// Set up the 'override' message
|
||||
var message = $this.data("validation" + el + "Message");
|
||||
var hasOverrideMessage = (message !== undefined);
|
||||
var foundValidator = false;
|
||||
message =
|
||||
(
|
||||
message
|
||||
? message
|
||||
: "'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->"
|
||||
)
|
||||
;
|
||||
|
||||
$.each(
|
||||
settings.validatorTypes,
|
||||
function (validatorType, validatorTemplate) {
|
||||
if (validators[validatorType] === undefined) {
|
||||
validators[validatorType] = [];
|
||||
}
|
||||
if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {
|
||||
validators[validatorType].push(
|
||||
$.extend(
|
||||
true,
|
||||
{
|
||||
name: formatValidatorName(validatorTemplate.name),
|
||||
message: message
|
||||
},
|
||||
validatorTemplate.init($this, el)
|
||||
)
|
||||
);
|
||||
foundValidator = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {
|
||||
|
||||
var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);
|
||||
if (hasOverrideMessage) {
|
||||
validator.message = message;
|
||||
}
|
||||
var validatorType = validator.type.toLowerCase();
|
||||
|
||||
if (validatorType === "shortcut") {
|
||||
foundValidator = true;
|
||||
} else {
|
||||
$.each(
|
||||
settings.validatorTypes,
|
||||
function (validatorTemplateType, validatorTemplate) {
|
||||
if (validators[validatorTemplateType] === undefined) {
|
||||
validators[validatorTemplateType] = [];
|
||||
}
|
||||
if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {
|
||||
$this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);
|
||||
validators[validatorType].push(
|
||||
$.extend(
|
||||
validator,
|
||||
validatorTemplate.init($this, el)
|
||||
)
|
||||
);
|
||||
foundValidator = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (! foundValidator) {
|
||||
$.error("Cannot find validation info for '" + el + "'");
|
||||
}
|
||||
});
|
||||
|
||||
// =============================================================
|
||||
// STORE FALLBACK VALUES
|
||||
// =============================================================
|
||||
|
||||
$helpBlock.data(
|
||||
"original-contents",
|
||||
(
|
||||
$helpBlock.data("original-contents")
|
||||
? $helpBlock.data("original-contents")
|
||||
: $helpBlock.html()
|
||||
)
|
||||
);
|
||||
|
||||
$helpBlock.data(
|
||||
"original-role",
|
||||
(
|
||||
$helpBlock.data("original-role")
|
||||
? $helpBlock.data("original-role")
|
||||
: $helpBlock.attr("role")
|
||||
)
|
||||
);
|
||||
|
||||
$controlGroup.data(
|
||||
"original-classes",
|
||||
(
|
||||
$controlGroup.data("original-clases")
|
||||
? $controlGroup.data("original-classes")
|
||||
: $controlGroup.attr("class")
|
||||
)
|
||||
);
|
||||
|
||||
$this.data(
|
||||
"original-aria-invalid",
|
||||
(
|
||||
$this.data("original-aria-invalid")
|
||||
? $this.data("original-aria-invalid")
|
||||
: $this.attr("aria-invalid")
|
||||
)
|
||||
);
|
||||
|
||||
// =============================================================
|
||||
// VALIDATION
|
||||
// =============================================================
|
||||
|
||||
$this.bind(
|
||||
"validation.validation",
|
||||
function (event, params) {
|
||||
|
||||
var value = getValue($this);
|
||||
|
||||
// Get a list of the errors to apply
|
||||
var errorsFound = [];
|
||||
|
||||
$.each(validators, function (validatorType, validatorTypeArray) {
|
||||
if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {
|
||||
$.each(validatorTypeArray, function (i, validator) {
|
||||
if (settings.validatorTypes[validatorType].validate($this, value, validator)) {
|
||||
errorsFound.push(validator.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return errorsFound;
|
||||
}
|
||||
);
|
||||
|
||||
$this.bind(
|
||||
"getValidators.validation",
|
||||
function () {
|
||||
return validators;
|
||||
}
|
||||
);
|
||||
|
||||
// =============================================================
|
||||
// WATCH FOR CHANGES
|
||||
// =============================================================
|
||||
$this.bind(
|
||||
"submit.validation",
|
||||
function () {
|
||||
return $this.triggerHandler("change.validation", {submitting: true});
|
||||
}
|
||||
);
|
||||
$this.bind(
|
||||
[
|
||||
"keyup",
|
||||
"focus",
|
||||
"blur",
|
||||
"click",
|
||||
"keydown",
|
||||
"keypress",
|
||||
"change"
|
||||
].join(".validation ") + ".validation",
|
||||
function (e, params) {
|
||||
|
||||
var value = getValue($this);
|
||||
|
||||
var errorsFound = [];
|
||||
|
||||
$controlGroup.find("input,textarea,select").each(function (i, el) {
|
||||
var oldCount = errorsFound.length;
|
||||
$.each($(el).triggerHandler("validation.validation", params), function (j, message) {
|
||||
errorsFound.push(message);
|
||||
});
|
||||
if (errorsFound.length > oldCount) {
|
||||
$(el).attr("aria-invalid", "true");
|
||||
} else {
|
||||
var original = $this.data("original-aria-invalid");
|
||||
$(el).attr("aria-invalid", (original !== undefined ? original : false));
|
||||
}
|
||||
});
|
||||
|
||||
$form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation");
|
||||
|
||||
errorsFound = $.unique(errorsFound.sort());
|
||||
|
||||
// Were there any errors?
|
||||
if (errorsFound.length) {
|
||||
// Better flag it up as a warning.
|
||||
$controlGroup.removeClass("success error").addClass("warning");
|
||||
|
||||
// How many errors did we find?
|
||||
if (settings.options.semanticallyStrict && errorsFound.length === 1) {
|
||||
// Only one? Being strict? Just output it.
|
||||
$helpBlock.html(errorsFound[0] +
|
||||
( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
|
||||
} else {
|
||||
// Multiple? Being sloppy? Glue them together into an UL.
|
||||
$helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" +
|
||||
( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
|
||||
}
|
||||
} else {
|
||||
$controlGroup.removeClass("warning error success");
|
||||
if (value.length > 0) {
|
||||
$controlGroup.addClass("success");
|
||||
}
|
||||
$helpBlock.html($helpBlock.data("original-contents"));
|
||||
}
|
||||
|
||||
if (e.type === "blur") {
|
||||
$controlGroup.removeClass("success");
|
||||
}
|
||||
}
|
||||
);
|
||||
$this.bind("validationLostFocus.validation", function () {
|
||||
$controlGroup.removeClass("success");
|
||||
});
|
||||
});
|
||||
},
|
||||
destroy : function( ) {
|
||||
|
||||
return this.each(
|
||||
function() {
|
||||
|
||||
var
|
||||
$this = $(this),
|
||||
$controlGroup = $this.parents(".control-group").first(),
|
||||
$helpBlock = $controlGroup.find(".help-block").first();
|
||||
|
||||
// remove our events
|
||||
$this.unbind('.validation'); // events are namespaced.
|
||||
// reset help text
|
||||
$helpBlock.html($helpBlock.data("original-contents"));
|
||||
// reset classes
|
||||
$controlGroup.attr("class", $controlGroup.data("original-classes"));
|
||||
// reset aria
|
||||
$this.attr("aria-invalid", $this.data("original-aria-invalid"));
|
||||
// reset role
|
||||
$helpBlock.attr("role", $this.data("original-role"));
|
||||
// remove all elements we created
|
||||
if (createdElements.indexOf($helpBlock[0]) > -1) {
|
||||
$helpBlock.remove();
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
},
|
||||
collectErrors : function(includeEmpty) {
|
||||
|
||||
var errorMessages = {};
|
||||
this.each(function (i, el) {
|
||||
var $el = $(el);
|
||||
var name = $el.attr("name");
|
||||
var errors = $el.triggerHandler("validation.validation", {includeEmpty: true});
|
||||
errorMessages[name] = $.extend(true, errors, errorMessages[name]);
|
||||
});
|
||||
|
||||
$.each(errorMessages, function (i, el) {
|
||||
if (el.length === 0) {
|
||||
delete errorMessages[i];
|
||||
}
|
||||
});
|
||||
|
||||
return errorMessages;
|
||||
|
||||
},
|
||||
hasErrors: function() {
|
||||
|
||||
var errorMessages = [];
|
||||
|
||||
this.each(function (i, el) {
|
||||
errorMessages = errorMessages.concat(
|
||||
$(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : []
|
||||
);
|
||||
});
|
||||
|
||||
return (errorMessages.length > 0);
|
||||
},
|
||||
override : function (newDefaults) {
|
||||
defaults = $.extend(true, defaults, newDefaults);
|
||||
}
|
||||
},
|
||||
validatorTypes: {
|
||||
callback: {
|
||||
name: "callback",
|
||||
init: function ($this, name) {
|
||||
return {
|
||||
validatorName: name,
|
||||
callback: $this.data("validation" + name + "Callback"),
|
||||
lastValue: $this.val(),
|
||||
lastValid: true,
|
||||
lastFinished: true
|
||||
};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
if (validator.lastValue === value && validator.lastFinished) {
|
||||
return !validator.lastValid;
|
||||
}
|
||||
|
||||
if (validator.lastFinished === true)
|
||||
{
|
||||
validator.lastValue = value;
|
||||
validator.lastValid = true;
|
||||
validator.lastFinished = false;
|
||||
|
||||
var rrjqbvValidator = validator;
|
||||
var rrjqbvThis = $this;
|
||||
executeFunctionByName(
|
||||
validator.callback,
|
||||
window,
|
||||
$this,
|
||||
value,
|
||||
function (data) {
|
||||
if (rrjqbvValidator.lastValue === data.value) {
|
||||
rrjqbvValidator.lastValid = data.valid;
|
||||
if (data.message) {
|
||||
rrjqbvValidator.message = data.message;
|
||||
}
|
||||
rrjqbvValidator.lastFinished = true;
|
||||
rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message);
|
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function () {
|
||||
rrjqbvThis.trigger("change.validation");
|
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
},
|
||||
ajax: {
|
||||
name: "ajax",
|
||||
init: function ($this, name) {
|
||||
return {
|
||||
validatorName: name,
|
||||
url: $this.data("validation" + name + "Ajax"),
|
||||
lastValue: $this.val(),
|
||||
lastValid: true,
|
||||
lastFinished: true
|
||||
};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
if (""+validator.lastValue === ""+value && validator.lastFinished === true) {
|
||||
return validator.lastValid === false;
|
||||
}
|
||||
|
||||
if (validator.lastFinished === true)
|
||||
{
|
||||
validator.lastValue = value;
|
||||
validator.lastValid = true;
|
||||
validator.lastFinished = false;
|
||||
$.ajax({
|
||||
url: validator.url,
|
||||
data: "value=" + value + "&field=" + $this.attr("name"),
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
if (""+validator.lastValue === ""+data.value) {
|
||||
validator.lastValid = !!(data.valid);
|
||||
if (data.message) {
|
||||
validator.message = data.message;
|
||||
}
|
||||
validator.lastFinished = true;
|
||||
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function () {
|
||||
$this.trigger("change.validation");
|
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
}
|
||||
},
|
||||
failure: function () {
|
||||
validator.lastValid = true;
|
||||
validator.message = "ajax call failed";
|
||||
validator.lastFinished = true;
|
||||
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function () {
|
||||
$this.trigger("change.validation");
|
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
},
|
||||
regex: {
|
||||
name: "regex",
|
||||
init: function ($this, name) {
|
||||
return {regex: regexFromString($this.data("validation" + name + "Regex"))};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return (!validator.regex.test(value) && ! validator.negative)
|
||||
|| (validator.regex.test(value) && validator.negative);
|
||||
}
|
||||
},
|
||||
required: {
|
||||
name: "required",
|
||||
init: function ($this, name) {
|
||||
return {};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return !!(value.length === 0 && ! validator.negative)
|
||||
|| !!(value.length > 0 && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
},
|
||||
match: {
|
||||
name: "match",
|
||||
init: function ($this, name) {
|
||||
var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first();
|
||||
element.bind("validation.validation", function () {
|
||||
$this.trigger("change.validation", {submitting: true});
|
||||
});
|
||||
return {"element": element};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return (value !== validator.element.val() && ! validator.negative)
|
||||
|| (value === validator.element.val() && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
},
|
||||
max: {
|
||||
name: "max",
|
||||
init: function ($this, name) {
|
||||
return {max: $this.data("validation" + name + "Max")};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative)
|
||||
|| (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);
|
||||
}
|
||||
},
|
||||
min: {
|
||||
name: "min",
|
||||
init: function ($this, name) {
|
||||
return {min: $this.data("validation" + name + "Min")};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative)
|
||||
|| (parseFloat(value) >= parseFloat(validator.min) && validator.negative);
|
||||
}
|
||||
},
|
||||
maxlength: {
|
||||
name: "maxlength",
|
||||
init: function ($this, name) {
|
||||
return {maxlength: $this.data("validation" + name + "Maxlength")};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return ((value.length > validator.maxlength) && ! validator.negative)
|
||||
|| ((value.length <= validator.maxlength) && validator.negative);
|
||||
}
|
||||
},
|
||||
minlength: {
|
||||
name: "minlength",
|
||||
init: function ($this, name) {
|
||||
return {minlength: $this.data("validation" + name + "Minlength")};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return ((value.length < validator.minlength) && ! validator.negative)
|
||||
|| ((value.length >= validator.minlength) && validator.negative);
|
||||
}
|
||||
},
|
||||
maxchecked: {
|
||||
name: "maxchecked",
|
||||
init: function ($this, name) {
|
||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
||||
elements.bind("click.validation", function () {
|
||||
$this.trigger("change.validation", {includeEmpty: true});
|
||||
});
|
||||
return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative)
|
||||
|| (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
},
|
||||
minchecked: {
|
||||
name: "minchecked",
|
||||
init: function ($this, name) {
|
||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
||||
elements.bind("click.validation", function () {
|
||||
$this.trigger("change.validation", {includeEmpty: true});
|
||||
});
|
||||
return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements};
|
||||
},
|
||||
validate: function ($this, value, validator) {
|
||||
return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative)
|
||||
|| (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
}
|
||||
},
|
||||
builtInValidators: {
|
||||
email: {
|
||||
name: "Email",
|
||||
type: "shortcut",
|
||||
shortcut: "validemail"
|
||||
},
|
||||
validemail: {
|
||||
name: "Validemail",
|
||||
type: "regex",
|
||||
regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}",
|
||||
message: "Not a valid email address<!-- data-validator-validemail-message to override -->"
|
||||
},
|
||||
passwordagain: {
|
||||
name: "Passwordagain",
|
||||
type: "match",
|
||||
match: "password",
|
||||
message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->"
|
||||
},
|
||||
positive: {
|
||||
name: "Positive",
|
||||
type: "shortcut",
|
||||
shortcut: "number,positivenumber"
|
||||
},
|
||||
negative: {
|
||||
name: "Negative",
|
||||
type: "shortcut",
|
||||
shortcut: "number,negativenumber"
|
||||
},
|
||||
number: {
|
||||
name: "Number",
|
||||
type: "regex",
|
||||
regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?",
|
||||
message: "Must be a number<!-- data-validator-number-message to override -->"
|
||||
},
|
||||
integer: {
|
||||
name: "Integer",
|
||||
type: "regex",
|
||||
regex: "[+-]?\\\d+",
|
||||
message: "No decimal places allowed<!-- data-validator-integer-message to override -->"
|
||||
},
|
||||
positivenumber: {
|
||||
name: "Positivenumber",
|
||||
type: "min",
|
||||
min: 0,
|
||||
message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->"
|
||||
},
|
||||
negativenumber: {
|
||||
name: "Negativenumber",
|
||||
type: "max",
|
||||
max: 0,
|
||||
message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->"
|
||||
},
|
||||
required: {
|
||||
name: "Required",
|
||||
type: "required",
|
||||
message: "This is required<!-- data-validator-required-message to override -->"
|
||||
},
|
||||
checkone: {
|
||||
name: "Checkone",
|
||||
type: "minchecked",
|
||||
minchecked: 1,
|
||||
message: "Check at least one option<!-- data-validation-checkone-message to override -->"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var formatValidatorName = function (name) {
|
||||
return name
|
||||
.toLowerCase()
|
||||
.replace(
|
||||
/(^|\s)([a-z])/g ,
|
||||
function(m,p1,p2) {
|
||||
return p1+p2.toUpperCase();
|
||||
}
|
||||
)
|
||||
;
|
||||
};
|
||||
|
||||
var getValue = function ($this) {
|
||||
// Extract the value we're talking about
|
||||
var value = $this.val();
|
||||
var type = $this.attr("type");
|
||||
if (type === "checkbox") {
|
||||
value = ($this.is(":checked") ? value : "");
|
||||
}
|
||||
if (type === "radio") {
|
||||
value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : "");
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
function regexFromString(inputstring) {
|
||||
return new RegExp("^" + inputstring + "$");
|
||||
}
|
||||
|
||||
/**
|
||||
* Thanks to Jason Bunting via StackOverflow.com
|
||||
*
|
||||
* http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
|
||||
* Short link: http://tinyurl.com/executeFunctionByName
|
||||
**/
|
||||
function executeFunctionByName(functionName, context /*, args*/) {
|
||||
var args = Array.prototype.slice.call(arguments).splice(2);
|
||||
var namespaces = functionName.split(".");
|
||||
var func = namespaces.pop();
|
||||
for(var i = 0; i < namespaces.length; i++) {
|
||||
context = context[namespaces[i]];
|
||||
}
|
||||
return context[func].apply(this, args);
|
||||
}
|
||||
|
||||
$.fn.jqBootstrapValidation = function( method ) {
|
||||
|
||||
if ( defaults.methods[method] ) {
|
||||
return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
|
||||
} else if ( typeof method === 'object' || ! method ) {
|
||||
return defaults.methods.init.apply( this, arguments );
|
||||
} else {
|
||||
$.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' );
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$.jqBootstrapValidation = function (options) {
|
||||
$(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments);
|
||||
};
|
||||
|
||||
})( jQuery );
|
||||
36
cache/26224c65e9209dae5e8c92652cb92b01b117065c
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
table.sai_table tr:nth-child(even) {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
table.sai_table tr:nth-child(odd) {
|
||||
background-color: #EEEEEE;
|
||||
}
|
||||
table.sai_table tr:hover {
|
||||
background-color: #FFEFD5;
|
||||
}
|
||||
|
||||
a.active{
|
||||
background-color: #e7e7e7;
|
||||
}
|
||||
|
||||
#menu_start {
|
||||
font-size: 20px;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
display: block;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
#menu_start:hover{
|
||||
text-decoration: none;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
#menu_start:focus{
|
||||
text-decoration: none;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
#menu_start:active{
|
||||
text-decoration: none;
|
||||
color: #555;
|
||||
}
|
||||
33
cache/3f14f735485b22bcf12f156cba1c35eac6ed641b
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* TSStatus: Teamspeak 3 viewer for php5
|
||||
* @author Sebastien Gerard <seb@sebastien.me>
|
||||
* @see http://tsstatus.sebastien.me/
|
||||
* @version 2013-08-31
|
||||
**/
|
||||
|
||||
function tsstatusconnect(id, channel)
|
||||
{
|
||||
var id = "tsstatus-" + id;
|
||||
var hostport = document.getElementById(id + "-hostport").value;
|
||||
var nickname = document.getElementById(id + "-nickname");
|
||||
var password = document.getElementById(id + "-password");
|
||||
var command = "ts3server://" + hostport.replace(":", "?port=");
|
||||
var dateExpire = new Date;
|
||||
|
||||
dateExpire.setMonth(dateExpire.getMonth()+1);
|
||||
|
||||
if(channel != null){
|
||||
command += "&cid=" + channel;
|
||||
}
|
||||
|
||||
if(nickname != null && nickname.value != ""){
|
||||
command += "&nickname=" + escape(nickname.value);
|
||||
document.cookie = id + "-nickname=" + escape(nickname.value) + "; expires=" + dateExpire.toGMTString();
|
||||
}
|
||||
|
||||
if(password != null && password.value != ""){
|
||||
command += "&password=" + escape(password.value);
|
||||
document.cookie = id + "-password=" + escape(password.value) + "; expires=" + dateExpire.toGMTString();
|
||||
}
|
||||
(window.open(command)).close();
|
||||
}
|
||||
7
cache/716058170680dd5d33a46ba1c0e3221fe74d7ae4
vendored
Normal file
7
cache/8eb03f96d62d12a85863a42d6c391b88ed7458a6
vendored
Normal file
77
cache/92886f011bbc37dbdb13cb6a8d2661c4a11e8b53
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
/**
|
||||
* TSStatus: Teamspeak 3 viewer for php5
|
||||
* @author Sebastien Gerard <seb@sebastien.me>
|
||||
* @see http://tsstatus.sebastien.me/
|
||||
* @version 2013-08-31
|
||||
**/
|
||||
|
||||
.tsstatus, .tsstatuserror{
|
||||
background-color: #ffffff;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.tsstatus, .tsstatus *, .tsstatuserror{
|
||||
color: #00000;
|
||||
font-family: Verdana;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.tsstatus label{
|
||||
border-bottom: 1px solid #aaaaaa;
|
||||
}
|
||||
|
||||
.tsstatusItem a{
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.tsstatusItem a:hover{
|
||||
background-color: #f6f6f6;
|
||||
color: #000099;
|
||||
}
|
||||
|
||||
.tsstatuserror{
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.tsstatus, .tsstatus *{
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.tsstatus{
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tsstatus label{
|
||||
display: block;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.tsstatusItem{
|
||||
margin-left: 16px;
|
||||
position: relative;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
.tsstatusItem a{
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.tsstatusItem img{
|
||||
border: 0;
|
||||
vertical-align: middle;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.tsstatusFlags{
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.tsstatusServer{
|
||||
margin-left: 0;
|
||||
}
|
||||
2
cache/9cf9c447e9cb715faf3f1260482aae731a389596
vendored
Normal file
14
cache/a1294cfeb68c935dad466bd68a2961654a6c8b72
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="keywords" lang="de" content="teamspeak, ts3">
|
||||
<link rel="shortcut icon" href="./api.php?call=files&cat=content&id=favicon.ico">
|
||||
<title>Mojotrollz.eu Teamspeak</title>
|
||||
${js}
|
||||
${css}
|
||||
</head>
|
||||
<body>
|
||||
${ts_app}
|
||||
</body>
|
||||
</html>
|
||||
0
cache/b20c6f3d846fa43b94ba3f531a86b457dba441b3
vendored
Normal file
0
cache/b80dfccf74c6d5cb02e0866a182d5a45efb1539c
vendored
Normal file
6
cache/ee8dc3a8f504dd73932ba98435eeb7cf22f629e8
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
$(document).ready(function() {
|
||||
//new SYSTEM('./api.php',1,'start'); //state system not in use yet
|
||||
$('#impressum').click(function(){
|
||||
$('#modal_text').modal('show');});
|
||||
|
||||
});
|
||||
7
index.inc
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
require_once 'lib/autoload.inc'; //SYSTEM Classes
|
||||
require_once 'teamspeak/autoload.inc'; //Project Classes
|
||||
require_once '../../config/get_config.php';
|
||||
|
||||
\SYSTEM\system::start(\WEBCRAFT\get_config(dirname(__FILE__)));
|
||||
10
index.php
@ -1,13 +1,5 @@
|
||||
<?php
|
||||
require_once 'lib/autoload.inc'; //SYSTEM Classes
|
||||
require_once 'teamspeak/autoload.inc'; //Project Classes
|
||||
require_once '/home/web/web/config/get_config.php';
|
||||
|
||||
\SYSTEM\system::start(\WEBCRAFT\get_config(dirname(__FILE__)));
|
||||
\SYSTEM\system::include_ExceptionShortcut();
|
||||
\SYSTEM\system::include_ResultShortcut();
|
||||
\SYSTEM\system::register_errorhandler_dbwriter();
|
||||
\SYSTEM\system::register_errorhandler_jsonoutput();
|
||||
include 'index.inc';
|
||||
|
||||
echo \SYSTEM\API\api::run('\SYSTEM\API\verify', 'page_teamspeak', array_merge($_POST,$_GET), 1, false, true);
|
||||
new \SYSTEM\LOG\COUNTER("Page was called sucessfully.");
|
||||
10
sai.php
@ -1,13 +1,5 @@
|
||||
<?php
|
||||
require_once 'lib/autoload.inc'; //SYSTEM Classes
|
||||
require_once 'teamspeak/autoload.inc'; //Project Classes
|
||||
require_once '/home/web/web/config/get_config.php';
|
||||
|
||||
\SYSTEM\system::start(\WEBCRAFT\get_config(dirname(__FILE__)));
|
||||
SYSTEM\system::include_ExceptionShortcut(); //allow ERROR() instead of \SYSTEM\LOG\ERROR()
|
||||
SYSTEM\system::include_ResultShortcut(); //allow JsonResult() instead of \SYSTEM\LOG\JsonResult()
|
||||
SYSTEM\system::register_errorhandler_dbwriter(); //write errors to database (must be first errorhandler to register)
|
||||
SYSTEM\system::register_errorhandler_jsonoutput(); //print errors as json to caller
|
||||
include 'index.inc';
|
||||
|
||||
$sai = new SYSTEM\SAI\saigui();
|
||||
echo $sai->html();
|
||||
4
setup.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
include 'index.inc';
|
||||
|
||||
echo \SYSTEM\SQL\setup::install();
|
||||
@ -1,7 +1,6 @@
|
||||
<?php
|
||||
require_once dirname(__FILE__).'/path/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/page/autoload.inc';
|
||||
require_once dirname(__FILE__).'/docu/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/dbd/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/api/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/config/autoload.inc.php';
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
<?php
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'');
|
||||
require_once dirname(__FILE__).'/register_docu.php';
|
||||
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
class docu_categories extends \SYSTEM\DOCU\docu_categories{
|
||||
const DOCU_WEBCRAFT_WEBCRAFT = 'Webcraft';
|
||||
const DOCU_WEBCRAFT_PROJECTS = 'Projects';
|
||||
const DOCU_WEBCRAFT_TODO = 'TODO';
|
||||
const DOCU_WEBCRAFT_HOWTO = 'How to';
|
||||
}
|
||||
@ -1,64 +0,0 @@
|
||||
?[text](./api.php?call=files&cat=how_to&id=Anonymous-Seal.jpg)
|
||||
|
||||
Websites von Webcraft
|
||||
=====================
|
||||
Anleitung für einfaches Handling
|
||||
--------------------------------
|
||||
|
||||
Dieses Kurzanleitung soll Ihnen einen Überblick über die Möglichkeiten zur Pflege und Verwaltung Ihrer Webcraft Website geben.
|
||||
Sie finden hier eine Anleitung für Ihre Onlineverwaltung, die Einrichtung Ihres e-mail Postfachs, sowie nützliche Tipps und Tricks, um Ihnen das Handling Ihrer Website so unkompliziert wie möglich zu gestalten.
|
||||
|
||||
1. Erste Schritte
|
||||
Alle Webseiten von webcraft-media sind mit einem sogenannten „back end“ ausgestattet: dem System Admin Interface, kurz SAI. Dieses ermöglicht Ihnen, die Inhalte ihrer Webseite einfach zu pflegen und zu verwalten.
|
||||
|
||||
Sie erreichen das SAI, indem Sie in die Addresszeile nach der URL Ihrer Seite „/sai.php“ eintippen.
|
||||
Beispiel: http://www.meine-seite.de/sai.php
|
||||
Hier können Sie unter Anderem Ihre Texte, Bilder und Dateien verwalten, Einstellungen vornehmen und Ihre Rechnungen einsehen.
|
||||
Sollten Sie noch keinen Account von uns zugewiesen bekommen haben, klicken Sie auf die Schaltfläche Login am oberen rechten Rand. Klicken Sie anschließend auf den Link „Register new Account“, und geben Sie Ihre Daten ein.
|
||||
Sollten Sie Probleme mit der Anmeldung am SAI haben, schreiben Sie uns bitte eine E-Mail an support@webcraft-media.de oder kontaktieren Sie uns telefonisch unter 0176/66802813.
|
||||
|
||||
|
||||
|
||||
2. Texte verwalten
|
||||
Um Ihre Texte auf der Webseite zu pflegen, ist es wichtig einen einfachen Editierzugang zu haben. SAI bietet die Möglichkeit unter dem Reiter Text (siehe Grafik) schnell und unkompliziert Texte auf Ihrer Webseite zu aktualisieren.
|
||||
|
||||
Die Texte werden in verschiedene Gruppen unterschieden. In der Regel gibt es dabei eine Gruppe für Standardtexte wie Fehlermeldungen, Hinweise, AGBs oder ähnliches. Die auf Ihrer Seite angezeigten inhaltlichen Texte sind ebenfalls in eine oder ggf. mehrere Gruppen zusammengefasst. Um zum gewünschten Text zu gelangen, wählen Sie die entsprechende Gruppe aus.
|
||||
|
||||
|
||||
Die Texte werden Ihnen nun in Form einer Liste angezeigt.
|
||||
Dabei wird in der Spalte ID der Name des Textes angezeigt, und in der Sprachspalte (deDE, enUS, huHU etc.) der eigendliche Text in der jeweiligen Sprache.
|
||||
Um einen bestimmten Text zu editieren, klicken Sie beim jeweiligen Text auf edit, um zum Editor zu gelangen. Um ihn zu löschen, klicken Sie delete.
|
||||
HINWEIS
|
||||
Sollten Sie Ihren Text irrtümlich oder unbeabsichtigt löschen, so können Sie ihn wiederherstellen, indem Sie einen neuen Text mit identischer ID und Category (Category = Gruppe) anlegen.
|
||||
|
||||
Im Editor können Sie ihren Text in allen freigeschalteten Sprachen anpassen. Dabei steht ihnen ein einfacher, HTML kompatibler Editor zur Verfügung.
|
||||
1Wenn Sie mit Ihrer Änderung zufrieden sind, klicken sie unter dem Editorfenster erneut auf edit. Sie sollten nun eine Erfolgsmeldung erhalten. Ihr Text wurde editiert.
|
||||
|
||||
|
||||
3. Bilder und Dateien verwalten
|
||||
Um Bilder z.B. in Galerien oder Dateien die zum Download angeboten werden zu aktualisieren, zu ersetzen, oder zu löschen, stellt SAI Ihnen ein online-Verwaltungssystem zur Verfügung.
|
||||
Um in die SAI-Dateiverwaltung zu gelangen, wählen Sie den Reiter „Files“ in der oberen Menuleiste aus.
|
||||
|
||||
Ähnlich dem Textmodul, sind Ihre Dateien in Verschiedene Gruppen zusammengefasst. Zum Beispiel alle Bilder einer Galerie, oder alle Dokumente, die zum Download bereitstehen. Die Namen der Gruppen deuten in der Regel auf den Inhalt hin.
|
||||
|
||||
Haben Sie eine Gruppe ausgewählt, werden Ihnen die Dateien ähnlich wie in der Textverwaltung als Liste angezeigt.
|
||||
|
||||
1. Die Spalte Name bezeichnet den Namen der hochgeladenen Datei.
|
||||
2. Die Spalte Extension bezieht sich auf das jeweilige Dateiformat. (z.B. .zip, .mp3, .jpg)
|
||||
3. URL zeigt Ihnen den Direktlink der Datei an.
|
||||
4. Unter Action finden Sie die Optionen „Delete“ für das Löschen einer Datei und „Rename“ um Sie umzubenennen.
|
||||
|
||||
2.1 Dateien hochladen
|
||||
Um eine Datei von Ihrem Computer ins SAI hochzuladen, wählen Sie zunächst die Gruppe, in die Sie hochgeladen werden soll aus. Wählen Sie nun am Ende der Liste die Option „Choose file“.
|
||||
|
||||
Nun öffnet sich ein Windows- Dialogfenster. Wählen Sie die ensprechende Datei von Ihrem Computer aus und klicken Sie auf unten rechts auf „Öffnen“.
|
||||
Name und Dateiformat werden Ihnen nun angezeigt.
|
||||
|
||||
Klicken Sie nun auf Upload am rechten Tabellenrand. Wenn der Upload beendet ist, wird Ihnen eine Erfolgsmeldung als Popup angezeigt. Dies kann bis zu einigen Minuten dauern, je nach Größe der Datei. Haben Sie die Erfolgsmeldung erhalten, klicken Sie erneut auf „Files“ oder drücken Sie die F5 Taste, um Ihre neue Datei angezeigt zu bekommen.
|
||||
|
||||
2.2 Dateien umbenennen
|
||||
HINWEIS
|
||||
Sollten Sie eine vorhandene Datei umbenennen, die auf Ihrer Webseite via Link eingebunden ist, wird diese auf der Seite ohne Weiteres nicht mehr verfügbar sein. Sie können die Verfügbarkeit wiederherstellen, indem Sie der Datei den ursprünglichen Namen wieder geben.
|
||||
Um eine bereits Hochgeladene Datei umzubennenen, geben Sie den gewünschten Namen in das dafür vorgesehene Eingabefeld ein.
|
||||
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
<?php
|
||||
//\SYSTEM\DOCU\docu::registerFolder(dirname(__FILE__).'/webcraft',docu_categories::DOCU_WEBCRAFT_WEBCRAFT);
|
||||
//\SYSTEM\DOCU\docu::registerFolder(dirname(__FILE__).'/projects',docu_categories::DOCU_WEBCRAFT_PROJECTS);
|
||||
\SYSTEM\DOCU\docu::registerFolder(dirname(__FILE__).'/todo',docu_categories::DOCU_WEBCRAFT_TODO);
|
||||
\SYSTEM\DOCU\docu::registerFolder(dirname(__FILE__).'/how_to',docu_categories::DOCU_WEBCRAFT_HOWTO);
|
||||
@ -1,89 +0,0 @@
|
||||
Webcraft
|
||||
--------
|
||||
|
||||
- CRON Modul (done?), CRON STRUKTUR (done?)
|
||||
|
||||
- worldmap
|
||||
- design
|
||||
- coole map
|
||||
- worldchat
|
||||
|
||||
Danube
|
||||
------
|
||||
|
||||
- 450/6.5€ (where is da money?)
|
||||
- GALLERY einbinden
|
||||
- Domain Transfere
|
||||
- sai fix(structure fix)
|
||||
|
||||
Mojotrollz
|
||||
----------
|
||||
|
||||
- Repo wechseln
|
||||
- start page
|
||||
- www fix
|
||||
|
||||
UVote
|
||||
-----
|
||||
|
||||
- Backend?
|
||||
- www fix
|
||||
|
||||
Rhein
|
||||
-----
|
||||
|
||||
- 420/6.5€
|
||||
- treffen ulf do
|
||||
|
||||
Da-Sense
|
||||
--------
|
||||
|
||||
- Chron Hook
|
||||
- New Database Model
|
||||
|
||||
Redestoffmusik
|
||||
--------------
|
||||
|
||||
- redesign ???
|
||||
- downloadstuff ???
|
||||
|
||||
Akademischer Börsenverein Frankfurt
|
||||
-----------------------------------
|
||||
|
||||
- 600/6.5€
|
||||
- Auf Rücksprache
|
||||
|
||||
Jörg
|
||||
----
|
||||
|
||||
- Ole Anfrage
|
||||
|
||||
Karate Zwingenberg
|
||||
------------------
|
||||
|
||||
- Tobi muss mehr Druck machen
|
||||
|
||||
Lichtblick
|
||||
----------
|
||||
|
||||
- Tobi Anfrage
|
||||
|
||||
Schönheitschirurg
|
||||
-----------------
|
||||
|
||||
- Ole Anfrage(in Zeit)
|
||||
|
||||
Frisöse Zwbg
|
||||
------------
|
||||
|
||||
- Ole Di treffen
|
||||
|
||||
Synagogenverein Zwingenberg
|
||||
---------------------------
|
||||
|
||||
- Do anfrage Ulf
|
||||
|
||||
Kunstfaser stuff
|
||||
----------------
|
||||
|
||||
- Tobi muss mhr rumstressen
|
||||
@ -1,50 +0,0 @@
|
||||
Webcraft
|
||||
--------
|
||||
|
||||
- CRON Modul, CRON STRUKTUR
|
||||
|
||||
* bild (worldmap, worldchat, websitemap)
|
||||
* bild
|
||||
|
||||
-> Webcraft design done
|
||||
|
||||
Danube
|
||||
------
|
||||
|
||||
GALLERY
|
||||
|
||||
-> done
|
||||
|
||||
Mojotrollz
|
||||
----------
|
||||
|
||||
- Repo wechseln
|
||||
- start page
|
||||
|
||||
UVote
|
||||
-----
|
||||
|
||||
- Backend?
|
||||
|
||||
Rhein
|
||||
-----
|
||||
|
||||
- 420/6.5€ alles !
|
||||
|
||||
- >
|
||||
- Transferieren (test war ok!)
|
||||
- Redesign (Schatten etc)
|
||||
- Gallery Modul (done)
|
||||
- EMail Server fixen / SSL Cert benötigt? (done)
|
||||
|
||||
Da-Sense
|
||||
--------
|
||||
|
||||
- Docu
|
||||
- Chron Hook
|
||||
- New Database Model
|
||||
|
||||
Redestoffmusik
|
||||
--------------
|
||||
|
||||
- transferieren (done)
|
||||
@ -1,82 +0,0 @@
|
||||
Webcraft
|
||||
--------
|
||||
|
||||
- CRON Modul, CRON STRUKTUR
|
||||
|
||||
- worldmap
|
||||
- design
|
||||
- coole map
|
||||
- worldchat
|
||||
|
||||
Danube
|
||||
------
|
||||
|
||||
- 450/6.5€ (where is da money?)
|
||||
- GALLERY einbinden
|
||||
- Domain Transfere
|
||||
- sai fix(structure fix)
|
||||
|
||||
Mojotrollz
|
||||
----------
|
||||
|
||||
- Repo wechseln
|
||||
- start page
|
||||
- www fix
|
||||
|
||||
UVote
|
||||
-----
|
||||
|
||||
- Backend?
|
||||
- www fix
|
||||
|
||||
Rhein
|
||||
-----
|
||||
|
||||
- 420/6.5€
|
||||
- Redesign
|
||||
- Schatten (done)
|
||||
- Farben (done)
|
||||
- Banner
|
||||
- Gallery Style (done)
|
||||
- email schreiben mit pws (done) -> Modul wtf? where is it?
|
||||
- rechnung 420/6.5€
|
||||
- spam filter (done)
|
||||
|
||||
Da-Sense
|
||||
--------
|
||||
|
||||
- Docu
|
||||
- Chron Hook
|
||||
- New Database Model
|
||||
|
||||
Redestoffmusik
|
||||
--------------
|
||||
|
||||
- redesign
|
||||
- downloadstuff
|
||||
|
||||
Akademischer Börsenverein Frankfurt
|
||||
-----------------------------------
|
||||
|
||||
- 600/6.5€
|
||||
- Auf Rücksprache
|
||||
|
||||
Jörg
|
||||
----
|
||||
|
||||
- Ole Anfrage
|
||||
|
||||
Karate Zwingenberg
|
||||
------------------
|
||||
|
||||
- Tobi muss Druck machen
|
||||
|
||||
Lichtblick
|
||||
----------
|
||||
|
||||
- Tobi Anfrage
|
||||
|
||||
Schönheitschirurg
|
||||
-----------------
|
||||
|
||||
- Ole Anfrage(in Zeit)
|
||||
@ -1,83 +0,0 @@
|
||||
Webcraft
|
||||
--------
|
||||
|
||||
- CRON Modul, CRON STRUKTUR
|
||||
|
||||
- worldmap
|
||||
- markers (done)
|
||||
- popup (done)
|
||||
- design
|
||||
- coole map
|
||||
- worldchat
|
||||
- sai lang switcher (done)
|
||||
- www fix (done)
|
||||
|
||||
Danube
|
||||
------
|
||||
|
||||
- 450/6.5€
|
||||
- GALLERY einbinden
|
||||
- Domain Transfere
|
||||
- sai fix(structure fix)
|
||||
|
||||
Mojotrollz
|
||||
----------
|
||||
|
||||
- Repo wechseln
|
||||
- start page
|
||||
- www fix
|
||||
|
||||
UVote
|
||||
-----
|
||||
|
||||
- Backend?
|
||||
- www fix
|
||||
|
||||
Rhein
|
||||
-----
|
||||
|
||||
- 420/6.5€
|
||||
- Transferieren (done)
|
||||
- Anfrage Api (done)
|
||||
- Sai Startpage (done)
|
||||
- Redesign
|
||||
- Schatten
|
||||
- Farben
|
||||
- Banner
|
||||
- Gallery Style
|
||||
- sai fix(structure fix) (done)
|
||||
- gallery in saimod (done)
|
||||
- danube gallery einbinden (done)
|
||||
- rechnungs mod einbinden (done)
|
||||
- anrufen (done)
|
||||
- Karte Rand (done)
|
||||
- Files Umbenennen fixen (done)
|
||||
- www fix (done)
|
||||
- email problem lösen (weiterleitung) (done?)
|
||||
- email schreiben mit pws (done) -> Modul wtf? where is it?
|
||||
- rechnung
|
||||
- spam filter (done)
|
||||
|
||||
Da-Sense
|
||||
--------
|
||||
|
||||
- Docu
|
||||
- Chron Hook
|
||||
- New Database Model
|
||||
|
||||
Redestoffmusik
|
||||
--------------
|
||||
|
||||
- redesign
|
||||
- downloadstuff
|
||||
- sai fix(structure fix) (done)
|
||||
- www fix (done)
|
||||
|
||||
Akademischer Börsenverein Frankfurt
|
||||
-----------------------------------
|
||||
|
||||
- 600/6.5€
|
||||
- klären -> Montag 26.5
|
||||
|
||||
- design
|
||||
- MENU Modul
|
||||
@ -1,105 +0,0 @@
|
||||
Textmodul
|
||||
---------
|
||||
|
||||
- Backbutton
|
||||
- Delete Nachfrage
|
||||
- post/get zeichenproblem
|
||||
- Timestamp für texte
|
||||
- Blocksatz
|
||||
|
||||
Karate Zwingenberg
|
||||
------------------
|
||||
|
||||
- Trainingskalender (Ulf)
|
||||
|
||||
- News
|
||||
- user Rechte für Texgruppen?
|
||||
- Design
|
||||
- Original Logo
|
||||
- Schwarzer Balken muss weg
|
||||
- bottom bar mit spk logo und impressum-webcraft
|
||||
|
||||
Webcraft
|
||||
--------
|
||||
|
||||
- CRON Modul (done?), CRON STRUKTUR (done?)
|
||||
|
||||
- worldmap
|
||||
- design
|
||||
- text bricht aus den divs (generelles problem?)
|
||||
- mehr backgrounds
|
||||
- coole map (done)
|
||||
- worldchat
|
||||
|
||||
Rhein
|
||||
-----
|
||||
|
||||
- 420/6.5€
|
||||
- treffen ulf do
|
||||
|
||||
Danube
|
||||
------
|
||||
|
||||
- 450/6.5€ (where is da money?)
|
||||
- GALLERY einbinden
|
||||
- Domain Transfere
|
||||
- sai fix(structure fix)
|
||||
|
||||
Mojotrollz
|
||||
----------
|
||||
|
||||
- Repo wechseln
|
||||
- start page
|
||||
- www fix
|
||||
|
||||
UVote
|
||||
-----
|
||||
|
||||
- Backend?
|
||||
- www fix
|
||||
|
||||
|
||||
|
||||
Da-Sense
|
||||
--------
|
||||
|
||||
- Chron Hook
|
||||
- New Database Model
|
||||
|
||||
Redestoffmusik
|
||||
--------------
|
||||
|
||||
- Sascha bescheid sagen, dass er den shit hochladen muss
|
||||
- MMONE Album einbinden
|
||||
|
||||
Akademischer Börsenverein Frankfurt
|
||||
-----------------------------------
|
||||
|
||||
- 600/6.5€
|
||||
- Auf Rücksprache
|
||||
|
||||
Jörg
|
||||
----
|
||||
|
||||
- Ole Anfrage
|
||||
|
||||
Lichtblick
|
||||
----------
|
||||
|
||||
- Tobi Anfrage
|
||||
|
||||
Schönheitschirurg
|
||||
-----------------
|
||||
|
||||
- Ole Anfrage(in Zeit)
|
||||
|
||||
Frisöse Zwbg
|
||||
------------
|
||||
|
||||
- Ole Di treffen
|
||||
|
||||
Synagogenverein Zwingenberg
|
||||
---------------------------
|
||||
|
||||
- Do anfrage Ulf
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
<?php
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'');
|
||||
require_once dirname(__FILE__).'/register_files.php';
|
||||
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/img/','img','*');
|
||||
BIN
teamspeak/files/img/icon_100073622
Executable file
|
After Width: | Height: | Size: 593 B |
BIN
teamspeak/files/img/icon_102582671
Executable file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
teamspeak/files/img/icon_1029292157
Executable file
|
After Width: | Height: | Size: 431 B |
BIN
teamspeak/files/img/icon_1035911263
Executable file
|
After Width: | Height: | Size: 1002 B |
BIN
teamspeak/files/img/icon_1038301172
Executable file
|
After Width: | Height: | Size: 472 B |
BIN
teamspeak/files/img/icon_1043780286
Executable file
|
After Width: | Height: | Size: 520 B |
BIN
teamspeak/files/img/icon_1045001215
Executable file
|
After Width: | Height: | Size: 465 B |
BIN
teamspeak/files/img/icon_1053513006
Executable file
|
After Width: | Height: | Size: 648 B |
BIN
teamspeak/files/img/icon_1060089571
Executable file
|
After Width: | Height: | Size: 483 B |
BIN
teamspeak/files/img/icon_1060926725
Executable file
|
After Width: | Height: | Size: 961 B |
BIN
teamspeak/files/img/icon_1073266916
Executable file
|
After Width: | Height: | Size: 976 B |
BIN
teamspeak/files/img/icon_1095079463
Executable file
|
After Width: | Height: | Size: 508 B |
BIN
teamspeak/files/img/icon_1095116608
Executable file
|
After Width: | Height: | Size: 286 B |
BIN
teamspeak/files/img/icon_1099452848
Executable file
|
After Width: | Height: | Size: 604 B |
BIN
teamspeak/files/img/icon_110845999
Executable file
|
After Width: | Height: | Size: 638 B |
BIN
teamspeak/files/img/icon_1119332697
Executable file
|
After Width: | Height: | Size: 154 B |
BIN
teamspeak/files/img/icon_113003417
Executable file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
teamspeak/files/img/icon_1133339501
Executable file
|
After Width: | Height: | Size: 537 B |
BIN
teamspeak/files/img/icon_1135794469
Executable file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
teamspeak/files/img/icon_1141655189
Executable file
|
After Width: | Height: | Size: 559 B |
BIN
teamspeak/files/img/icon_1142362690
Executable file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
teamspeak/files/img/icon_1149753036
Executable file
|
After Width: | Height: | Size: 912 B |
BIN
teamspeak/files/img/icon_1177971364
Executable file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
teamspeak/files/img/icon_118020159
Executable file
|
After Width: | Height: | Size: 498 B |
BIN
teamspeak/files/img/icon_1181660693
Executable file
|
After Width: | Height: | Size: 643 B |
BIN
teamspeak/files/img/icon_122847451
Executable file
|
After Width: | Height: | Size: 480 B |
BIN
teamspeak/files/img/icon_1274898152
Executable file
|
After Width: | Height: | Size: 820 B |
BIN
teamspeak/files/img/icon_1276570911
Executable file
|
After Width: | Height: | Size: 373 B |
BIN
teamspeak/files/img/icon_1287032913
Executable file
|
After Width: | Height: | Size: 608 B |
BIN
teamspeak/files/img/icon_1287263422
Executable file
|
After Width: | Height: | Size: 529 B |
BIN
teamspeak/files/img/icon_1304343525
Executable file
|
After Width: | Height: | Size: 727 B |
BIN
teamspeak/files/img/icon_1329681187
Executable file
|
After Width: | Height: | Size: 764 B |
BIN
teamspeak/files/img/icon_1336549282
Executable file
|
After Width: | Height: | Size: 655 B |
BIN
teamspeak/files/img/icon_1340587078
Executable file
|
After Width: | Height: | Size: 559 B |
BIN
teamspeak/files/img/icon_1345595639
Executable file
|
After Width: | Height: | Size: 803 B |
BIN
teamspeak/files/img/icon_1350806033
Executable file
|
After Width: | Height: | Size: 622 B |
BIN
teamspeak/files/img/icon_1354884561
Executable file
|
After Width: | Height: | Size: 496 B |
BIN
teamspeak/files/img/icon_1356094015
Executable file
|
After Width: | Height: | Size: 380 B |
BIN
teamspeak/files/img/icon_1358974539
Executable file
|
After Width: | Height: | Size: 658 B |
BIN
teamspeak/files/img/icon_1361400994
Executable file
|
After Width: | Height: | Size: 571 B |
BIN
teamspeak/files/img/icon_1368085743
Executable file
|
After Width: | Height: | Size: 736 B |
BIN
teamspeak/files/img/icon_1373991149
Executable file
|
After Width: | Height: | Size: 663 B |
BIN
teamspeak/files/img/icon_1382359293
Executable file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
teamspeak/files/img/icon_1402912548
Executable file
|
After Width: | Height: | Size: 772 B |
BIN
teamspeak/files/img/icon_1403600191
Executable file
|
After Width: | Height: | Size: 650 B |
BIN
teamspeak/files/img/icon_1403955365
Executable file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
teamspeak/files/img/icon_1407707968
Executable file
|
After Width: | Height: | Size: 774 B |
BIN
teamspeak/files/img/icon_1407905167
Executable file
|
After Width: | Height: | Size: 511 B |
BIN
teamspeak/files/img/icon_142663338
Executable file
|
After Width: | Height: | Size: 672 B |
BIN
teamspeak/files/img/icon_1431534167
Executable file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
teamspeak/files/img/icon_1440500947
Executable file
|
After Width: | Height: | Size: 861 B |
BIN
teamspeak/files/img/icon_1460707512
Executable file
|
After Width: | Height: | Size: 510 B |
BIN
teamspeak/files/img/icon_1469813795
Executable file
|
After Width: | Height: | Size: 509 B |
BIN
teamspeak/files/img/icon_147756183
Executable file
|
After Width: | Height: | Size: 486 B |
BIN
teamspeak/files/img/icon_1486412801
Executable file
|
After Width: | Height: | Size: 608 B |
BIN
teamspeak/files/img/icon_1491432871
Executable file
|
After Width: | Height: | Size: 569 B |
BIN
teamspeak/files/img/icon_149703715
Executable file
|
After Width: | Height: | Size: 630 B |
BIN
teamspeak/files/img/icon_1501393519
Executable file
|
After Width: | Height: | Size: 631 B |
BIN
teamspeak/files/img/icon_1511695791
Executable file
|
After Width: | Height: | Size: 614 B |
BIN
teamspeak/files/img/icon_1520060492
Executable file
|
After Width: | Height: | Size: 508 B |
BIN
teamspeak/files/img/icon_1521436468
Executable file
|
After Width: | Height: | Size: 628 B |
BIN
teamspeak/files/img/icon_1536323599
Executable file
|
After Width: | Height: | Size: 668 B |
BIN
teamspeak/files/img/icon_1542854810
Executable file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
teamspeak/files/img/icon_1544439389
Executable file
|
After Width: | Height: | Size: 814 B |
BIN
teamspeak/files/img/icon_1554086970
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
teamspeak/files/img/icon_1560545545
Executable file
|
After Width: | Height: | Size: 573 B |
BIN
teamspeak/files/img/icon_156386412
Executable file
|
After Width: | Height: | Size: 572 B |
BIN
teamspeak/files/img/icon_1568868031
Executable file
|
After Width: | Height: | Size: 504 B |
BIN
teamspeak/files/img/icon_157763846
Executable file
|
After Width: | Height: | Size: 420 B |
BIN
teamspeak/files/img/icon_158497088
Executable file
|
After Width: | Height: | Size: 550 B |
BIN
teamspeak/files/img/icon_1600792222
Executable file
|
After Width: | Height: | Size: 3.3 KiB |