Links are maintained, with the 'href' copied over
+ *
Information in the <head> is lost
+ *
+ *
+ * @param html the input HTML
+ * @return the HTML converted, as best as possible, to text
+ */
+function convert_html_to_text($html, $width=74) {
+
+ $html = fix_newlines($html);
+ $doc = new DOMDocument('1.0', 'utf-8');
+ if (strpos($html, ''.$html; # loadHTML($html))
+ return $html;
+
+ // Thanks, http://us3.php.net/manual/en/domdocument.loadhtml.php#95251
+ // dirty fix -- remove the inserted processing instruction
+ foreach ($doc->childNodes as $item) {
+ if ($item->nodeType == XML_PI_NODE) {
+ $doc->removeChild($item); // remove hack
+ break;
+ }
+ }
+
+ $elements = identify_node($doc);
+
+ // Add the default stylesheet
+ $elements->getRoot()->addStylesheet(
+ HtmlStylesheet::fromArray(array(
+ 'html' => array('white-space' => 'pre'), # Don't wrap footnotes
+ 'center' => array('text-align' => 'center'),
+ 'p' => array('margin-bottom' => '1em'),
+ 'pre' => array('white-space' => 'pre'),
+ 'u' => array('text-decoration' => 'underline'),
+ 'a' => array('text-decoration' => 'underline'),
+ 'b' => array('text-transform' => 'uppercase'),
+ 'strong' => array('text-transform' => 'uppercase'),
+ 'h4' => array('text-transform' => 'uppercase'),
+
+ // Crazy M$ styles
+ '.MsoNormal' => array('margin' => 0, 'margin-bottom' => 0.0001),
+ '.MsoPlainText' => array('margin' => 0, 'margin-bottom' => 0.0001),
+ ))
+ );
+ $options = array();
+ if (is_object($elements))
+ $output = $elements->render($width, $options);
+ else
+ $output = $elements;
+
+ return trim($output);
+}
+
+/**
+ * Unify newlines; in particular, \r\n becomes \n, and
+ * then \r becomes \n. This means that all newlines (Unix, Windows, Mac)
+ * all become \ns.
+ *
+ * @param text text with any number of \r, \r\n and \n combinations
+ * @return the fixed text
+ */
+function fix_newlines($text) {
+ // replace \r\n to \n
+ // remove \rs
+ $text = str_replace("\r\n?", "\n", $text);
+
+ return $text;
+}
+
+function identify_node($node, $parent=null) {
+ if ($node instanceof DOMText)
+ return $node;
+ if ($node instanceof DOMDocument)
+ return identify_node($node->childNodes->item(1), $parent);
+ if ($node instanceof DOMDocumentType
+ || $node instanceof DOMComment)
+ // ignore
+ return "";
+
+ $name = strtolower($node->nodeName);
+
+ // start whitespace
+ switch ($name) {
+ case "hr":
+ return new HtmlHrElement($node, $parent);
+ case "br":
+ return new HtmlBrElement($node, $parent);
+
+ case "style":
+ $parent->getRoot()->addStylesheet(new HtmlStylesheet($node));
+ case "title":
+ case "meta":
+ case "script":
+ case "link":
+ // ignore these tags
+ return "";
+
+ case "head":
+ case "html":
+ case "body":
+ case "center":
+ case "div":
+ case "p":
+ case "pre":
+ return new HtmlBlockElement($node, $parent);
+
+ case "blockquote":
+ return new HtmlBlockquoteElement($node, $parent);
+ case "cite":
+ return new HtmlCiteElement($node, $parent);
+
+ case "h1":
+ case "h2":
+ case "h3":
+ case "h4":
+ case "h5":
+ case "h6":
+ return new HtmlHeadlineElement($node, $parent);
+
+ case "a":
+ return new HtmlAElement($node, $parent);
+
+ case "ol":
+ return new HtmlListElement($node, $parent);
+ case "ul":
+ return new HtmlUnorderedListElement($node, $parent);
+
+ case 'table':
+ return new HtmlTable($node, $parent);
+
+ case "img":
+ return new HtmlImgElement($node, $parent);
+
+ case "code":
+ return new HtmlCodeElement($node, $parent);
+
+ default:
+ // print out contents of unknown tags
+ //if ($node->hasChildNodes() && $node->childNodes->length == 1)
+ // return identify_node($node->childNodes->item(0), $parent);
+
+ return new HtmlInlineElement($node, $parent);
+ }
+}
+
+class HtmlInlineElement {
+ var $children = array();
+ var $style = false;
+ var $stylesheets = array();
+ var $footnotes = array();
+ var $ws = false;
+
+ function __construct($node, $parent) {
+ $this->parent = $parent;
+ $this->node = $node;
+ $this->traverse($node);
+ $this->style = new CssStyleRules();
+ if ($node instanceof DomElement
+ && ($style = $this->node->getAttribute('style')))
+ $this->style->add($style);
+ }
+
+ function traverse($node) {
+ if ($node && $node->hasChildNodes()) {
+ for ($i = 0; $i < $node->childNodes->length; $i++) {
+ $n = $node->childNodes->item($i);
+ $this->children[] = identify_node($n, $this);
+ }
+ }
+ }
+
+ function render($width, $options) {
+ $output = '';
+ $after_block = false;
+ $this->ws = $this->getStyle('white-space', 'normal');
+ // Direction
+ if ($this->node)
+ $dir = $this->node->getAttribute('dir');
+
+ // Ensure we have a value, but don't emit a control char unless
+ // direction is declared
+ $this->dir = $dir ?: 'ltr';
+ switch (strtolower($dir)) {
+ case 'ltr':
+ $output .= "\xE2\x80\x8E"; # LEFT-TO-RIGHT MARK
+ break;
+ case 'rtl':
+ $output .= "\xE2\x80\x8F"; # RIGHT-TO-LEFT MARK
+ break;
+ }
+ foreach ($this->children as $c) {
+ if ($c instanceof DOMText) {
+ // Collapse white-space
+ $more = $c->wholeText;
+ switch ($this->ws) {
+ case 'pre':
+ case 'pre-wrap':
+ break;
+ case 'nowrap':
+ case 'pre-line':
+ case 'normal':
+ default:
+ if ($after_block) $more = ltrim($more);
+ if ($this instanceof HtmlBlockElement && trim($more) == '')
+ // Ignore pure whitespace in-between elements inside
+ // block elements
+ $more = '';
+ $more = preg_replace('/[ \r\n\t\f]+/mu', ' ', $more);
+ }
+ }
+ elseif ($c instanceof HtmlInlineElement) {
+ $more = $c->render($width, $options);
+ }
+ else {
+ $more = $c;
+ if (!$after_block)
+ // Prepend a newline. Block elements should start to the
+ // far left
+ $output .= "\n";
+ }
+ $after_block = ($c instanceof HtmlBlockElement);
+ if ($more instanceof PreFormattedText)
+ $output = new PreFormattedText($output . $more);
+ elseif (is_string($more))
+ $output .= $more;
+ }
+ switch ($this->getStyle('text-transform', 'none')) {
+ case 'uppercase':
+ $output = mb_strtoupper($output);
+ break;
+ }
+ switch ($this->getStyle('text-decoration', 'none')) {
+ case 'underline':
+ // Split diacritics and underline chars which do not go below
+ // the baseline
+ if (class_exists('Normalizer'))
+ $output = Normalizer::normalize($output, Normalizer::FORM_D);
+ $output = preg_replace("/[a-fhik-or-xzA-PR-Z0-9#]/u", "$0\xcc\xb2", $output);
+ break;
+ }
+ if ($this->footnotes) {
+ $output = rtrim($output, "\n");
+ $output .= "\n\n" . str_repeat('-', $width/2) . "\n";
+ $id = 1;
+ foreach ($this->footnotes as $name=>$content)
+ $output .= sprintf("[%d] %s\n", $id++, $content);
+ }
+ return $output;
+ }
+
+ function getWeight() {
+ if (!isset($this->weight)) {
+ $this->weight = 0;
+ foreach ($this->children as $c) {
+ if ($c instanceof HtmlInlineElement)
+ $this->weight += $c->getWeight();
+ elseif ($c instanceof DomText)
+ $this->weight += mb_strwidth2($c->wholeText);
+ }
+ }
+ return $this->weight;
+ }
+
+ function setStyle($property, $value) {
+ $this->style->set($property, $value);
+ }
+
+ function getStyle($property, $default=null, $tag=false, $classes=false) {
+ if ($this->style && $this->style->has($property))
+ return $this->style->get($property, $default);
+
+ if ($this->node && $tag === false)
+ $tag = $this->node->nodeName;
+
+ if ($classes === false) {
+ if ($this->node && ($c = $this->node->getAttribute('class')))
+ $classes = explode(' ', $c);
+ else
+ $classes = array();
+ }
+
+ if ($this->stylesheets) {
+ foreach ($this->stylesheets as $sheet)
+ if ($s = $sheet->get($tag, $classes))
+ return $s->get($property, $default);
+ }
+ elseif ($this->parent) {
+ return $this->getRoot()->getStyle($property, $default, $tag, $classes);
+ }
+ else {
+ return $default;
+ }
+ }
+
+ function getRoot() {
+ if (!$this->parent)
+ return $this;
+ elseif (!isset($this->root))
+ $this->root = $this->parent->getRoot();
+ return $this->root;
+ }
+
+ function addStylesheet(&$s) {
+ $this->stylesheets[] = $s;
+ }
+
+ function addFootNote($name, $content) {
+ $this->footnotes[$content] = $content;
+ return count($this->footnotes);
+ }
+}
+
+class HtmlBlockElement extends HtmlInlineElement {
+ var $min_width = false;
+ var $pad_left;
+ var $pad_right;
+
+ function __construct($node, $parent) {
+ parent::__construct($node, $parent);
+ $this->pad_left = str_repeat(' ', $this->getStyle('padding-left', 0.0));
+ $this->pad_right = str_repeat(' ', $this->getStyle('padding-right', 0.0));
+ }
+
+ function render($width, $options) {
+ // Allow room for the border.
+ // TODO: Consider left-right padding and margin
+ $bw = $this->getStyle('border-width', 0);
+ if ($bw)
+ $width -= 4;
+
+ $output = parent::render($width, $options);
+ if ($output instanceof PreFormattedText)
+ // TODO: Consider CSS rules
+ return $output;
+
+ // Leading and trailing whitespace is ignored in block elements
+ $output = trim($output);
+ if (!strlen($output))
+ return "";
+
+ // Padding
+ $width -= strlen($this->pad_left) + strlen($this->pad_right);
+
+ // Wordwrap the content to the width
+ switch ($this->ws) {
+ case 'nowrap':
+ case 'pre':
+ break;
+ case 'pre-line':
+ case 'pre-wrap':
+ case 'normal':
+ default:
+ $output = mb_wordwrap($output, $width, "\n", true);
+ }
+
+ // Justification
+ static $aligns = array(
+ 'left' => STR_PAD_RIGHT,
+ 'right' => STR_PAD_LEFT,
+ 'center' => STR_PAD_BOTH,
+ );
+ $talign = $this->getStyle('text-align', 'none');
+ $self = $this;
+ if (isset($aligns[$talign])) {
+ // Explode lines, justify, implode again
+ $output = array_map(function($l) use ($talign, $aligns, $width, $self) {
+ return $self->pad_left.mb_str_pad($l, $width, ' ', $aligns[$talign]).$self->pad_right;
+ }, explode("\n", $output)
+ );
+ $output = implode("\n", $output);
+ }
+ // Apply left and right padding, if specified
+ elseif ($this->pad_left || $this->pad_right) {
+ $output = array_map(function($l) use ($self) {
+ return $self->pad_left.$l.$self->pad_right;
+ }, explode("\n", $output)
+ );
+ $output = implode("\n", $output);
+ }
+
+ // Border
+ if ($bw)
+ $output = self::borderize($output, $width);
+
+ // Margin
+ $mb = $this->getStyle('margin-bottom', 0.0)
+ + $this->getStyle('padding-bottom', 0.0);
+ $output .= str_repeat("\n", (int)$mb);
+
+ return $output."\n";
+ }
+
+ function borderize($what, $width) {
+ $output = ',-'.str_repeat('-', $width)."-.\n";
+ foreach (explode("\n", $what) as $l)
+ $output .= '| '.mb_str_pad($l, $width)." |\n";
+ $output .= '`-'.str_repeat('-', $width)."-'\n";
+ return $output;
+ }
+
+ function getMinWidth() {
+ if ($this->min_width === false) {
+ foreach ($this->children as $c) {
+ if ($c instanceof HtmlBlockElement)
+ $this->min_width = max($c->getMinWidth(), $this->min_width);
+ elseif ($c instanceof DomText)
+ $this->min_width = max(max(array_map('mb_strwidth2',
+ explode(' ', $c->wholeText))), $this->min_width);
+ }
+ }
+ return $this->min_width + strlen($this->pad_left) + strlen($this->pad_right);
+ }
+}
+
+class HtmlBrElement extends HtmlBlockElement {
+ function render($width, $options) {
+ return "\n";
+ }
+}
+
+class HtmlHrElement extends HtmlBlockElement {
+ function render($width, $options) {
+ return str_repeat("\xE2\x94\x80", $width)."\n";
+ }
+ function getWeight() { return 1; }
+ function getMinWidth() { return 0; }
+}
+
+class HtmlHeadlineElement extends HtmlBlockElement {
+ function render($width, $options) {
+ $line = false;
+ if (!($headline = parent::render($width, $options)))
+ return "";
+ switch ($this->node->nodeName) {
+ case 'h1':
+ $line = "\xE2\x95\x90"; # U+2505
+ break;
+ case 'h2':
+ $line = "\xE2\x94\x81"; # U+2501
+ break;
+ case 'h3':
+ $line = "\xE2\x94\x80"; # U+2500
+ break;
+ default:
+ return $headline;
+ }
+ $length = max(array_map('mb_strwidth2', explode("\n", $headline)));
+ $headline .= str_repeat($line, $length) . "\n";
+ return $headline;
+ }
+}
+
+class HtmlBlockquoteElement extends HtmlBlockElement {
+ function render($width, $options) {
+ return str_replace("\n", "\n> ",
+ rtrim(parent::render($width-2, $options)))."\n";
+ }
+ function getWeight() { return parent::getWeight()+2; }
+}
+
+class HtmlCiteElement extends HtmlBlockElement {
+ function render($width, $options) {
+ $lines = explode("\n", ltrim(parent::render($width-3, $options)));
+ $lines[0] = "-- " . $lines[0];
+ // Right justification
+ foreach ($lines as &$l)
+ $l = mb_str_pad($l, $width, " ", STR_PAD_LEFT);
+ unset($l);
+ return implode("\n", $lines);
+ }
+}
+
+class HtmlImgElement extends HtmlInlineElement {
+ function render($width, $options) {
+ // Images are returned as [alt: title]
+ $title = $this->node->getAttribute("title");
+ if ($title)
+ $title = ": $title";
+ $alt = $this->node->getAttribute("alt");
+ return "[image:$alt$title] ";
+ }
+ function getWeight() {
+ return mb_strwidth2($this->node->getAttribute("alt")) + 8;
+ }
+}
+
+class HtmlAElement extends HtmlInlineElement {
+ function render($width, $options) {
+ // links are returned in [text](link) format
+ $output = parent::render($width, $options);
+ $href = $this->node->getAttribute("href");
+ if ($href == null) {
+ // it doesn't link anywhere
+ if ($this->node->getAttribute("name") != null) {
+ $output = "[$output]";
+ }
+ } elseif (strpos($href, 'mailto:') === 0) {
+ $href = substr($href, 7);
+ $output = (($href != $output) ? "$href " : '') . "<$output>";
+ } elseif (mb_strwidth2($href) > $width / 2) {
+ if (mb_strwidth2($output) > $width / 2) {
+ // Parse URL and use relative path part
+ if ($PU = parse_url($output))
+ $output = $PU['host'] . $PU['path'];
+ }
+ if ($href != $output)
+ $id = $this->getRoot()->addFootnote($output, $href);
+ $output = "[$output][$id]";
+ } elseif ($href != $output) {
+ $output = "[$output]($href)";
+ }
+ return $output;
+ }
+ function getWeight() { return parent::getWeight() + 4; }
+}
+
+class HtmlListElement extends HtmlBlockElement {
+ var $marker = " %d. ";
+
+ function render($width, $options) {
+ $options['marker'] = $this->marker;
+ return parent::render($width, $options);
+ }
+
+ function traverse($node, $number=1) {
+ if ($node instanceof DOMText)
+ return;
+ switch (strtolower($node->nodeName)) {
+ case "li":
+ $this->children[] = new HtmlListItem($node, $this->parent, $number++);
+ return;
+ // Anything else is ignored
+ }
+ for ($i = 0; $i < $node->childNodes->length; $i++)
+ $this->traverse($node->childNodes->item($i), $number);
+ }
+}
+
+class HtmlUnorderedListElement extends HtmlListElement {
+ var $marker = " * ";
+}
+
+class HtmlListItem extends HtmlBlockElement {
+ function __construct($node, $parent, $number) {
+ parent::__construct($node, $parent);
+ $this->number = $number;
+ }
+
+ function render($width, $options) {
+ $prefix = sprintf($options['marker'], $this->number);
+ $lines = explode("\n", trim(parent::render($width-mb_strwidth2($prefix), $options)));
+ $lines[0] = $prefix . $lines[0];
+ return new PreFormattedText(
+ implode("\n".str_repeat(" ", mb_strwidth2($prefix)), $lines)."\n");
+ }
+}
+
+class HtmlCodeElement extends HtmlInlineElement {
+ function render($width, $options) {
+ $content = parent::render($width-2, $options);
+ if (strpos($content, "\n"))
+ return "```\n".trim($content)."\n```\n";
+ else
+ return "`$content`";
+ }
+}
+
+class HtmlTable extends HtmlBlockElement {
+ var $body;
+ var $foot;
+ var $rows;
+ var $border = true;
+ var $padding = true;
+
+ function __construct($node, $parent) {
+ $this->body = array();
+ $this->foot = array();
+ $this->rows = &$this->body;
+ parent::__construct($node, $parent);
+ $A = $this->node->getAttribute('border');
+ if (isset($A))
+ $this->border = (bool) $A;
+ $A = $this->node->getAttribute('cellpadding');
+ if (isset($A))
+ $this->padding = (bool) $A;
+ }
+
+ function getMinWidth() {
+ if (false === $this->min_width) {
+ foreach ($this->rows as $r)
+ foreach ($r as $cell)
+ $this->min_width = max($this->min_width, $cell->getMinWidth());
+ }
+ return $this->min_width + ($this->border ? 2 : 0) + ($this->padding ? 2 : 0);
+ }
+
+ function getWeight() {
+ if (!isset($this->weight)) {
+ $this->weight = 0;
+ foreach ($this->rows as $r)
+ foreach ($r as $cell)
+ $this->weight += $cell->getWeight();
+ }
+ return $this->weight;
+ }
+
+ function traverse($node) {
+ if ($node instanceof DOMText)
+ return;
+
+ $name = strtolower($node->nodeName);
+ switch ($name) {
+ case 'th':
+ case 'td':
+ $this->row[] = new HtmlTableCell($node, $this->parent);
+ // Don't descend into this node. It should be handled by the
+ // HtmlTableCell::traverse
+ return;
+
+ case 'tr':
+ unset($this->row);
+ $this->row = array();
+ $this->rows[] = &$this->row;
+ break;
+
+ case 'caption':
+ $this->caption = new HtmlBlockElement($node, $this->parent);
+ return;
+
+ case 'tbody':
+ case 'thead':
+ unset($this->rows);
+ $this->rows = &$this->body;
+ break;
+
+ case 'tfoot':
+ unset($this->rows);
+ $this->rows = &$this->foot;
+ break;
+ }
+ for ($i = 0; $i < $node->childNodes->length; $i++)
+ $this->traverse($node->childNodes->item($i));
+ }
+
+ /**
+ * Ensure that no column is below its minimum width. Each column that is
+ * below its minimum will borrow from a column that is above its
+ * minimum. The process will continue until all columns are above their
+ * minimums or all columns are below their minimums.
+ */
+ function _fixupWidths(&$widths, $mins) {
+ foreach ($widths as $i=>$w) {
+ if ($w < $mins[$i]) {
+ // Borrow from another column -- the furthest one away from
+ // its minimum width
+ $best = 0; $bestidx = false;
+ foreach ($widths as $j=>$w) {
+ if ($i == $j)
+ continue;
+ if ($w > $mins[$j]) {
+ if ($w - $mins[$j] > $best) {
+ $best = $w - $mins[$j];
+ $bestidx = $j;
+ }
+ }
+ }
+ if ($bestidx !== false) {
+ $widths[$bestidx]--;
+ $widths[$i]++;
+ return $this->_fixupWidths($widths, $mins);
+ }
+ }
+ }
+ }
+
+ function render($width, $options) {
+ $cols = 0;
+ $rows = array_merge($this->body, $this->foot);
+
+ # Count the number of columns
+ foreach ($rows as $r)
+ $cols = max($cols, count($r));
+
+ if (!$cols)
+ return '';
+
+ # Find the largest cells in all columns
+ $weights = $mins = array_fill(0, $cols, 0);
+ foreach ($rows as $r) {
+ $i = 0;
+ foreach ($r as $cell) {
+ for ($j=0; $j<$cell->cols; $j++) {
+ // TODO: Use cell-specified width
+ $weights[$i] = max($weights[$i], $cell->getWeight());
+ $mins[$i] = max($mins[$i], $cell->getMinWidth());
+ }
+ $i += $cell->cols;
+ }
+ }
+
+ # Subtract internal padding and borders from the available width
+ $inner_width = $width - ($this->border ? $cols + 1 : 0)
+ - ($this->padding ? $cols*2 : 0);
+
+ # Optimal case, where the preferred width of all the columns is
+ # doable
+ if (array_sum($weights) <= $inner_width)
+ $widths = $weights;
+ # Worst case, where the minimum size of the columns exceeds the
+ # available width
+ elseif (array_sum($mins) > $inner_width)
+ $widths = $mins;
+ # Most likely case, where the table can be fit into the available
+ # width
+ else {
+ $total = array_sum($weights);
+ $widths = array();
+ foreach ($weights as $c)
+ $widths[] = (int)($inner_width * $c / $total);
+ $this->_fixupWidths($widths, $mins);
+ }
+ $outer_width = array_sum($widths)
+ + ($this->border ? $cols + 1 : 0)
+ + ($this->padding ? $cols * 2 : 0);
+
+ $contents = array();
+ $heights = array();
+ foreach ($rows as $y=>$r) {
+ $heights[$y] = 0;
+ for ($x = 0, $i = 0; $x < $cols; $i++) {
+ if (!isset($r[$i])) {
+ // No cell at the end of this row
+ $contents[$y][$i][] = "";
+ break;
+ }
+ $cell = $r[$i];
+ # Compute the effective cell width for spanned columns
+ # Add extra space for the unneeded border padding for
+ # spanned columns
+ $cwidth = ($this->border ? ($cell->cols - 1) : 0)
+ + ($this->padding ? ($cell->cols - 1) * 2 : 0);
+ for ($j = 0; $j < $cell->cols; $j++)
+ $cwidth += $widths[$x+$j];
+ # Stash the computed width so it doesn't need to be
+ # recomputed again below
+ $cell->width = $cwidth;
+ unset($data);
+ $data = explode("\n", $cell->render($cwidth, $options));
+ // NOTE: block elements have trailing newline
+ $heights[$y] = max(count($data)-1, $heights[$y]);
+ $contents[$y][$i] = &$data;
+ $x += $cell->cols;
+ }
+ }
+
+ # Build the header
+ $header = "";
+ if ($this->border) {
+ $padding = $this->padding ? '-' : '';
+ for ($i = 0; $i < $cols; $i++) {
+ $header .= '+'.$padding.str_repeat("-", $widths[$i]).$padding;
+ }
+ $header .= "+\n";
+ }
+
+ # Emit the rows
+ if (isset($this->caption)) {
+ $this->caption = $this->caption->render($outer_width, $options);
+ }
+ $border = $this->border ? '|' : '';
+ $padding = $this->padding ? ' ' : '';
+ foreach ($rows as $y=>$r) {
+ $output .= $header;
+ for ($x = 0, $k = 0; $k < $heights[$y]; $k++) {
+ $output .= $border;
+ foreach ($r as $x=>$cell) {
+ $content = (isset($contents[$y][$x][$k]))
+ ? $contents[$y][$x][$k] : "";
+ $output .= $padding.mb_str_pad($content, $cell->width).$padding.$border;
+ $x += $cell->cols;
+ }
+ $output .= "\n";
+ }
+ }
+ $output .= $header;
+ return new PreFormattedText($output);
+ }
+}
+
+class HtmlTableCell extends HtmlBlockElement {
+ function __construct($node, $parent) {
+ parent::__construct($node, $parent);
+ $this->cols = $node->getAttribute('colspan');
+ $this->rows = $node->getAttribute('rowspan');
+
+ if (!$this->cols) $this->cols = 1;
+ if (!$this->rows) $this->rows = 1;
+
+ // Upgrade old attributes
+ if ($A = $this->node->getAttribute('align'))
+ $this->setStyle('text-align', $A);
+ }
+
+ function render($width, $options) {
+ return parent::render($width, $options);
+ }
+
+ function getWeight() {
+ return parent::getWeight() / ($this->cols * $this->rows);
+ }
+
+ function getMinWidth() {
+ return max(4, parent::getMinWidth() / $this->cols);
+ }
+}
+
+class HtmlStylesheet {
+ function __construct($node=null) {
+ if (!$node) return;
+
+ // We really only care about tags and classes
+ $rules = array();
+ preg_match_all('/([^{]+)\{((\s*[\w-]+:\s*[^;}]+;?)+)\s*\}/m',
+ $node->textContent, $rules, PREG_SET_ORDER);
+
+ $this->rules = array();
+ $m = array();
+ foreach ($rules as $r) {
+ list(,$selector,$props) = $r;
+ $props = new CssStyleRules($props);
+ foreach (explode(',', $selector) as $s) {
+ // Only allow tag and class selectors
+ if (preg_match('/^([\w-]+)?(\.[\w_-]+)?$/m', trim($s), $m))
+ // XXX: Technically, a selector could be listed more
+ // than once, and the rules should be aggregated.
+ $this->rules[$m[0]] = &$props;
+ }
+ unset($props);
+ }
+ }
+
+ function get($tag, $classes=array()) {
+ // Honor CSS specificity
+ foreach ($this->rules as $selector=>$rules)
+ foreach ($classes as $c)
+ if ($selector == "$tag.$c" || $selector == ".$c")
+ return $rules;
+ foreach ($this->rules as $selector=>$rules)
+ if ($selector == $tag)
+ return $rules;
+ }
+
+ static function fromArray($selectors) {
+ $self = new HtmlStylesheet();
+ foreach ($selectors as $s=>$rules)
+ $self->rules[$s] = CssStyleRules::fromArray($rules);
+ return $self;
+ }
+}
+
+class CssStyleRules {
+ var $rules = array();
+
+ static $compact_rules = array(
+ 'padding' => 1,
+ );
+
+ function __construct($rules='') {
+ if ($rules)
+ $this->add($rules);
+ }
+
+ function add($rules) {
+ foreach (explode(';', $rules) as $r) {
+ if (strpos($r, ':') === false)
+ continue;
+ list($prop, $val) = explode(':', $r);
+ $prop = trim($prop);
+ // TODO: Explode compact rules, like 'border', 'margin', etc.
+ if (isset(self::$compact_rules[$prop]))
+ $this->expand($prop, trim($val));
+ else
+ $this->rules[$prop] = trim($val);
+ }
+ }
+
+ function expand($prop, $val) {
+ switch (strtolower($prop)) {
+ case 'padding':
+ @list($a, $b, $c, $d) = preg_split('/\s+/', $val);
+ if (!isset($b)) {
+ $d = $c = $b = $a;
+ }
+ elseif (!isset($c)) {
+ $d = $b;
+ $c = $a;
+ }
+ elseif (!isset($d)) {
+ $d = $b;
+ }
+ $this->rules['padding-top'] = $a;
+ $this->styles['padding-right'] = $b;
+ $this->rules['padding-bottom'] = $c;
+ $this->rules['padding-left'] = $d;
+
+ }
+ }
+
+ function has($prop) {
+ return isset($this->rules[$prop]);
+ }
+
+ function get($prop, $default=0.0) {
+ if (!isset($this->rules[$prop]))
+ return $default;
+ else
+ $val = $this->rules[$prop];
+
+ if (is_string($val)) {
+ switch (true) {
+ case is_float($default):
+ $simple = floatval($val);
+ $units = substr($val, -2);
+ // Cache the conversion
+ $val = $this->rules[$prop] = self::convert($simple, $units);
+ }
+ }
+ return $val;
+ }
+
+ function set($prop, $value) {
+ $this->rules[$prop] = $value;
+ }
+
+ static function convert($value, $units, $max=0) {
+ if ($value === null)
+ return $value;
+
+ // Converts common CSS units to units of characters
+ switch ($units) {
+ default:
+ if (substr($units, -1) == '%') {
+ return ((float) $value) * 0.01 * $max;
+ }
+ case 'px':
+ // 600px =~ 60chars
+ return (int) ($value / 10.0);
+ case 'pt':
+ return $value / 12.0;
+ case 'em':
+ return $value;
+ }
+ }
+
+ static function fromArray($rules) {
+ $self = new CssStyleRules('');
+ $self->rules = &$rules;
+ return $self;
+ }
+}
+
+class PreFormattedText {
+ function __construct($text) {
+ $this->text = $text;
+ }
+ function __toString() {
+ return $this->text;
+ }
+}
+
+if (!function_exists('mb_strwidth')) {
+ function mb_strwidth($string) {
+ return mb_strlen($string);
+ }
+}
+function mb_strwidth2($string) {
+ $junk = array();
+ return mb_strwidth($string) - preg_match_all("/\p{M}/u", $string, $junk);
+}
+
+// Thanks http://www.php.net/manual/en/function.wordwrap.php#107570
+// @see http://www.tads.org/t3doc/doc/htmltads/linebrk.htm
+// for some more line breaking characters and rules
+// XXX: This does not wrap Chinese characters well
+// @see http://xml.ascc.net/en/utf-8/faq/zhl10n-faq-xsl.html#qb1
+// for some more rules concerning Chinese chars
+function mb_wordwrap($string, $width=75, $break="\n", $cut=false) {
+ if ($cut) {
+ // Match anything 1 to $width chars long followed by whitespace or EOS,
+ // otherwise match anything $width chars long
+ $search = '/((?>[^\n\p{M}]\p{M}*){1,'.$width.'})(?:[ \n]|$|(\p{Ps}))|((?>[^\n\p{M}]\p{M}*){'
+ .$width.'})/uS'; # ) List of rules for the filter
+#
+# Fields for FilterRule:
+# isactive - (bool:0|1) true if the rule should be considered
+# what - (enum) field to check
+# how - (enum) how to check for
+# val - (string) search value
+#
+# Fields for FilterAction
+# type - type of filter action
+#
+---
+- isactive: 1
+ execorder: 99
+ match_all_rules: 0
+ email_id: 0
+ target: Email #notrans
+ name: SYSTEM BAN LIST #notrans
+ notes: |
+ Internal list for email banning. Do not remove
+
+ rules:
+ - isactive: 1
+ what: email #notrans
+ how: equal #notrans
+ val: test@example.com #notrans
+ actions:
+ - sort: 1
+ type: reject #notrans
diff --git a/www/include/i18n/en_US/form.yaml b/www/include/i18n/en_US/form.yaml
new file mode 100644
index 0000000..7f0a7b2
--- /dev/null
+++ b/www/include/i18n/en_US/form.yaml
@@ -0,0 +1,205 @@
+#
+# Default (dynamic) form configuration. This data is used as the initial,
+# minimal data for dynamic forms that ships with the system.
+#
+# Fields:
+# id: Used only if associated with a help topic
+# title: Bold section title of the form
+# instructions: Title deck, detailed instructions on entering form data
+# notes: Notes for the form, shown under the fields
+# flags:
+# 0x0001 If the form can be removed from the system
+# fields: List of fields for the form
+# type: Field type (short name) (eg. 'text', 'memo', 'phone', ...)
+# label: Field label shown to the user
+# name: Name used with the data internally. This is especially
+# useful for page and email templates, where %{ ticket. }
+# will be used to retrieve the data from the field.
+# hint: Help text shown with the field
+# flags: Bit mask for settings & options
+# # From class DynamicFormField
+# const FLAG_MASK_CHANGE = 0x0010; # Type cannot change
+# const FLAG_MASK_DELETE = 0x0020; # Cannot be deleted
+# const FLAG_MASK_EDIT = 0x0040; # Data cannot be edited
+# const FLAG_MASK_DISABLE = 0x0080; # Field cannot be disabled
+# const FLAG_MASK_REQUIRE = 0x10000; # Requirement cannot be changed
+# const FLAG_MASK_VIEW = 0x20000; # View settings cannot be changed
+# const FLAG_MASK_NAME = 0x40000; # Name cannot be changed
+#
+# configuration: Field-specific configuration
+# size: (text) width of the field
+# length: (text) maximum size of the data in the field
+# cols: (memo) width of the textarea
+# rows: (memo) height of the textarea
+#
+---
+- id: 1
+ type: U # notrans
+ title: Contact Information
+ flags: 0
+ fields:
+ - type: text # notrans
+ name: email # notrans
+ label: Email Address
+ sort: 1
+ flags: 0x777B3
+ configuration:
+ size: 40
+ length: 64
+ validator: email # notrans
+ - type: text # notrans
+ name: name # notrans
+ label: Full Name
+ sort: 2
+ flags: 0x777B3
+ configuration:
+ size: 40
+ length: 64
+ - type: phone # notrans
+ name: phone # notrans
+ label: Phone Number
+ sort: 3
+ flags: 0x3301
+ - type: memo # notrans
+ name: notes
+ label: Internal Notes
+ sort: 4
+ flags: 0x3001
+ configuration:
+ rows: 4
+ cols: 40
+- id: 2
+ type: T # notrans
+ title: Ticket Details
+ instructions: Please Describe Your Issue
+ notes: |
+ This form will be attached to every ticket, regardless of its source.
+ You can add any fields to this form and they will be available to all
+ tickets, and will be searchable with advanced search and filterable.
+ flags: 0
+ fields:
+ - id: 20
+ type: text # notrans
+ name: subject # notrans
+ label: Issue Summary
+ sort: 1
+ flags: 0x77731
+ configuration:
+ size: 40
+ length: 50
+ - id: 21
+ type: thread # notrans
+ name: message # notrans
+ label: Issue Details
+ hint: Details on the reason(s) for opening the ticket.
+ sort: 2
+ flags: 0x75523
+ - id: 22
+ type: priority # notrans
+ name: priority # notrans
+ label: Priority Level
+ flags: 0x430B1
+ sort: 3
+- type: C # notrans
+ title: Company Information
+ instructions: Details available in email templates
+ flags: 0
+ fields:
+ - type: text # notrans
+ name: name # notrans
+ label: Company Name
+ sort: 1
+ flags: 0x471B1
+ configuration:
+ size: 40
+ length: 64
+ - type: text # notrans
+ name: website # notrans
+ label: Website
+ sort: 2
+ flags: 0x43111
+ configuration:
+ size: 40
+ length: 64
+ - type: phone # notrans
+ name: phone # notrans
+ label: Phone Number
+ sort: 3
+ flags: 0x43111
+ configuration:
+ ext: false
+ - type: memo # notrans
+ name: address
+ label: Address
+ sort: 4
+ flags: 0x3101
+ configuration:
+ rows: 2
+ cols: 40
+ html: false
+ length: 100
+- type: O # notrans
+ title: Organization Information
+ instructions: Details on user organization
+ flags: 0
+ fields:
+ - type: text # notrans
+ name: name # notrans
+ label: Name
+ sort: 1
+ flags: 0x777B3
+ configuration:
+ size: 40
+ length: 64
+ - type: memo
+ name: address
+ label: Address
+ sort: 2
+ flags: 0x3301
+ configuration:
+ rows: 2
+ cols: 40
+ length: 100
+ html: false
+ - type: phone
+ name: phone
+ label: Phone
+ sort: 3
+ flags: 0x3301
+ - type: text
+ name: website
+ label: Website
+ sort: 4
+ flags: 0x3301
+ configuration:
+ size: 40
+ length: 0
+ - type: memo # notrans
+ name: notes
+ label: Internal Notes
+ sort: 5
+ flags: 0x3001
+ configuration:
+ rows: 4
+ cols: 40
+- type: A # notrans
+ title: Task Details
+ instructions: Please Describe The Issue
+ notes: |
+ This form is used to create a task.
+ flags: 0
+ fields:
+ - type: text # notrans
+ name: title # notrans
+ flags: 0x770B1
+ sort: 1
+ label: Title
+ configuration:
+ size: 40
+ length: 50
+ - type: thread # notrans
+ name: description # notrans
+ flags: 0x650F3
+ sort: 2
+ label: Description
+ hint: Details on the reason(s) for creating the task.
diff --git a/www/include/i18n/en_US/group.yaml b/www/include/i18n/en_US/group.yaml
new file mode 100644
index 0000000..c48f1c2
--- /dev/null
+++ b/www/include/i18n/en_US/group.yaml
@@ -0,0 +1,43 @@
+#
+# Default groups defined for the system
+#
+# Fields:
+# id - Primary id for the group
+# role_id - (int) default role for the group
+# flags - (bit mask) group flags
+# name - (string) descriptive name for the group
+# notes - (string) administrative notes (viewable internally only)
+# depts: (list>) id's of the departments to which the group
+# should initially have access
+#
+# NOTE: ------------------------------------
+# The very first group listed in this document will be the primary group of
+# the initial staff member -- the administrator.
+---
+- id: 1
+ role_id: 1
+ flags: 1
+ name: Lion Tamers
+ notes: |
+ System overlords. These folks (initially) have full control to all the
+ departments they have access to.
+
+ depts: [1, 2, 3]
+
+- id: 2
+ role_id: 2
+ flags: 1
+ name: Elephant Walkers
+ notes: |
+ Inhabitants of the ivory tower
+
+ depts: [1, 2, 3]
+
+- id: 3
+ role_id: 2
+ flags: 1
+ name: Flea Trainers
+ notes: |
+ Lowly staff members
+
+ depts: [1, 2, 3]
diff --git a/www/include/i18n/en_US/help/tips/dashboard.audit_logs.yaml b/www/include/i18n/en_US/help/tips/dashboard.audit_logs.yaml
new file mode 100644
index 0000000..8da84d6
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/dashboard.audit_logs.yaml
@@ -0,0 +1,38 @@
+#
+# This is popup help messages for the Admin Panel -> Dashboard -> Audit Logs page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+audit_logs:
+ title: Audit Logs
+ content: >
+ This is where you will find any activities written to the audit log while the Audit plugin is enabled
+ links:
+ - title: Configure Plugins
+ href: /scp/plugins.php
+
+date_span:
+ title: Date Span
+ content: >
+ Select the date range that you would like to view in the Audit Logs.
+
+type:
+ title: Type
+ content: >
+ Choose which object type you would like to see Audits for.
+
+events:
+ title: Events
+ content: >
+ Narrow down results based on a specific Event.
diff --git a/www/include/i18n/en_US/help/tips/dashboard.dashboard.yaml b/www/include/i18n/en_US/help/tips/dashboard.dashboard.yaml
new file mode 100644
index 0000000..1c82c88
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/dashboard.dashboard.yaml
@@ -0,0 +1,91 @@
+#
+# This is popup help messages for the Staff Panel -> Dashboard -> Dashboard
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+ticket_activity:
+ title: Ticket Activity
+ content: >
+ Select a date range to cause both the graph and the table (cf. Statistics) below to focus on any
+ corresponding data for those dates. The graph below will always reflect a
+ broad overview of the whole system’s data (i.e., population). However, you
+ may navigate through the Statistics
+ table below to focus on a narrower subject of interest (e.g.,
+ Department, Topics, or Staff). Additionally, you may export any data
+ currently displayed in the Statistics
+ table.
+
+report_timeframe:
+ title: Report timeframe
+ content: >
+ Choose a start date for the desired data sample using the date picker.
+ Then, choose the length of time from that date to
+ define the end date for your data sample.
+
+statistics:
+ title: Statistics
+ content: >
+ Navigate to the subject of interest by clicking on the appropriate tab in
+ order to view the specific sample of data. Within the table, the circles
+ represent the size of the nominal data. Therefore, the larger the number in
+ a particular cell, the larger the adjacent circle will be.
+
+opened:
+ title: Opened
+ content: >
+ Tickets that were originally opened having the Department or Help Topic
+ on the ticket, or the number of tickets an Agent has opened on behalf of a
+ User.
+
+assigned:
+ title: Assigned
+ content: >
+ Tickets that have been assigned to either an Agent or a Team. The number
+ reflects tickets that are manually assigned to agents or teams, claimed
+ tickets, and tickets assigned from ticket filters/other auto-assignment rules.
+
+overdue:
+ title: Overdue
+ content: >
+ Tickets that have been marked ‘Overdue’ by the system. Tickets are marked
+ Overdue when they have violated the SLA Plan to which they belonged, causing
+ them to have a status of ‘Open’ past their Due Date.
+
+closed:
+ title: Closed
+ content: >
+ The number of Tickets that are currently in the Closed status.
+
+reopened:
+ title: Reopened
+ content: >
+ The total number of times a ticket was Reopened. Tickets
+ are reopened whenever their status is changed from Closed to Open.
+
+deleted:
+ title: Deleted
+ content: >
+ The amount of tickets that have been deleted.
+
+service_time:
+ title: Service Time
+ content: >
+ Refers to the duration of time that begins at the opening of a ticket and ends
+ when the ticket is closed. The Service Time column measures the average Service
+ Time per ticket, in hours.
+
+response_time:
+ title: Response Time
+ content: >
+ Shows an average response time by an Agent, in hours, to ticket correspondence.
diff --git a/www/include/i18n/en_US/help/tips/dashboard.my_profile.yaml b/www/include/i18n/en_US/help/tips/dashboard.my_profile.yaml
new file mode 100644
index 0000000..f13d206
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/dashboard.my_profile.yaml
@@ -0,0 +1,101 @@
+#
+# This is popup help messages for the Staff Panel -> Dashboard -> My Profile
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+contact_information:
+ title: Contact Information
+ content: >
+
+username:
+ title: Username
+ content: >
+ Only those Agents with Admin status may change a username. If you are an
+ Agent with Admin privileges, you may accomplish this by selecting an Agent
+ to edit from the Staff Members table.
+ links:
+ - title: Change a username as an Administrator
+ href: /scp/staff.php
+
+config2fa:
+ title: Two Factor Authentication
+ content: >
+ Two Factor Authentication adds an extra layer of security
+ when logging into the helpdesk. Once you correctly submit
+ your username and password, you will need to enter a token
+ to finish logging into the helpdesk.
+
+time_zone:
+ title: Time Zone
+ content: >
+
+daylight_saving:
+ title: Daylight Saving
+ content: >
+
+maximum_page_size:
+ title: Maximum Page Size
+ content: >
+
+auto_refresh_rate:
+ title: Auto Refresh Rate
+ content: >
+
+default_signature:
+ title: Default Signature
+ content: >
+
+default_paper_size:
+ title: Default Paper Size
+ content: >
+
+show_assigned_tickets:
+ title: Show Assigned Tickets
+ content: >
+
+ Enabling this option will override the global setting to hide
+ assigned tickets from the open queues.
+
+
+
+ This setting is only available when assigned tickets are excluded
+ globally.
+
+
+password:
+ title: Password
+ content: >
+
+current_password:
+ title: Current Password
+ content: >
+
+new_password:
+ title: New Password
+ content: >
+
+confirm_new_password:
+ title: Confirm New Password
+ content: >
+
+signature:
+ title: Signature
+ content: >
+ Create an optional Signature
+ that perhaps appears at the end of your Ticket Responses. Whether this
+ Signature appears, or not, depends
+ on the Email Template that will be
+ used in a Ticket Response.
+ links:
+ - title: Create Emails Templates in the Admin Panel
+ href: /scp/templates.php
diff --git a/www/include/i18n/en_US/help/tips/dashboard.staff_directory.yaml b/www/include/i18n/en_US/help/tips/dashboard.staff_directory.yaml
new file mode 100644
index 0000000..616c421
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/dashboard.staff_directory.yaml
@@ -0,0 +1,28 @@
+#
+# This is popup help messages for the Staff Panel -> Dashboard -> Staff Directory
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+staff_members:
+ title: Staff Members
+ content: >
+ The following table displays the results of the filter above it. If no filter
+ settings are chosen, then all Staff Members
+ are displayed, and broken up by pages. See the pages section
+ below to navigate through more results.
+
+apply_filtering_criteria:
+ title: Apply Filtering Criteria
+ content: >
+ Choose a Department that is relevant to your
+ current interests. You may also perform a search for a specific Agent.
diff --git a/www/include/i18n/en_US/help/tips/dashboard.system_logs.yaml b/www/include/i18n/en_US/help/tips/dashboard.system_logs.yaml
new file mode 100644
index 0000000..cfafe4f
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/dashboard.system_logs.yaml
@@ -0,0 +1,75 @@
+#
+# This is popup help messages for the Admin Panel -> Dashboard -> System Logs page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+system_logs:
+ title: System Logs
+ content: >
+ This is where you will find any troubleshooting related logging
+ activity (e.g., Errors, Warnings, or Bugs).
+ links:
+ - title: Customize what type of activity is logged by changing the Default Log Level.
+ href: /scp/settings.php?t=system
+
+date_span:
+ title: Date Span
+ content: >
+ Select your calendar range that you would like to view in the System Logs.
+
+type:
+ title: Type
+ content: >
+ Choose an option to narrow your focus on a specific type of activity.
+ Debug represents the least
+ severity, and Error represents
+ the greatest severity.
+
+showing_logs:
+ title: Showing…Logs
+ content: >
+ Be sure to check the Page section below
+ to make sure that there are not more pages displaying available System
+ Logs.
+
+log_title:
+ title: Log Title
+ content: >
+ Click the Log Title table header if
+ you would like to sort the results according to the Log Title.
+
+log_type:
+ title: Log Type
+ content: >
+ Click the Log Type table header if you
+ would like to sort the results according to the Log Type.
+
+log_date:
+ title: Log Date
+ content: >
+ This is the date the log was generated by the software. If you would like
+ to sort the results according to the Log
+ Date, simply click the Log
+ Date table header. (Use the Date Span form above to narrow your calendar
+ span of logs.)
+
+ip_address:
+ title: IP Address
+ content: >
+ This refers to the IP Address of either the agent or client that
+ was using osTicket at the time the log was generated.
diff --git a/www/include/i18n/en_US/help/tips/emails.banlist.yaml b/www/include/i18n/en_US/help/tips/emails.banlist.yaml
new file mode 100644
index 0000000..6443856
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/emails.banlist.yaml
@@ -0,0 +1,20 @@
+#
+# This is popup help messages for the Admin Panel -> Emails -> Banlist
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+ban_list:
+ title: Banned Email Addresses
+ content: >
+ Emails received from banned email addresses listed in the ban list
+ will be automatically rejected.
diff --git a/www/include/i18n/en_US/help/tips/emails.diagnostic.yaml b/www/include/i18n/en_US/help/tips/emails.diagnostic.yaml
new file mode 100644
index 0000000..24c8725
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/emails.diagnostic.yaml
@@ -0,0 +1,39 @@
+#
+# This is popup help messages for the Admin Panel -> Emails -> Diagnostics
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+test_outgoing_email:
+ title: Test Outgoing Email
+ content: >
+ The email’s delivery depends on your server settings (php.ini) and/or SMTP
+ configuration.
+ links:
+ - title: Select an email to configure SMTP (Outgoing) Settings
+ href: /scp/emails.php
+
+from:
+ title: From
+ content: >
+
+to:
+ title: To
+ content: >
+
+subject:
+ title: Subject
+ content: >
+
+message:
+ title: Message
+ content: >
diff --git a/www/include/i18n/en_US/help/tips/emails.email.yaml b/www/include/i18n/en_US/help/tips/emails.email.yaml
new file mode 100644
index 0000000..82f0364
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/emails.email.yaml
@@ -0,0 +1,163 @@
+#
+# This is popup help messages for the Admin Panel -> Emails -> Add New Email
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+new_ticket_help_topic:
+ title: New Ticket Help Topic
+ content: >
+ Choose a Help Topic to be
+ automatically associated with tickets created via this Email
+ Address.
+
+ Forms associated with the Help Topic will be added to the ticket,
+ but will not have any data.
+ links:
+ - title: Manage Help Topics
+ href: /scp/helptopics.php
+
+new_ticket_priority:
+ title: New Ticket Priority
+ content: >
+ Choose the priority for new
+ tickets created via this Email Address.
+
+new_ticket_department:
+ title: New Ticket Department
+ content: >
+ Choose the Department to which
+ new tickets created via this Email Address will be routed.
+ links:
+ - title: Manage Departments
+ href: /scp/departments.php
+
+auto_response:
+ title: New Ticket Auto-Response
+ content: >
+ You may disable the Auto-Response sent to the User when a new ticket
+ is created via this Email Address.
+
+userid:
+ title: Username
+ content: >
+ The Username is utilized in the email authentication process. We accept
+ single address strings, shared mailbox strings, servername + username
+ strings, and a combination of all.
+ links:
+ - title: More Information
+ href: https://docs.osticket.com/en/latest/Admin/Emails/Emails.html
+
+username:
+ title: Username
+ content: >
+
+password:
+ title: Password
+ content: >
+
+login_information:
+ title: Email Login Information
+ content: >
+ The Username and Password are required to fetch email
+ from IMAP / POP mail boxes as well as to send email through SMTP.
+
+mail_account:
+ title: Fetching Email
+ content: >
+ Fetch emails from a remote IMAP or POP mail box and convert them
+ to tickets in your help desk.
+ links:
+ - title: Manage Email Polling & AutoCron settings.
+ href: /scp/settings.php?t=emails
+
+host_and_port:
+ title: Remote Host
+ content: >
+ Enter the hostname and port number for your mail server. This
+ may be available in the documentation for your hosting account or
+ from your email administrator.
+
+mail_folder:
+ title: Mail Folder
+ content: >
+ Enter the Folder name that you
+ wish to fetch mail from. If left emtpy the system will fetch from the
+ INBOX.
+
+protocol:
+ title: Mail Box Protocol
+ content: >
+ Select the mail box protocol supported by your remote mail server.
+ IMAP is recommended and SSL is encouraged if at all possible.
+
+smtp_auth_creds:
+ title: Use Separate Authentication
+ content: >
+ If this setting is Disabled the system will use the same Authentication
+ Credentials as entered above. If you require separate credentials for
+ Fetching and SMTP, you can Enable this setting and enter your SMTP
+ Authentication Credentails.
+
+fetch_frequency:
+ title: Fetch Frequency
+ content: >
+ Enter how often, in minutes, the system will poll the mail box.
+
+ This will define the average delay in receiving an Auto-Response
+ after a User sends an email to this mail box.
+
+emails_per_fetch:
+ title: Emails Per Fetch
+ content: >
+ Enter the number of emails processed at one time.
+
+fetched_emails:
+ title: Fetched Emails
+ content: >
+ Decide what to do with processed emails:
+
+ Move to Folder:
+ This will backup your email from the INBOX to a
+ folder you specify. If the folder does not yet exist on the server,
+ the system will attempt to automatically create it.
+ (Recommended)
+
+ Delete Emails: This will delete
+ your email from the INBOX once it is processed.
+
+ Do Nothing: This will leave emails
+ in your INBOX. The system will record the
+ message ids of your email and attempt not to refetch it. However,
+ this option may cause duplicate tickets to be created.
+ (Not Recommended)
+
+smtp_settings:
+ title: SMTP Settings
+ content: >
+ Email sent from the help desk can be sent through an SMTP server.
+ This is recommended, if possible, as it will increase the likelyhood
+ of email delivery and will make the emails less likely to be marked
+ as spam.
+
+header_spoofing:
+ title: Allow Header Spoofing
+ content: >
+ Enable this to allow sending emails via this mail box from an address
+ other that the one given in the Email
+ Address setting above.
+
+ This advanced setting is generally used when sending mail from
+ aliases of this mail box.
+
diff --git a/www/include/i18n/en_US/help/tips/emails.template.yaml b/www/include/i18n/en_US/help/tips/emails.template.yaml
new file mode 100644
index 0000000..db5bdab
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/emails.template.yaml
@@ -0,0 +1,45 @@
+#
+# This is popup help messages for the Admin Panel -> Emails -> Templates
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+email_templates:
+ title: Email Templates
+ content: >
+ Email Template Sets are used to send Auto-Responses and Alerts for
+ various actions that can take place during a Ticket’s lifetime.
+
+
+template_to_clone:
+ title: Template to Clone
+ content: >
+ Choose a Template Set to clone or simply start with the stock email
+ templates.
+
+language:
+ title: Language
+ content: >
+ Select desired language for the stockEmail
+ Template Set. Language packs are available on osTicket.com.
+ links:
+ - title: osTicket Language Packs
+ href: https://osticket.com/download
+
+status:
+ title: Status
+ content: >
+ Enabled Template Sets are
+ available to be associated with Departments and set to the system
+ default. Template Sets currently in-use cannot be Disabled.
diff --git a/www/include/i18n/en_US/help/tips/forms.yaml b/www/include/i18n/en_US/help/tips/forms.yaml
new file mode 100644
index 0000000..2731df4
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/forms.yaml
@@ -0,0 +1,95 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> System page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+form_title:
+ title: Form Headline
+ content: >
+ This title text is shown in a gray box above the form fields
+
+form_instructions:
+ title: Form Instructions
+ content: >
+ You can add extra instructions which will help guide the user into
+ the context of the form fields and possibly highlight required data.
+
+field_sort:
+ title: Field Display Position
+ content: >
+ Click on the up-and-down arrow icon and drag the field row to sort
+ within this form. Sorting preference does not take effect until the
+ form is saved.
+
+field_label:
+ title: Field Label
+ content: >
+ This label is shown as the prompt for this field. Typically, a
+ short-answer field would be rendered like this one:
+ Label:
+
+field_type:
+ title: Field Content Type
+ content: >
+ This is used to define the type of input expected from the user. You
+ can select from short and long answer, phone number, date and time,
+ checkbox, drop-down list, or a custom list selection.
+ links:
+ - title: Custom Lists
+ href: /scp/lists.php
+
+field_visibility:
+ title: Field Visibility
+ content: >
+ Choose a visibility and requirement option for this field.
+
+
Setting
+
Result
+
Optional
+
Agents and EndUsers can see the field, but neither is required to answer.
+
Required
+
Agents and EndUsers can see the field, and both are required to answer
+
Required for EndUsers
+
Agents and EndUsers can see the field, only EndUsers are required to answer
+
Required for Agents
+
Agents and EndUsers can see the field, only Agents are required to answer
+
Internal, Optional
+
Only Agents can see the field, but no answer is required.
+
Internal, Required
+
Only Agents can see the field, and an answer is required.
+
For EndUsers Only
+
Only EndUsers can see the field, and an answer is required.
+
+
+field_variable:
+ title: Field Automation
+ content: >
+ The field data will be available to email and page templates via the
+ name used in this column. For instance, fields on the common ticket
+ form are available via %{ticket.variable}, where
+ variable is the name used in this column.
+
+ Company information is available via
+ %{company.variable} and user information is available
+ via %{ticket.user.variable}
+
+field_delete:
+ title: Remove this Field
+ content: >
+ Check and save the form to remove a field from this form.
+
+ Deleting a field does not remove previously entered data for the
+ field on completed forms. For instance, if a previously submitted
+ ticket has data for a field, deleting the field from this form will
+ not remove the data on the ticket.
diff --git a/www/include/i18n/en_US/help/tips/install.yaml b/www/include/i18n/en_US/help/tips/install.yaml
new file mode 100644
index 0000000..00cc1fd
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/install.yaml
@@ -0,0 +1,95 @@
+#
+# Help popup items for the installer
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+helpdesk_name:
+ title: Helpdesk Name
+ content: |
+
The name of your support system e.g [Company Name] Support
Default email address e.g support@yourcompany.com - you can add
+ more later!
+
+default_lang:
+ title: Default System Language
+ content: |
+
Initial data for this language will be installed into the
+ database. For instance email templates and default system pages will
+ be installed for this language.
+ links:
+ - title: osTicket Language Packs
+ href: https://osticket.com/download/#ostLang
+
+first_name:
+ title: First Name
+ content: |
+
Admin's first name
+
+last_name:
+ title: Last Name
+ content: |
+
Admin's last name
+
+email:
+ title: Email Address
+ content: |
+
Admin's personal email address. Must be different from system's
+ default email.
+
+username:
+ title: Username
+ content: |
+
Admin's login name. Must be at least three (3) characters.
+
+password:
+ title: Password
+ content: |
+
Admin's password. Must be five (5) characters or more.
osTicket requires table prefix in order to avoid possible table
+ conflicts in a shared database.
+
+db_host:
+ title: MySQL Hostname
+ content: |
+
+ Most hosts use 'localhost' for local database hostname. Check with
+ your host if localhost fails.
+
+
+ Default port set in php.ini is assumed. A non-standard port number
+ can be specified as hostname:port
+
+
+db_schema:
+ title: MySQL Database
+ content: |
+
Name of the database osTicket will use.
+
+db_user:
+ title: MySQL Username
+ content: |
+
The MySQL user must have full rights to the database.
+
+db_password:
+ title: MySQL Password
+ content: |
+
MySQL password associated with above user.
diff --git a/www/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml b/www/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml
new file mode 100644
index 0000000..0779b10
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml
@@ -0,0 +1,32 @@
+#
+# This is popup help messages for the Staff Panel -> Knowledgebase -> Canned Responses -> Add New Response
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+canned_response:
+ title: Canned Response
+ content: >
+ Create a Canned Response that can
+ be included in a ticket response. It can also be used as a Ticket Auto-Response setup by a Ticket Filter.
+ links:
+ - title: Setup a Ticket Filter
+ href: /scp/filters.php
+
+canned_attachments:
+ title: Canned Attachments
+ content: >
+ Attach a file that you would like to be automatically included
+ in the ticket response that utilizes the new
+ Canned Response.
diff --git a/www/include/i18n/en_US/help/tips/knowledgebase.category.yaml b/www/include/i18n/en_US/help/tips/knowledgebase.category.yaml
new file mode 100644
index 0000000..a1bbcbc
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/knowledgebase.category.yaml
@@ -0,0 +1,15 @@
+#
+# This is popup help messages for the Staff Panel -> Knowledgebase -> Add New Category -> FAQ Category (Form)
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
diff --git a/www/include/i18n/en_US/help/tips/knowledgebase.faq.yaml b/www/include/i18n/en_US/help/tips/knowledgebase.faq.yaml
new file mode 100644
index 0000000..6d3e407
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/knowledgebase.faq.yaml
@@ -0,0 +1,23 @@
+#
+# This is popup help messages for the Staff Panel -> Knowledgebase -> FAQ
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+listing_type:
+ title: Listing Type
+ content: >
+ Choose Public (publish) if you would like this
+ FAQ to be published on public knowledgebase if the parent category is public.
+ links:
+ - title: Enable the Public Knowledgebase for the Client Portal
+ href: /scp/settings.php?t=kb
diff --git a/www/include/i18n/en_US/help/tips/manage.api_keys.yaml b/www/include/i18n/en_US/help/tips/manage.api_keys.yaml
new file mode 100644
index 0000000..f7bdbda
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.api_keys.yaml
@@ -0,0 +1,32 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> API Keys
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+
+api_key:
+ title: API Key
+ content: >
+ API keys are used to authenticate clients submitting new tickets via
+ the Application Programming Interface (API). API keys are used
+ instead of passwords. Since API keys may be sent unencrypted, they
+ are linked to each client's network IP address.
+ links:
+ - title: osTicket API Documentation
+ href: https://github.com/osTicket/osTicket-1.8/blob/develop/setup/doc/api.md
+
+ip_addr:
+ title: IP Address
+ content: >
+ Client's network IP address. Each unique client IP address will
+ require separate API keys
diff --git a/www/include/i18n/en_US/help/tips/manage.custom_list.yaml b/www/include/i18n/en_US/help/tips/manage.custom_list.yaml
new file mode 100644
index 0000000..4a9f7f7
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.custom_list.yaml
@@ -0,0 +1,48 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> Add New Custom List
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+custom_lists:
+ title: Custom Lists
+ content: >
+ Your custom lists will permit you to create dropdown boxes with predefined options from which a Client can select in your Custom Forms. If you would like to use this custom list as a target in a Ticket Filter, be sure to add this list to your Ticket Details form.
+
+name:
+ title: Name
+ content: >
+
+plural_name:
+ title: Plural Name
+ content: >
+
+sort_order:
+ title: Sort Order
+ content: >
+
+list_s_initial_items:
+ title: List’s Initial Items
+ content: >
+
+value:
+ title: Value
+ content: >
+
+extra:
+ title: Extra
+ content: >
+ Abbreviations and such. If you happen to use internal codes for the
+ items in this list, those codes and abbreviations can be entered in
+ this column. If the custom list is rendered as a
+ TypeAhead, these abbreviations can be used to search for the
+ custom list items.
diff --git a/www/include/i18n/en_US/help/tips/manage.filter.yaml b/www/include/i18n/en_US/help/tips/manage.filter.yaml
new file mode 100644
index 0000000..4d183de
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.filter.yaml
@@ -0,0 +1,144 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> Filter
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+
+execution_order:
+ title: Execution Order
+ content: >
+ Enter a number that controls the priority of the filter. The
+ lower the number, the higher the priority this filter will have in being
+ executed over against another filter that might have higher order of execution.
+
+ If you want this filter to be the last filter applied on a match, enable Stop Processing Further On Match.
+
+target_channel:
+ title: Channel
+ content: >
+ Choose the target Channel for your ticket Filter. The Channel is the source through which the ticket arrived into the system.
+
+ For example, if you choose Web Forms,
+ you are saying that you want to apply the ticket Filter to those tickets that
+ originated from the Client Portal's webform.
+
+rules_matching_criteria:
+ title: Rules Matching Criteria
+ content: >
+ Choose how elastic you want the matches of your ticket Filter to be. If you would like the
+ ticket Filter to
+ match any of the rules, and then stop, choose Match Any. If you would like all
+ rules of the ticket
+ Filter to be matched, choose Match
+ All.
+
+reject_ticket:
+ title: Reject Ticket
+ content: >
+ If this is enabled, further processing is stopped and all other choices of action below will be ignored on match.
+
+reply_to_email:
+ title: Reply-To Email
+ content: >
+ Enable this if you want your Help Desk to honor a User's email
+ application's Reply To header.
+ This field is only relevant if the Channel above includes Email.
+
+ticket_auto_response:
+ title: Disable Ticket Auto-Response
+ content: >
+ Note: This will override any Department or Autoresponder settings.
+
+canned_response:
+ title: Canned Auto-Reply
+ content: >
+ Choose a Canned Response you
+ want to be emailed to the user on Ticket Filter match. The New Ticket Auto-Reply template used
+ depends on what template set is
+ assigned as default, or to a matching ticket's Department.
+ links:
+ - title: Manage Canned Responses
+ href: /scp/canned.php
+ - title: Manage Template Sets
+ href: /scp/templates.php
+ - title: New Ticket Auto-Reply Template
+ href: /scp/templates.php?id=2&a=manage
+
+department:
+ title: Department
+ content: >
+ Choose what Department you want the
+ matches of the Ticket Filter to be
+ assigned.
+ links:
+ - title: Manage Departments
+ href: /scp/departments.php
+
+priority:
+ title: Priority
+ content: >
+ Choose the Priority level you want to
+ be applied to the matches of the Ticket
+ Filter.
+
+ Note: This will override Department or Help Topic settings.
+
+sla_plan:
+ title: SLA Plan
+ content: >
+ Choose the SLA Plan you want to
+ be applied to the matches of the Ticket
+ Filter.
+ links:
+ - title: Manage SLA Plans
+ href: /scp/slas.php
+
+auto_assign:
+ title: Auto-Assign
+ content: >
+ Choose an Agent or a Team to whom you want the matches of the Ticket Filter to be assigned.
+ links:
+ - title: Manage Agents
+ href: /scp/staff.php
+ - title: Manage Teams
+ href: /scp/teams.php
+
+help_topic:
+ title: Help Topic
+ content: >
+ Choose the Help Topic you want to
+ be applied to the matches of the Ticket
+ Filter.
+ links:
+ - title: Manage Help Topics
+ href: /scp/helptopics.php
+
+admin_notes:
+ title: Admin Notes
+ content: >
+ These notes are only visible to those whose account type is ‘Admin.’
diff --git a/www/include/i18n/en_US/help/tips/manage.helptopic.yaml b/www/include/i18n/en_US/help/tips/manage.helptopic.yaml
new file mode 100644
index 0000000..daacdef
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.helptopic.yaml
@@ -0,0 +1,129 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> Help Topic
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+help_topic_information:
+ title: Help Topic Information
+ content: >
+ Help Topics guide what
+ information is gathered from Users and how tickets are routed or
+ assigned.
+topic:
+ title: Topic Name
+ content: >
+ Unique Help Topic name.
+
+htstatus:
+ title: Status
+ content: >
+ If disabled or archived, this Help Topic
+ will not be available.
+
+status:
+ title: Ticket Status
+ content: >
+ Select the Ticket Status assigned to new tickets related to this Help Topic.
+
+ Ticket Filters can override new Ticket Status.
+
+type:
+ title: Type
+ content: >
+ If a Help Topic is labeled as
+ Private, it will only be available for Agents to choose when an
+ Agent opens a new Ticket under the Staff Panel.
+
+parent_topic:
+ title: Parent Topic
+ content: >
+ Select the Parent Topic to which this Help Topic will belong. The Parent
+ Topic will appear first in the listing with this Help Topic listed behind the parent.
+
+custom_form:
+ title: Custom Form
+ content: >
+ Custom Forms will help you acquire more specific information from
+ Users that are relevant to this Help
+ Topic.
+ links:
+ - title: Manage Custom Forms
+ href: /scp/forms.php
+
+priority:
+ title: Priority
+ content: >
+ Select the Priority assigned to new tickets related to this Help Topic.
+
+ Ticket Filters can override new ticket Priority.
+
+department:
+ title: Department
+ content: >
+ Choose Department to which new tickets under this Help Topic will be routed.
+ links:
+ - title: Manage Departments
+ href: /scp/departments.php
+sla_plan:
+ title: SLA Plan
+ content: >
+ Choose SLA plan associated with this Help Topic.
+
+ This selection will override any selected Department's SLA plan
+ links:
+ - title: Manage SLA Plans
+ href: /scp/slas.php
+
+thank_you_page:
+ title: Thank-You Page
+ content: >
+ Choose the Thank-You Page to which a User is directed after opening a
+ Ticket under this Help Topic.
+ links:
+ - title: Manage Thank-You Pages
+ href: /scp/pages.php
+
+auto_assign_to:
+ title: Auto-assign New Tickets
+ content: >
+ Optionally choose an Agent or Team to auto-assign tickets opened
+ with this Help Topic
+
+ Ticket Filters can override assignment.
+ links:
+ - title: Manage Staff and Teams
+ href: /scp/staff.php
+
+ticket_auto_response:
+ title: Ticket Auto-response
+ content: >
+ If checked, the setting will disable new ticket auto-responses for
+ this Help Topic.
+
+ This overrides the autoresponder setting for the Department as well as global Autoresponder settings.
+ links:
+ - title: Autoresponder Settings
+ href: /scp/settings.php?t=autoresp
+
+custom_numbers:
+ title: Custom Ticket Numbers
+ content: >
+ Choose "Custom" here to override the system default ticket numbering
+ format for tickets created in this help topic. See the help tips on
+ the Settings / Tickets page for more details on the settings.
diff --git a/www/include/i18n/en_US/help/tips/manage.pages.yaml b/www/include/i18n/en_US/help/tips/manage.pages.yaml
new file mode 100644
index 0000000..d788eb3
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.pages.yaml
@@ -0,0 +1,35 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> Pages
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+site_pages:
+ title: Site Pages
+ content: >
+ Site pages can serve as a mini Content Management System (CMS). You
+ can define multiple landing, offline, and thank-you pages and
+ configure them in the company settings and help topics.
+ links:
+ - title: Company Settings
+ href: /scp/settings.php?t=pages
+
+type:
+ title: Type
+ content: >
+ Offline pages are displayed on the
+ client portal if your help desk is disabled. Landing pages are displayed on the home
+ page of your client portal. Thank
+ You pages are displayed after a user submits a ticket. Other pages can be used as a simple
+ content management system (CMS).
diff --git a/www/include/i18n/en_US/help/tips/manage.schedule.yaml b/www/include/i18n/en_US/help/tips/manage.schedule.yaml
new file mode 100644
index 0000000..d770cc2
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.schedule.yaml
@@ -0,0 +1,30 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> Schedules
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+schedule:
+ title: Schedule Definition
+ content: >
+ Name: Unique name for the schedule.
+
+ Type: Choose the type of Schedule. Business Hours defines the hours that are
+ included when calculating SLA hours, whereas Holiday Hours define hours that are excluded.
+
+ Timezone: Choose the time zone for the schedule. It's recommended
+ that you leave it empty for a Floating time zone.
+
+ Floating time zone allows for times to be relative to the effective time zone at the time of use.
+
diff --git a/www/include/i18n/en_US/help/tips/manage.sla.yaml b/www/include/i18n/en_US/help/tips/manage.sla.yaml
new file mode 100644
index 0000000..0260617
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/manage.sla.yaml
@@ -0,0 +1,50 @@
+#
+# This is popup help messages for the Admin Panel -> Manage -> SLA Plan
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+name:
+ title: Name
+ content: >
+ Choose a discriptive name for this SLA Plan
+ that will reflect its purpose.
+
+grace_period:
+ title: Grace Period
+ content: >
+ Determine the number of hours after a ticket is created that it will
+ be automatically marked as overdue.
+
+ Hours are counted during the specified Schedule. The hierarchy is Department
+ Schedule, SLA Schedule, then System Default Schedule. If no Schedule is
+ configured, the Hours are counted 24/7 (even after business hours) until the
+ Ticket is Overdue.
+
+transient:
+ title: Transient
+ content: >
+ Transient SLAs are considered temporary and can be overridden by
+ a non-transient SLA on Department
+ transfer or when its Help Topic
+ is changed.
+
+schedule:
+ title: Schedule
+ content: >
+ Choose the Schedule to be used by this SLA when rendering tickets
+ Overdue.
+
+ Please note that Department settings can override this schedule.
+ links:
+ - title: Manage Schedules
+ href: /scp/schedules.php
diff --git a/www/include/i18n/en_US/help/tips/org.yaml b/www/include/i18n/en_US/help/tips/org.yaml
new file mode 100644
index 0000000..0cb4219
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/org.yaml
@@ -0,0 +1,36 @@
+#
+# This is the view / management page for an organization in the user
+# directory
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+org_sharing:
+ title: Ticket Sharing
+ content: >
+
+ Organization ticket sharing allows members access to tickets owned
+ by other members of the organization.
+
+
+
+ Collaborators always have access to tickets.
+
+
+email_domain:
+ title: Email Domain
+ content: >
+ Users can be automatically added to this organization based on their
+ email domain(s). Use the box below to enter one or more domains
+ separated by commas. For example, enter mycompany.com
+ for users with email addresses ending in @mycompany.com
+
diff --git a/www/include/i18n/en_US/help/tips/settings.agents.yaml b/www/include/i18n/en_US/help/tips/settings.agents.yaml
new file mode 100644
index 0000000..dfeb900
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.agents.yaml
@@ -0,0 +1,88 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Agents
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+
+# General Settings
+agent_name_format:
+ title: Agent Name Formatting
+ content: >
+ Choose a format for Agents names throughout the system. Email templates
+ will use it for names if no other format is specified.
+
+staff_identity_masking:
+ title: Staff Identity Masking
+ content: >
+ If enabled, this will hide the Agent’s name from the Client during any
+ communication.
+
+disable_agent_collabs:
+ title: Disable Agent Collaborators
+ content: >
+ If Enabled, Agents that are added as Collaborators by Users will be automatically
+ Disabled. This is helpful when Users are blindly adding Agents to the CC field
+ causing the Agents to receive all of the Participant Alerts.
+
+ Note:
+
+ This setting is global for all User created Tickets via API, Piping, and Fetching.
+
+# Authentication settings
+agent_password_policy:
+ title: Password Management Policy
+ content: >
+ Chose a Password Policy for Agents.
+
+ Additional policies can be added by installing Password Policy plugins.
+
+allow_password_resets:
+ title: Allow Password Resets
+ content: >
+ Enable this feature if you would like to display the
+ Forgot My Password link on the
+ Staff Log-In Page
+ after a failed log in attempt.
+
+reset_token_expiration:
+ title: Password Reset Window
+ content: >
+ Choose the duration (in minutes) for which the
+ Password Reset Tokens will be valid. When an Agent requests a Password Reset, they are emailed a token that
+ will permit the reset to take place.
+
+staff_session_timeout:
+ title: Agent Session Timeout
+ content: >
+ Choose the maximum idle time (in minutes) before an Agent is required to
+ log in again.
+
+ If you would like to disable Agent
+ Session Timeouts, enter 0.
+
+bind_staff_session_to_ip:
+ title: Bind Agent Session to IP
+ content: >
+ Enable this if you want Agent to be remembered by their current IP
+ upon Log In.
+
+ This setting is not recommened for users assigned IP addresses dynamically.
+
+require_agent_2fa:
+ title: Require Two Factor Authentication
+ content: >
+ Enable this feature if you would like to have an extra layer of authentication
+ set up for Agents when they log into the helpdesk. Once they correctly submit
+ their username and password, they will be required to submit a token to finish
+ logging into the helpdesk.
diff --git a/www/include/i18n/en_US/help/tips/settings.alerts.yaml b/www/include/i18n/en_US/help/tips/settings.alerts.yaml
new file mode 100644
index 0000000..21951c9
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.alerts.yaml
@@ -0,0 +1,93 @@
+#
+# This is popup help messages for the Account Panel ->
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+page_title:
+ title: Alerts and Notices
+ content: >
+ Alerts and Notices are automated email notifications sent to Agents
+ when various ticket events are triggered.
+
+ticket_alert:
+ title: New Ticket Alert
+ content: >
+
+ Alert sent out to Agents when a new ticket is created.
+
+
+ This alert is not sent out if the ticket is auto-assigned via a Ticket Filter or Help Topic.
+
+ links:
+ - title: Default New Ticket Alert Template
+ href: /scp/templates.php?default_for=ticket.alert
+
+message_alert:
+ title: New Message Alert
+ content: >
+ Alert sent out to Agents when a new message from the User is
+ appended to an existing ticket.
+ links:
+ - title: Default New Message Alert Template
+ href: /scp/templates.php?default_for=message.alert
+
+internal_note_alert:
+ title: New Internal Activity Alert
+ content: >
+ Alert sent out to Agents when internal activity such as an internal
+ note or an agent reply is appended to a ticket.
+ links:
+ - title: Default Ticket Activity Template
+ href: /scp/templates.php?default_for=note.alert
+
+assignment_alert:
+ title: Ticket Assignment Alert
+ content: >
+ Alert sent out to Agents on ticket assignment.
+ links:
+ - title: Default Ticket Assignment Alert Template
+ href: /scp/templates.php?default_for=assigned.alert
+
+transfer_alert:
+ title: Ticket Transfer Alert
+ content: >
+ Alert sent out to Agents on ticket transfer between Departments.
+ links:
+ - title: Default Ticket Transfer Alert Template
+ href: /scp/templates.php?default_for=transfer.alert
+
+overdue_alert:
+ title: Overdue Ticket Alert
+ content: >
+ Alert sent out to Agents when a ticket becomes overdue based on SLA
+ or Due Date.
+ links:
+ - title: Default Stale Ticket Alert Template
+ href: /scp/templates.php?default_for=ticket.overdue
+
+ - title: Manage SLAs
+ href: /scp/slas.php
+
+system_alerts:
+ title: System Alerts
+ content: >
+ Significant system events that are sent out to the Administrator
+ (%{config.admin_email}). Depending on the configured Log Level, the events are also made
+ available in the System Logs
+ links:
+ - title: View System Logs
+ href: /scp/logs.php
+
+ - title: Change Admin Email
+ href: /scp/settings.php?t=emails
diff --git a/www/include/i18n/en_US/help/tips/settings.autoresponder.yaml b/www/include/i18n/en_US/help/tips/settings.autoresponder.yaml
new file mode 100644
index 0000000..c77da28
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.autoresponder.yaml
@@ -0,0 +1,61 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Autoresponder
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+new_ticket:
+ title: New Ticket
+ content: >
+ Enable this if you want an autoresponse to be sent to the User on new ticket.
+ links:
+ - title: New Ticket Autoresponse Template
+ href: /scp/templates.php?default_for=ticket.autoresp
+
+new_ticket_by_staff:
+ title: New Ticket by Staff
+ content: >
+ Notice sent when an Agent creates a ticket on behalf of the User. Agent
+ can override this when creating new tickets.
+ links:
+ - title: New Ticket Notice Template
+ href: /scp/templates.php?default_for=ticket.notice
+
+new_message_for_submitter:
+ title: New Message Confirmation
+ content: >
+ Confirmation notice sent when a new message is appended to an existing
+ ticket.
+ links:
+ - title: New Message Confirmation Template
+ href: /scp/templates.php?default_for=message.autoresp
+
+new_message_for_participants:
+ title: New Message Notice
+ content: >
+ Broadcast messages received from message submitter to all other
+ participants on the ticket.
+ links:
+ - title: New Activity Notice Template
+ href: /scp/templates.php?default_for=ticket.activity.notice
+
+overlimit_notice:
+ title: Overlimit Notice
+ content: >
+ Ticket denied notice sent to User on Maximum Open Tickets violation.
+ links:
+ - title: Overlimit Notice Template
+ href: /scp/templates.php?default_for=ticket.overlimit
+
+ - title: Set Maximum Open Tickets
+ href: /scp/settings.php?t=tickets
diff --git a/www/include/i18n/en_US/help/tips/settings.email.yaml b/www/include/i18n/en_US/help/tips/settings.email.yaml
new file mode 100644
index 0000000..cd64c71
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.email.yaml
@@ -0,0 +1,139 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Emails
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+default_email_templates:
+ title: Default Email Template Set
+ content: >
+ Select Email Template Set used to send Auto-Responses and Alerts for various actions that can
+ take place during a Ticket’s lifetime.
+
+ Departments can be assigned a specific Email Template Set.
+ links:
+ - title: Manage Email Template Sets
+ href: /scp/templates.php
+
+default_system_email:
+ title: Default Outgoing Email
+ content: >
+ Choose an email address from which outgoing emails are sent.
+
+ Department can set its own email address which will override what is set here.
+ links:
+ - title: Manage Email Addresses
+ href: /scp/emails.php
+
+default_alert_email:
+ title: Default Alert Email
+ content: >
+ Choose an email address from which Alerts &
+ Notices are sent to Agents.
+ links:
+ - title: Manage Email Addresses
+ href: /scp/emails.php
+
+admins_email_address:
+ title: Admin’s Email Address
+ content: >
+ Enter an adminstrator's email address to which System Errors and New Ticket Alerts (if enabled) are sent.
+ links:
+ - title: Manage Alerts & Notices
+ href: /scp/settings.php?t=alerts
+
+email_fetching:
+ title: Email Fetching
+ content: >
+ Allow IMAP/POP polling for configured and enabled Mail Boxes.
+ links:
+ - title: Manage Mail Boxes
+ href: /scp/emails.php
+
+enable_autocron_fetch:
+ title: Fetch Emails using Auto-cron
+ content: >
+ Enables periodic email fetching using an internal task manager
+ triggered by Agents' activity.
Please note that emails will not be
+ fetched if no one is logged in to Staff Control Panel. External task scheduler
+ is highly recommended for predictable fetch intervals.
+ links:
+ - title: Using External Task Scheduler
+ href: https://docs.osticket.com/en/latest/Getting%20Started/POP3-IMAP%20Settings.html
+
+strip_quoted_reply:
+ title: Strip Quoted Reply
+ content: >
+ If enabled, this will remove preceding correspondence between email communications.
+
+ This feature is relationally dependent on the Reply Separator Tag below.
+
+reply_separator_tag:
+ title: Reply Separator Tag
+ content: >
+ This is a token indicating to the User to reply above the line.
+
+ Note: this is only relevant if Strip Quoted Reply is enabled above.
+
+emailed_tickets_priority:
+ title: Emailed Tickets Priority
+ content: >
+ Choose whether you would like the priority/importance option of the
+ User's email (e.g. OutLook) to dictate the new ticket’s priority.
+
+ This setting can be overridden by a Ticket Filter.
+ links:
+ - title: Create & Manage Ticket Filters
+ href: /scp/filters.php
+
+accept_all_emails:
+ title: Accept All Emails
+ content: >
+ Accept emails from unknown Users.
+
+ Unchecking this setting will result in tickets getting rejected.
+
+accept_email_collaborators:
+ title: Accept Email Collaborators
+ content: >
+ Add email participants included in the To
+ and CC fields as ticket collaborators.
+
+ Collaborators can always be added manually by Agents when
+ viewing a ticket.
+
+default_mta:
+ title: Default MTA
+ content: >
+ Default MTA takes care of
+ email delivery process for outgoing emails without SMTP setting.
+
+ticket_response_files:
+ title: Ticket Response Files
+ content: >
+ If enabled, any attachments an Agent may attach to a ticket response will
+ be also included in the email to the User.
+
+verify_email_addrs:
+ title: Verify Email Addresses
+ content: >
+ Enable this option to check if the email address has a mail
+ exchanger (MX) in the domain's DNS. This is useful to detect
+ incorrectly typed email addresses. This is perfomed in addition to
+ checking the email address wellformedness.
diff --git a/www/include/i18n/en_US/help/tips/settings.kb.yaml b/www/include/i18n/en_US/help/tips/settings.kb.yaml
new file mode 100644
index 0000000..c36af84
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.kb.yaml
@@ -0,0 +1,48 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Knowledgebase
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+knowledge_base_settings:
+ title: Knowledge Base Settings
+ content: >
+
+knowledge_base_status:
+ title: Knowledge Base Status
+ content: >
+ Enable this setting to allow your users self-service access to
+ your public knowledge base articles.
+
+ Knowledge base categories and FAQs can be made internal (viewable only by Agents).
+ links:
+ - title: Manage Knowledge Base
+ href: /scp/kb.php
+
+restrict_kb:
+ title: Restrict Access to the Knowledge Base
+ content: >
+ Enable this setting to prevent unregistered users from accessing
+ your knowledge base articles on the client interface.
+ links:
+ - title: Access Control Settings
+ href: /scp/settings.php?t=users
+
+canned_responses:
+ title: Canned Responses
+ content: >
+ Enable this setting to allow Agents to use Canned Responses when replying to
+ tickets.
+ links:
+ - title: Manage Canned Responses
+ href: /scp/canned.php
diff --git a/www/include/i18n/en_US/help/tips/settings.pages.yaml b/www/include/i18n/en_US/help/tips/settings.pages.yaml
new file mode 100644
index 0000000..1361527
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.pages.yaml
@@ -0,0 +1,77 @@
+#
+# This is popup help messages for the Account Panel ->
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+company_information:
+ title: Company Information
+ content: >
+ This refers to the company or organization that will benefit from
+ osTicket’s software and its support staff. The information here will appear
+ in email signatures (i.e., the footer) when tickets are responded to by
+ agents.
+ links:
+ - title: Company Information Form
+ href: /scp/forms.php?type=C
+
+landing_page:
+ title: Landing Page
+ content: >
+ The Landing Page is displayed on
+ the front page of your support site.
+
+offline_page:
+ title: Offline Page
+ content: >
+ The Offline Page is displayed in
+ the support site when the help desk is offline, see Admin Panel
+ -> Setting -> System -> Helpdesk Status.
+
+default_thank_you_page:
+ title: Default Thank-You Page
+ content: >
+ The thank-you page is displayed to the
+ customer when a Client submits a new
+ ticket.
+
+ Thank you pages can be
+ associated with help topics.
+
+logos:
+ title: Logos
+ content: >
+ You may customize the Logo that will be
+ displayed to the Client in the Client Portal (i.e., your Support Site).
+
+upload_a_new_logo:
+ title: Upload a new logo
+ content: >
+ Choose an image in the .gif, .jpg or .png formats. We will proportionally
+ resize the display of your image. We will not, however, resize the image’s
+ data. Therefore, to speed load times, it is recommended that you keep your
+ image close to the default image size (817px × 170px).
+
+backdrops:
+ title: Backdrops
+ content: >
+ You may customize the Backdrop that will be
+ displayed on the staff login page.
+
+upload_a_new_backdrop:
+ title: Upload a New Backdrop
+ content: >
+ Choose an image in the .gif, .jpg or .png formats. We will proportionally
+ resize the display of your image. We will not, however, resize the image’s
+ data. Therefore, to speed load times, it is recommended that you keep your
+ image relatively small (under a megabyte). Note also that the PHP
+ max upload settings apply.
diff --git a/www/include/i18n/en_US/help/tips/settings.system.yaml b/www/include/i18n/en_US/help/tips/settings.system.yaml
new file mode 100644
index 0000000..df5354e
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.system.yaml
@@ -0,0 +1,237 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> System
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+helpdesk_status:
+ title: Helpdesk Status
+ content: >
+ If the status is changed to Offline, the client interface will be
+ disabled. Only Admins will be able to access the system.
+
+helpdesk_url:
+ title: Helpdesk URL
+ content: >
+ This URL is the base of your osTicket installation. It is used in email
+ communication to direct end-users back to your helpdesk.
+
+helpdesk_name_title:
+ title: Helpdesk Name/Title
+ content: >
+ This is the title that appears in the browser tab. If your help desk
+ page is bookmarked, this will be the title/name of the site page.
+
+default_department:
+ title: Default Department
+ content: >
+ Choose a default department
+ for tickets that are not automatically routed to a department.
+
+ Ticket can be routed base on help topic, incoming email and ticket
+ filter settings.
+
+default_schedule:
+ title: Default Schedule
+ content: >
+ Choose the default Schedule to be used by SLA when rendering tickets
+ Overdue.
+ links:
+ - title: Manage Schedules
+ href: /scp/schedules.php
+
+force_https:
+ title: Force HTTPS
+ content: >
+ This setting allows Admins to configure wether or not they want to Force
+ HTTPS system-wide. If enabled, any request that is using the HTTP protocol
+ will be redirected to the HTTPS protocol. Note, this will only work if you
+ have an SSL certificate installed and have HTTPS configured on the server.
+
+ Note:
+ This might affect remote piping scripts. Reference new scripts included in
+ setup/scripts/ for updates.
+
+default_page_size:
+ title: Default Page Size
+ content: >
+ Choose the number of items shown per page in the Ticket Queues in the
+ Staff Panel. Each Agent can also customize this number for their own
+ account under My Preferences.
+
+default_log_level:
+ title: Default Log Level
+ content: >
+ Determine the minimum level of issues which will be recorded in the
+ system log. Debug represents the least severity, and Error represents the greatest severity.
+ For example, if you want to see all issues in the System Logs, choose Debug.
+
+purge_logs:
+ title: Purge Logs
+ content: >
+ Determine how long you would like to keep System Logs before they are deleted.
+
+enable_richtext:
+ title: Enable Rich Text
+ content: >
+ If enabled, this will permit the use of rich text formatting between
+ Clients and Agents.
+
+enable_avatars:
+ title: Enable Avatars on Thread View
+ content: >
+ Enable this to show Avatars on thread correspondence.
+
+ The Avatar Source can be set in Agents' and Users' settings pages.
+ links:
+ - title: Agents Settings
+ href: /scp/settings.php?t=agents
+
+ - title: Users Settings
+ href: /scp/settings.php?t=users
+
+collision_avoidance:
+ title: Agent Collision Avoidance
+ content: >
+ Enter the maximum length of time an Agent is allowed to hold a lock
+ on a ticket or task without any activity.
+
+ Enter 0 to disable the lockout feature.
+
+allow_iframes:
+ title: Allow System iFrame
+ content: >
+ Enter comma separated list of urls/domains for the system to be framed
+ in. If left empty, the system will default to 'self'. This accepts
+ domain wildcards, HTTP/HTTPS URL scheme, and port numbers.
+
+ Example:
+
+ https://domain.tld, sub.domain.tld:443, http://*.domain.tld
+ links:
+ - title: Syntax Information (host-source)
+ href: "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors#Sources"
+
+acl:
+ title: ACL (Access Control List)
+ content: >
+ Enter a comma separated list of IP addresses to allow access to the system.
+ There are four options to choose which panel(s) to apply the ACL to.
+
+
Apply To
+
Description
+
Disabled
+
Disables ACL altogether.
+
All
+
Applies ACL to all Panels. (ie. Client Portal, Staff Panel,
+ Admin Panel)
+
Client Portal
+
Applies ACL to only Client Portal.
+
Staff Panel
+
Applies ACL to only Staff Panel and Admin Panel.
+
+
+embedded_domain_whitelist:
+ title: Embedded Domain Whitelist
+ content: >
+ Enter a comma separated list of domains to be whitelisted for iFrames used
+ in the system. Do not input http(s) or www with
+ the domain; only the domain name will be accepted. This is used when you
+ would like to embed content in the system (eg. YouTube video) via Client
+ Portal, Knowledgebase, etc. If you add an iFrame with a non-whitelisted
+ domain, the system will remove the iFrame automatically. By default the
+ system allows YouTube, Vimeo, DailyMotion, and Microsoft Stream.
+
+ Example:
+
+ domain.tld, sub.domain.tld
+
+# Date and time options
+date_time_options:
+ title: Date & Time Options
+ content: >
+ The following settings define the default settings for Date &
+ Time settings for the help desk. You can choose to use the locale
+ defaults for the selected locale or use customize the formats to
+ meet your unique requirements. Refer to the ICU format strings as a
+ reference for customization. The dates shown below simply
+ illustrate the result of their corresponding values.
+ links:
+ - title: See the ICU Date Formatting Table
+ href: http://userguide.icu-project.org/formatparse/datetime
+
+languages:
+ title: System Languages
+ content: >
+ Choose a system primary language and optionally secondary languages
+ to make your interface feel localized for your agents and end-users.
+
+primary_language:
+ title: System Primary Language
+ content: >
+ Content of this language is displayed to agents and end-users if
+ their respective language preference is not currently available.
+ This includes the content of the interface, as well as, custom
+ content such as thank-you pages and email messages.
+
+ This is the language in which the untranslated versions of your
+ content should be written.
+
+secondary_language:
+ title: Secondary Languages
+ content: >
+ Select language preference options for your agents and end-users.
+ The interface will be available in these languages, and custom
+ content, such as thank-you pages and help topic names, will be
+ translatable to these languages.
+
+# Attachments
+attachments:
+ title: Attachment Settings and Storage
+ content: >
+ Configure how attachments are stored.
+
+default_storage_bk:
+ title: File Storage Backend
+ content: >
+ Choose how attachments are stored.
+
+ Additional storage backends can be added by installing storage plugins
+
+max_file_size:
+ title: Maximum File Size
+ content: >
+ Choose a maximum file size for attachments uploaded by agents. This
+ includes canned attachments, knowledge base articles, and
+ attachments to ticket and task replies. The upper limit is
+ controlled by PHP's upload_max_filesize setting.
+ links:
+ - title: PHP ini settings
+ href: "http://php.net/manual/en/ini.core.php#ini.upload-max-filesize"
+
+files_req_auth:
+ title: Require Login
+ content: >
+ Enable this setting to forbid serving attachments to unauthenticated
+ users. That is, users must sign into the system (both end users and
+ agents), in order to view attachments.
+
+ From a security perspective, be aware that the user's browser may
+ retain previously-viewed files in its cache. Furthermore, all file
+ links on your helpdesk automatically expire after about 24 hours.
diff --git a/www/include/i18n/en_US/help/tips/settings.tasks.yaml b/www/include/i18n/en_US/help/tips/settings.tasks.yaml
new file mode 100644
index 0000000..6d1f056
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.tasks.yaml
@@ -0,0 +1,110 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Tasks
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+number_format:
+ title: Task Number Format
+ content: >
+ This setting is used to generate task numbers. Use hash signs
+ (`#`) where digits are to be placed. Any other text in the number
+ format will be preserved.
+
+ For example, for six-digit numbers, use ######.
+
+sequence_id:
+ title: Task Number Sequence
+ content: >
+ Choose a sequence from which to derive new task numbers. The
+ system has a incrementing sequence and a random sequence by default.
+ You may create as many sequences as you wish.
+
+default_sla:
+ title: Default SLA
+ content: >
+ Choose the default Service Level Agreement to manage how long a task
+ can remain Open before it is rendered Overdue.
+ links:
+ - title: Create more SLA Plans
+ href: /scp/slas.php
+
+default_priority:
+ title: Default Priority
+ content: >
+ Choose a default priority for
+ tasks not assigned a priority automatically.
+
+task_attachment_settings:
+ title: Task Thread Attachments
+ content: >
+ Configure settings for files attached to the description field. These settings
+ are used for all new tasks and new messages regardless of the
+ source channel (web portal, email, api, etc.).
+
+page_title:
+ title: Alerts and Notices
+ content: >
+ Alerts and Notices are automated email notifications sent to Agents
+ when various task events are triggered.
+
+task_alert:
+ title: New Task Alert
+ content: >
+
+ Alert sent out to Agents when a new task is created.
+
+
+ This alert is not sent out if the task is auto-assigned.
+
+ links:
+ - title: Default New Task Alert Template
+ href: /scp/templates.php?default_for=task.alert
+
+activity_alert:
+ title: New Activity Alert
+ content: >
+ Alert sent out to Agents when a new message is appended to an
+ existing task.
+ links:
+ - title: Default New Activity Alert Template
+ href: /scp/templates.php?default_for=task.activity.alert
+
+assignment_alert:
+ title: Task Assignment Alert
+ content: >
+ Alert sent out to Agents on task assignment.
+ links:
+ - title: Default Task Assignment Alert Template
+ href: /scp/templates.php?default_for=task.assignment.alert
+
+transfer_alert:
+ title: Task Transfer Alert
+ content: >
+ Alert sent out to Agents on task transfer between Departments.
+ links:
+ - title: Default Task Transfer Alert Template
+ href: /scp/templates.php?default_for=task.transfer.alert
+
+overdue_alert:
+ title: Overdue Task Alert
+ content: >
+ Alert sent out to Agents when a task becomes overdue based on SLA
+ or Due Date.
+ links:
+ - title: Default Stale Task Alert Template
+ href: /scp/templates.php?default_for=task.overdue.alert
+
+ - title: Manage SLAs
+ href: /scp/slas.php
+
diff --git a/www/include/i18n/en_US/help/tips/settings.ticket.yaml b/www/include/i18n/en_US/help/tips/settings.ticket.yaml
new file mode 100644
index 0000000..dd07860
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.ticket.yaml
@@ -0,0 +1,156 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Tickets
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+number_format:
+ title: Ticket Number Format
+ content: >
+ This setting is used to generate ticket numbers. Use hash signs
+ (`#`) where digits are to be placed. Any other text in the number
+ format will be preserved. Help
+ Topics can define custom number formats.
+
+ For example, for six-digit numbers, use ######.
+
+sequence_id:
+ title: Ticket Number Sequence
+ content: >
+ Choose a sequence from which to derive new ticket numbers. The
+ system has a incrementing sequence and a random sequence by default.
+ You may create as many sequences as you wish. Use various sequences
+ in the Ticket Number
+ Format configuration for help topics.
+
+queue_bucket_counts:
+ title: Top-Level Ticket Counts
+ content: >
+ This setting is used to hide or show the ticket counts on Main-Level
+ queues. Get back to the way things used to be.
+
+default_ticket_status:
+ title: Default Status for new Tickets
+ content: >
+ Choose a status as the default for new tickets. This can be defined
+ for each help topic, if desired. It can also be overridden by a
+ ticket filter.
+ links:
+ - title: Manage Ticket Statuses
+ href: /scp/lists.php?type=ticket-status
+
+default_sla:
+ title: Default SLA
+ content: >
+ Choose the default Service Level Agreement to manage how long a ticket
+ can remain Open before it is rendered Overdue.
+ links:
+ - title: Create more SLA Plans
+ href: /scp/slas.php
+
+default_priority:
+ title: Default Priority
+ content: >
+ Choose a default priority for
+ tickets not assigned a priority automatically.
+
+ Priority can be assigned via the help topic, routed department, or
+ ticket filter settings.
+
+maximum_open_tickets:
+ title: Maximum Open Tickets
+ content: >
+ Enter the maximum number of tickets a User is permitted to
+ have open in your help desk.
+
+ Enter 0 if you prefer to disable this limitation.
+
+email_ticket_priority:
+ title: Email Ticket Priority
+ content: >
+ Use email priority assigned by addressee’s mail service
+
+show_related_tickets:
+ title: Show Related Tickets
+ content: >
+ Show all related tickets on user login - otherwise access is restricted to
+ one ticket view per login
+
+human_verification:
+ title: Human Verification
+ content: >
+ Enable CAPTCHA on the Client Portal to verify an incoming ticket is the
+ result of human activity.
+
+ Requires GDLib library
+
+claim_tickets:
+ title: Claim Tickets on Response
+ content: >
+ Enable this to auto-assign unassigned tickets to the responding Agent.
+
+ Reopened tickets are always assigned to the last respondent unless auto
+ assign on reopen is disabled on the Department level.
+
+auto_refer:
+ title: Auto-refer Tickets on Close
+ content: >
+ Enable this to auto-refer tickets to the assigned or closing
+ Agent when a ticket is closed.
+
+ This is necessary when you want to give agents with limited access
+ continued access to assigned tickets after they're closed.
+
+collaborator_ticket_visibility:
+ title: Collaborator Tickets Visibility
+ content: >
+ If Enabled, Users will have visibility to ALL Tickets they participate in
+ when signing into the Web Portal.
+
+ If Disabled, Users will only be able to see their own Tickets
+ when signing into the Web Portal.
+
+require_topic_to_close:
+ title: Require Help Topic to Close
+ content: >
+ If Enabled, a Ticket must have a Help Topic in order to be Closed by an Agent
+
+allow_external_images:
+ title: Allow External Images
+ content: >
+ If Enabled, the system will allow external inline images that have a valid image
+ extension (.png, .jpg, .jpeg, .gif). If Disabled, the system will exclude
+ any external inline images. One caveat to note, is if the setting is Disabled we
+ will still store external inline images that have a valid image extension in case
+ the setting is re-enabled in the future.
+
+assigned_tickets:
+ title: Assigned Tickets
+ content: >
+ Enable this feature to exclude assigned tickets from the Open
+ Tickets Queue.
+
+answered_tickets:
+ title: Answered Tickets
+ content: >
+ Enable this feature to show answered tickets in the Answered Tickets Queue. Otherwise, it
+ will be included in the Open Tickets
+ Queue.
+
+ticket_attachment_settings:
+ title: Ticket Thread Attachments
+ content: >
+ Configure settings for files attached to the issue details field. These settings
+ are used for all new tickets and new messages regardless of the
+ source channel (web portal, email, api, etc.).
diff --git a/www/include/i18n/en_US/help/tips/settings.users.yaml b/www/include/i18n/en_US/help/tips/settings.users.yaml
new file mode 100644
index 0000000..35d2317
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/settings.users.yaml
@@ -0,0 +1,85 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> Users
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+# General Settings
+client_name_format:
+ title: User Name Formatting
+ content: >
+ Choose a format for Users names throughout the system. Email templates
+ will use it for names if no other format is specified.
+
+# Authentication settings
+client_password_policy:
+ title: Password Management Policy
+ content: >
+ Chose a Password Policy for Users.
+
+ Additional policies can be added by installing Password Policy plugins.
+
+client_session_timeout:
+ title: User Session Timeout
+ content: >
+ Choose the maximum idle time (in minutes) before a User is required to
+ log in again.
+
+ If you would like to disable User Session Timeouts, enter 0.
+
+registration_method:
+ title: Registration Options
+ content: >
+ Registration Method and Registration Required are used
+ together to configure how users register and access the web portal
+ of your help desk. The table below summarizes how the two settings
+ are interpreted by the system.
+
+
Registration Required
+
Registration Method
+
Result
+
No
Public
+
Registration encouraged but not required for new
+ tickets.
+
Yes
Public
+
Registration and login are required for new tickets
+
No
Private
+
Anyone can create a ticket, but only agents
+ can register accounts
+
Yes
Private
+
User access is by invitation only
+
No
Disabled
+
No one can register for an account, but anyone can
+ create a ticket. This was how osTicket functioned
+ prior to 1.9
+
Yes
Disabled
+
Disable new tickets via web portal
+
+
+client_verify_email:
+ title: Require Email Verification
+ content: >
+ Disable this option to give your users immediate access to tickets
+ via the "Check Ticket Status" login page in the client portal. If
+ enabled, (which is the default), users will be required to receive
+ an email and follow a link in the email to view the ticket.
+
+ Disabling email verification might allow third-parties (e.g. ticket
+ collaborators) to impersonate the ticket owner.
+
+allow_auth_tokens:
+ title: Enable Authentication Tokens
+ content: >
+ Enable this option to allow use of authentication tokens to auto-login users on ticket link click.
diff --git a/www/include/i18n/en_US/help/tips/staff.agent.yaml b/www/include/i18n/en_US/help/tips/staff.agent.yaml
new file mode 100644
index 0000000..87175b0
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.agent.yaml
@@ -0,0 +1,132 @@
+#
+# This is popup help messages for the Admin Panel -> Staff -> Add Staff Form
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+username:
+ title: Username
+ content: >
+ Please choose an Agent username
+ that is unique to your Help
+ Desk.
+
+reset2fa:
+ title: Reset Two Factor Authentication
+ content: >
+ In the event that an Agent loses the ability to log into the helpdesk
+ using their current 2FA configuration, an Admin can reset the Agent's
+ 2FA configuration so that they can reconfigure it upon their next
+ successful login.
+
+email_address:
+ title: Email Address
+ content: >
+ Enter Agent's email that will receive Alerts & Notices from the Help Desk.
+
+ Staff can sign in into the staff control panel with either username or email address.
+
+welcome_email:
+ title: Welcome Email
+ content: >
+ Send the new Agent an account access link from which the Agent will
+ be able to set thier own password. If unchecked, you will need to set password
+ and communicate the log-in information to the new staff.
+
+account_password:
+ title: Account Password
+ content: >
+ As an administrator, you may
+ change an Agent’s password.
+
+forced_password_change:
+ title: Forced Password Change
+ content: >
+ Enable this if you would like to force the new Agent to change
+ their own password upon next log-in.
+
+agents_signature:
+ title: Agent’s Signature
+ content: >
+ Create a signature for the Agent which can be selected when replying to a ticket.
+
+account_status:
+ title: Account Status
+ content: >
+ If the Agent's status is Locked, they will not be able to
+ sign in to the help desk.
+
+assigned_group:
+ title: Assigned Group
+ content: >
+ The Group that you choose for
+ this Agent to belong will determine what permissions the Agent has
+ within the Help Desk.
+ links:
+ - title: Manage Groups
+ href: /scp/groups.php
+
+primary_department:
+ title: Primary Department
+ content: >
+ Choose the primary department to
+ which this Agent belongs and an effective Role.
+
+ links:
+ - title: Manage Departments
+ href: /scp/departments.php
+
+primary_role:
+ title: Primary Role
+ content: >
+ Choose the primary role to which this agent belongs.
+
+primary_role_on_assign:
+ title: Use Primary Role For Assignments
+ content: >
+ Enable this to fallback to the primary
+ role when this agent is assigned tickets and tasks outside
+ of the primary department and
+ extended access departments.
+ Otherwise the agent will have view only access.
+
+daylight_saving:
+ title: Daylight Saving
+ content: >
+ Enable this feature if you would like Daylight Saving to automatically
+ come into play for this Agent’s time zone.
+
+limited_access:
+ title: Limited Access
+ content: >
+ If enabled, the Agent will only have access to tickets assigned directly or via the Team.
+
+directory_listing:
+ title: Directory Listing
+ content: >
+ Enable this if you would like to list this Agent in the Staff Directory.
+ links:
+ - title: Visit the Staff Directory
+ href: /scp/directory.php
+
+vacation_mode:
+ title: Vacation Mode
+ content: >
+ If you change the Agent’s status to Vacation Mode, the Agent will not
+ receive any Alerts & Notices
+ nor be available for tickets assignment.
+
diff --git a/www/include/i18n/en_US/help/tips/staff.agents.yaml b/www/include/i18n/en_US/help/tips/staff.agents.yaml
new file mode 100644
index 0000000..f358b05
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.agents.yaml
@@ -0,0 +1,15 @@
+#
+# This is popup help messages for the Account Panel -> Agents -> Agents
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
diff --git a/www/include/i18n/en_US/help/tips/staff.department.yaml b/www/include/i18n/en_US/help/tips/staff.department.yaml
new file mode 100644
index 0000000..b2bc3ec
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.department.yaml
@@ -0,0 +1,145 @@
+#
+# This is popup help messages for the Admin Panel -> Staff -> Add New Department -> Department Form
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+status:
+ title: Status
+ content: >
+ If disabled or archived, this Department
+ will not be available.
+type:
+ title: Type
+ content: >
+ Select Private if you wish to mask
+ assignments to this Department in the Client Portal. Additionally,
+ when labeled as Private, the Department Signature will not be
+ displayed in email replies.
+
+ At least one department must be Public
+
+email:
+ title: Email
+ content: >
+ Email Address used when responses are sent to Users when Agents post
+ Responses to Tickets.
+
+template:
+ title: Template Set
+ content: >
+ Email Template Set used for
+ Auto-Responses and Alerts & Notices for tickets routed to this
+ Department.
+ links:
+ - title: Manage Templates
+ href: /scp/templates.php
+
+sla:
+ title: SLA
+ content: >
+ Service Level Agreement for tickets routed to this Department.
+ links:
+ - title: Manage SLA Plans
+ href: /scp/slas.php
+
+schedule:
+ title: Schedule
+ content: >
+ Schedule used by SLA when rendering tickets, routed to this Department,
+ Overdue.
+
+ This setting takes precedence over System and SLA schedule settings.
+ links:
+ - title: Manage Schedules
+ href: /scp/schedules.php
+
+manager:
+ title: Department Manager
+ content: >
+ Select a Manager for this department.
+
+ Managers can be configured to receive special alerts and
+ also have the right to unassign tickets.
+ links:
+ - title: Manage Alerts & Notices
+ href: /scp/settings.php?t=alerts
+
+group_membership:
+ title: Alerts & Notices Recipients
+ content: >
+ Select the recipients of configured Alerts & Notices.
+ links:
+ - title: Configure Alerts & Notices
+ href: "/scp/settings.php?t=tickets#alerts"
+
+sandboxing:
+ title: Ticket Assignment Restrictions
+ content: >
+ Determine if Tickets can be assigned to all agents,
+ agents with Primary or Extended Department access,
+ or only agents with Primary Department access.
+
+disable_auto_claim:
+ title: Disable Auto Claim
+ content: >
+ Check this to disable auto-claim on response/reply for
+ this department.
+
+ Agents can still manually claim unassigned tickets
+
+disable_reopen_auto_assign:
+ title: Disable Auto Assign on Reopen
+ content: >
+ Check this to disable auto-assignment of reopened tickets for
+ this department.
+
+ Otherwise, the Ticket will be auto assigned to the last responding Agent
+
+auto_response_settings:
+ title: Autoresponder Settings
+ content: >
+ This allows you to override the global Autoresponder settings for
+ this Department.
+
+new_ticket:
+ title: New Ticket Auto-Response
+ content: >
+ You may disable the Auto-Response sent to the User when a new ticket
+ is created and routed to this Department.
+
+new_message:
+ title: New Message Auto-Response
+ content: >
+ You may disable the Auto-Response sent to the User to confirm
+ a newly posted message for tickets in this Department.
+
+auto_response_email:
+ title: Auto Response Email
+ content: >
+ Select an email address from which Auto-Responses are sent for this
+ Department.
+
+department_access:
+ title: Group Access
+ content: >
+ Allow Agents of other Departments access to this Deparmtent's
+ tickets.
+
+department_signature:
+ title: Department Signature
+ content: >
+ Signature is made available as a choice, for Public Departments, on Agent Responses.
diff --git a/www/include/i18n/en_US/help/tips/staff.departments.yaml b/www/include/i18n/en_US/help/tips/staff.departments.yaml
new file mode 100644
index 0000000..63858a5
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.departments.yaml
@@ -0,0 +1,25 @@
+#
+# This is popup help messages for the Admin Panel -> Staff -> Departments
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+type:
+ title: Type
+ content: >
+ If the Department’s Type is Private, then the Department Signature will not be available on response nor will the department assignment show from the Client Portal.
+
+dept_manager:
+ title: Department Manager
+ content: >
+ You may choose an Agent as a Department Manager to receive Alerts & Notices for tickets in departments.
+ Agents do not have to be members of the Department to be the Manager of the Department
diff --git a/www/include/i18n/en_US/help/tips/staff.groups.yaml b/www/include/i18n/en_US/help/tips/staff.groups.yaml
new file mode 100644
index 0000000..0b194fd
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.groups.yaml
@@ -0,0 +1,33 @@
+#
+# This is popup help messages for the Admin Panel -> Staff -> Add New Group -> User Group Form
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+groups:
+ title: Groups
+ content: >
+ Groups are used to define an Agent's permissions in the help desk.
+ Groups can also grant access to Departments other than an Agent's
+ primary Department.
+
+status:
+ title: Status
+ content: >
+ If Disabled, Agents assigned to
+ this Group cannot sign in and will not receive Department Alerts
+ & Notices.
+
+department_access:
+ title: Department Access
+ content: >
+ Check all departments to which the Group members are allowed access.
diff --git a/www/include/i18n/en_US/help/tips/staff.staff_members.yaml b/www/include/i18n/en_US/help/tips/staff.staff_members.yaml
new file mode 100644
index 0000000..882bfe9
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.staff_members.yaml
@@ -0,0 +1,29 @@
+#
+# This is popup help messages for the Admin Panel -> Staff -> Staff Members
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+staff_members:
+ title: Staff Members
+ content: >
+ The following table displays the results of the filter above. If not filter
+ settings are chosen, then all Agent
+ (Staff) Members are displayed, and
+ broken up by pages. See the pages section below to navigate through more
+ results.
+
+status:
+ title: Status
+ content: >
+ This will display whether the Agent is
+ Locked, Active, or Active (Vacation).
diff --git a/www/include/i18n/en_US/help/tips/staff.team.yaml b/www/include/i18n/en_US/help/tips/staff.team.yaml
new file mode 100644
index 0000000..0941323
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.team.yaml
@@ -0,0 +1,55 @@
+#
+# This is popup help messages for the Admin Panel -> Staff -> Teams
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+teams:
+ title: Teams
+ content: >
+ Teams are one or more Agents teamed together for the purpose of
+ ticket assignment. Team membership can span across Department
+ boundaries.
+
+status:
+ title: Status
+ content: >
+ If Disabled, this Team will not be
+ available for ticket assignments nor receive Alerts & Notices on
+ previous assignments.
+
+lead:
+ title: Team Lead
+ content: >
+ A Team can have an appointed
+ leader who can receive Alerts &
+ Notices separate from the members.
+ links:
+ - title: Configure Alerts & Notices
+ href: /scp/settings.php?t=alerts
+
+assignment_alert:
+ title: Assignment Alert
+ content: >
+ You may disable the Ticket Assignment
+ Alert for tickets assigned to this Team.
+ links:
+ - title: Configure Alerts & Notices
+ href: /scp/settings.php?t=alerts
+
+members:
+ title: Team Members
+ content: >
+ Team membership is configured via the Agent profile.
+ links:
+ - title: Manage Staff
+ href: /scp/staff.php
diff --git a/www/include/i18n/en_US/help/tips/staff.yaml b/www/include/i18n/en_US/help/tips/staff.yaml
new file mode 100644
index 0000000..fc3dc83
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/staff.yaml
@@ -0,0 +1,35 @@
+#
+# This is popup help messages for the Admin Panel -> Staff
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+signature:
+ title: Staff Signature Line
+ content: |
+ Create staff’s signature for response to tickets. This signature
+ will appear as an option at the bottom of a ticket response
+
+type:
+ title: Account Type
+ content: |
+ Admins have the privilege of accessing the Admin Panel. Staff only
+ have access to manage tickets and the knowledge base
+
+group:
+ title: Assigned Group
+ content: |
+ Group membership defines the staff’s role in the system. Visit the
+ group management page to define what access this staff has to the
+ help desk
+
+notes:
+ title: Internal Notes
+ content: |
+ Place internal notes regarding staff; notes are only visible to
+ staff whose account type is Admin
diff --git a/www/include/i18n/en_US/help/tips/tasks.queue.yaml b/www/include/i18n/en_US/help/tips/tasks.queue.yaml
new file mode 100644
index 0000000..393447f
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/tasks.queue.yaml
@@ -0,0 +1,28 @@
+#
+# This is popup help messages for the Agents Panel -> Tasks
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+advanced:
+ title: Advanced
+ content: >
+ Narrow down your search parameters. Once you have selected your advanced
+ search criteria and run the search, you can Export
+ the data at the bottom of the page.
+
+export:
+ title: Export
+ content: >
+ Export your data currently in view in a CSV file.
+ CSV files may be opened with any spreadsheet software
+ (i.e., Microsoft Excel, Apple Pages, OpenOffice, etc.).
diff --git a/www/include/i18n/en_US/help/tips/tickets.queue.yaml b/www/include/i18n/en_US/help/tips/tickets.queue.yaml
new file mode 100644
index 0000000..5be3f55
--- /dev/null
+++ b/www/include/i18n/en_US/help/tips/tickets.queue.yaml
@@ -0,0 +1,107 @@
+#
+# This is popup help messages for the Staff Panel -> Tickets -> Open
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+# title - Link title
+# href - href of link (links starting with / are translated to the
+# helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+search_field:
+ title: Search Field
+ content: >
+
+advanced:
+ title: Advanced
+ content: >
+ Narrow down your search parameters. Once you have selected your advanced
+ search criteria and run the search, you can Export
+ the data at the bottom of the tickets page.
+
+open_tickets_table:
+ title: Open Tickets Table
+ content: >
+ All tickets currently opened and requiring attention
+
+ticket:
+ title: Ticket
+ content: >
+
+date:
+ title: Date
+ content: >
+
+subject:
+ title: Subject
+ content: >
+
+from:
+ title: From
+ content: >
+
+priority:
+ title: Priority
+ content: >
+
+assigned_to:
+ title: Assigned To
+ content: >
+
+export:
+ title: Export
+ content: >
+ Export your data currently in view in a CSV file.
+ CSV files may be opened with any spreadsheet software
+ (i.e., Microsoft Excel, Apple Pages, OpenOffice, etc.).
+
+advanced_search_dialog:
+ title: Advanced Search
+ content: >
+
+
+adv_keyword:
+ title: Keyword Search
+ content: >
+ Find hits based on the subject and message bodies of the ticket
+ thread as well as all textual content associated with custom fields
+ for the users and the tickets.
+
+adv_date_range:
+ title: Search by Date Range
+ content: >
+ Definition here
+
+merge_types:
+ title: Merge Types
+ content: >
+ Combine Threads:
+ Threads from all Tickets will be displayed chronologically.
+ Separate Threads:
+ Threads from Tickets will be displayed one Ticket at a time.
+
+child_status:
+ title: Child Ticket Status
+ content: >
+ All Child Tickets will be set to a closed status since thread entries will all be moved to the Parent Ticket.
+
+parent_status:
+ title: Parent Ticket Status
+ content: >
+ If you choose to set a Parent Status, the Parent Ticket will be changed to the status you select.
+ The Ticket on top of the list will be the Parent Ticket.
+
+reply_types:
+ title: Reply Types
+ content: >
+ Reply All:
+ This reply is sent to the User and the Collaborators you choose to include.
+ Reply to User:
+ This reply is sent to the User only, no Collaborators.
+ Do Not Email Reply:
+ No email alerts are sent out, however, the Agent response is visible to ALL Users upon viewing the Ticket.
diff --git a/www/include/i18n/en_US/help_topic.yaml b/www/include/i18n/en_US/help_topic.yaml
new file mode 100644
index 0000000..acf674a
--- /dev/null
+++ b/www/include/i18n/en_US/help_topic.yaml
@@ -0,0 +1,57 @@
+#
+# Default help topics installed for the system
+#
+# Fields:
+# id - (int:optional) id number in the database
+# topic - (string) descriptive name of the help topic
+# flags - (bitmask: Active | Disabled | Archived)
+# ispublic - (bool:0|1) true or false if end users should be able to see the
+# help topic. In other words, true or false if the help topic is _not_
+# for internal use only
+# noautoresp - (bool:1) true to disable the auto-responder for tickets
+# assigned to this help topic. NOTE that this field must be completely
+# omitted to ENABLE the auto-response by default
+# dept_id - (int) id number of the department with which this help topic is
+# associated
+# sla_id - (int:optional) id number of the sla with which this help topic is
+# associated
+# notes - (string) administrative notes (internally viewable only)
+#
+---
+- topic_id: 1
+ flags: 0x02
+ ispublic: 1
+ priority_id: 2
+ forms: [2]
+ topic: General Inquiry
+ notes: |
+ Questions about products or services
+
+- topic_id: 2
+ flags: 0x02
+ ispublic: 1
+ priority_id: 1
+ forms: [2]
+ topic: Feedback
+ notes: |
+ Tickets that primarily concern the sales and billing departments
+
+- topic_id: 10
+ flags: 0x02
+ ispublic: 1
+ dept_id: 3
+ priority_id: 2
+ forms: [2]
+ topic: Report a Problem
+ notes: |
+ Product, service, or equipment related issues
+
+- topic_pid: 10
+ flags: 0x02
+ ispublic: 1
+ sla_id: 1
+ priority_id: 3
+ forms: [2]
+ topic: Access Issue
+ notes: |
+ Report an inability access a physical or virtual asset
diff --git a/www/include/i18n/en_US/list.yaml b/www/include/i18n/en_US/list.yaml
new file mode 100644
index 0000000..d4e4f6a
--- /dev/null
+++ b/www/include/i18n/en_US/list.yaml
@@ -0,0 +1,55 @@
+#
+# Custom (dynamic) lists. This data is used as the initial,
+# minimal data for dynamic list that ships with the system.
+#
+# Fields:
+# id: Primary id (not recommended)
+# name: Name of the list
+# name_plural: Name in plural (optional)
+# sort_mode: Sorting order (Alpha, -Alpha, SortCol)
+# masks: Edit masks to indicate various statuses of the list
+# (e.g if editable or deletable..etc)
+# notes: Notes for the list
+# items: List of items for the list
+# id: Primary id
+# value: Value (name) of the list item
+# extra: Abbreviated version of the value
+# status: If enabled (1 - enabled, 0 - disabled)
+# sort: Sort order (optional)
+# properties: Item-specific config based on Ticket Flags form fields
+# (key): (value)
+# properties: List properties form (see form.yaml for details)
+#
+---
+# Ticket statuses
+- type: ticket-status #notrans
+ name: Ticket Status
+ name_plural: Ticket Statuses
+ sort_mode: SortCol # notrans
+ masks: 13
+ notes: |
+ Ticket statuses
+ properties:
+ title: Ticket Status Properties
+ instructions: Properties that can be set on a ticket status.
+ flags: 0
+ fields:
+ - type: state # notrans
+ name: state # notrans
+ label: State
+ sort: 1
+ flags: 0x770F1
+ configuration:
+ prompt: State of a ticket
+ - type: memo # notrans
+ name: description # notrans
+ label: Description
+ sort: 3
+ flags: 0x73021
+ configuration:
+ rows: 2
+ cols: 40
+ html: false
+ length: 100
+ configuration:
+ handler: TicketStatusList
diff --git a/www/include/i18n/en_US/organization.yaml b/www/include/i18n/en_US/organization.yaml
new file mode 100644
index 0000000..6f7d4b6
--- /dev/null
+++ b/www/include/i18n/en_US/organization.yaml
@@ -0,0 +1,21 @@
+#
+# Initial organizations defined for the system.
+#
+# Fields:
+# name - Descriptive name for the organization
+# fields - custom fields
+#
+---
+- name: osTicket
+ fields:
+ address:|
+ 1120 5th Street
+ Alexandria, LA 71301
+ phone: (318) 290-3674
+ website: https://osticket.com
+ notes: >
+ Not only do we develop the software, we also use it to manage
+ support for osTicket. Let us help you quickly implement and leverage
+ the full potential of osTicket's features and functionality. Contact
+ us for professional support or visit our website for documentation
+ and community support.
diff --git a/www/include/i18n/en_US/priority.yaml b/www/include/i18n/en_US/priority.yaml
new file mode 100644
index 0000000..760c84e
--- /dev/null
+++ b/www/include/i18n/en_US/priority.yaml
@@ -0,0 +1,24 @@
+#
+# Default system data for ticket priorities
+#
+---
+low:
+ priority_id: 1
+ priority_desc: Low
+ priority_color: "#DDFFDD"
+ priority_urgency: 4
+normal:
+ priority_id: 2
+ priority_desc: Normal
+ priority_color: "#FFFFF0A"
+ priority_urgency: 3
+high:
+ priority_id: 3
+ priority_desc: High
+ priority_color: "#FEE7E7"
+ priority_urgency: 2
+emergency:
+ priority_id: 4
+ priority_desc: Emergency
+ priority_color: "#FEE7E7"
+ priority_urgency: 1
diff --git a/www/include/i18n/en_US/queue.yaml b/www/include/i18n/en_US/queue.yaml
new file mode 100644
index 0000000..83870a3
--- /dev/null
+++ b/www/include/i18n/en_US/queue.yaml
@@ -0,0 +1,647 @@
+#
+# Basic queues for the initial ticket system. Queues installed for
+# - Open / All
+# - Open / Unassigned
+# - Open / Overdue
+# - Answered / All
+# - My Tickets / All
+# - Closed / All
+#
+# Fields:
+# id:
+# parent_id:
+# flags:
+# 0x01: FLAG_PUBLIC
+# 0x02: FLAG_QUEUE (should be set for everything here)
+# 0x04: FLAG_DISABLED
+# 0x08: FLAG_INHERIT (inherit criteria from parent)
+# 0x10: FLAG_INHERIT_COLUMNS
+# 0x20: FLAG_INHERIT_SORTING
+# staff_id: User owner of the queue
+# sort: Manual sort order
+# title: Display name of the queue
+# config: Criteria configuration
+# filter: Quick filter field
+# root: Object type of the queue listing
+# 'T': Tickets
+# 'A': Tasks
+#
+---
+- id: 1
+ title: Open
+ parent_id: 0
+ flags: 0x03
+ sort: 1
+ sort_id: 1
+ root: T
+ config: '[["status__state","includes",{"open":"Open"}]]'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 10
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Last Updated
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 8
+ bits: 1
+ sort: 6
+ width: 160
+ heading: Assigned To
+ sorts:
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 2
+ title: Open
+ parent_id: 1
+ flags: 0x2b
+ root: T
+ sort: 1
+ sort_id: 4
+ config: '{"criteria":[["isanswered","nset",null]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 10
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Last Updated
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 8
+ bits: 1
+ sort: 6
+ width: 160
+ heading: Assigned To
+
+- id: 3
+ title: Answered
+ parent_id: 1
+ flags: 0x2b
+ root: T
+ sort: 2
+ sort_id: 4
+ config: '{"criteria":[["isanswered","set",null]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 10
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Last Updated
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 8
+ bits: 1
+ sort: 6
+ width: 160
+ heading: Assigned To
+
+- id: 4
+ title: Overdue
+ parent_id: 1
+ flags: 0x2b
+ root: T
+ sort: 3
+ sort_id: 4
+ config: '{"criteria":[["isoverdue","set",null]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 9
+ bits: 1
+ sort: 1
+ sort: 9
+ width: 150
+ heading: Due Date
+ - column_id: 3
+ bits: 1
+ sort: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Assigned To
+
+- id: 5
+ title: My Tickets
+ parent_id: 0
+ flags: 0x03
+ root: T
+ sort: 3
+ sort_id: 3
+ config: '{"criteria":[["assignee","includes",{"M":"Me","T":"One of my teams"}],["status__state","includes",{"open":"Open"}]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 10
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Last Update
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 11
+ bits: 1
+ sort: 6
+ width: 160
+ heading: Department
+ sorts:
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 6
+ title: Assigned to Me
+ parent_id: 5
+ flags: 0x2b
+ root: T
+ sort: 1
+ config: '{"criteria":[["assignee","includes",{"M":"Me"}]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 10
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Last Update
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 11
+ bits: 1
+ sort: 6
+ width: 160
+ heading: Department
+ sorts:
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 7
+ title: Assigned to Teams
+ parent_id: 5
+ flags: 0x2b
+ root: T
+ sort: 2
+ config: '{"criteria":[["assignee","!includes",{"M":"Me"}]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 10
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Last Update
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 5
+ bits: 1
+ sort: 5
+ width: 85
+ heading: Priority
+ - column_id: 14
+ bits: 1
+ sort: 6
+ width: 160
+ heading: Team
+ sorts:
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 8
+ parent_id: 0
+ title: Closed
+ flags: 0x03
+ sort: 4
+ root: T
+ sort_id: 5
+ config: '{"criteria":[["status__state","includes",{"closed":"Closed"}]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 9
+ parent_id: 8
+ title: Today
+ flags: 0x2b
+ sort: 1
+ root: T
+ sort_id: 5
+ config: '{"criteria":[["closed","period","td"]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 10
+ parent_id: 8
+ title: Yesterday
+ flags: 0x2b
+ sort: 2
+ root: T
+ sort_id: 5
+ config: '{"criteria":[["closed","period","yd"]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 11
+ parent_id: 8
+ title: This Week
+ flags: 0x2b
+ sort: 3
+ root: T
+ sort_id: 5
+ config: '{"criteria":[["closed","period","tw"]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 12
+ parent_id: 8
+ title: This Month
+ flags: 0x2b
+ sort: 4
+ root: T
+ sort_id: 5
+ config: '{"criteria":[["closed","period","tm"]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 13
+ parent_id: 8
+ title: This Quarter
+ flags: 0x2b
+ sort: 5
+ root: T
+ sort_id: 6
+ config: '{"criteria":[["closed","period","tq"]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
+
+- id: 14
+ parent_id: 8
+ title: This Year
+ flags: 0x2b
+ sort: 6
+ root: T
+ sort_id: 7
+ config: '{"criteria":[["closed","period","ty"]],"conditions":[]}'
+ columns:
+ - column_id: 1
+ bits: 1
+ sort: 1
+ width: 100
+ heading: Ticket
+ - column_id: 7
+ bits: 1
+ sort: 2
+ width: 150
+ heading: Date Closed
+ - column_id: 3
+ bits: 1
+ sort: 3
+ width: 300
+ heading: Subject
+ - column_id: 4
+ bits: 1
+ sort: 4
+ width: 185
+ heading: From
+ - column_id: 8
+ bits: 1
+ sort: 1
+ sort: 6
+ width: 160
+ heading: Closed By
+ sorts:
+ - sort_id: 5
+ - sort_id: 1
+ - sort_id: 2
+ - sort_id: 3
+ - sort_id: 4
+ - sort_id: 6
+ - sort_id: 7
diff --git a/www/include/i18n/en_US/queue_column.yaml b/www/include/i18n/en_US/queue_column.yaml
new file mode 100644
index 0000000..87b3c09
--- /dev/null
+++ b/www/include/i18n/en_US/queue_column.yaml
@@ -0,0 +1,138 @@
+# Columns are not necessary and a default list is used if no columns are
+# specified.
+#
+# Fields:
+# id:
+# flags: (unused)
+# name: Display name of the column
+# primary: Data source for the field
+# secondary: Backup data source / default text
+# filter: What the field should link to
+# 'link:ticket': Ticket
+# 'link:user': User
+# 'link:org': Organization
+# 'link:ticketP': Ticket with hover preview
+# truncate:
+# 'wrap': Fold words on multiple lines
+# annotations:
+# c: Annotation class name
+# p: Placement
+# 'a': After column text
+# 'b': Before column text
+# '<': Float to start (left)
+# '>': Float to end (right)
+# conditions:
+# crit: Criteria for the condiditon, in the form of [field, method, value]
+# prop: Array of CSS properties to apply to the field
+# 'font-weight':
+# 'font-style':
+# ...
+# extra: (future use and for plugins)
+---
+- id: 1
+ name: "Ticket #"
+ primary: "number"
+ filter: "link:ticketP"
+ truncate: "wrap"
+ annotations: '[{"c":"TicketSourceDecoration","p":"b"}]'
+ conditions: '[{"crit":["isanswered","nset",null],"prop":{"font-weight":"bold"}}]'
+
+- id: 2
+ name: "Date Created"
+ primary: "created"
+ secondary: null
+ filter: "date:full"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 3
+ name: "Subject"
+ primary: "cdata__subject"
+ filter: "link:ticket"
+ truncate: "ellipsis"
+ annotations: '[{"c":"TicketThreadCount","p":">"},{"c":"ThreadAttachmentCount","p":"a"},{"c":"OverdueFlagDecoration","p":"<"},{"c":"LockDecoration","p":"<"}]'
+ conditions: '[{"crit":["isanswered","nset",null],"prop":{"font-weight":"bold"}}]'
+
+- id: 4
+ name: "User Name"
+ primary: "user__name"
+ truncate: "wrap"
+ annotations: '[{"c":"ThreadCollaboratorCount","p":">"}]'
+ conditions: "[]"
+
+- id: 5
+ name: "Priority"
+ primary: "cdata__priority"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 6
+ name: "Status"
+ primary: "status__id"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 7
+ name: "Close Date"
+ primary: "closed"
+ filter: "date:full"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 8
+ name: "Assignee"
+ primary: "assignee"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 9
+ name: "Due Date"
+ primary: "duedate"
+ secondary: "est_duedate"
+ filter: "date:human"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 10
+ name: "Last Updated"
+ primary: "lastupdate"
+ filter: "date:full"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 11
+ name: "Department"
+ primary: "dept_id"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 12
+ name: "Last Message"
+ primary: "thread__lastmessage"
+ filter: "date:human"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 13
+ name: "Last Response"
+ primary: "thread__lastresponse"
+ filter: "date:human"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
+
+- id: 14
+ name: "Team"
+ primary: "team_id"
+ truncate: "wrap"
+ annotations: "[]"
+ conditions: "[]"
diff --git a/www/include/i18n/en_US/queue_sort.yaml b/www/include/i18n/en_US/queue_sort.yaml
new file mode 100644
index 0000000..35cd47d
--- /dev/null
+++ b/www/include/i18n/en_US/queue_sort.yaml
@@ -0,0 +1,33 @@
+# Columns are not necessary and a default list is used if no columns are
+# specified.
+#
+# Fields:
+# id:
+---
+- id: 1
+ name: Priority + Most Recently Updated
+ columns: '["-cdata__priority","-lastupdate"]'
+
+- id: 2
+ name: Priority + Most Recently Created
+ columns: '["-cdata__priority","-created"]'
+
+- id: 3
+ name: Priority + Due Date
+ columns: '["-cdata__priority","-est_duedate"]'
+
+- id: 4
+ name: Due Date
+ columns: '["-est_duedate"]'
+
+- id: 5
+ name: Closed Date
+ columns: '["-closed"]'
+
+- id: 6
+ name: Create Date
+ columns: '["-created"]'
+
+- id: 7
+ name: Update Date
+ columns: '["-lastupdate"]'
diff --git a/www/include/i18n/en_US/role.yaml b/www/include/i18n/en_US/role.yaml
new file mode 100644
index 0000000..35d6adf
--- /dev/null
+++ b/www/include/i18n/en_US/role.yaml
@@ -0,0 +1,91 @@
+#
+# Default roles defined for the system
+#
+# Fields:
+# id - Primary id for the role
+# flags - (bit mask) role flags
+# name - (string) descriptive name for the role
+# notes - (string) internal notes
+# permissions: (list)
+#
+# NOTE: ------------------------------------
+# ---
+- id: 1
+ flags: 1
+ name: All Access
+ notes: |
+ Role with unlimited access
+
+ permissions: [
+ ticket.create,
+ ticket.edit,
+ ticket.merge,
+ ticket.link,
+ ticket.markanswered,
+ ticket.assign,
+ ticket.release,
+ ticket.transfer,
+ ticket.refer,
+ ticket.reply,
+ ticket.close,
+ ticket.delete,
+ task.create,
+ task.edit,
+ task.assign,
+ task.transfer,
+ task.reply,
+ task.close,
+ task.delete,
+ canned.manage,
+ thread.edit]
+
+- id: 2
+ flags: 1
+ name: Expanded Access
+ notes: |
+ Role with expanded access
+
+ permissions: [
+ ticket.create,
+ ticket.edit,
+ ticket.merge,
+ ticket.link,
+ ticket.assign,
+ ticket.release,
+ ticket.transfer,
+ ticket.refer,
+ ticket.reply,
+ ticket.close,
+ task.create,
+ task.edit,
+ task.assign,
+ task.transfer,
+ task.reply,
+ task.close,
+ canned.manage]
+
+- id: 3
+ flags: 1
+ name: Limited Access
+ notes: |
+ Role with limited access
+
+ permissions: [
+ ticket.create,
+ ticket.merge,
+ ticket.link,
+ ticket.assign,
+ ticket.release,
+ ticket.transfer,
+ ticket.refer,
+ ticket.reply
+ task.create,
+ task.assign,
+ task.transfer,
+ task.reply]
+
+- id: 4
+ flags: 1
+ name: View only
+ notes: Simple role with no permissions
+ permissions: []
diff --git a/www/include/i18n/en_US/schedule.yaml b/www/include/i18n/en_US/schedule.yaml
new file mode 100644
index 0000000..e38bcff
--- /dev/null
+++ b/www/include/i18n/en_US/schedule.yaml
@@ -0,0 +1,155 @@
+# Initial set of schedules and entries
+#
+# Fields:
+# id:
+# flags:
+# 0x01: FLAG_BIZHRS (Business Hours - Otherwise Holidays is assumed)
+# sort: Manual sort order
+# name: Name of the Schedule
+# timezone: Timezone of the Schedule
+# description: Description of the Schedule
+# entries: Schedule Entries
+#
+---
+- id: 1
+ flags: 0x01
+ name: Monday - Friday 8am - 5pm with U.S. Holidays
+ configuration:
+ holidays: [4]
+ entries:
+ - name: Monday
+ repeats: weekly #notrans
+ starts_on: 2019-01-07
+ starts_at: 08:00:00
+ ends_on: 2019-01-07
+ ends_at: 17:00:00
+ day: 1
+ - name: Tuesday
+ repeats: weekly #notrans
+ starts_on: 2019-01-08
+ starts_at: 08:00:00
+ ends_on: 2019-01-08
+ ends_at: 17:00:00
+ day: 2
+ - name: Wednesday
+ repeats: weekly #notrans
+ starts_on: 2019-01-09
+ starts_at: 08:00:00
+ ends_on: 2019-01-09
+ ends_at: 17:00:00
+ day: 3
+ - name: Thursday
+ repeats: weekly #notrans
+ starts_on: 2019-01-10
+ starts_at: 08:00:00
+ ends_on: 2019-01-10
+ ends_at: 17:00:00
+ day: 4
+ - name: Friday
+ repeats: weekly #notrans
+ starts_on: 2019-01-11
+ starts_at: 08:00:00
+ ends_on: 2019-01-11
+ ends_at: 17:00:00
+ day: 5
+- id: 2
+ flags: 0x01
+ name: 24/7
+ entries:
+ - name: Daily
+ repeats: daily #notrans
+ starts_on: 2019-01-01
+ starts_at: 00:00:00
+ ends_on: 2019-01-01
+ ends_at: 23:59:59
+- id: 3
+ flags: 0x01
+ name: 24/5
+ entries:
+ - name: Weekdays
+ repeats: weekdays #notrans
+ starts_on: 2019-01-01
+ starts_at: 00:00:00
+ ends_on: 2019-01-01
+ ends_at: 23:59:59
+- id: 4
+ flags: 0
+ name: U.S. Holidays
+ entries:
+ - name: New Year's Day
+ repeats: yearly #notrans
+ starts_on: 2019-01-01
+ starts_at: 00:00:00
+ ends_on: 2019-01-01
+ ends_at: 23:59:59
+ day: 1
+ month: 1
+ - name: MLK Day
+ repeats: yearly #notrans
+ starts_on: 2019-01-21
+ starts_at: 00:00:00
+ ends_on: 2019-01-21
+ ends_at: 23:59:59
+ day: 1
+ week: 3
+ month: 1
+ - name: Memorial Day
+ repeats: yearly #notrans
+ starts_on: 2019-05-27
+ starts_at: 00:00:00
+ ends_on: 2019-05-27
+ ends_at: 23:59:59
+ day: 1
+ week: -1
+ month: 5
+ - name: Independence Day (4th of July)
+ repeats: yearly #notrans
+ starts_on: 2019-07-04
+ starts_at: 00:00:00
+ ends_on: 2019-07-04
+ ends_at: 23:59:59
+ day: 4
+ month: 7
+ - name: Labor Day
+ repeats: yearly #notrans
+ starts_on: 2019-09-02
+ starts_at: 00:00:00
+ ends_on: 2019-09-02
+ ends_at: 23:59:59
+ day: 1
+ week: 1
+ month: 9
+ - name: Indigenous Peoples' Day (Whodat Columbus)
+ repeats: yearly #notrans
+ starts_on: 2019-10-14
+ starts_at: 00:00:00
+ ends_on: 2019-10-14
+ ends_at: 23:59:59
+ day: 1
+ week: 2
+ month: 10
+ - name: Veterans Day
+ repeats: yearly #notrans
+ starts_on: 2019-11-11
+ starts_at: 00:00:00
+ ends_on: 2019-11-11
+ ends_at: 23:59:59
+ day: 11
+ month: 11
+ - name: Thanksgiving Day
+ repeats: yearly #notrans
+ starts_on: 2019-11-28
+ starts_at: 00:00:00
+ ends_on: 2019-11-28
+ ends_at: 23:59:59
+ day: 4
+ week: 4
+ month: 11
+ - name: Christmas Day
+ repeats: yearly #notrans
+ starts_on: 2019-11-25
+ starts_at: 00:00:00
+ ends_on: 2019-11-25
+ ends_at: 23:59:59
+ day: 25
+ month: 12
diff --git a/www/include/i18n/en_US/sequence.yaml b/www/include/i18n/en_US/sequence.yaml
new file mode 100644
index 0000000..f67594a
--- /dev/null
+++ b/www/include/i18n/en_US/sequence.yaml
@@ -0,0 +1,30 @@
+#
+# Sequences installed with the system
+#
+# Fields:
+# id: PK
+# name: Name of the sequence
+# next: Next value of the sequence
+# padding: Padding character
+# increment: Distance between two numbers of the sequence
+# flags: Bitmask of flag settings. Currently known values are
+# INTERNAL:=0x0001 (restrict delete)
+#
+---
+# ID:1 is reserved for upgrades. When transitioning to osTicket 1.10, the
+# sequence ID:1 will be configured to start counting from the current
+# MAX(ticket.ticket_id). The upgrade will miss this step if there is no
+# sequence with ID:1
+- id: 1
+ name: "General Tickets"
+ next: 1
+ padding: '0'
+ increment: 1
+ flags: 1
+
+- id: 2
+ name: "Tasks Sequence"
+ next: 1
+ padding: '0'
+ increment: 1
+ flags: 1
diff --git a/www/include/i18n/en_US/sla.yaml b/www/include/i18n/en_US/sla.yaml
new file mode 100644
index 0000000..a847ea2
--- /dev/null
+++ b/www/include/i18n/en_US/sla.yaml
@@ -0,0 +1,23 @@
+#
+# Initial Service-Level-Agreements (SLA) defined for the system
+#
+# Fields:
+# id - (int:optional) id number in the database
+# flags - (int:bitmask)
+# isactive - (flag:1) true of false if the SLA should initially be active
+# enable_priority_escalation - (flag:2) true or false if the SLA should
+# cause the ticket priority to be escalated when it is marked overdue
+# disable_overdue_alerts - (flag:4) - true or false if the overdue alert
+# emails should _not_ go out for tickets assigned to this SLA
+# transient - (flag:8) - true if the SLA should change when changing
+# department or help topic.
+# grace_period - (int) number or hours after the ticket is opened before it
+# is marked overdue
+# name - (string) descriptive name of the SLA
+# notes - (string) administrative notes (viewable internally only)
+---
+- id: 1
+ flags: 3
+ grace_period: 18
+ name: Default SLA
+ notes: |
diff --git a/www/include/i18n/en_US/team.yaml b/www/include/i18n/en_US/team.yaml
new file mode 100644
index 0000000..136de65
--- /dev/null
+++ b/www/include/i18n/en_US/team.yaml
@@ -0,0 +1,16 @@
+#
+# Initial teams defined for the system.
+#
+# Fields:
+# flags - (int)
+# - isenabled - (0x01) true or false if the team should be initially
+# enabled
+# - noalerts - (0x02)
+# name - Descriptive name for the team
+# notes - Administrative notes (viewable internal only)
+#
+---
+- flags: 0x01
+ name: Level I Support
+ notes: |
+ Tier 1 support, responsible for the initial iteraction with customers
diff --git a/www/include/i18n/en_US/templates/email/assigned.alert.yaml b/www/include/i18n/en_US/templates/email/assigned.alert.yaml
new file mode 100644
index 0000000..40087d4
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/assigned.alert.yaml
@@ -0,0 +1,54 @@
+#
+# Email template: assigned.alert.yaml
+#
+# Sent to staff members when a ticket is assigned to them. Tickets can be
+# assigned automatically by the system or manually by another staff member.
+# Use %{assigner} to distinguish who made the assignment.
+#
+---
+notes: |
+ Sent to staff members when a ticket is assigned to them. Tickets can be
+ assigned automatically by the system or manually by another staff
+ member. Use %{assigner} to distinguish who made the assignment.
+
+subject: |
+ Ticket Assigned to you
+body: |
+
Hi %{assignee.name.first},
+ Ticket #%{ticket.number} has been
+ assigned to you by %{assigner.name.short}
+
+
+
+
+
+
+ From:
+
+
+ %{ticket.name} <%{ticket.email}>
+
+
+
+
+ Subject:
+
+
+ %{ticket.subject}
+
+
+
+
+
+ %{comments}
+
+
+
+
To view/respond to the ticket, please login to the support ticket system
+ Your friendly Customer Support
+ System
+
+
diff --git a/www/include/i18n/en_US/templates/email/message.alert.yaml b/www/include/i18n/en_US/templates/email/message.alert.yaml
new file mode 100644
index 0000000..13826fb
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/message.alert.yaml
@@ -0,0 +1,53 @@
+#
+# Email template: message.alert.yaml
+#
+# Sent to staff members when a new message is posted by a user to a ticket.
+# This can occur if the users responds to an email from the system or visits
+# the customer web portal and posts a new message there.
+#
+---
+notes: |
+ Sent to staff members when a new message is posted by a user to a
+ ticket. This can occur if the users responds to an email from the
+ system or visits the customer web portal and posts a new message there.
+
+subject: |
+ New Message Alert
+body: |
+
To view or respond to the ticket, please login to the support ticket system
+ Your friendly
+ Customer Support System
+
diff --git a/www/include/i18n/en_US/templates/email/message.autoresp.yaml b/www/include/i18n/en_US/templates/email/message.autoresp.yaml
new file mode 100644
index 0000000..ec8c6fb
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/message.autoresp.yaml
@@ -0,0 +1,30 @@
+#
+# Email template: message.autoresp.yaml
+#
+# Sent to a user when the user posts a new message to a ticket. This can
+# happen if the users responds to an email from the system or visits the
+# customer web portal and posts a new message there.
+#
+---
+notes: |
+ Sent to a user when the user posts a new message to a ticket. This can
+ happen if the user responds to an email from the system or visits the
+ customer web portal and posts a new message there.
+
+subject: |
+ Message Confirmation
+body: |
+
Dear %{recipient.name.first},
+ Your reply to support request #%{ticket.number} has been noted
+
+
+
+ Your %{company.name} Team,
+ %{signature}
+
+
+
You can view the support request progress online here
+
diff --git a/www/include/i18n/en_US/templates/email/note.alert.yaml b/www/include/i18n/en_US/templates/email/note.alert.yaml
new file mode 100644
index 0000000..5a1bcd9
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/note.alert.yaml
@@ -0,0 +1,53 @@
+#
+# Email template: note.alert.yaml
+#
+# Sent to staff members when a new internal note is appended to a ticket.
+# Internal notes can only be added by staff members.
+#
+---
+notes: |
+ Alert sent out to Agents when internal activity such as an internal
+ note or an agent reply is appended to a ticket.
+
+subject: |
+ New Internal Activity Alert
+body: |
+
+
+ %{note.message}
+
+
+
+ To view/respond to the ticket, please login to the support ticket system
+
+
+ Your friendly Customer Support
+ System
+
+
diff --git a/www/include/i18n/en_US/templates/email/task.activity.alert.yaml b/www/include/i18n/en_US/templates/email/task.activity.alert.yaml
new file mode 100644
index 0000000..5c94582
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/task.activity.alert.yaml
@@ -0,0 +1,32 @@
+#
+# Email template: task.activity.alert.yaml
+#
+# Sent to agents when a new note/message is posted to a task.
+# This can occur if a collaborator or an agent responds to an email from the
+# system or visits the web portal and posts a new message there.
+#
+#
+---
+notes: |
+ Sent to agents when a new message/note is posted to a task. This can
+ occur if a collaborator or an agent responds to an email from the system
+ or visits the web portal and posts a new message there.
+
+subject: |
+ Task Activity [#%{task.number}] - %{activity.title}
+body: |
+
To view or respond to the task, please login to the support system
+ Your friendly
+ Customer Support System
+
diff --git a/www/include/i18n/en_US/templates/email/task.activity.notice.yaml b/www/include/i18n/en_US/templates/email/task.activity.notice.yaml
new file mode 100644
index 0000000..750e4a0
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/task.activity.notice.yaml
@@ -0,0 +1,25 @@
+#
+# Email template: task.activity.notice.yaml
+#
+# Notice sent to collaborators on task activity e.g reply or message
+#
+---
+notes: |
+ Notice sent to collaborators on task activity e.g reply or message.
+
+subject: |
+ Re: %{task.title} [#%{task.number}]
+body: |
+
Dear %{recipient.name.first},
+
+ %{poster.name} just logged a message to a task in which you participate.
+
+
+ %{message}
+
+
+
+
+ You're getting this email because you are a collaborator on task
+ #%{task.number}. To participate, simply reply to this email.
+
diff --git a/www/include/i18n/en_US/templates/email/task.alert.yaml b/www/include/i18n/en_US/templates/email/task.alert.yaml
new file mode 100644
index 0000000..c04e3a4
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/task.alert.yaml
@@ -0,0 +1,41 @@
+#
+# Email template: task.alert.yaml
+#
+# Sent to an agent when a new task is created in the system.
+#
+#
+---
+notes: |
+ Sent to an agent when a new task is created in the system.
+
+subject: |
+ New Task Alert
+body: |
+
To view or respond to the ticket, please login to the support system
+ Your friendly Customer Support System
+
+
diff --git a/www/include/i18n/en_US/templates/email/task.assignment.alert.yaml b/www/include/i18n/en_US/templates/email/task.assignment.alert.yaml
new file mode 100644
index 0000000..4778cf1
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/task.assignment.alert.yaml
@@ -0,0 +1,32 @@
+#
+# Email template: task.assignment.alert.yaml
+#
+# Sent to agents when a task is assigned to them or the team to which
+# they belong.
+# Use %{assigner} to distinguish who made the assignment.
+#
+---
+notes: |
+ Sent to agents when a task is assigned to them or the team to which
+ they belong. Use %{assigner} to distinguish who made the assignment.
+
+subject: |
+ Task Assigned to you
+body: |
+
Hi %{assignee.name.first},
+ Task #%{task.number} has been
+ assigned to you by %{assigner.name.short}
+
+
+ %{comments}
+
+
+
+
To view/respond to the task, please login to the support system
+ Your friendly Customer Support
+ System
+
+
diff --git a/www/include/i18n/en_US/templates/email/task.overdue.alert.yaml b/www/include/i18n/en_US/templates/email/task.overdue.alert.yaml
new file mode 100644
index 0000000..05a8573
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/task.overdue.alert.yaml
@@ -0,0 +1,36 @@
+#
+# Email template: task.overdue.alert.yaml
+#
+# Sent to agents when a tasks transitions to overdue in the system.
+# Overdue tasks occur based on set due-date.
+#
+---
+notes: |
+ Sent to agents when a task transitions to overdue in the system.
+ Overdue tasks occur based on the set due-date.
+
+subject: |
+ Stale Task Alert
+body: |
+
Hi %{recipient.name},
+ A task, #%{task.number} is
+ seriously overdue.
+
+
+ We should all work hard to guarantee that all tasks are being
+ addressed in a timely manner.
+
+
+ Signed,
+ %{task.dept.manager.name}
+
+
To view or respond to the task, please login to the support system. You're receiving this
+ notice because the task is assigned directly to you or to a team or
+ department of which you're a member.
+ Your friendly (although with limited patience) Customer Support
+ System
+
diff --git a/www/include/i18n/en_US/templates/email/task.transfer.alert.yaml b/www/include/i18n/en_US/templates/email/task.transfer.alert.yaml
new file mode 100644
index 0000000..3f3cdfe
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/task.transfer.alert.yaml
@@ -0,0 +1,31 @@
+#
+# Email template: task.transfer.alert.yaml
+#
+# Sent to agents when a task is transfered to their department.
+#
+---
+notes: |
+ Sent to agents when a task is transfered to a department to which
+ they are a member.
+subject: |
+ Task #%{task.number} transfer - %{task.dept.name}
+body: |
+
Hi %{recipient.name},
+ Task #%{task.number} has been
+ transferred to the %{task.dept.name} department by
+ %{staff.name.short}
+
+
+
+ %{comments}
+
+
+
To view or respond to the task, please login to the support system.
+
+ Your friendly Customer Support
+ System
+
+
diff --git a/www/include/i18n/en_US/templates/email/ticket.activity.notice.yaml b/www/include/i18n/en_US/templates/email/ticket.activity.notice.yaml
new file mode 100644
index 0000000..d7baebe
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.activity.notice.yaml
@@ -0,0 +1,28 @@
+#
+# Email template: ticket.activity.notice.yaml
+#
+# Notice sent to collaborators on ticket activity e.g reply or message
+#
+---
+notes: |
+ Notice sent to collaborators on ticket activity e.g reply or message.
+
+subject: |
+ Re: %{ticket.subject} [#%{ticket.number}]
+body: |
+
Dear %{recipient.name.first},
+
+ %{poster.name} just logged a message to a ticket in which you participate.
+
+
+ %{message}
+
+
+
+
+ You're getting this email because you are a collaborator
+ on ticket #%{ticket.number}. To participate, simply reply to this email
+ or click here for a complete archive of the ticket thread.
+
diff --git a/www/include/i18n/en_US/templates/email/ticket.alert.yaml b/www/include/i18n/en_US/templates/email/ticket.alert.yaml
new file mode 100644
index 0000000..fbefd72
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.alert.yaml
@@ -0,0 +1,50 @@
+#
+# Email template: ticket.alert.yaml
+#
+# Sent to a staff member when a new ticket is created in the system. This
+# applies to tickets created via email, the web portal, or the api.
+#
+---
+notes: |
+ Sent to a staff member when a new ticket is created in the system. This
+ applies to tickets created via email, the web portal, or the api.
+
+subject: |
+ New Ticket Alert
+body: |
+
Hi %{recipient.name},
+ New ticket #%{ticket.number} created
+
+
+
+
+
+
+ From:
+
+
+ %{ticket.name} <%{ticket.email}>
+
+
+
+
+ Department:
+
+
+ %{ticket.dept.name}
+
+
+
+
+
+ %{message}
+
+
+
+
To view or respond to the ticket, please login to the support ticket system
+ Your friendly Customer Support System
+
+
diff --git a/www/include/i18n/en_US/templates/email/ticket.autoreply.yaml b/www/include/i18n/en_US/templates/email/ticket.autoreply.yaml
new file mode 100644
index 0000000..824e2e5
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.autoreply.yaml
@@ -0,0 +1,39 @@
+#
+# Email template: ticket.autoreply.yaml
+#
+# Sent to a user when an automatic canned response is posted to a ticket
+# when it is created
+#
+---
+notes: |
+ Sent to a user when an automatic canned response is posted to a ticket
+ when it is created.
+
+ Available variables for replacement: %{ticket.*}, %{response}
+
+subject: |
+ Re: %{ticket.subject} [#%{ticket.number}]
+body: |
+
Dear %{recipient.name.first},
+ A request for support has been created and assigned ticket #%{ticket.number} with the following
+ automatic reply
+
+
+ Topic: %{ticket.topic.name}
+
+ Subject: %{ticket.subject}
+
+
+ %{response}
+
+
+
Your %{company.name} Team,
+ %{signature}
+
+
We hope
+ this response has sufficiently answered your questions. If you wish to
+ provide additional comments or information, please reply to this email
+ or login to your account for
+ a complete archive of your support requests.
diff --git a/www/include/i18n/en_US/templates/email/ticket.autoresp.yaml b/www/include/i18n/en_US/templates/email/ticket.autoresp.yaml
new file mode 100644
index 0000000..d40ba57
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.autoresp.yaml
@@ -0,0 +1,31 @@
+#
+# Email template: ticket.autoresp.yaml
+#
+# Sent to a user when a new ticket is created
+#
+---
+notes: |
+ Sent to a user when a new ticket is created
+
+subject: |
+ Support Ticket Opened [#%{ticket.number}]
+body: |
+
Dear %{recipient.name.first},
+
+ A request for support has been created and assigned #%{ticket.number}.
+ A representative will follow-up with you as soon as possible. You can
+ view this ticket's progress
+ online.
+
+
+
+ Your %{company.name} Team,
+
+ %{signature}
+
+
+
If you
+ wish to provide additional comments or information regarding the issue,
+ please reply to this email or login to your account for
+ a complete archive of your support requests.
diff --git a/www/include/i18n/en_US/templates/email/ticket.notice.yaml b/www/include/i18n/en_US/templates/email/ticket.notice.yaml
new file mode 100644
index 0000000..9cfbefb
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.notice.yaml
@@ -0,0 +1,45 @@
+#
+# Email template: ticket.notice.yaml
+#
+# Sent to a user when a staff member creates a ticket on the user's behalf.
+# This is most commonly performed when user's call in on the phone.
+#
+---
+notes: |
+ Sent to a user when a staff member creates a ticket on the user's behalf.
+ This is most commonly performed when user's call in on the phone.
+
+subject: |
+ %{ticket.subject} [#%{ticket.number}]
+body: |
+
Dear %{recipient.name.first},
+ Our customer care team has created a ticket, #%{ticket.number} on your behalf, with
+ the following details and summary:
+
+
+ Topic: %{ticket.topic.name}
+
+ Subject: %{ticket.subject}
+
+
+ %{message}
+
+
+ %{response}
+
+
+ If need be, a representative will follow-up with you as soon as
+ possible. You can also view this
+ ticket's progress online.
+
+
+
+ Your %{company.name} Team,
+ %{signature}
+
+
If you
+ wish to provide additional comments or information regarding the issue,
+ please reply to this email or login to your account for
+ a complete archive of your support requests.
diff --git a/www/include/i18n/en_US/templates/email/ticket.overdue.yaml b/www/include/i18n/en_US/templates/email/ticket.overdue.yaml
new file mode 100644
index 0000000..5f165fa
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.overdue.yaml
@@ -0,0 +1,38 @@
+#
+# Email template: ticket.overdue.yaml
+#
+# Sent to staff members when a ticket transitions to overdue in the system.
+# Overdue tickets occur based on the ticket's due-date as well as the SLA
+# defined for the ticket.
+#
+---
+notes: |
+ Sent to staff members when a ticket transitions to overdue in the system.
+ Overdue tickets occur based on the ticket's due-date as well as the SLA
+ defined for the ticket.
+
+subject: |
+ Stale Ticket Alert
+body: |
+
Hi %{recipient.name},
+ A ticket, #%{ticket.number} is
+ seriously overdue.
+
+
+ We should all work hard to guarantee that all tickets are being
+ addressed in a timely manner.
+
+
+ Signed,
+ %{ticket.dept.manager.name}
+
+
To view or respond to the ticket, please login to the support ticket system. You're receiving this
+ notice because the ticket is assigned directly to you or to a team or
+ department of which you're a member.
+ Your friendly (although with limited patience) Customer Support
+ System
+
diff --git a/www/include/i18n/en_US/templates/email/ticket.overlimit.yaml b/www/include/i18n/en_US/templates/email/ticket.overlimit.yaml
new file mode 100644
index 0000000..724e3a8
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.overlimit.yaml
@@ -0,0 +1,25 @@
+#
+# Email template: ticket.overlimit.yaml
+#
+# Sent to users when they have exceeded the maximum open ticket limit. The
+# limit is configurable in the Admin Panel, and is defined by the number of
+# tickets open by a particular email address.
+#
+---
+notes: |
+ Sent to users when they have exceeded the maximum open ticket limit. The
+ limit is configurable in the Admin Panel, and is defined by the number
+ of tickets open by a particular email address.
+
+subject: |
+ Open Tickets Limit Reached
+body: |
+
Dear %{ticket.name.first},
+ You have reached the maximum number of open tickets allowed. To be able
+ to open another ticket, one of your pending tickets must be closed. To
+ update or add comments to an open ticket simply login to our helpdesk.
+
+
+ Thank you,
+ Support Ticket System
diff --git a/www/include/i18n/en_US/templates/email/ticket.reply.yaml b/www/include/i18n/en_US/templates/email/ticket.reply.yaml
new file mode 100644
index 0000000..c4d9dd7
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/ticket.reply.yaml
@@ -0,0 +1,29 @@
+#
+# Email template: ticket.reply.yaml
+#
+# Sent to users when a staff members makes a reply to their ticket. Replies
+# are only generated by staff members.
+#
+---
+notes: |
+ Sent to users when a staff members makes a reply to their ticket.
+ Replies are only generated by staff members.
+
+subject: |
+ Re: %{ticket.subject} [#%{ticket.number}]
+body: |
+
Dear %{recipient.name.first},
+ %{response}
+
+
+
+ Your %{company.name} Team,
+ %{signature}
+
+
+
We hope this response has sufficiently answered your questions. If
+ not, please do not send another email. Instead, reply to this email or
+ login
+ to your account for a complete archive of all your support requests
+ and responses.
diff --git a/www/include/i18n/en_US/templates/email/transfer.alert.yaml b/www/include/i18n/en_US/templates/email/transfer.alert.yaml
new file mode 100644
index 0000000..8e508fd
--- /dev/null
+++ b/www/include/i18n/en_US/templates/email/transfer.alert.yaml
@@ -0,0 +1,33 @@
+#
+# Email template: transfer.alert.yaml
+#
+# Sent to staff members when a ticket is assigned to them. Tickets can be
+# assigned automatically by the system or manually by another staff member.
+# Use %{assigner} to distinguish who made the assignment.
+#
+---
+notes: |
+ Sent to agents when a ticket is transfered to a department to which
+ they are a member.
+subject: |
+ Ticket #%{ticket.number} transfer - %{ticket.dept.name}
+body: |
+
Hi %{recipient.name},
+ Ticket #%{ticket.number} has been
+ transferred to the %{ticket.dept.name} department by
+ %{staff.name.short}
+
+
+
+ %{comments}
+
+
+
To view or respond to the ticket, please login to the support ticket system.
+
+ Your friendly Customer Support
+ System
+
+
diff --git a/www/include/i18n/en_US/templates/page/access-link.yaml b/www/include/i18n/en_US/templates/page/access-link.yaml
new file mode 100644
index 0000000..9f7cd1f
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/access-link.yaml
@@ -0,0 +1,31 @@
+#
+# access-link.yaml
+#
+# Ticket access link sent to clients for guest-only systems where the ticket
+# number and email address will trigger an access link sent via email
+#
+---
+notes: >
+ This template defines the notification for Clients that an access link was
+ sent to their email. The ticket number and email address trigger the access
+ link.
+name: "Ticket [#%{ticket.number}] Access Link"
+body: >
+
Hi %{recipient.name.first},
+
+ An access link request for ticket #%{ticket.number} has been submitted
+ on your behalf for the helpdesk at %{url}.
+
+ Follow the link below to check the status of the ticket
+ #%{ticket.number}.
+
+ %{recipient.ticket_link}
+
+ If you did not make the request, please delete and
+ disregard this email. Your account is still secure and no one has been
+ given access to the ticket. Someone could have mistakenly entered your
+ email address.
+
+ --
+ %{company.name}
+
diff --git a/www/include/i18n/en_US/templates/page/banner-client.yaml b/www/include/i18n/en_US/templates/page/banner-client.yaml
new file mode 100644
index 0000000..d46d6ca
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/banner-client.yaml
@@ -0,0 +1,12 @@
+#
+# banner-client.yaml
+#
+# This forms the header on the staff login page. It can be useful to inform
+# your clients about your login and registration policies.
+---
+notes: >
+ This composes the header on the Client Log In page. It can be useful to
+ inform your Clients about your log in and registration policies.
+name: "Sign in to %{company.name}"
+body: >
+ To better serve you, we encourage our Clients to register for an account.
\ No newline at end of file
diff --git a/www/include/i18n/en_US/templates/page/banner-staff.yaml b/www/include/i18n/en_US/templates/page/banner-staff.yaml
new file mode 100644
index 0000000..918dfc9
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/banner-staff.yaml
@@ -0,0 +1,11 @@
+#
+# banner-staff.yaml
+#
+# This is the initial message and banner shown on the staff login page
+---
+notes: >
+ This is the initial message and banner shown on the Staff Log In page.
+ The first input field refers to the red-formatted text that appears at the top.
+ The latter textarea is for the banner content which should serve as a disclaimer.
+name: "Authentication Required"
+body: ""
diff --git a/www/include/i18n/en_US/templates/page/email2fa-staff.yaml b/www/include/i18n/en_US/templates/page/email2fa-staff.yaml
new file mode 100644
index 0000000..d7e32c2
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/email2fa-staff.yaml
@@ -0,0 +1,24 @@
+#
+# email2fa-staff.yaml
+#
+# Template of the email sent to staff members when using the Email
+# Two Factor Authentication
+---
+notes: >
+ This template defines the email sent to Staff who use Email for
+ Two Factor Authentication
+name: "osTicket Two Factor Authentication"
+body: >
+
Hi %{staff.name.first},
+
+ You have just logged into for the helpdesk at %{url}.
+
+ Use the verification code below to finish logging into the helpdesk.
+
+ %{otp}
+
+ Your friendly Customer Support System
+
+
+
diff --git a/www/include/i18n/en_US/templates/page/landing.yaml b/www/include/i18n/en_US/templates/page/landing.yaml
new file mode 100644
index 0000000..112bc51
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/landing.yaml
@@ -0,0 +1,23 @@
+#
+# Page template: landing.yaml
+#
+# The landing page is served on the front page of the customer portal above
+# the two links for creating new tickets and viewing ticket status.
+#
+---
+notes: >
+ The Landing Page refers to the content of the Customer Portal's
+ initial view. The template modifies the content seen above the two links
+ Open a New Ticket and Check Ticket Status.
+
+name: Landing
+body: >
+
Welcome to the Support Center
+
+ In order to streamline support requests and better serve you, we utilize
+ a support ticket system. Every support request is assigned a unique
+ ticket number which you can use to track the progress and responses
+ online. For your reference we provide complete archives and history of
+ all your support requests. A valid email address is required to submit a
+ ticket.
+
diff --git a/www/include/i18n/en_US/templates/page/offline.yaml b/www/include/i18n/en_US/templates/page/offline.yaml
new file mode 100644
index 0000000..ed634ee
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/offline.yaml
@@ -0,0 +1,19 @@
+#
+# Page template: offline.yaml
+#
+# The offline page is served to the customer portal when the help desk is
+# configured offline in the Admin Panel
+#
+---
+notes: |
+ The Offline Page appears in the Customer Portal when the Help Desk is offline.
+
+name: Offline
+body: |
+
+ Support Ticket System Offline
+
+
Thank you for your interest in contacting us.
+
Our helpdesk is offline at the moment, please check back at a later
+ time.
+
diff --git a/www/include/i18n/en_US/templates/page/pwreset-client.yaml b/www/include/i18n/en_US/templates/page/pwreset-client.yaml
new file mode 100644
index 0000000..36025c8
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/pwreset-client.yaml
@@ -0,0 +1,30 @@
+#
+# pwreset-client.yaml
+#
+# Template of the email sent to clients when using the Forgot My Password
+# link on the login page
+---
+notes: >
+ This template defines the email sent to Clients who select the Forgot My
+ Password link on the Client Log In page.
+name: "%{company.name} Help Desk Access"
+body: >
+
Hi %{user.name.first},
+
+ A password reset request has been submitted on your behalf for the
+ helpdesk at %{url}.
+
+ If you feel that this has been done in error, delete and disregard this
+ email. Your account is still secure and no one has been given access to
+ it. It is not locked and your password has not been reset. Someone could
+ have mistakenly entered your email address.
+
+ Follow the link below to login to the help desk and change your
+ password.
+
+ %{link}
+
+ Your friendly Customer Support System
+
+ %{company.name}
+
diff --git a/www/include/i18n/en_US/templates/page/pwreset-staff.yaml b/www/include/i18n/en_US/templates/page/pwreset-staff.yaml
new file mode 100644
index 0000000..bba06e8
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/pwreset-staff.yaml
@@ -0,0 +1,31 @@
+#
+# pwreset-staff.yaml
+#
+# Template of the email sent to staff members when using the Forgot My
+# Password link
+---
+notes: >
+ This template defines the email sent to Staff who select the Forgot My
+ Password link on the Staff Control Panel Log In page.
+name: "osTicket Staff Password Reset"
+body: >
+
Hi %{staff.name.first},
+
+ A password reset request has been submitted on your behalf for the
+ helpdesk at %{url}.
+
+ If you feel that this has been done in error, delete and disregard this
+ email. Your account is still secure and no one has been given access to
+ it. It is not locked and your password has not been reset. Someone could
+ have mistakenly entered your email address.
+
+ Follow the link below to login to the help desk and change your
+ password.
+
+ %{link}
+
+ Your friendly Customer Support System
+
+
+
diff --git a/www/include/i18n/en_US/templates/page/registration-client.yaml b/www/include/i18n/en_US/templates/page/registration-client.yaml
new file mode 100644
index 0000000..cf23397
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/registration-client.yaml
@@ -0,0 +1,27 @@
+#
+# registration-staff.yaml
+#
+# Confirmation email sent to clients when accounts are created for them by
+# staff or via the client portal. This email serves as an email address
+# verification.
+#
+---
+notes: >
+ This template defines the email sent to Clients when their account has been
+ created in the Client Portal or by an Agent on their behalf. This email serves as
+ an email address verification. Please use %{link} somewhere in the body.
+name: "Welcome to %{company.name}"
+body: >
+
Hi %{recipient.name.first},
+
+ We've created an account for you at our help desk at %{url}.
+
+ Please follow the link below to confirm your account and gain access to
+ your tickets.
+
+ %{link}
+
+ Your friendly Customer Support System
+
+ %{company.name}
+
diff --git a/www/include/i18n/en_US/templates/page/registration-confirm.yaml b/www/include/i18n/en_US/templates/page/registration-confirm.yaml
new file mode 100644
index 0000000..c7d16f1
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/registration-confirm.yaml
@@ -0,0 +1,22 @@
+#
+# registration-confirm.yaml
+#
+# Template of the page shown to the user after registering for an account.
+# The system will send the user an email with a link they should follow to
+# confirm the account. This page should inform them of the next step in
+# the process.
+#
+---
+notes: >
+ This templates defines the page shown to Clients after completing the registration
+ form. The template should mention that the system is sending
+ them an email confirmation link and what is the next step in the registration
+ process.
+name: "Account registration"
+body: >
+
Thanks for registering for an account.
+
+ We've just sent you an email to the address you entered. Please follow
+ the link in the email to confirm your account and gain access to your
+ tickets.
+
diff --git a/www/include/i18n/en_US/templates/page/registration-staff.yaml b/www/include/i18n/en_US/templates/page/registration-staff.yaml
new file mode 100644
index 0000000..dfd9409
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/registration-staff.yaml
@@ -0,0 +1,24 @@
+#
+# registration-staff.yaml
+#
+# Initial (optional) email sent to staff members when accounts are created
+# for them in the staff control panel
+#
+---
+notes: >
+ This template defines the initial email (optional) sent to Agents when an account
+ is created on their behalf.
+name: "Welcome to osTicket"
+body: >
+
Hi %{recipient.name.first},
+
+ We've created an account for you at our help desk at %{url}.
+
+ Please follow the link below to confirm your account and gain access to
+ your tickets.
+
+ %{link}
+
+ Your friendly Customer Support System
+ %{company.name}
+
diff --git a/www/include/i18n/en_US/templates/page/registration-thanks.yaml b/www/include/i18n/en_US/templates/page/registration-thanks.yaml
new file mode 100644
index 0000000..bd5089b
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/registration-thanks.yaml
@@ -0,0 +1,24 @@
+#
+# registration-thanks.yaml
+#
+# Page shown to the user after successfully registring and confirming their
+# account. This page should inform the user that the process is complete and
+# that the user can now submit a ticket or access existing tickets
+#
+---
+notes: >
+ This template defines the content displayed after Clients successfully
+ register by confirming their account. This page should inform the user
+ that registration is complete and that the Client can now submit a ticket
+ or access existing tickets.
+name: "Account Confirmed!"
+body: >
+
+ Thanks for registering for an account.
+
+ You've confirmed your email address and successfully activated your
+ account. You may proceed to open a new ticket or manage existing tickets.
+
+ Your friendly support center
+ %{company.name}
+
diff --git a/www/include/i18n/en_US/templates/page/thank-you.yaml b/www/include/i18n/en_US/templates/page/thank-you.yaml
new file mode 100644
index 0000000..96979ef
--- /dev/null
+++ b/www/include/i18n/en_US/templates/page/thank-you.yaml
@@ -0,0 +1,25 @@
+#
+# Page template: thank-you.yaml
+#
+# The thank-you page is served to the customer portal when a user submites a
+# new ticket via the customer portal.
+#
+---
+notes: |
+ This template defines the content displayed on the Thank-You page after a
+ Client submits a new ticket in the Client Portal.
+
+name: Thank You
+body: |
+
%{ticket.name},
+
+
+ Thank you for contacting us.
+
+
+ A support ticket request has been created and a representative will be
+ getting back to you shortly if necessary.
+
+
+ Support Team
+
diff --git a/www/include/i18n/en_US/templates/premade.yaml b/www/include/i18n/en_US/templates/premade.yaml
new file mode 100644
index 0000000..02f5bf0
--- /dev/null
+++ b/www/include/i18n/en_US/templates/premade.yaml
@@ -0,0 +1,27 @@
+#
+# Canned response templates
+#
+---
+- isenabled: 1
+ title: What is osTicket (sample)?
+ response: |
+ osTicket is a widely-used open source support ticket system, an
+ attractive alternative to higher-cost and complex customer support
+ systems - simple, lightweight, reliable, open source, web-based and easy
+ to setup and use.
+ notes: |
+
+ attachments:
+ - name: osTicket.txt
+ type: text/plain
+ data: Canned Attachments Rock!
+
+- isenabled: 1
+ title: Sample (with variables)
+ response: |
+ Hi %{ticket.name.first},
+
+
+ Your ticket #%{ticket.number} created on %{ticket.create_date} is in
+ %{ticket.dept.name} department.
+ notes: |
diff --git a/www/include/i18n/en_US/templates/ticket/installed.yaml b/www/include/i18n/en_US/templates/ticket/installed.yaml
new file mode 100644
index 0000000..5eba3be
--- /dev/null
+++ b/www/include/i18n/en_US/templates/ticket/installed.yaml
@@ -0,0 +1,50 @@
+#
+# Welcome ticket template
+#
+# When the system if first installed and the installer finishes setting up
+# the database, it creates a first ticket with a welcome message to the
+# administrator
+#
+---
+deptId: 1 # support
+topicId: 1 # support
+name: osTicket Support
+email: support@osticket.com
+source: Web # notrans
+subject: osTicket Installed!
+message: |
+
+ Thank you for choosing osTicket.
+
+ Please make sure you join the osTicket forums and our mailing list to stay up to date
+ on the latest news, security alerts and updates. The osTicket forums are
+ also a great place to get assistance, guidance, tips, and help from
+ other osTicket users. In addition to the forums, the osTicket wiki
+ provides a useful collection of educational materials, documentation,
+ and notes from the community. We welcome your contributions to the
+ osTicket community.
+
+ If you are looking for a greater level of support, we provide
+ professional services and commercial support with guaranteed response
+ times, and access to the core development team. We can also help
+ customize osTicket or even add new features to the system to meet your
+ unique needs.
+
+ If the idea of managing and upgrading this osTicket installation is
+ daunting, you can try osTicket as a hosted service at https://supportsystem.com/ --
+ no installation required and we can import your data! With
+ SupportSystem's turnkey infrastructure, you get osTicket at its best,
+ leaving you free to focus on your customers without the burden of making
+ sure the application is stable, maintained, and secure.
+
+ Cheers,
+
+ -
+ osTicket Team https://osticket.com/
+
+ PS. Don't just make customers happy, make happy
+ customers!
+
diff --git a/www/include/i18n/en_US/templates/ticket/upgraded.yaml b/www/include/i18n/en_US/templates/ticket/upgraded.yaml
new file mode 100644
index 0000000..3b71246
--- /dev/null
+++ b/www/include/i18n/en_US/templates/ticket/upgraded.yaml
@@ -0,0 +1,40 @@
+#
+# Upgrade completed ticket
+#
+# This ticket is added to the system after the completion of an upgrade. It
+# might include information specific to the release, perhaps with some new
+# feature highlights, etc.
+#
+---
+source: Web # notrans
+name: osTicket Support
+email: support@osticket.com
+subject: osTicket Upgraded!
+message: |
+
+ osTicket upgraded successfully! Please refer to the Release Notes
+ (https://docs.osticket.com/en/latest/Developer%20Documentation/Changelog.html?highlight=notes) for more information about
+ changes and new features.
+
+ Be sure to join the osTicket
+ forums and our mailing
+ list to stay up to date on announcements, security updates and
+ alerts! Your contribution to osTicket community will be appreciated!
+
+ The osTicket team is committed to providing support to all users through
+ our free online resources and a full range of commercial support
+ packages and services. For more information, or to discuss your needs,
+ please contact us today at https://osticket.com/support/. Any feedback
+ will be appreciated!
+
+ If managing and upgrading this osTicket installation is daunting, you
+ can try osTicket as a hosted service at https://supportsystem.com/ --
+ no upgrading ever, and we can import your data! With SupportSystem's
+ turnkey infrastructure, you get osTicket at its best, leaving you free
+ to focus on your customers without the burden of making sure the
+ application is stable, maintained, and secure.
+
+ -
+ osTicket Team
+ https://osticket.com/
+
diff --git a/www/include/i18n/en_US/ticket_status.yaml b/www/include/i18n/en_US/ticket_status.yaml
new file mode 100644
index 0000000..1a5d268
--- /dev/null
+++ b/www/include/i18n/en_US/ticket_status.yaml
@@ -0,0 +1,68 @@
+#
+# Default system data for ticket statuses
+#
+# Fields:
+# id - (int:optional) id number in the database
+# name - (string) descriptive name of the status
+# state - (string) Main status of a ticket
+# (open, closed, archived, deleted)
+# mode - (bit) access mask (1 - enabled, 2 - internal)
+# flags - (bit) flags that can be set on a ticket
+# properties:
+# description - (string) Description of the status
+#
+---
+- id: 1
+ name: Open
+ state: open
+ mode: 3
+ sort: 1
+ flags: 0
+ properties:
+ description: >
+ Open tickets.
+
+- id: 2
+ name: Resolved
+ state: closed
+ mode: 1
+ sort: 2
+ flags: 0
+ properties:
+ allowreopen: true
+ reopenstatus: 0
+ description: >
+ Resolved tickets
+
+- id: 3
+ name: Closed
+ state: closed
+ mode: 3
+ sort: 3
+ flags: 0
+ properties:
+ allowreopen: true
+ reopenstatus: 0
+ description: >
+ Closed tickets. Tickets will still be accessible on client and staff panels.
+
+- id: 4
+ name: Archived
+ state: archived
+ mode: 3
+ sort: 4
+ flags: 0
+ properties:
+ description: >
+ Tickets only adminstratively available but no longer accessible on
+ ticket queues and client panel.
+
+- id: 5
+ name: Deleted
+ state: deleted
+ mode: 3
+ sort: 5
+ flags: 0
+ properties:
+ description: >
+ Tickets queued for deletion. Not accessible on ticket queues.
diff --git a/www/include/i18n/langs.php b/www/include/i18n/langs.php
new file mode 100644
index 0000000..56e4efe
--- /dev/null
+++ b/www/include/i18n/langs.php
@@ -0,0 +1,766 @@
+ array(
+ "name" => "Abkhaz",
+ "nativeName" => "аҧсуа"
+ ),
+ "aa" => array(
+ "name" => "Afar",
+ "nativeName" => "Afaraf"
+ ),
+ "af" => array(
+ "name" => "Afrikaans",
+ "nativeName" => "Afrikaans"
+ ),
+ "ak" => array(
+ "name" => "Akan",
+ "nativeName" => "Akan"
+ ),
+ "sq" => array(
+ "name" => "Albanian",
+ "nativeName" => "Shqip"
+ ),
+ "am" => array(
+ "name" => "Amharic",
+ "nativeName" => "አማርኛ"
+ ),
+ "ar" => array(
+ "direction" => "rtl",
+ "name" => "Arabic",
+ "nativeName" => "العربية"
+ ),
+ "an" => array(
+ "name" => "Aragonese",
+ "nativeName" => "Aragonés"
+ ),
+ "hy" => array(
+ "name" => "Armenian",
+ "nativeName" => "Հայերեն"
+ ),
+ "as" => array(
+ "name" => "Assamese",
+ "nativeName" => "অসমীয়া"
+ ),
+ "av" => array(
+ "name" => "Avaric",
+ "nativeName" => "авар мацӀ, магӀарул мацӀ"
+ ),
+ "ae" => array(
+ "name" => "Avestan",
+ "nativeName" => "avesta"
+ ),
+ "ay" => array(
+ "name" => "Aymara",
+ "nativeName" => "aymar aru"
+ ),
+ "az" => array(
+ "name" => "Azerbaijani",
+ "nativeName" => "azərbaycan dili"
+ ),
+ "bm" => array(
+ "name" => "Bambara",
+ "nativeName" => "bamanankan"
+ ),
+ "ba" => array(
+ "name" => "Bashkir",
+ "nativeName" => "башҡорт теле"
+ ),
+ "eu" => array(
+ "name" => "Basque",
+ "nativeName" => "euskara, euskera"
+ ),
+ "be" => array(
+ "name" => "Belarusian",
+ "nativeName" => "Беларуская"
+ ),
+ "bn" => array(
+ "name" => "Bengali",
+ "nativeName" => "বাংলা"
+ ),
+ "bh" => array(
+ "name" => "Bihari",
+ "nativeName" => "भोजपुरी"
+ ),
+ "bi" => array(
+ "name" => "Bislama",
+ "nativeName" => "Bislama"
+ ),
+ "bs" => array(
+ "name" => "Bosnian",
+ "nativeName" => "bosanski jezik"
+ ),
+ "br" => array(
+ "name" => "Breton",
+ "nativeName" => "brezhoneg"
+ ),
+ "bg" => array(
+ "name" => "Bulgarian",
+ "nativeName" => "български език"
+ ),
+ "my" => array(
+ "name" => "Burmese",
+ "nativeName" => "ဗမာစာ"
+ ),
+ "ca" => array(
+ "name" => "Catalan; Valencian",
+ "flag" => "catalonia",
+ "nativeName" => "Català"
+ ),
+ "ch" => array(
+ "name" => "Chamorro",
+ "nativeName" => "Chamoru"
+ ),
+ "ce" => array(
+ "name" => "Chechen",
+ "nativeName" => "нохчийн мотт"
+ ),
+ "ny" => array(
+ "name" => "Chichewa; Chewa; Nyanja",
+ "nativeName" => "chiCheŵa, chinyanja"
+ ),
+ "zh" => array(
+ "name" => "Chinese",
+ "nativeName" => "中文 (Zhōngwén), 汉语, 漢語"
+ ),
+ "cv" => array(
+ "name" => "Chuvash",
+ "nativeName" => "чӑваш чӗлхи"
+ ),
+ "kw" => array(
+ "name" => "Cornish",
+ "nativeName" => "Kernewek"
+ ),
+ "co" => array(
+ "name" => "Corsican",
+ "nativeName" => "corsu, lingua corsa"
+ ),
+ "cr" => array(
+ "name" => "Cree",
+ "nativeName" => "ᓀᐦᐃᔭᐍᐏᐣ"
+ ),
+ "hr" => array(
+ "name" => "Croatian",
+ "nativeName" => "hrvatski"
+ ),
+ "cs" => array(
+ "name" => "Czech",
+ "flag" => "CZ",
+ "nativeName" => "česky, čeština"
+ ),
+ "da" => array(
+ "name" => "Danish",
+ "flag" => "DK",
+ "nativeName" => "dansk"
+ ),
+ "dv" => array(
+ "name" => "Divehi; Dhivehi; Maldivian;",
+ "nativeName" => "ދިވެހި"
+ ),
+ "nl" => array(
+ "name" => "Dutch",
+ "nativeName" => "Nederlands, Vlaams"
+ ),
+ "en" => array(
+ "name" => "English",
+ "nativeName" => "English"
+ ),
+ "eo" => array(
+ "name" => "Esperanto",
+ "nativeName" => "Esperanto"
+ ),
+ "et" => array(
+ "name" => "Estonian",
+ "nativeName" => "eesti, eesti keel"
+ ),
+ "ee" => array(
+ "name" => "Ewe",
+ "nativeName" => "Eʋegbe"
+ ),
+ "fo" => array(
+ "name" => "Faroese",
+ "nativeName" => "føroyskt"
+ ),
+ "fj" => array(
+ "name" => "Fijian",
+ "nativeName" => "vosa Vakaviti"
+ ),
+ "fi" => array(
+ "name" => "Finnish",
+ "nativeName" => "suomi, suomen kieli"
+ ),
+ "fr" => array(
+ "name" => "French",
+ "nativeName" => "français, langue française"
+ ),
+ "ff" => array(
+ "name" => "Fula; Fulah; Pulaar; Pular",
+ "nativeName" => "Fulfulde, Pulaar, Pular"
+ ),
+ "gl" => array(
+ "name" => "Galician",
+ "nativeName" => "Galego"
+ ),
+ "ka" => array(
+ "name" => "Georgian",
+ "flag" => "GE",
+ "nativeName" => "ქართული"
+ ),
+ "de" => array(
+ "name" => "German",
+ "nativeName" => "Deutsch"
+ ),
+ "el" => array(
+ "name" => "Greek, Modern",
+ "flag" => "GR",
+ "nativeName" => "Ελληνικά"
+ ),
+ "gn" => array(
+ "name" => "Guaraní",
+ "nativeName" => "Avañeẽ"
+ ),
+ "gu" => array(
+ "name" => "Gujarati",
+ "nativeName" => "ગુજરાતી"
+ ),
+ "ht" => array(
+ "name" => "Haitian; Haitian Creole",
+ "nativeName" => "Kreyòl ayisyen"
+ ),
+ "ha" => array(
+ "name" => "Hausa",
+ "nativeName" => "Hausa, هَوُسَ"
+ ),
+ "he" => array(
+ "direction" => "rtl",
+ "name" => "Hebrew (modern)",
+ "flag" => "IL",
+ "nativeName" => "עברית"
+ ),
+ "hz" => array(
+ "name" => "Herero",
+ "nativeName" => "Otjiherero"
+ ),
+ "hi" => array(
+ "name" => "Hindi",
+ "flag" => "IN",
+ "nativeName" => "हिन्दी, हिंदी"
+ ),
+ "ho" => array(
+ "name" => "Hiri Motu",
+ "nativeName" => "Hiri Motu"
+ ),
+ "hu" => array(
+ "name" => "Hungarian",
+ "nativeName" => "Magyar"
+ ),
+ "ia" => array(
+ "name" => "Interlingua",
+ "nativeName" => "Interlingua"
+ ),
+ "id" => array(
+ "name" => "Indonesian",
+ "nativeName" => "Bahasa Indonesia"
+ ),
+ "ie" => array(
+ "name" => "Interlingue",
+ "nativeName" => "Originally called Occidental; then Interlingue after WWII"
+ ),
+ "ga" => array(
+ "name" => "Irish",
+ "nativeName" => "Gaeilge"
+ ),
+ "ig" => array(
+ "name" => "Igbo",
+ "nativeName" => "Asụsụ Igbo"
+ ),
+ "ik" => array(
+ "name" => "Inupiaq",
+ "nativeName" => "Iñupiaq, Iñupiatun"
+ ),
+ "io" => array(
+ "name" => "Ido",
+ "nativeName" => "Ido"
+ ),
+ "is" => array(
+ "name" => "Icelandic",
+ "nativeName" => "Íslenska"
+ ),
+ "it" => array(
+ "name" => "Italian",
+ "nativeName" => "Italiano"
+ ),
+ "iu" => array(
+ "name" => "Inuktitut",
+ "nativeName" => "ᐃᓄᒃᑎᑐᑦ"
+ ),
+ "ja" => array(
+ "name" => "Japanese",
+ "flag" => "JP",
+ "nativeName" => "日本語 (にほんご/にっぽんご)"
+ ),
+ "jv" => array(
+ "name" => "Javanese",
+ "nativeName" => "basa Jawa"
+ ),
+ "kl" => array(
+ "name" => "Kalaallisut, Greenlandic",
+ "nativeName" => "kalaallisut, kalaallit oqaasii"
+ ),
+ "kn" => array(
+ "name" => "Kannada",
+ "nativeName" => "ಕನ್ನಡ"
+ ),
+ "kr" => array(
+ "name" => "Kanuri",
+ "nativeName" => "Kanuri"
+ ),
+ "ks" => array(
+ "name" => "Kashmiri",
+ "nativeName" => "कश्मीरी, كشميري"
+ ),
+ "kk" => array(
+ "name" => "Kazakh",
+ "nativeName" => "Қазақ тілі"
+ ),
+ "km" => array(
+ "name" => "Khmer",
+ "nativeName" => "ភាសាខ្មែរ"
+ ),
+ "ki" => array(
+ "name" => "Kikuyu, Gikuyu",
+ "nativeName" => "Gĩkũyũ"
+ ),
+ "rw" => array(
+ "name" => "Kinyarwanda",
+ "nativeName" => "Ikinyarwanda"
+ ),
+ "ky" => array(
+ "name" => "Kirghiz, Kyrgyz",
+ "nativeName" => "кыргыз тили"
+ ),
+ "kv" => array(
+ "name" => "Komi",
+ "nativeName" => "коми кыв"
+ ),
+ "kg" => array(
+ "name" => "Kongo",
+ "nativeName" => "KiKongo"
+ ),
+ "ko" => array(
+ "name" => "Korean",
+ "nativeName" => "한국어 (韓國語), 조선말 (朝鮮語)"
+ ),
+ "ku" => array(
+ "name" => "Kurdish",
+ "nativeName" => "Kurdî, كوردی"
+ ),
+ "kj" => array(
+ "name" => "Kwanyama, Kuanyama",
+ "nativeName" => "Kuanyama"
+ ),
+ "la" => array(
+ "name" => "Latin",
+ "nativeName" => "latine, lingua latina"
+ ),
+ "lb" => array(
+ "name" => "Luxembourgish, Letzeburgesch",
+ "nativeName" => "Lëtzebuergesch"
+ ),
+ "lg" => array(
+ "name" => "Luganda",
+ "nativeName" => "Luganda"
+ ),
+ "li" => array(
+ "name" => "Limburgish, Limburgan, Limburger",
+ "nativeName" => "Limburgs"
+ ),
+ "ln" => array(
+ "name" => "Lingala",
+ "nativeName" => "Lingála"
+ ),
+ "lo" => array(
+ "name" => "Lao",
+ "nativeName" => "ພາສາລາວ"
+ ),
+ "lt" => array(
+ "name" => "Lithuanian",
+ "nativeName" => "lietuvių kalba"
+ ),
+ "lu" => array(
+ "name" => "Luba-Katanga",
+ "nativeName" => ""
+ ),
+ "lv" => array(
+ "name" => "Latvian",
+ "nativeName" => "latviešu valoda"
+ ),
+ "gv" => array(
+ "name" => "Manx",
+ "nativeName" => "Gaelg, Gailck"
+ ),
+ "mk" => array(
+ "name" => "Macedonian",
+ "nativeName" => "македонски јазик"
+ ),
+ "mg" => array(
+ "name" => "Malagasy",
+ "nativeName" => "Malagasy fiteny"
+ ),
+ "ms" => array(
+ "name" => "Malay",
+ "nativeName" => "bahasa Melayu, بهاس ملايو"
+ ),
+ "ml" => array(
+ "name" => "Malayalam",
+ "nativeName" => "മലയാളം"
+ ),
+ "mt" => array(
+ "name" => "Maltese",
+ "nativeName" => "Malti"
+ ),
+ "mi" => array(
+ "name" => "Māori",
+ "nativeName" => "te reo Māori"
+ ),
+ "mr" => array(
+ "name" => "Marathi (Marāṭhī)",
+ "nativeName" => "मराठी"
+ ),
+ "mh" => array(
+ "name" => "Marshallese",
+ "nativeName" => "Kajin M̧ajeļ"
+ ),
+ "mn" => array(
+ "name" => "Mongolian",
+ "nativeName" => "монгол"
+ ),
+ "na" => array(
+ "name" => "Nauru",
+ "nativeName" => "Ekakairũ Naoero"
+ ),
+ "nv" => array(
+ "name" => "Navajo, Navaho",
+ "nativeName" => "Diné bizaad, Dinékʼehǰí"
+ ),
+ "nb" => array(
+ "name" => "Norwegian Bokmål",
+ "nativeName" => "Norsk bokmål"
+ ),
+ "nd" => array(
+ "name" => "North Ndebele",
+ "nativeName" => "isiNdebele"
+ ),
+ "ne" => array(
+ "name" => "Nepali",
+ "nativeName" => "नेपाली"
+ ),
+ "ng" => array(
+ "name" => "Ndonga",
+ "nativeName" => "Owambo"
+ ),
+ "nn" => array(
+ "name" => "Norwegian Nynorsk",
+ "nativeName" => "Norsk nynorsk"
+ ),
+ "no" => array(
+ "name" => "Norwegian",
+ "nativeName" => "Norsk"
+ ),
+ "ii" => array(
+ "name" => "Nuosu",
+ "nativeName" => "ꆈꌠ꒿ Nuosuhxop"
+ ),
+ "nr" => array(
+ "name" => "South Ndebele",
+ "nativeName" => "isiNdebele"
+ ),
+ "oc" => array(
+ "name" => "Occitan",
+ "nativeName" => "Occitan"
+ ),
+ "oj" => array(
+ "name" => "Ojibwe, Ojibwa",
+ "nativeName" => "ᐊᓂᔑᓈᐯᒧᐎᓐ"
+ ),
+ "cu" => array(
+ "name" => "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic",
+ "nativeName" => "ѩзыкъ словѣньскъ"
+ ),
+ "om" => array(
+ "name" => "Oromo",
+ "nativeName" => "Afaan Oromoo"
+ ),
+ "or" => array(
+ "name" => "Oriya",
+ "nativeName" => "ଓଡ଼ିଆ"
+ ),
+ "os" => array(
+ "name" => "Ossetian, Ossetic",
+ "nativeName" => "ирон æвзаг"
+ ),
+ "pa" => array(
+ "name" => "Panjabi, Punjabi",
+ "nativeName" => "ਪੰਜਾਬੀ, پنجابی"
+ ),
+ "pi" => array(
+ "name" => "Pāli",
+ "nativeName" => "पाऴि"
+ ),
+ "fa" => array(
+ "direction" => "rtl",
+ "flag" => "IR",
+ "name" => "Persian",
+ "nativeName" => "فارسی"
+ ),
+ "pl" => array(
+ "name" => "Polish",
+ "nativeName" => "polski"
+ ),
+ "ps" => array(
+ "name" => "Pashto, Pushto",
+ "nativeName" => "پښتو"
+ ),
+ "pt" => array(
+ "name" => "Portuguese",
+ "nativeName" => "Português"
+ ),
+ "qu" => array(
+ "name" => "Quechua",
+ "nativeName" => "Runa Simi, Kichwa"
+ ),
+ "rm" => array(
+ "name" => "Romansh",
+ "nativeName" => "rumantsch grischun"
+ ),
+ "rn" => array(
+ "name" => "Kirundi",
+ "nativeName" => "kiRundi"
+ ),
+ "ro" => array(
+ "name" => "Romanian, Moldavian, Moldovan",
+ "nativeName" => "română"
+ ),
+ "ru" => array(
+ "name" => "Russian",
+ "nativeName" => "русский язык"
+ ),
+ "sa" => array(
+ "name" => "Sanskrit (Saṁskṛta)",
+ "nativeName" => "संस्कृतम्"
+ ),
+ "sc" => array(
+ "name" => "Sardinian",
+ "nativeName" => "sardu"
+ ),
+ "sd" => array(
+ "name" => "Sindhi",
+ "nativeName" => "सिन्धी, سنڌي، سندھی"
+ ),
+ "se" => array(
+ "name" => "Northern Sami",
+ "nativeName" => "Davvisámegiella"
+ ),
+ "sm" => array(
+ "name" => "Samoan",
+ "nativeName" => "gagana faa Samoa"
+ ),
+ "sg" => array(
+ "name" => "Sango",
+ "nativeName" => "yângâ tî sängö"
+ ),
+ "sr" => array(
+ "name" => "Serbian",
+ "flag" => "RS",
+ "nativeName" => "српски језик"
+ ),
+ "gd" => array(
+ "name" => "Scottish Gaelic; Gaelic",
+ "nativeName" => "Gàidhlig"
+ ),
+ "sn" => array(
+ "name" => "Shona",
+ "nativeName" => "chiShona"
+ ),
+ "si" => array(
+ "name" => "Sinhala, Sinhalese",
+ "nativeName" => "සිංහල"
+ ),
+ "sk" => array(
+ "name" => "Slovak",
+ "nativeName" => "slovenčina"
+ ),
+ "sl" => array(
+ "name" => "Slovene",
+ "flag" => "SI",
+ "nativeName" => "slovenščina"
+ ),
+ "so" => array(
+ "name" => "Somali",
+ "nativeName" => "Soomaaliga, af Soomaali"
+ ),
+ "st" => array(
+ "name" => "Southern Sotho",
+ "nativeName" => "Sesotho"
+ ),
+ "es" => array(
+ "name" => "Spanish; Castilian",
+ "nativeName" => "español, castellano"
+ ),
+ "su" => array(
+ "name" => "Sundanese",
+ "nativeName" => "Basa Sunda"
+ ),
+ "sw" => array(
+ "name" => "Swahili",
+ "flag" => "KE",
+ "nativeName" => "Kiswahili"
+ ),
+ "ss" => array(
+ "name" => "Swati",
+ "nativeName" => "SiSwati"
+ ),
+ "sv" => array(
+ "name" => "Swedish",
+ "nativeName" => "svenska"
+ ),
+ "ta" => array(
+ "name" => "Tamil",
+ "nativeName" => "தமிழ்"
+ ),
+ "te" => array(
+ "name" => "Telugu",
+ "nativeName" => "తెలుగు"
+ ),
+ "tg" => array(
+ "name" => "Tajik",
+ "nativeName" => "тоҷикӣ, toğikī, تاجیکی"
+ ),
+ "th" => array(
+ "name" => "Thai",
+ "nativeName" => "ไทย",
+ "fonts" => array(
+ "garuda" => array(
+ 'R' => array("Garuda.ttf","http://www.osticket.com/sites/default/files/fonts/Garuda.ttf"),
+ 'B' => array("Garuda-Bold.ttf","http://www.osticket.com/sites/default/files/fonts/Garuda-Bold.ttf"),
+ 'I' => array("Garuda-Oblique.ttf","http://www.osticket.com/sites/default/files/fonts/Garuda-Oblique.ttf"),
+ 'BI' => array("Garuda-BoldOblique.ttf","http://www.osticket.com/sites/default/files/fonts/Garuda-BoldOblique.ttf"),
+ ':sub' => true,
+ ),
+ "norasi" => array(
+ 'R' => array("Norasi.ttf","http://www.osticket.com/sites/default/files/fonts/Norasi.ttf"),
+ 'B' => array("Norasi-Bold.ttf","http://www.osticket.com/sites/default/files/fonts/Norasi-Bold.ttf"),
+ 'I' => array("Norasi-Oblique.ttf","http://www.osticket.com/sites/default/files/fonts/Norasi-Oblique.ttf"),
+ 'BI' => array("Norasi-BoldOblique.ttf","http://www.osticket.com/sites/default/files/fonts/Norasi-BoldOblique.ttf"),
+ ),
+ ),
+ ),
+ "ti" => array(
+ "name" => "Tigrinya",
+ "nativeName" => "ትግርኛ"
+ ),
+ "bo" => array(
+ "name" => "Tibetan Standard, Tibetan, Central",
+ "nativeName" => "བོད་ཡིག"
+ ),
+ "tk" => array(
+ "name" => "Turkmen",
+ "nativeName" => "Türkmen, Түркмен"
+ ),
+ "tl" => array(
+ "name" => "Tagalog",
+ "nativeName" => "Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔"
+ ),
+ "tn" => array(
+ "name" => "Tswana",
+ "nativeName" => "Setswana"
+ ),
+ "to" => array(
+ "name" => "Tonga (Tonga Islands)",
+ "nativeName" => "faka Tonga"
+ ),
+ "tr" => array(
+ "name" => "Turkish",
+ "nativeName" => "Türkçe"
+ ),
+ "ts" => array(
+ "name" => "Tsonga",
+ "nativeName" => "Xitsonga"
+ ),
+ "tt" => array(
+ "name" => "Tatar",
+ "nativeName" => "татарча, tatarça, تاتارچا"
+ ),
+ "tw" => array(
+ "name" => "Twi",
+ "nativeName" => "Twi"
+ ),
+ "ty" => array(
+ "name" => "Tahitian",
+ "nativeName" => "Reo Tahiti"
+ ),
+ "ug" => array(
+ "name" => "Uighur, Uyghur",
+ "nativeName" => "Uyƣurqə, ئۇيغۇرچە"
+ ),
+ "uk" => array(
+ "name" => "Ukrainian",
+ "flag" => "UA",
+ "nativeName" => "українська"
+ ),
+ "ur" => array(
+ "name" => "Urdu",
+ "nativeName" => "اردو"
+ ),
+ "uz" => array(
+ "name" => "Uzbek",
+ "nativeName" => "zbek, Ўзбек, أۇزبېك"
+ ),
+ "ve" => array(
+ "name" => "Venda",
+ "nativeName" => "Tshivenḓa"
+ ),
+ "vi" => array(
+ "name" => "Vietnamese",
+ "nativeName" => "Tiếng Việt"
+ ),
+ "vo" => array(
+ "name" => "Volapük",
+ "nativeName" => "Volapük"
+ ),
+ "wa" => array(
+ "name" => "Walloon",
+ "nativeName" => "Walon"
+ ),
+ "cy" => array(
+ "name" => "Welsh",
+ "nativeName" => "Cymraeg"
+ ),
+ "wo" => array(
+ "name" => "Wolof",
+ "nativeName" => "Wollof"
+ ),
+ "fy" => array(
+ "name" => "Western Frisian",
+ "nativeName" => "Frysk"
+ ),
+ "xh" => array(
+ "name" => "Xhosa",
+ "nativeName" => "isiXhosa"
+ ),
+ "yi" => array(
+ "name" => "Yiddish",
+ "nativeName" => "ייִדיש"
+ ),
+ "yo" => array(
+ "name" => "Yoruba",
+ "nativeName" => "Yorùbá"
+ ),
+ "za" => array(
+ "name" => "Zhuang, Chuang",
+ "nativeName" => "Saɯ cueŋƅ, Saw cuengh"
+ )
+);
diff --git a/www/include/i18n/vendor/redactor/ar.js b/www/include/i18n/vendor/redactor/ar.js
new file mode 100644
index 0000000..4b03fec
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/ar.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['ar'] = {
+ "format": "تنسيق",
+ "image": "صورة",
+ "file": "ملف",
+ "link": "رابط",
+ "bold": "متين",
+ "italic": "مائل",
+ "deleted": "مشطوب",
+ "underline": "مسطر",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "قوائم",
+ "link-insert": "إدراج رابط",
+ "link-edit": "تحرير الرابط",
+ "link-in-new-tab": "فتح الرابط في تبويب جديد",
+ "unlink": "إلغاء الرابط",
+ "cancel": "إلغاء",
+ "close": "إغلاق",
+ "insert": "إدراج",
+ "save": "حفظ",
+ "delete": "حذف",
+ "text": "النص",
+ "edit": "تحرير",
+ "title": "العنوان",
+ "paragraph": "نص عادي",
+ "quote": "اقتباس",
+ "code": "كود",
+ "heading1": "عنوان 1",
+ "heading2": "عنوان 2",
+ "heading3": "عنوان 3",
+ "heading4": "عنوان 4",
+ "heading5": "عنوان 5",
+ "heading6": "عنوان 6",
+ "filename": "الاسم",
+ "optional": "اختياري",
+ "unorderedlist": "قائمة نقطية",
+ "orderedlist": "قائمة رقمية",
+ "outdent": "زيادة المسافة البادئة",
+ "indent": "إنقاض المسافة البادئة",
+ "horizontalrule": "خط أفقي",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "محرر النص الغني",
+ "caption": "الشرح",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/cs.js b/www/include/i18n/vendor/redactor/cs.js
new file mode 100644
index 0000000..95ab035
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/cs.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['cs'] = {
+ "format": "Formát",
+ "image": "Obrázek",
+ "file": "Soubor",
+ "link": "Odkaz",
+ "bold": "Tučné",
+ "italic": "Kurzíva",
+ "deleted": "Přeškrtnuté",
+ "underline": "Podtržené",
+ "superscript": "Horní index",
+ "subscript": "Dolní index",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Seznamy",
+ "link_insert": "Vložit odkaz ...",
+ "link_edit": "Upravit odkaz",
+ "link_new_tab": "Otevírat odkaz v novém okně",
+ "unlink": "Odstranit odkaz",
+ "cancel": "Zrušit",
+ "close": "Zavřít",
+ "insert": "Vložit",
+ "save": "Uložit",
+ "delete": "Smazat",
+ "text": "Text",
+ "edit": "Upravit",
+ "title": "Titulek",
+ "paragraph": "Odstavec",
+ "quote": "Citace",
+ "code": "Kód",
+ "header1": "Nadpis 1",
+ "header2": "Nadpis 2",
+ "header3": "Nadpis 3",
+ "header4": "Nadpis 4",
+ "header5": "Nadpis 5",
+ "header6": "Nadpis 6",
+ "filename": "Název (volitelné)",
+ "optional": "volitelný",
+ "unorderedlist": "Seznam s odrážkami",
+ "orderedlist": "Číslovaný seznam",
+ "outdent": "Zmenšit odsazení",
+ "indent": "Zvětšit odsazení",
+ "horizontalrule": "Vodorovná čára",
+ "upload": "Nahrát",
+ "upload-label": "Přesuňte sem soubory nebo klikněte pro výběr",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Rich textový editor",
+ "caption": "Titulok",
+ "bulletslist": "Odrážek",
+ "numberslist": "Číslováníe",
+ "image_position": "Zarovnání",
+ "none": "Žádné",
+ "left": "Vlevo",
+ "right": "Vpravo",
+ "center": "Center",
+ "undo": "Zpět",
+ "redo": "Obnovit"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/da.js b/www/include/i18n/vendor/redactor/da.js
new file mode 100644
index 0000000..e67ef43
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/da.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['da'] = {
+ "format": "Format",
+ "image": "Billede",
+ "file": "Fil",
+ "link": "link",
+ "bold": "Fed",
+ "italic": "Kursiv",
+ "deleted": "Slettet",
+ "underline": "Understreg",
+ "superscript": "Hævet",
+ "subscript": "Sænket",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Lister",
+ "link-insert": "Indsæt link",
+ "link-edit": "Redigér link",
+ "link-in-new-tab": "Åbn link i ny fane",
+ "unlink": "Fjern link",
+ "cancel": "Fortryd",
+ "close": "Luk",
+ "insert": "Indsæt",
+ "save": "Gem",
+ "delete": "Slet",
+ "text": "Tekst",
+ "edit": "Redigér",
+ "title": "Titel",
+ "paragraph": "Paragraf",
+ "quote": "Citat",
+ "code": "Kode",
+ "heading1": "Overskrift 1",
+ "heading2": "Overskrift 2",
+ "heading3": "Overskrift 3",
+ "heading4": "Overskrift 4",
+ "heading5": "Overskrift 5",
+ "heading6": "Overskrift 6",
+ "filename": "Navn",
+ "optional": "valgfri",
+ "unorderedlist": "Usorteret liste",
+ "orderedlist": "Sorteret liste",
+ "outdent": "Formindsk indrykning",
+ "indent": "Forøg indrykning",
+ "horizontalrule": "Vandret linje",
+ "upload": "Upload",
+ "upload-label": "Slip filer her eller klik for at uploade",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Tekst editor",
+ "caption": "Caption",
+ "bulletslist": "Punktliste",
+ "numberslist": "Nummereret liste",
+ "image-position": "Position",
+ "none": "Ingen",
+ "left": "Venstre",
+ "right": "Højre",
+ "center": "Center",
+ "undo": "Fortryd",
+ "redo": "Annullér fortryd"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/de.js b/www/include/i18n/vendor/redactor/de.js
new file mode 100644
index 0000000..cfa6dda
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/de.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['de'] = {
+ "format": "Format",
+ "image": "Bild",
+ "file": "Datei",
+ "link": "Link",
+ "bold": "Fett",
+ "italic": "Kursiv",
+ "deleted": "Durchgestrichen",
+ "underline": "Unterstrichen",
+ "superscript": "Hochgestellt",
+ "subscript": "Tiefgestellt",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Hoch",
+ "subscript-abbr": "Tief",
+ "lists": "Liste",
+ "link-insert": "Link einfügen",
+ "link-edit": "Link bearbeiten",
+ "link-in-new-tab": "Link in neuem Tab öffnen",
+ "unlink": "Link entfernen",
+ "cancel": "Abbrechen",
+ "close": "Schließen",
+ "insert": "Einfügen",
+ "save": "Speichern",
+ "delete": "Löschen",
+ "text": "Text",
+ "edit": "Bearbeiten",
+ "title": "Titel",
+ "paragraph": "Normaler Text",
+ "quote": "Zitat",
+ "code": "Code",
+ "heading1": "Überschrift 1",
+ "heading2": "Überschrift 2",
+ "heading3": "Überschrift 3",
+ "heading4": "Überschrift 4",
+ "heading5": "Überschrift 5",
+ "heading6": "Überschrift 6",
+ "filename": "Name",
+ "optional": "Optional",
+ "unorderedlist": "Aufzählung",
+ "orderedlist": "Nummerierung",
+ "outdent": "Einzug verkleinern",
+ "indent": "Einzug vergrößern",
+ "horizontalrule": "Linie",
+ "upload": "Upload",
+ "upload-label": "Bilder hier ablegen oder für Upload klicken",
+ "upload-change-label": "Neues Bild hier ablegen",
+ "accessibility-help-label": "Rich-Text-Editor",
+ "caption": "Beschriftung",
+ "bulletslist": "Aufzählung",
+ "numberslist": "Nummerierung",
+ "image-position": "Position",
+ "none": "Keine",
+ "left": "Links",
+ "right": "Rechts",
+ "center": "Mitte",
+ "undo": "Rückgängig",
+ "redo": "Wiederholen"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/es.js b/www/include/i18n/vendor/redactor/es.js
new file mode 100644
index 0000000..ef638a2
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/es.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['es'] = {
+ "format": "Formato",
+ "image": "Imagen",
+ "file": "Archivo",
+ "link": "Enlace",
+ "bold": "Negrita",
+ "italic": "Cursiva",
+ "deleted": "Tachado",
+ "underline": "Subrayado",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "N",
+ "italic-abbr": "C",
+ "deleted-abbr": "T",
+ "underline-abbr": "S",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Listas",
+ "link-insert": "Insertar enlace",
+ "link-edit": "Editar enlace",
+ "link-in-new-tab": "Abrir enlace en nueva pestaña",
+ "unlink": "Quitar enlace",
+ "cancel": "Cancelar",
+ "close": "Cerrar",
+ "insert": "Insertar",
+ "save": "Guardar",
+ "delete": "Borrar",
+ "text": "Texto",
+ "edit": "Editar",
+ "title": "Título",
+ "paragraph": "Texto normal",
+ "quote": "Citar",
+ "code": "Código",
+ "heading1": "Cabecera 1",
+ "heading2": "Cabecera 2",
+ "heading3": "Cabecera 3",
+ "heading4": "Cabecera 4",
+ "heading5": "Cabecera 5",
+ "heading6": "Cabecera 6",
+ "filename": "Nombre",
+ "optional": "Opcional",
+ "unorderedlist": "Lista sin orden",
+ "orderedlist": "Lista ordenada",
+ "outdent": "Quitar sangría",
+ "indent": "Sangría",
+ "horizontalrule": "Línea",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Editor de texto enriquecido",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
diff --git a/www/include/i18n/vendor/redactor/fa.js b/www/include/i18n/vendor/redactor/fa.js
new file mode 100644
index 0000000..38682c2
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/fa.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['fa'] = {
+ "format": "فرمت",
+ "image": "تصویر",
+ "file": "فایل",
+ "link": "لینک",
+ "bold": "ضخیم",
+ "italic": "کج",
+ "deleted": "خط خورده",
+ "underline": "زیرخط دار",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "لیست",
+ "link-insert": "اضافه کردن لینک",
+ "link-edit": "ویرایش لینک",
+ "link-in-new-tab": "باز شدن لینک در صفحه جدید",
+ "unlink": "غیرفعال کردن لینک",
+ "cancel": "لغو",
+ "close": "بستن",
+ "insert": "اضافه",
+ "save": "ذخیره",
+ "delete": "حذف",
+ "text": "متن",
+ "edit": "ویرایش",
+ "title": "عنوان",
+ "paragraph": "متن معمولی",
+ "quote": "نقل قول",
+ "code": "کد",
+ "heading1": "سربرگ ۱",
+ "heading2": "سربرگ ۲",
+ "heading3": "سربرگ ۳",
+ "heading4": "سربرگ ۴",
+ "heading5": "سربرگ ۵",
+ "heading6": "سربرگ ۶",
+ "filename": "نام",
+ "optional": "اختیاری",
+ "unorderedlist": "لیست نامرتب",
+ "orderedlist": "لیست مرتب",
+ "outdent": "بیرون آمدگی",
+ "indent": "تورفتگی",
+ "horizontalrule": "خط",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "ویرایشگر متن پیشرفته",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/fi.js b/www/include/i18n/vendor/redactor/fi.js
new file mode 100644
index 0000000..c7c7813
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/fi.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['fi'] = {
+ "format": "Muotoilut",
+ "image": "Kuva",
+ "file": "Tiedosto",
+ "link": "Linkki",
+ "bold": "Lihavointi",
+ "italic": "Kursivointi",
+ "deleted": "Poistettu",
+ "underline": "Alleviivaa",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Luettelot",
+ "link-insert": "Lisää linkki",
+ "link-edit": "Muokkaa linkkiä",
+ "link-in-new-tab": "Avaa linkki uudessa välilehdessä",
+ "unlink": "Poista linkki",
+ "cancel": "Peru",
+ "close": "Sulkea",
+ "insert": "Lisää",
+ "save": "Tallenna",
+ "delete": "Poista",
+ "text": "Teksti",
+ "edit": "Muokata",
+ "title": "Title",
+ "paragraph": "Normaaliteksti",
+ "quote": "Lainaus",
+ "code": "Koodi",
+ "heading1": "Otsikko 1",
+ "heading2": "Otsikko 2",
+ "heading3": "Otsikko 3",
+ "heading4": "Otsikko 4",
+ "heading5": "Otsikko 5",
+ "heading6": "Otsikko 6",
+ "filename": "Nimi (valinnainen)",
+ "optional": "valinnainen",
+ "unorderedlist": "Luettelo luettelomerkein",
+ "orderedlist": "Numeroitu luettelo",
+ "outdent": "Vähennä sisennystä",
+ "indent": "Lisää sisennystä",
+ "horizontalrule": "Viiva",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Rich text editor",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/fr.js b/www/include/i18n/vendor/redactor/fr.js
new file mode 100644
index 0000000..a2034f2
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/fr.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['fr'] = {
+ "format": "Format",
+ "image": "Image",
+ "file": "Fichier",
+ "link": "Lien",
+ "bold": "Gras",
+ "italic": "Italique",
+ "deleted": "Barré",
+ "underline": "Souligné",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Listes",
+ "link-insert": "Insérer un lien",
+ "link-edit": "Editer le lien",
+ "link-in-new-tab": "Ouvrir le lien dans un nouvel onglet",
+ "unlink": "Retirer le lien",
+ "cancel": "Annuler",
+ "close": "Fermer",
+ "insert": "Insérer",
+ "save": "Sauvegarder",
+ "delete": "Supprimer",
+ "text": "Texte",
+ "edit": "Editer",
+ "title": "Titre",
+ "paragraph": "Texte normal",
+ "quote": "Citation",
+ "code": "Code",
+ "heading1": "Titre 1",
+ "heading2": "Titre 2",
+ "heading3": "Titre 3",
+ "heading4": "Titre 4",
+ "heading5": "Titre 5",
+ "heading6": "Titre 6",
+ "filename": "Nom",
+ "optional": "Optionnel",
+ "unorderedlist": "Liste non-ordonnée",
+ "orderedlist": "Liste ordonnée",
+ "outdent": "Réduire le retrait",
+ "indent": "Augmenter le retrait",
+ "horizontalrule": "Ligne",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Editeur de texte enrichi",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/he.js b/www/include/i18n/vendor/redactor/he.js
new file mode 100644
index 0000000..edcd8ea
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/he.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['he'] = {
+ "format": "פורמט",
+ "image": "תמונה",
+ "file": "קובץ",
+ "link": "קישור",
+ "bold": "מודגש",
+ "italic": "נטוי",
+ "deleted": "מחוק",
+ "underline": "Underline",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "רשימות",
+ "link-insert": "הוסף קישור",
+ "link-edit": "ערוך קישור",
+ "link-in-new-tab": "פתח קישור בחלון חדש",
+ "unlink": "הסר קישור",
+ "cancel": "בטל",
+ "close": "סגור",
+ "insert": "הכנס",
+ "save": "שמור",
+ "delete": "מחק",
+ "text": "טקסט",
+ "edit": "ערוך",
+ "title": "כותרת",
+ "paragraph": "טקסט רגיל",
+ "quote": "ציטוט",
+ "code": "קוד",
+ "heading1": "כותרת 1",
+ "heading2": "כותרת 2",
+ "heading3": "כותרת 3",
+ "heading4": "כותרת 4",
+ "heading5": "כותרת 5",
+ "heading6": "כותרת 6",
+ "filename": "שם",
+ "optional": "אופציונאלי",
+ "unorderedlist": "רשימת נקודות",
+ "orderedlist": "רשימה ממוספרת",
+ "outdent": "קרב לשוליים",
+ "indent": "הרחק מהשוליים",
+ "horizontalrule": "קו אופקי",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "עורך טקסט עשיר",
+ "caption": "כיתוב",
+ "bulletslist": "נקודות",
+ "numberslist": "ממוספר",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/hu.js b/www/include/i18n/vendor/redactor/hu.js
new file mode 100644
index 0000000..7d35131
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/hu.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['hu'] = {
+ "format": "Formázás",
+ "image": "Kép",
+ "file": "Fájl",
+ "link": "Hivatkozás",
+ "bold": "Félkövér",
+ "italic": "Dőlt",
+ "deleted": "Áthúzott",
+ "underline": "Aláhúzott",
+ "superscript": "Felső index",
+ "subscript": "Alsó index",
+ "bold-abbr": "F",
+ "italic-abbr": "D",
+ "deleted-abbr": "H",
+ "underline-abbr": "A",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Listák",
+ "link-insert": "Hivatkozás beszúrása",
+ "link-edit": "Hivatkozás módosítása",
+ "link-in-new-tab": "Megnyitás új lapon",
+ "unlink": "Hivatkozás törlése",
+ "cancel": "Mégsem",
+ "close": "Bezárás",
+ "insert": "Beillesztés",
+ "save": "Mentés",
+ "delete": "Törlés",
+ "text": "Szöveg",
+ "edit": "Szerkesztés",
+ "title": "Cím",
+ "paragraph": "Normál szöveg",
+ "quote": "Idézet",
+ "code": "Forráskód",
+ "heading1": "Címsor 1",
+ "heading2": "Címsor 2",
+ "heading3": "Címsor 3",
+ "heading4": "Címsor 4",
+ "heading5": "Címsor 5",
+ "heading6": "Címsor 6",
+ "filename": "Név",
+ "optional": "választható",
+ "unorderedlist": "Rendezett lista",
+ "orderedlist": "Számozott lista",
+ "outdent": "Behúzás csökkentése",
+ "indent": "Behúzás növelése",
+ "horizontalrule": "Vonal",
+ "upload": "Feltöltés",
+ "upload-label": "Át a fájlokat vagy kattintson ide, hogy kiválassza",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Szövegszerkesztő",
+ "caption": "Felirat",
+ "bulletslist": "Golyók",
+ "numberslist": "Számok",
+ "image-position": "Pozíció",
+ "none": "Egyik sem",
+ "left": "Balra",
+ "right": "Jobb",
+ "center": "Középre",
+ "undo": "Kibont",
+ "redo": "Újra"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/it.js b/www/include/i18n/vendor/redactor/it.js
new file mode 100644
index 0000000..2112e95
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/it.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['it'] = {
+ "format": "Formato",
+ "image": "Immagine",
+ "file": "File",
+ "link": "Link",
+ "bold": "Grassetto",
+ "italic": "Corsivo",
+ "deleted": "Barrato",
+ "underline": "Sottolineato",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "G",
+ "italic-abbr": "C",
+ "deleted-abbr": "B",
+ "underline-abbr": "S",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Liste",
+ "link-insert": "Inserisci link",
+ "link-edit": "Modifica link",
+ "link-in-new-tab": "Apri link in un nuovo tab",
+ "unlink": "Elimina link",
+ "cancel": "Annulla",
+ "close": "Chiudi",
+ "insert": "Inserisci",
+ "save": "Salva",
+ "delete": "Cancella",
+ "text": "Testo",
+ "edit": "Modifica",
+ "title": "Titolo",
+ "paragraph": "Testo Normale",
+ "quote": "Citazione",
+ "code": "Codice",
+ "heading1": "Titolo 1",
+ "heading2": "Titolo 2",
+ "heading3": "Titolo 3",
+ "heading4": "Titolo 4",
+ "heading5": "Titolo 5",
+ "heading6": "Titolo 6",
+ "filename": "Nome",
+ "optional": "opzionale",
+ "unorderedlist": "Lista non ordinata",
+ "orderedlist": "Lista ordinata",
+ "outdent": "De-indenta",
+ "indent": "Indenta",
+ "horizontalrule": "Linea",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Editor di testo",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/ja.js b/www/include/i18n/vendor/redactor/ja.js
new file mode 100644
index 0000000..99e1296
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/ja.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['ja'] = {
+ "format": "フォーマットする",
+ "image": "画像",
+ "file": "ファイル",
+ "link": "リンク",
+ "bold": "太字",
+ "italic": "イタリック体",
+ "deleted": "取り消し線",
+ "underline": "下線",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "リスト",
+ "link-insert": "リンクを挿入する",
+ "link-edit": "リンクを編集する",
+ "link-in-new-tab": "新しいタブでリンクを開く",
+ "unlink": "リンクを解除する",
+ "cancel": "取り消す",
+ "close": "閉じる",
+ "insert": "挿入する",
+ "save": "保存する",
+ "delete": "削除する",
+ "text": "テキスト",
+ "edit": "編集する",
+ "title": "タイトル",
+ "paragraph": "標準テキスト",
+ "quote": "引用",
+ "code": "コード",
+ "heading1": "見出し 1",
+ "heading2": "見出し 2",
+ "heading3": "見出し 3",
+ "heading4": "見出し 4",
+ "heading5": "見出し 5",
+ "heading6": "見出し 6",
+ "filename": "名前",
+ "optional": "任意",
+ "unorderedlist": "番号なしリスト",
+ "orderedlist": "番号付きリスト",
+ "outdent": "インデントを戻す",
+ "indent": "インデントする",
+ "horizontalrule": "線",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "リッチテキストエディタ",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/ko.js b/www/include/i18n/vendor/redactor/ko.js
new file mode 100644
index 0000000..fd8df06
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/ko.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['ko'] = {
+ "format": "포맷",
+ "image": "이미지",
+ "file": "파일",
+ "link": "링크",
+ "bold": "굵게",
+ "italic": "기울임꼴",
+ "deleted": "취소선",
+ "underline": "밑줄",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "목록",
+ "link-insert": "링크 삽입",
+ "link-edit": "링크 편집",
+ "link-in-new-tab": "새 탭에 링크 열기",
+ "unlink": "링크 끊기",
+ "cancel": "취소",
+ "close": "닫기",
+ "insert": "삽입",
+ "save": "저장",
+ "delete": "삭제",
+ "text": "글",
+ "edit": "편집",
+ "title": "제목",
+ "paragraph": "보통 글",
+ "quote": "인용",
+ "code": "코드",
+ "heading1": "제목 1",
+ "heading2": "제목 2",
+ "heading3": "제목 3",
+ "heading4": "제목 4",
+ "heading5": "제목 5",
+ "heading6": "제목 6",
+ "filename": "이름",
+ "optional": "선택",
+ "unorderedlist": "주문 안된 목록",
+ "orderedlist": "주문 목록",
+ "outdent": "내어쓰기",
+ "indent": "들여쓰기",
+ "horizontalrule": "행",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Rich text 편집기",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/nl.js b/www/include/i18n/vendor/redactor/nl.js
new file mode 100644
index 0000000..76810bc
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/nl.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['nl'] = {
+ "format": "Format",
+ "image": "Afbeelding",
+ "file": "Bestand",
+ "link": "Link",
+ "bold": "Vet",
+ "italic": "Cursief",
+ "deleted": "Doorstreept",
+ "underline": "Onderstreept",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Lijsten",
+ "link-insert": "Link invoegen",
+ "link-edit": "Link Bewerken",
+ "link-in-new-tab": "Open link in nieuw tabblad",
+ "unlink": "Ontkoppelen",
+ "cancel": "Annuleren",
+ "close": "Afsluiten",
+ "insert": "Invoegen",
+ "save": "Opslaan",
+ "delete": "Verwijder",
+ "text": "Tekst",
+ "edit": "Bewerken",
+ "title": "Titel",
+ "paragraph": "Normale tekst",
+ "quote": "Citaat",
+ "code": "Code",
+ "heading1": "Koptekst 1",
+ "heading2": "Koptekst 2",
+ "heading3": "Koptekst 3",
+ "heading4": "Koptekst 4",
+ "heading5": "Koptekst 5",
+ "heading6": "Koptekst 6",
+ "filename": "Bestandsnaam",
+ "optional": "Optioneel",
+ "unorderedlist": "Ongeordende lijst",
+ "orderedlist": "Geordende lijst",
+ "outdent": "Uitspringen",
+ "indent": "Inspringen",
+ "horizontalrule": "Streep",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "RTF editor",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/no.js b/www/include/i18n/vendor/redactor/no.js
new file mode 100644
index 0000000..9b39ab5
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/no.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['no'] = {
+ "format": "Format",
+ "image": "Bilde",
+ "file": "Fil",
+ "link": "Link",
+ "bold": "Fet",
+ "italic": "Kursiv",
+ "deleted": "Gjennomstreking",
+ "underline": "Understreking",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "F",
+ "italic-abbr": "K",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Punkt",
+ "link-insert": "Sett inn link",
+ "link-edit": "Rediger link",
+ "link-in-new-tab": "Åpne link i ny fane",
+ "unlink": "Fjern Understreking",
+ "cancel": "Abryt",
+ "close": "Lukk",
+ "insert": "Sett inn",
+ "save": "Lagre",
+ "delete": "Slett",
+ "text": "Tekst",
+ "edit": "Rediger",
+ "title": "Tittel",
+ "paragraph": "Normal tekst",
+ "quote": "Sitat",
+ "code": "Kode",
+ "heading1": "Overskrift 1",
+ "heading2": "Overskrift 2",
+ "heading3": "Overskrift 3",
+ "heading4": "Overskrift 4",
+ "heading5": "Overskrift 5",
+ "heading6": "Overskrift 6",
+ "filename": "Navn",
+ "optional": "valgfri",
+ "unorderedlist": "Unordered List",
+ "orderedlist": "Punktliste",
+ "outdent": "Reduser innrykk",
+ "indent": "Øk innrykk",
+ "horizontalrule": "Linje",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Rik-tekst behandler",
+ "caption": "Bildetekst",
+ "bulletslist": "Punkter",
+ "numberslist": "Nummerering",
+ "image-position": "Posisjon",
+ "none": "Ingen",
+ "left": "Venstre",
+ "right": "Høgre",
+ "center": "Senter",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/pl.js b/www/include/i18n/vendor/redactor/pl.js
new file mode 100644
index 0000000..1fd92bd
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/pl.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['pl'] = {
+ "format": "Formatuj",
+ "image": "Obrazek",
+ "file": "Plik",
+ "link": "Link",
+ "bold": "Pogrubienie",
+ "italic": "Kursywa",
+ "deleted": "Przekreślenie",
+ "underline": "Podkreślenie",
+ "superscript": "Indeks górny",
+ "subscript": "Indeks dolny",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Lista",
+ "link-insert": "Wstaw link",
+ "link-edit": "Edytuj link",
+ "link-in-new-tab": "Otwórz link w nowej karcie",
+ "unlink": "Usuń link",
+ "cancel": "Anuluj",
+ "close": "Zamknij",
+ "insert": "Wstaw",
+ "save": "Zapisz",
+ "delete": "Usuń",
+ "text": "Text",
+ "edit": "Edytuj",
+ "title": "Tytuł",
+ "paragraph": "Zwykły tekst",
+ "quote": "Cytat",
+ "code": "Kod",
+ "heading1": "Nagłówek 1",
+ "heading2": "Nagłówek 2",
+ "heading3": "Nagłówek 3",
+ "heading4": "Nagłówek 4",
+ "heading5": "Nagłówek 5",
+ "heading6": "Nagłówek 6",
+ "filename": "Nazwa",
+ "optional": "opcjonalnie",
+ "unorderedlist": "Lista punktowana",
+ "orderedlist": "Lista numerowana",
+ "outdent": "Zmniejsz wcięcie",
+ "indent": "Zwiększ wcięcie",
+ "horizontalrule": "Linia pozioma",
+ "upload": "Przekazać plik",
+ "upload-label": "Upuść pliki tutaj lub kliknij, aby przesłać",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Edytor tekstu",
+ "caption": "Podpis",
+ "bulletslist": "Kule",
+ "numberslist": "Liczby",
+ "image-position": "Pozycja",
+ "none": "Żaden",
+ "left": "Lewo",
+ "right": "Prawa",
+ "center": "Centrum",
+ "undo": "Cofnij",
+ "redo": "Ponów"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/pt_br.js b/www/include/i18n/vendor/redactor/pt_br.js
new file mode 100644
index 0000000..97fecc9
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/pt_br.js
@@ -0,0 +1,104 @@
+(function($R)
+{
+ $R.lang['pt_br'] = {
+ "format": "Formato",
+ "image": "Imagem",
+ "file": "Arquivo",
+ "link": "Link",
+ "bold": "Negrito",
+ "italic": "Itálico",
+ "deleted": "Tachado",
+ "underline": "Sublinhado",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "N",
+ "italic-abbr": "I",
+ "deleted-abbr": "T",
+ "underline-abbr": "S",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Listas",
+ "link-insert": "Inserir link",
+ "link-edit": "Editar link",
+ "link-in-new-tab": "Abrir link em nova guia",
+ "unlink": "Desvincular",
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "insert": "Inserir",
+ "save": "Salvar",
+ "delete": "Excluir",
+ "text": "Texto",
+ "edit": "Editar",
+ "title": "Título",
+ "paragraph": "Texto normal",
+ "quote": "Citação",
+ "code": "Código",
+ "header1": "Cabeçalho 1",
+ "header2": "Cabeçalho 2",
+ "header3": "Cabeçalho 3",
+ "header4": "Cabeçalho 4",
+ "header5": "Cabeçalho 5",
+ "header6": "Cabeçalho 6",
+ "filename": "Nome",
+ "optional": "Opcional",
+ "unorderedlist": "Lista não ordenada",
+ "orderedlist": "Lista ordenada",
+ "outdent": "Diminuir recuo",
+ "indent": "Recuar",
+ "horizontalrule": "Linha",
+ "upload": "Enviar",
+ "upload-label": "Solte os arquivos aqui ou clique para enviar",
+ "upload-change-label": "Solte uma nova imagem para alterar",
+ "accessibility-help-label": "Editor de Rich Text",
+ "caption": "Subtitulo",
+ "bulletslist": "Lista com ponto",
+ "numberslist": "Lista numérica",
+ "image-position": "Posição",
+ "none": "Nenhum",
+ "left": "Esquerda",
+ "right": "Direita",
+ "center": "Centro",
+ "undo": "Desfazer",
+ "redo": "Refazer",
+ "table": "Tabela",
+ "insert-table": "Inserir tabela",
+ "insert-row-above": "Inserir linha à acima",
+ "insert-row-below": "Inserir linha à abaixo",
+ "insert-column-left": "Inserir coluna à esquerda",
+ "insert-column-right": "Inserir coluna à direita",
+ "add-head": "Adicionar cabeçalho",
+ "delete-head": "Remover cabeçalho",
+ "delete-column": "Remover coluna",
+ "delete-row": "Remover linha",
+ "delete-table": "Remover tabela",
+ "fontcolor": "Cor do texto",
+ "text": "Texto",
+ "highlight": "Destaque",
+ "fontfamily": "Fonte",
+ "remove-font-family": "Remover fonte",
+ "choose": "Escolher",
+ "size": "Tamanho",
+ "remove-size": "Remover tamanho da fonte",
+ "fullscreen": "Tela cheia",
+ "align": "Alinhar",
+ "align-left": "Alinhar à esquerda",
+ "align-center": "Alinhar ao centro",
+ "align-right": "Alinhar à direita",
+ "align-justify": "Alinhar justificado",
+ "words": "Palavras",
+ "chars": "Caracteres",
+ "style": "Estilo",
+ "properties": "Propriedades",
+ "specialchars": "Caracteres especiais",
+ "change-text-direction": "Direção do texto",
+ "left-to-right": "Esquerda para direita",
+ "right-to-left": "Direita para esquerda",
+ "change": "Trocar",
+ "variable": "Variável",
+ "variable-select": "Por favor, selecione a variável",
+ "video": "Vídeo",
+ "video-html-code": "Código de incorporação de vídeo ou link do YouTube/Vimeo",
+ "widget": "Widget",
+ "widget-html-code": "Código HTML do Widget"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/ro.js b/www/include/i18n/vendor/redactor/ro.js
new file mode 100644
index 0000000..48a0599
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/ro.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['ro'] = {
+ "format": "Format",
+ "image": "Imagine",
+ "file": "Fișier",
+ "link": "Link",
+ "bold": "Aldin",
+ "italic": "Cursiv",
+ "deleted": "Tăiere cu o linie",
+ "underline": "Subliniere",
+ "superscript": "Exponent",
+ "subscript": "Indice",
+ "bold-abbr": "A",
+ "italic-abbr": "C",
+ "deleted-abbr": "T",
+ "underline-abbr": "S",
+ "superscript-abbr": "Exp",
+ "subscript-abbr": "Ind",
+ "lists": "Liste",
+ "link-insert": "Inserare link",
+ "link-edit": "Editare link",
+ "link-in-new-tab": "Deschidere link în filă nouă",
+ "unlink": "Anulare link",
+ "cancel": "Revocare",
+ "close": "Închidere",
+ "insert": "Inserare",
+ "save": "Salvare",
+ "delete": "Ștergere",
+ "text": "Text",
+ "edit": "Editare",
+ "title": "Titlu",
+ "paragraph": "Text normal",
+ "quote": "Citat",
+ "code": "Cod",
+ "heading1": "Antet 1",
+ "heading2": "Antet 2",
+ "heading3": "Antet 3",
+ "heading4": "Antet 4",
+ "heading5": "Antet 5",
+ "heading6": "Antet 6",
+ "filename": "Nume",
+ "optional": "opțional",
+ "unorderedlist": "Listă neordonată",
+ "orderedlist": "Listă ordonată",
+ "outdent": "Indentare negativă",
+ "indent": "Indentare",
+ "horizontalrule": "Linie",
+ "upload": "Încărcare",
+ "upload-label": "Fixați fișierele aici sau faceți clic pentru a le încărca",
+ "upload-change-label": "Fixați o nouă imagine pentru a schimba",
+ "accessibility-help-label": "Editor de text îmbogățit",
+ "caption": "Legendă",
+ "bulletslist": "Marcatori",
+ "numberslist": "Numere",
+ "image-position": "Poziție",
+ "none": "Niciuna/niciunul",
+ "left": "Stânga",
+ "right": "Dreapta",
+ "center": "Centru",
+ "undo": "Anulare",
+ "redo": "Refacere"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/ru.js b/www/include/i18n/vendor/redactor/ru.js
new file mode 100644
index 0000000..5cfbaf3
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/ru.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['ru'] = {
+ "format": "Формат",
+ "image": "Картинка",
+ "file": "Файл",
+ "link": "Ссылка",
+ "bold": "Полужирный",
+ "italic": "Курсив",
+ "deleted": "Зачеркнутый",
+ "underline": "Подчеркнутый",
+ "superscript": "Надстрочный",
+ "subscript": "Подстрочный",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Списки",
+ "link-insert": "Вставить ссылку",
+ "link-edit": "Редактировать ссылку",
+ "link-in-new-tab": "Открыть ссылку в новом табе",
+ "unlink": "Удалить ссылку",
+ "cancel": "Отменить",
+ "close": "Закрыть",
+ "insert": "Вставить",
+ "save": "Сохранить",
+ "delete": "Удалить",
+ "text": "Текст",
+ "edit": "Редактировать",
+ "title": "Title",
+ "paragraph": "Обычный текст",
+ "quote": "Цитата",
+ "code": "Код",
+ "heading1": "Заголовок 1",
+ "heading2": "Заголовок 2",
+ "heading3": "Заголовок 3",
+ "heading4": "Заголовок 4",
+ "heading5": "Заголовок 5",
+ "heading6": "Заголовок 6",
+ "filename": "Имя файла",
+ "optional": "необязательно",
+ "unorderedlist": "Ненумерованный список",
+ "orderedlist": "Нумерованный список",
+ "outdent": "Убрать отступ",
+ "indent": "Добавить отступ",
+ "horizontalrule": "Линия",
+ "upload": "Загрузить",
+ "upload-label": "Перетащите файлы или нажмите для загрузки",
+ "upload-change-label": "Перетащите новую картинку",
+ "accessibility-help-label": "Редактор форматированного текста",
+ "caption": "Подпись",
+ "bulletslist": "Маркеры",
+ "numberslist": "Нумерация",
+ "image-position": "Обтекание",
+ "none": "Нет",
+ "left": "Слева",
+ "right": "Справа",
+ "center": "По центру",
+ "undo": "Отменить",
+ "redo": "Повторить"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/sk.js b/www/include/i18n/vendor/redactor/sk.js
new file mode 100644
index 0000000..47d3fbe
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/sk.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['sk'] = {
+ "format": "Formát",
+ "image": "Obrázok",
+ "file": "Súbor",
+ "link": "Odkaz",
+ "bold": "Tučné",
+ "italic": "Kurzíva",
+ "deleted": "Preškrtnuté",
+ "underline": "Podčiarknuté",
+ "superscript": "Horný index",
+ "subscript": "Spodný index",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Zoznam",
+ "link-insert": "Vložiť odkaz",
+ "link-edit": "Upraviť odkaz",
+ "link-in-new-tab": "Otvoriť odkaz v novom okne",
+ "unlink": "Zrušiť odkaz",
+ "cancel": "Zrušiť",
+ "close": "Zatvoriť",
+ "insert": "Vložiť",
+ "save": "Uložiť",
+ "delete": "Vymazať",
+ "text": "Text",
+ "edit": "Upraviť",
+ "title": "Názov",
+ "paragraph": "Odsek",
+ "quote": "Citácia",
+ "code": "Kód",
+ "heading1": "Nadpis 1",
+ "heading2": "Nadpis 2",
+ "heading3": "Nadpis 3",
+ "heading4": "Nadpis 4",
+ "heading5": "Nadpis 5",
+ "heading6": "Nadpis 6",
+ "filename": "Meno",
+ "optional": "voliteľné",
+ "unorderedlist": "Nezoradený zoznam",
+ "orderedlist": "Zoradený zoznam",
+ "outdent": "Predsadiť",
+ "indent": "Odsadiť",
+ "horizontalrule": "Linka",
+ "upload": "Nahrať",
+ "upload-label": "Presuňte sem súbory alebo kliknite pre výber",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Rich text editor",
+ "caption": "Titulok",
+ "bulletslist": "odrážkový zoznam",
+ "numberslist": "číslovaný zoznam",
+ "image-position": "Pozícia",
+ "none": "Žiadne",
+ "left": "Vľavo",
+ "right": "Vpravo",
+ "center": "Na stred",
+ "undo": "Späť",
+ "redo": "Obnoviť"
+ };
+})(Redactor);
diff --git a/www/include/i18n/vendor/redactor/sl.js b/www/include/i18n/vendor/redactor/sl.js
new file mode 100644
index 0000000..109bfd7
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/sl.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['sl'] = {
+ "format": "Oblikovanje",
+ "image": "Slika",
+ "file": "Datoteka",
+ "link": "Povezava",
+ "bold": "Krepko",
+ "italic": "Ležeče",
+ "deleted": "Prečrtano",
+ "underline": "Podčrtano",
+ "superscript": "Nadpisano",
+ "subscript": "Podpisano",
+ "bold-abbr": "K",
+ "italic-abbr": "L",
+ "deleted-abbr": "P",
+ "underline-abbr": "U",
+ "superscript-abbr": "Nad",
+ "subscript-abbr": "Pod",
+ "lists": "Seznami",
+ "link-insert": "Vstavi povezavo",
+ "link-edit": "Uredi povezavo",
+ "link-in-new-tab": "Odpri povezavo v novem zavihku",
+ "unlink": "Odstrani povezavo",
+ "cancel": "Prekliči",
+ "close": "Zapri",
+ "insert": "Vstavi",
+ "save": "Shrani",
+ "delete": "Izbriši",
+ "text": "Besedilo",
+ "edit": "Uredi",
+ "title": "Naslov",
+ "paragraph": "Navadno besedilo",
+ "quote": "Navedek",
+ "code": "Koda",
+ "heading1": "Naslov 1",
+ "heading2": "Naslov 2",
+ "heading3": "Naslov 3",
+ "heading4": "Naslov 4",
+ "heading5": "Naslov 5",
+ "heading6": "Naslov 6",
+ "filename": "Ime",
+ "optional": "izbirno",
+ "unorderedlist": "Označen seznam",
+ "orderedlist": "Oštevilčen seznam",
+ "outdent": "Zmanjšaj zamik",
+ "indent": "Povečaj zamik",
+ "horizontalrule": "Črta",
+ "upload": "Naloži",
+ "upload-label": "Povleci datoteke sem ali klikni za nalaganje",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Urejevalnik obogatenega besedila",
+ "caption": "Napis",
+ "bulletslist": "Oznake",
+ "numberslist": "Številčenje",
+ "image-position": "Položaj",
+ "none": "Brez",
+ "left": "Levo",
+ "right": "Desno",
+ "center": "Sredinsko",
+ "undo": "Razveljavi",
+ "redo": "Uveljavi"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/sv.js b/www/include/i18n/vendor/redactor/sv.js
new file mode 100644
index 0000000..d3ece6f
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/sv.js
@@ -0,0 +1,92 @@
+(function($R)
+{
+ $R.lang['sv'] = {
+ "format": "Format",
+ "image": "Bild",
+ "file": "Fil",
+ "link": "Länk",
+ "bold": "Fet",
+ "italic": "Kursiv",
+ "deleted": "Överstruken",
+ "underline": "Understruken",
+ "superscript": "Upphöjd",
+ "subscript": "Nedsänkt",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Lista",
+ "link-insert": "Infoga länk",
+ "link-edit": "Redigera länk",
+ "link-in-new-tab": "Öppna länk i nytt fönster",
+ "unlink": "Radera länk",
+ "cancel": "Avbryt",
+ "close": "Stäng",
+ "insert": "Infoga",
+ "save": "Spara",
+ "delete": "Radera",
+ "text": "Text",
+ "edit": "Redigera",
+ "title": "Titel",
+ "paragraph": "Normal text",
+ "quote": "Citat",
+ "code": "Kod",
+ "heading1": "Titel 1",
+ "heading2": "Titel 2",
+ "heading3": "Titel 3",
+ "heading4": "Titel 4",
+ "heading5": "Titel 5",
+ "heading6": "Titel 6",
+ "filename": "Namn",
+ "optional": "valfritt",
+ "unorderedlist": "Osorterad lista",
+ "orderedlist": "Sorterad lista",
+ "outdent": "Minska utdrag",
+ "indent": "Öka utdrag",
+ "horizontalrule": "Linje",
+ "upload": "Upload",
+ "upload-label": "Släpp filer här eller klicka för att ladda upp",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Textredigerare",
+ "caption": "Undertext",
+ "bulletslist": "Punkter",
+ "numberslist": "Nummer",
+ "image-position": "Position",
+ "none": "Ingen",
+ "left": "Vänster",
+ "right": "Höger",
+ "center": "Centrerad",
+ "undo": "Ångra",
+ "redo": "Gör om",
+
+ /* Table plugin */
+ "table": "Tabell",
+ "insert-table": "Infoga tabell",
+ "insert-row-above": "Infoga rad ovanför",
+ "insert-row-below": "Infoga rad undertill",
+ "insert-column-left": "Infoga kolumn till vänster",
+ "insert-column-right": "Infoga kolumn till höger",
+ "add-head": "Lägg till rubrikrad",
+ "delete-head": "Ta bort rubrikrad",
+ "delete-column": "Ta bort kolumn",
+ "delete-row": "Ta bort rad",
+ "delete-table": "Ta bort tabell",
+
+ /* Fullscreen plugin */
+ "fullscreen": "Fullskärm",
+
+ /* Font color plugin */
+ "fontcolor": "Textfärg",
+ "highlight": "Färgöverstrykning",
+
+ /* Font family plugin */
+ "fontfamily": "Typsnitt",
+ "remove-font-family": "Återställ typsnitt",
+
+ /* Font size plugin */
+ "size": "Storlek",
+ "remove-size": "Återställ textstorlek"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/tr.js b/www/include/i18n/vendor/redactor/tr.js
new file mode 100644
index 0000000..614d76e
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/tr.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['tr'] = {
+ "format": "Format",
+ "image": "Görsel",
+ "file": "Dosya",
+ "link": "Link",
+ "bold": "Kalın",
+ "italic": "İtalik",
+ "deleted": "Üzeri çizgili",
+ "underline": "Altı çizgili",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "Listeleme",
+ "link-insert": "Link ekle",
+ "link-edit": "Linki düzenle",
+ "link-in-new-tab": "Yeni bir pencerede aç",
+ "unlink": "Linki Kaldır",
+ "cancel": "Vazgeç",
+ "close": "Kapat",
+ "insert": "Ekle",
+ "save": "Kaydet",
+ "delete": "Sil",
+ "text": "Metin",
+ "edit": "Düzenle",
+ "title": "Başlık",
+ "paragraph": "Normal yazı",
+ "quote": "Alıntı",
+ "code": "Kod",
+ "heading1": "Başlık 1",
+ "heading2": "Başlık 2",
+ "heading3": "Başlık 3",
+ "heading4": "Başlık 4",
+ "heading5": "Başlık 5",
+ "heading6": "Başlık 6",
+ "filename": "İsim",
+ "optional": "opsiyonel",
+ "unorderedlist": "Sırasız Liste",
+ "orderedlist": "Sıralı Liste",
+ "outdent": "Dışarı Doğru",
+ "indent": "İçeri Doğru",
+ "horizontalrule": "Çizgi",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Zenginleştirilmiş yazı editorü",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/zh_cn.js b/www/include/i18n/vendor/redactor/zh_cn.js
new file mode 100644
index 0000000..a25338d
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/zh_cn.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['zh_cn'] = {
+ "format": "格式",
+ "image": "图片",
+ "file": "文件",
+ "link": "链接",
+ "bold": "加粗",
+ "italic": "斜体",
+ "deleted": "删除线",
+ "underline": "底线",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "列表",
+ "link-insert": "插入链接",
+ "link-edit": "编辑链接",
+ "link-in-new-tab": "在新页面中打开",
+ "unlink": "取消链接",
+ "cancel": "取消",
+ "close": "关闭",
+ "insert": "插入",
+ "save": "保存",
+ "delete": "删除",
+ "text": "文本",
+ "edit": "编辑",
+ "title": "标题",
+ "paragraph": "段落",
+ "quote": "引用",
+ "code": "代码",
+ "heading1": "标题 1",
+ "heading2": "标题 2",
+ "heading3": "标题 3",
+ "heading4": "标题 4",
+ "heading5": "标题 5",
+ "heading6": "标题 6",
+ "filename": "文件名",
+ "optional": "optional",
+ "unorderedlist": "无序列表",
+ "orderedlist": "有序列表",
+ "outdent": "向左缩进",
+ "indent": "向右缩进",
+ "horizontalrule": "水平分隔线",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "富文本编辑器",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/i18n/vendor/redactor/zh_tw.js b/www/include/i18n/vendor/redactor/zh_tw.js
new file mode 100644
index 0000000..104d1ba
--- /dev/null
+++ b/www/include/i18n/vendor/redactor/zh_tw.js
@@ -0,0 +1,64 @@
+(function($R)
+{
+ $R.lang['zh_tw'] = {
+ "format": "樣式",
+ "image": "插入圖片",
+ "file": "插入文件",
+ "link": "連結",
+ "bold": "將文字變成粗體",
+ "italic": "將文字變成斜體",
+ "deleted": "刪除線",
+ "underline": "底線",
+ "superscript": "Superscript",
+ "subscript": "Subscript",
+ "bold-abbr": "B",
+ "italic-abbr": "I",
+ "deleted-abbr": "S",
+ "underline-abbr": "U",
+ "superscript-abbr": "Sup",
+ "subscript-abbr": "Sub",
+ "lists": "列表",
+ "link-insert": "插入連結",
+ "link-edit": "編輯連結",
+ "link-in-new-tab": "開啟新分頁",
+ "unlink": "移除連結",
+ "cancel": "取消",
+ "close": "關閉",
+ "insert": "插入",
+ "save": "儲存",
+ "delete": "刪除",
+ "text": "內文",
+ "edit": "編輯",
+ "title": "標題",
+ "paragraph": "段落",
+ "quote": "引用",
+ "code": "原始碼",
+ "heading1": "標題 1",
+ "heading2": "標題 2",
+ "heading3": "標題 3",
+ "heading4": "標題 4",
+ "heading5": "標題 5",
+ "heading6": "標題 6",
+ "filename": "檔案名稱",
+ "optional": "optional",
+ "unorderedlist": "項目列表",
+ "orderedlist": "編號列表",
+ "outdent": "減少縮排",
+ "indent": "增加縮排",
+ "horizontalrule": "插入水平線",
+ "upload": "Upload",
+ "upload-label": "Drop files here or click to upload",
+ "upload-change-label": "Drop a new image to change",
+ "accessibility-help-label": "Rich text editor",
+ "caption": "Caption",
+ "bulletslist": "Bullets",
+ "numberslist": "Numbers",
+ "image-position": "Position",
+ "none": "None",
+ "left": "Left",
+ "right": "Right",
+ "center": "Center",
+ "undo": "Undo",
+ "redo": "Redo"
+ };
+})(Redactor);
\ No newline at end of file
diff --git a/www/include/index.php b/www/include/index.php
new file mode 100644
index 0000000..d3eb89c
--- /dev/null
+++ b/www/include/index.php
@@ -0,0 +1,3 @@
+
diff --git a/www/include/mpdf/composer.json b/www/include/mpdf/composer.json
new file mode 100644
index 0000000..9a86037
--- /dev/null
+++ b/www/include/mpdf/composer.json
@@ -0,0 +1,5 @@
+{
+ "require": {
+ "mpdf/mpdf": "^7.1"
+ }
+}
diff --git a/www/include/mpdf/composer.lock b/www/include/mpdf/composer.lock
new file mode 100644
index 0000000..70d5b87
--- /dev/null
+++ b/www/include/mpdf/composer.lock
@@ -0,0 +1,275 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "2833371aed4743ebf60ecd860eace04c",
+ "packages": [
+ {
+ "name": "mpdf/mpdf",
+ "version": "v7.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mpdf/mpdf.git",
+ "reference": "349a1ffae7d04f0d976f619d6f00d8569a4a74c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mpdf/mpdf/zipball/349a1ffae7d04f0d976f619d6f00d8569a4a74c7",
+ "reference": "349a1ffae7d04f0d976f619d6f00d8569a4a74c7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "ext-mbstring": "*",
+ "myclabs/deep-copy": "^1.7",
+ "paragonie/random_compat": "^1.4|^2.0|9.99.99",
+ "php": "^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0",
+ "psr/log": "^1.0",
+ "setasign/fpdi": "1.6.*"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9.5",
+ "phpunit/phpunit": "^5.0",
+ "squizlabs/php_codesniffer": "^2.7.0",
+ "tracy/tracy": "^2.4"
+ },
+ "suggest": {
+ "ext-bcmath": "Needed for generation of some types of barcodes",
+ "ext-xml": "Needed mainly for SVG manipulation",
+ "ext-zlib": "Needed for compression of embedded resources, such as fonts"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-development": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Mpdf\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-only"
+ ],
+ "authors": [
+ {
+ "name": "Matěj Humpál",
+ "role": "Developer, maintainer"
+ },
+ {
+ "name": "Ian Back",
+ "role": "Developer (retired)"
+ }
+ ],
+ "description": "A PHP class to generate PDF files from HTML with Unicode/UTF-8 and CJK support",
+ "homepage": "https://mpdf.github.io",
+ "keywords": [
+ "pdf",
+ "php",
+ "utf-8"
+ ],
+ "time": "2018-08-10T11:00:53+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+ "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "replace": {
+ "myclabs/deep-copy": "self.version"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "time": "2018-06-11T23:09:50+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2018-07-02T15:55:56+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2016-10-10T12:19:37+00:00"
+ },
+ {
+ "name": "setasign/fpdi",
+ "version": "1.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Setasign/FPDI.git",
+ "reference": "a6ad58897a6d97cc2d2cd2adaeda343b25a368ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6ad58897a6d97cc2d2cd2adaeda343b25a368ea",
+ "reference": "a6ad58897a6d97cc2d2cd2adaeda343b25a368ea",
+ "shasum": ""
+ },
+ "suggest": {
+ "setasign/fpdf": "FPDI will extend this class but as it is also possible to use \"tecnickcom/tcpdf\" as an alternative there's no fixed dependency configured.",
+ "setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
+ "setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF."
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "filters/",
+ "fpdi.php",
+ "fpdf_tpl.php",
+ "fpdi_pdf_parser.php",
+ "pdf_context.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Slabon",
+ "email": "jan.slabon@setasign.com",
+ "homepage": "https://www.setasign.com"
+ }
+ ],
+ "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+ "homepage": "https://www.setasign.com/fpdi",
+ "keywords": [
+ "fpdf",
+ "fpdi",
+ "pdf"
+ ],
+ "time": "2017-05-11T14:25:49+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": []
+}
diff --git a/www/include/mpdf/vendor/autoload.php b/www/include/mpdf/vendor/autoload.php
new file mode 100644
index 0000000..d6709e8
--- /dev/null
+++ b/www/include/mpdf/vendor/autoload.php
@@ -0,0 +1,7 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier
+ * @author Jordi Boggiano
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath . '\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ if (file_exists($file = $dir . $pathEnd)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/www/include/mpdf/vendor/composer/LICENSE b/www/include/mpdf/vendor/composer/LICENSE
new file mode 100644
index 0000000..f27399a
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/www/include/mpdf/vendor/composer/autoload_classmap.php b/www/include/mpdf/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..45ec80b
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/autoload_classmap.php
@@ -0,0 +1,16 @@
+ $vendorDir . '/setasign/fpdi/fpdf_tpl.php',
+ 'FPDI' => $vendorDir . '/setasign/fpdi/fpdi.php',
+ 'FilterASCII85' => $vendorDir . '/setasign/fpdi/filters/FilterASCII85.php',
+ 'FilterASCIIHexDecode' => $vendorDir . '/setasign/fpdi/filters/FilterASCIIHexDecode.php',
+ 'FilterLZW' => $vendorDir . '/setasign/fpdi/filters/FilterLZW.php',
+ 'fpdi_pdf_parser' => $vendorDir . '/setasign/fpdi/fpdi_pdf_parser.php',
+ 'pdf_context' => $vendorDir . '/setasign/fpdi/pdf_context.php',
+);
diff --git a/www/include/mpdf/vendor/composer/autoload_files.php b/www/include/mpdf/vendor/composer/autoload_files.php
new file mode 100644
index 0000000..d931b8f
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/autoload_files.php
@@ -0,0 +1,10 @@
+ $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
+);
diff --git a/www/include/mpdf/vendor/composer/autoload_namespaces.php b/www/include/mpdf/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..b7fc012
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+ array($vendorDir . '/psr/log/Psr/Log'),
+ 'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'),
+ 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
+);
diff --git a/www/include/mpdf/vendor/composer/autoload_real.php b/www/include/mpdf/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..1cc1c1e
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/autoload_real.php
@@ -0,0 +1,70 @@
+= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInit892b3956ed2661c2b2b4d721f3b33093::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ if ($useStaticLoader) {
+ $includeFiles = Composer\Autoload\ComposerStaticInit892b3956ed2661c2b2b4d721f3b33093::$files;
+ } else {
+ $includeFiles = require __DIR__ . '/autoload_files.php';
+ }
+ foreach ($includeFiles as $fileIdentifier => $file) {
+ composerRequire892b3956ed2661c2b2b4d721f3b33093($fileIdentifier, $file);
+ }
+
+ return $loader;
+ }
+}
+
+function composerRequire892b3956ed2661c2b2b4d721f3b33093($fileIdentifier, $file)
+{
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ require $file;
+
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+ }
+}
diff --git a/www/include/mpdf/vendor/composer/autoload_static.php b/www/include/mpdf/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..8e37d99
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/autoload_static.php
@@ -0,0 +1,62 @@
+ __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
+ );
+
+ public static $prefixLengthsPsr4 = array (
+ 'P' =>
+ array (
+ 'Psr\\Log\\' => 8,
+ ),
+ 'M' =>
+ array (
+ 'Mpdf\\' => 5,
+ ),
+ 'D' =>
+ array (
+ 'DeepCopy\\' => 9,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'Psr\\Log\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
+ ),
+ 'Mpdf\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/mpdf/mpdf/src',
+ ),
+ 'DeepCopy\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy',
+ ),
+ );
+
+ public static $classMap = array (
+ 'FPDF_TPL' => __DIR__ . '/..' . '/setasign/fpdi/fpdf_tpl.php',
+ 'FPDI' => __DIR__ . '/..' . '/setasign/fpdi/fpdi.php',
+ 'FilterASCII85' => __DIR__ . '/..' . '/setasign/fpdi/filters/FilterASCII85.php',
+ 'FilterASCIIHexDecode' => __DIR__ . '/..' . '/setasign/fpdi/filters/FilterASCIIHexDecode.php',
+ 'FilterLZW' => __DIR__ . '/..' . '/setasign/fpdi/filters/FilterLZW.php',
+ 'fpdi_pdf_parser' => __DIR__ . '/..' . '/setasign/fpdi/fpdi_pdf_parser.php',
+ 'pdf_context' => __DIR__ . '/..' . '/setasign/fpdi/pdf_context.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInit892b3956ed2661c2b2b4d721f3b33093::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit892b3956ed2661c2b2b4d721f3b33093::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInit892b3956ed2661c2b2b4d721f3b33093::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/www/include/mpdf/vendor/composer/installed.json b/www/include/mpdf/vendor/composer/installed.json
new file mode 100644
index 0000000..fbdbc9e
--- /dev/null
+++ b/www/include/mpdf/vendor/composer/installed.json
@@ -0,0 +1,269 @@
+[
+ {
+ "name": "mpdf/mpdf",
+ "version": "v7.1.4",
+ "version_normalized": "7.1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mpdf/mpdf.git",
+ "reference": "349a1ffae7d04f0d976f619d6f00d8569a4a74c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mpdf/mpdf/zipball/349a1ffae7d04f0d976f619d6f00d8569a4a74c7",
+ "reference": "349a1ffae7d04f0d976f619d6f00d8569a4a74c7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "ext-mbstring": "*",
+ "myclabs/deep-copy": "^1.7",
+ "paragonie/random_compat": "^1.4|^2.0|9.99.99",
+ "php": "^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0",
+ "psr/log": "^1.0",
+ "setasign/fpdi": "1.6.*"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9.5",
+ "phpunit/phpunit": "^5.0",
+ "squizlabs/php_codesniffer": "^2.7.0",
+ "tracy/tracy": "^2.4"
+ },
+ "suggest": {
+ "ext-bcmath": "Needed for generation of some types of barcodes",
+ "ext-xml": "Needed mainly for SVG manipulation",
+ "ext-zlib": "Needed for compression of embedded resources, such as fonts"
+ },
+ "time": "2018-08-10T11:00:53+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-development": "7.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Mpdf\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-only"
+ ],
+ "authors": [
+ {
+ "name": "Matěj Humpál",
+ "role": "Developer, maintainer"
+ },
+ {
+ "name": "Ian Back",
+ "role": "Developer (retired)"
+ }
+ ],
+ "description": "A PHP class to generate PDF files from HTML with Unicode/UTF-8 and CJK support",
+ "homepage": "https://mpdf.github.io",
+ "keywords": [
+ "pdf",
+ "php",
+ "utf-8"
+ ]
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.8.1",
+ "version_normalized": "1.8.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+ "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "replace": {
+ "myclabs/deep-copy": "self.version"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^7.1"
+ },
+ "time": "2018-06-11T23:09:50+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ]
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "version_normalized": "9.99.99.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "time": "2018-07-02T15:55:56+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ]
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.2",
+ "version_normalized": "1.0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2016-10-10T12:19:37+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ]
+ },
+ {
+ "name": "setasign/fpdi",
+ "version": "1.6.2",
+ "version_normalized": "1.6.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Setasign/FPDI.git",
+ "reference": "a6ad58897a6d97cc2d2cd2adaeda343b25a368ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6ad58897a6d97cc2d2cd2adaeda343b25a368ea",
+ "reference": "a6ad58897a6d97cc2d2cd2adaeda343b25a368ea",
+ "shasum": ""
+ },
+ "suggest": {
+ "setasign/fpdf": "FPDI will extend this class but as it is also possible to use \"tecnickcom/tcpdf\" as an alternative there's no fixed dependency configured.",
+ "setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
+ "setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF."
+ },
+ "time": "2017-05-11T14:25:49+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "filters/",
+ "fpdi.php",
+ "fpdf_tpl.php",
+ "fpdi_pdf_parser.php",
+ "pdf_context.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Slabon",
+ "email": "jan.slabon@setasign.com",
+ "homepage": "https://www.setasign.com"
+ }
+ ],
+ "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+ "homepage": "https://www.setasign.com/fpdi",
+ "keywords": [
+ "fpdf",
+ "fpdi",
+ "pdf"
+ ]
+ }
+]
diff --git a/www/include/mpdf/vendor/mpdf/mpdf/.github/CONTRIBUTING.md b/www/include/mpdf/vendor/mpdf/mpdf/.github/CONTRIBUTING.md
new file mode 100644
index 0000000..0edc250
--- /dev/null
+++ b/www/include/mpdf/vendor/mpdf/mpdf/.github/CONTRIBUTING.md
@@ -0,0 +1,34 @@
+Contributing
+============
+
+Issue tracker
+-------------
+
+The Issue tracker serves mainly as a place to report bugs and request new features.
+Please do not abuse it as a general questions or troubleshooting location.
+
+For these questions you can always use the
+[mpdf tag](https://stackoverflow.com/questions/tagged/mpdf) at [Stack Overflow](https://stackoverflow.com/).
+
+* Please provide a small example in php/html that reproduces your situation
+* Please report one feature or one bug per issue
+* Failing to provide necessary information or not using the issue template may cause the issue to be closed without consideration.
+
+Pull requests
+-------------
+
+Pull requests should be always based on the default [development](https://github.com/mpdf/mpdf/tree/development)
+branch except for backports to older versions.
+
+Some guidelines:
+
+* Use an aptly named feature branch for the Pull request.
+
+* Only files and lines affecting the scope of the Pull request must be affected.
+
+* Make small, *atomic* commits that keep the smallest possible related code changes together.
+
+* Code should be accompanied by a unit test testing expected behaviour.
+
+When updating a PR, do not create a new one, just `git push --force` to your former feature branch, the PR will
+update itself.
diff --git a/www/include/mpdf/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE.md b/www/include/mpdf/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..4aca9f8
--- /dev/null
+++ b/www/include/mpdf/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,22 @@
+> Please use https://stackoverflow.com/questions/tagged/mpdf for all your general questions or troubleshooting!
+> For contributing here, please see the guideline: https://github.com/mpdf/mpdf/blob/development/.github/CONTRIBUTING.md
+>
+> *Warning*: Failing to provide necessary information may cause the issue to be closed without consideration
+
+### I found this bug / would like to have this new functionality
+
+### This is mPDF and PHP version and environment (server/fpm/cli etc) I am using
+
+### This is a PHP code snippet I use
+
+```
+`) were moved from direct Mpdf properties to `Mpdf::$imageVars` public property array
+- Removed global `_SVG_AUTOFONT` and `_SVG_CLASSES` constants in favor of `svgAutoFont` and `svgClasses` configuration keys
+- Moved global `_testIntersect`, `_testIntersectCircle` and `calc_bezier_bbox` fucntions inside `Svg` class as private methods.
+ - Changed names to camelCase without underscores and to `computeBezierBoundingBox`
+- Security: Embedded files via `` custom tag must be explicitly allowed via `allowAnnotationFiles` configuration key
+- `fontDir` property of Mpdf class is private and must be accessed via configuration variable with array of paths or `AddFontDirectory` method
+- QR code `` element now treats `\r\n` and `\n` as actual line breaks
+- cURL is prefered over socket when downloading images.
+- Removed globally defined functions from `functions.php` in favor of `\Mpdf\Utils` classes `PdfDate` and `UtfString`.
+ - Unused global functions were removed entirely.
+
+
+Removed features
+----------------
+
+- Progressbar support
+- JpGraph support
+- `error_reporting` changes
+- Timezone changes
+- `compress.php` utility
+- `_MPDF_PATH` and `_MPDF_URI` constants
+- `_MPDF_TEMP_PATH` constant in favor of `tempDir` configuration variable
+- `_MPDF_TTFONTDATAPATH` in favor of `tempDir` configuration variable
+- `_MPDFK` constant in favor of `\Mpdf\Mpdf::SCALE` class constant
+- `FONT_DESCRIPTOR` constant in favor of `fontDescriptor` configuration variable
+- `_MPDF_SYSTEM_TTFONTS` constant in favor of `fontDir` configuration variable with array of paths or `AddFontDirectory` method
+- HTML output of error messages and debugs
+- Formerly deprecated methods
+
+
+Fixes and code enhancements
+----------------------------
+
+- Fixed joining arab letters
+- Fixed redeclared `unicode_hex` function
+- Converted arrays to short syntax
+- Refactored and tested color handling with potential conversion fixes in `hsl*()` color definitions
+- Refactored `Barcode` class with separate class in `Mpdf\Barcode` namespace for each barcode type
+- Fixed colsum calculation for different locales (by @flow-control in #491)
+- Image type guessing from content separated to its own class
+
+
+New features
+------------
+
+- Refactored caching (custom `Cache` and `FontCache` classes)
+- Implemented `Psr\Log\LoggerAware` interface
+ - All debug and additional messages are now sent to the logger
+ - Messages can be filtered based on `\Mpdf\Log\Context` class constants
+- `FontFileFinder` class allowing to specify multiple paths to search for fonts
+- `MpdfException` now extends `ErrorException` to allow specifying place in code where error occured
+- Generating font metrics moved to separate class
+- Added `\Mpdf\Output\Destination` class with verbose output destination constants
+- Availability to set custom default CSS file
+- Availability to set custom hyphenation dictionary file
+- Refactored code portions to new "separate" classes:
+ - `Mpdf\Color\*` classes
+ - `ColorConvertor`
+ - `ColorModeConvertor`
+ - `ColorSpaceRestrictor`
+ - `Mpdf\SizeConvertor`
+ - `Mpdf\Hyphenator`
+ - `Mpdf\Image\ImageProcessor`
+ - `Mpdf\Image\ImageTypeGuesser`
+ - `Mpdf\Conversion\*` classes
+- Custom watermark angle with `watermarkAngle` configuration variable
+- Custom document properties (idea by @zarubik in #142)
+- PDF/A-3 associated files + additional xmp rdf (by @chab in #130)
+- Additional font directories can be added via `addFontDir` method
+- Introduced `cleanup` method which restores original `mb_` encoding settings (see #421)
+- QR code `` element now treats `\r\n` and `\n` as actual line breaks
+- Customizable following of 3xx HTTP redirects, validation of SSL certificates, cURL timeout.
+ - `curlFollowLocation`
+ - `curlAllowUnsafeSslRequests`
+ - `curlTimeout`
+- QR codes can be generated without a border using `disableborder="1"` HTML attribute in `` tag
+
+
+Git repository enhancements
+---------------------------
+
+- Added contributing guidelines
+- Added Issue template
+
+
+mPDF 6.1.0
+===========================
+
+### 26/04/2016
+
+- Composer updates
+ - First release officially supporting Composer
+ - Updated license in composer.json
+ - Chmod 777 on dirs `ttfontdata`, `tmp`, `graph_cache` after composer install
+- Requiring PHP 5.4.0+ with Composer
+- Code style
+ - Reformated (almost) all PHP files to keep basic code style
+ - Removed trailing whitespaces
+ - Converted all txt, php, css, and htm files to utf8
+ - Removed closing PHP tags
+ - Change all else if calls to elseif
+- Added base PHPUnit tests
+- Added Travis CI integration with unit tests
+- Changed all `mPDF::Error` and `die()` calls to throwing `MpdfException`
+- PDF Import changes
+ - FPDI updated to 1.6.0 to fix incompatible licenses
+ - FPDI loaded from Composer or manually only
+- Removed iccprofiles/CMYK directory
+- Renamed example files: change spaces to underscores to make scripting easier
+- Fixed `LEDGER` and `TABLOID` paper sizes
+- Implemented static cache for mpdf function `ConvertColor`.
+- Removed PHP4 style constructors
+- Work with HTML tags separated to `Tag` class
+- Fixed most Strict standards PHP errors
+- Add config constant so we can define custom font data
+- HTML
+ - fax & tel support in href attribute
+ - Check $html in `$mpdf->WriteHTML()` to see if it is an integer, float, string, boolean or
+ a class with `__toString()` and cast to a string, otherwise throw exception.
+- PHP 7
+ - Fix getting image from internal variable in PHP7 (4dcc2b4)
+ - Fix PHP7 Fatal error: `'break' not in the 'loop' or 'switch' context` (002bb8a)
+- Fixed output file name for `D` and `I` output modes (issue #105, f297546)
+
+mPDF 6.0
+===========================
+
+### 20/12/2014
+
+New features / Improvements
+---------------------------
+- Support for OpenTypeLayout tables / features for complex scripts and Advances Typography.
+- Improved bidirectional text handling.
+- Improved line-breaking, including for complex scripts e.g. Lao, Thai and Khmer.
+- Updated page-breaking options.
+- Automatic language mark-up and font selection using autoScriptToLang and autoLangToFont.
+- Kashida for text-justification in arabic scripts.
+- Index collation for non-ASCII characters.
+- Index mark-up allowing control over layout using CSS.
+- `{PAGENO}` and `{nbpg}` can use any of the number types as in list-style e.g. set in `` using pagenumstyle.
+- CSS support for lists.
+- Default stylesheet - `mpdf.css` - updated.
+
+Added CSS support
+-----------------
+- lang attribute selector e.g. :lang(fr), [lang="fr"]
+- font-variant-position
+- font-variant-caps
+- font-variant-ligatures
+- font-variant-numeric
+- font-variant-alternates - Only [normal | historical-forms] supported (i.e. most are NOT supported)
+- font-variant - as above, and except for: east-asian-variant-values, east-asian-width-values, ruby
+- font-language-override
+- font-feature-settings
+- text-outline is now supported on TD/TH tags
+- hebrew, khmer, cambodian, lao, and cjk-decimal recognised as values for "list-style-type" in numbered lists and page numbering.
+- list-style-image and list-style-position
+- transform (on `` only)
+- text-decoration:overline
+- image-rendering
+- unicode-bidi (also `` tag)
+- vertical-align can use lengths e.g. 0.5em
+- line-stacking-strategy
+- line-stacking-shift
+
+mPDF 5.7.4
+================
+
+### 15/12/2014
+
+Bug Fixes & Minor Additions
+---------------------------
+- SVG images now support embedded images e.g. ``
+- SVG images now supports `` element e.g. ``, and also ``
+- SVG images now can use Autofont (see top of `classes/svg.php` file)
+- SVG images now has limited support for CSS classes (see top of `classes/svg.php` file)
+- SVG images - style inheritance improved
+- SVG images - improved handling of comments and other extraneous code
+- SVG images - fix to ensure opacity is reset before another element
+- SVG images - font-size not resetting after a `` element
+- SVG radial gradients bug (if the focus [fx,fy] lies outside circle defined by [cx,cy] and r) cf. pservers-grad-15-b.svg
+- SVG allows spaces in attribute definitions in `