Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace ext\pok4;
- use \PDO;
- if(count(get_included_files()) == 1) exit("Direct access not permitted."); //Don't edit
- //Your Extension Script
- class the_tickets extends \App\Controllers\BaseController {
- public function __construct() {
- parent::__construct();
- $this->the_tickets_lang(); //our language definitions
- }
- public function custom_page_admin() {
- if (strpos($_SERVER['REQUEST_URI'], 'apage=view_tickets') !== false) {
- return $this->admin_form();
- }
- }
- public function ajax() {
- global $bb_is_admin;
- //close ticket
- if(is_ajax() && isset($_GET['id'])) {
- $id = (int)$_GET['id'];
- $username = $this->username;
- if($bb_is_admin) {
- $this->db->query("UPDATE ".$this->argos_db_prefix."tickets SET open=0 WHERE id='$id'");
- } else {
- $this->db->query("UPDATE ".$this->argos_db_prefix."tickets SET open=0 WHERE id='$id' AND username='$username'");
- }
- }
- //submit ticket
- if(is_ajax() && isset($_POST['tid'])) {
- $tid = (int)$_POST['tid'];
- $text = nl2br(htmlspecialchars($_POST['t_msg']));
- $username = $this->username;
- $date = time();
- if($this->is_admin) {
- $go = $this->db->prepare("INSERT INTO ".$this->argos_db_prefix."tickets_comments (tid,text,username,date,authored) VALUES('$tid',?,'$username','$date', '0');");
- $go->bindParam(1, $text, PDO::PARAM_STR);
- $go->execute();
- } else {
- $go = $this->db->prepare("INSERT INTO ".$this->argos_db_prefix."tickets_comments (tid,text,username,date,authored) VALUES('$tid',?,'$username','$date', '1');");
- $go->bindParam(1, $text, PDO::PARAM_STR);
- $go->execute();
- }
- }
- }
- public function admin_form() {
- //pagination
- $results_check = $this->db->query('SELECT COUNT(id) FROM '.$this->argos_db_prefix.'tickets')->fetchColumn();
- if($results_check > 0) {
- $pagination = pagination($results_check, [
- 'get_vars' => [
- 'apage' => @$_GET['apage'],
- 'view_tickets' => @$_GET['view_tickets']
- ],
- 'per_page' => 10, //how many results per page
- 'per_side' => 3,
- 'get_name' => 'page'
- ]);
- } else {
- //reset this variables to 0, to prevent errors
- $pagination['limit']['first'] = 0;
- $pagination['limit']['second'] = 0;
- }
- $print = $this->lang['ext_the_tickets_welcome']."<br/><br/>";
- $query_check = $this->db->query("SELECT * FROM ".$this->argos_db_prefix."tickets ORDER by id DESC LIMIT {$pagination['limit']['first']}, {$pagination['limit']['second']}");
- if($query_check->rowCount() > 0) {
- while ($row=$query_check->fetch(PDO::FETCH_ASSOC)) {
- $tid = $row['id'];
- $tq = $row['question'];
- $open = $row['open'];
- $category = $row['category'];
- $username = $row['username'];
- $open_s = "";//globalize
- if($open == '1') {
- $open_s = $this->lang['ext_the_tickets_open'].' <i style="cursor:pointer;color:red" title="close" class="close_t_'.$tid.' fa fa-close"></i>  <form method="post" style="display:inline-block"><input type="hidden" name="tid" value="'.$tid.'"/><input class="btn btn-xs btn-danger" type="submit" name="del_t" value="delete"/></form>';
- } else {
- $open_s = $this->lang['ext_the_tickets_closed'].' <form method="post" style="display:inline-block"><input type="hidden" name="tid" value="'.$tid.'"/><input class="btn btn-xs btn-danger" type="submit" name="del_t" value="delete"/></form>';
- }
- $date = date('d.m.y H:i:s',$row['date']);
- $text = $row['text'];
- $print .= '
- <div class="tickets_box t_'.$tid.'">['.$category.'] '.$tq.' | '.$this->lang['ext_the_tickets_date'].': '.$date.' | '.$this->lang['ext_the_tickets_status'].': '.$open_s.'</div>
- <div class="t_container_style t_cont_'.$tid.'" style="display:none">
- <div class=" t_new_msg_body">('.$username.'): ('.$date.'): <br/>'.$text.'</div>';
- $get_all_msgs = $this->db->query("SELECT * FROM ".$this->argos_db_prefix."tickets_comments WHERE tid='$tid' Order by id ASC");
- while($row = $get_all_msgs->fetch(PDO::FETCH_ASSOC)) {
- $textt = $row['text'];
- $datet = date('d.m.y H:i:s',$row['date']);
- $authored = $row['authored'];
- $username = $row['username'];
- if($authored == 1) {
- $authored = "($username):";
- } else {
- $authored = "<span style='color:red'>Administrator:</span>";
- }
- $print .= "<div class='t_new_msg_body'>$authored ($datet):<br/> $textt</div>";
- }
- //send new message to current ticket start
- if($open == '1') {
- $print .='<br/>
- <form method="post" class="form_submit_t_'.$tid.'">
- <textarea name="t_msg" class="form-control"></textarea><br/>
- <input type="hidden" name="tid" value="'.$tid.'"/>
- <input type="submit" class="btn btn-xs btn-success send_ticket_message_'.$tid.'" name="send_ticket_message" value="'.$this->lang['ext_the_tickets_send'].'"/>
- </form>
- <div id="show_msg_t_'.$tid.'"></div>';
- $this->dispatcher->dispatch('core_admin_event_inside_script_tag','
- $( ".send_ticket_message_'.$tid.'" ).click(function() {
- var str = $( ".form_submit_t_'.$tid.'" ).serialize();
- $.ajax({
- url: "/ajax/ext/pok4/the_tickets",
- type: "POST",
- data: str,
- success: function(data){
- $("#show_msg_t_'.$tid.'").html("'.$this->lang['ext_the_tickets_message_has_send'].' <a href=\"'.url().'/admin/custom_pages_ext.php?apage=view_tickets\" style=\"color:red\">Refresh.</a>");
- }
- });
- return false;
- });
- ');
- } else {
- $print .= '<br/><div class="alert alert-danger">'.$this->lang['ext_the_tickets_ticket_closed'].'</div>';
- }
- $print .= '
- </div> <!-- t_container end -->
- ';
- $this->dispatcher->dispatch('core_admin_event_inside_script_tag','
- $( ".t_'.$tid.'" ).click(function() {$( ".t_cont_'.$tid.'" ).toggle( "fast", function() {});});
- $( ".close_t_'.$tid.'" ).click(function() {
- $.ajax({
- url: "/ajax/ext/pok4/the_tickets",
- type: "GET",
- data:{"id": "'.$tid.'"},
- success: function(data){
- location.reload();
- }
- });
- });
- ');
- }
- $print .= $pagination['output'];
- } else {
- $print .= "<div class='alert alert-info'>".$this->lang['ext_the_tickets_no_tickets_for_now']."</div>";
- }
- return $print.$this->submit_admin_del_ticket(); //we print everything and proceed to submit request
- }
- public function submit_admin_del_ticket() {
- if(isset($_POST['del_t'])) {
- header("refresh: 1;"); //refresh the page to view results
- $tid = (int)$_POST['tid'];
- $go = $this->db->query("DELETE FROM ".$this->argos_db_prefix."tickets WHERE id=$tid");
- $go = $this->db->query("DELETE FROM ".$this->argos_db_prefix."tickets_comments WHERE tid=$tid");
- }
- }
- public function custom_page() {
- if (strpos($_SERVER['REQUEST_URI'], '/pages/send_ticket') !== false) {
- $this->mustache->addHelper('legacy', [
- 'php' => function() {
- ob_start();
- echo $this->custom_page_content();
- return ob_get_clean();
- },
- ]);
- }
- }
- public function custom_page_content() {
- $ticket_type = $_GET['t_type'];
- $print = "<a href='".url()."/pages/send_ticket' class='btn btn-xs btn-success' style='color:#fff !important'>".$this->lang['ext_the_tickets_home']."</a> || <a href='".url()."/pages/send_ticket?t_type=send_ticket' class='btn btn-xs btn-info' style='color:#fff !important'>".$this->lang['ext_the_tickets_send_ticket']."</a><br/><br/>";
- if(!isset($ticket_type)) {
- $username = $this->username;
- $results = $this->db->query("SELECT COUNT(`id`) FROM `".$this->argos_db_prefix."tickets` WHERE username='$username'")->fetchColumn();;
- $pagination = pagination($results, array(
- 'get_vars' => [
- 'cat' => (int)@$_GET['cat'],
- 'view' => @$_GET['view']
- ],
- 'per_page' => 10,
- 'per_side' => 3,
- 'get_name' => 'page'
- ));
- $query = $this->db->query("SELECT * FROM `".$this->argos_db_prefix."tickets` WHERE username='$username' ORDER by id DESC LIMIT {$pagination['limit']['first']}, {$pagination['limit']['second']}");
- $query_check = $this->db->query("SELECT * FROM `".$this->argos_db_prefix."tickets` WHERE username='$username' ORDER by id DESC");
- if($query_check->rowCount() >0) {
- while ($row=$query->fetch(PDO::FETCH_ASSOC)) {
- $tid = $row['id'];
- $tq = $row['question'];
- $open = $row['open'];
- $category = $row['category'];
- $open_s = "";//globalize
- if($open == '1') {
- $open_s = $this->lang['ext_the_tickets_open'].' <i style="cursor:pointer;color:red" title="close" class="close_t_'.$tid.' fa fa-close"></i>';
- } else {
- $open_s = $this->lang['ext_the_tickets_closed'];
- }
- $date = date('d.m.y H:i:s',$row['date']);
- $text = $row['text'];
- $print .= '
- <div class="tickets_box t_'.$tid.'">['.$category.'] '.$tq.' | '.$this->lang['ext_the_tickets_date'].': '.$date.' | '.$this->lang['ext_the_tickets_status'].': '.$open_s.'</div>
- <div class="t_container_style t_cont_'.$tid.'" style="display:none">
- <div class="t_new_msg_body"> '.$this->lang['ext_the_tickets_first_message'].' ('.$date.'): <br/>'.$text.'</div>';
- $get_all_msgs = $this->db->query("SELECT * FROM ".$this->argos_db_prefix."tickets_comments WHERE tid='$tid' Order by id ASC");
- while($row = $get_all_msgs->fetch(PDO::FETCH_ASSOC)) {
- $textt = $row['text'];
- $datet = date('d.m.y H:i:s',$row['date']);
- $authored = $row['authored'];
- $username = $row['username'];
- if($authored == 1) {
- $authored = $this->lang['ext_the_tickets_your_message']." ($username):";
- } else {
- $authored = "<span style='color:red'>".$this->lang['ext_the_tickets_message_from_team'].":</span>";
- }
- $print .= "<div class='t_new_msg_body'>$authored ($datet):<br/> $textt</div>";
- }
- //send new message to current ticket start
- if($open == '1') {
- $print .='<br/>
- <form method="post" class="form_submit_t_'.$tid.'">
- <textarea name="t_msg" class="form-control"></textarea><br/>
- <input type="hidden" name="tid" value="'.$tid.'"/>
- <input type="submit" class="btn btn-xs btn-success send_ticket_message_'.$tid.'" name="send_ticket_message" value="'.$this->lang['ext_the_tickets_send'].'"/>
- </form>
- <div id="show_msg_t_'.$tid.'"></div>
- <script>
- head.ready(function(){
- $( ".send_ticket_message_'.$tid.'" ).click(function() {
- var str = $( ".form_submit_t_'.$tid.'" ).serialize();
- $.ajax({
- url: "/ajax/ext/pok4/the_tickets",
- type: "POST",
- data: str,
- success: function(){
- $("#show_msg_t_'.$tid.'").html("'.$this->lang['ext_the_tickets_message_has_send'].' <a href=\"'.url().'/pages/send_ticket\" style=\"color:red\">Refresh.</a>");
- }
- });
- return false;
- });
- });
- </script>
- ';
- } else {
- $print .= '<br/><div class="alert alert-danger">'.$this->lang['ext_the_tickets_ticket_closed'].'</div>';
- }
- $print .= '
- </div> <!-- t_container end -->
- <script>
- head.ready(function(){
- $( ".t_'.$tid.'" ).click(function() {$( ".t_cont_'.$tid.'" ).toggle( "fast", function() {});});
- $( ".close_t_'.$tid.'" ).click(function() {
- $.ajax({
- url: "/ajax/ext/pok4/the_tickets",
- type: "GET",
- data: {"id" : "'.$tid.'"},
- success: function(data){
- location.reload();
- }
- });
- });
- });
- </script>';
- }
- $print .= $pagination['output']; //we show pages for user
- } else {
- $print .= "<div class='alert alert-info'>".$this->lang['ext_the_tickets_no_tickets_for_now_user']."</div>";
- }
- }
- if($ticket_type == "send_ticket") { //ticket send
- if($this->is_anonymous) { $print .= "<div class='alert alert-warning'>".$this->lang['ext_the_tickets_login_to_send']."</div>"; } else {
- $print .= '<form method="post" style="max-width:400px">
- <select name="category" class="form-control">
- <option value="'.$this->lang['ext_the_ticket_select_1'].'">'.$this->lang['ext_the_ticket_select_1'].'</option>
- <option value="'.$this->lang['ext_the_ticket_select_2'].'">'.$this->lang['ext_the_ticket_select_2'].'</option>
- <option value="'.$this->lang['ext_the_ticket_select_3'].'">'.$this->lang['ext_the_ticket_select_3'].'</option>
- <option value="'.$this->lang['ext_the_ticket_select_4'].'">'.$this->lang['ext_the_ticket_select_4'].'</option>
- <option value="'.$this->lang['ext_the_ticket_select_5'].'">'.$this->lang['ext_the_ticket_select_5'].'</option>
- </select>
- <input type="text" name="your_q" class="form-control" placeholder="'.$this->lang['ext_the_tickets_your_question'].'" required/><br/>
- '.$this->lang['ext_the_tickets_your_text'].':<br/>
- <textarea class="form-control" name="your_text" required></textarea><br/>
- <img src="{{baseurl}}/captcha.php" alt="captcha" class="img-responsive" id="capImage"/><br/>
- <input class="form-control" placeholder="Enter the code" name="captcha_code" type="text" value="">
- <input type="submit" name="submit_ticket" class="btn btn-md btn-success" value="'.$this->lang['ext_the_tickets_send'].'"/>
- </form>';
- }
- if(isset($_POST['submit_ticket'])) {
- $date_t = time();
- $t_category = htmlspecialchars($_POST['category']);
- $t_question = htmlspecialchars($_POST['your_q']);
- $t_text = nl2br(htmlspecialchars($_POST['your_text']));
- $username = $this->username;
- $captchaCode = $_SESSION['captchaCode'];
- $enteredcaptchaCode = trim($_POST['captcha_code']);
- if($enteredcaptchaCode == $captchaCode){
- //make log
- make_log('has send a ticket','user');
- $go = $this->db->prepare("INSERT INTO ".$this->argos_db_prefix."tickets (username,category,question,text,date,open) VALUES('$username',?,?,?,'$date_t','1')");
- $go->bindParam(1, $t_category, PDO::PARAM_STR);
- $go->bindParam(2, $t_question, PDO::PARAM_STR);
- $go->bindParam(3, $t_text, PDO::PARAM_STR);
- $go->execute();
- $print .= "<div class='alert alert-success'>".$this->lang['ext_the_tickets_form_succ']."</div>";
- } else {
- $print .= "<div class='alert alert-danger'>".$this->lang['lang_wrong_captcha']."</div>";
- }
- }
- }
- return $print;
- }
- //Extension language definitions
- public function the_tickets_lang() {
- if(get_current_language() == 'bg') {
- $this->lang= array_merge($this->lang, [
- 'ext_the_tickets_welcome'=>'От тук, вие може да отговаряте на тикетите, които са пуснати от вашите потребители!',
- 'ext_the_tickets_open'=>'Отворен',
- 'ext_the_tickets_closed'=>'Затворен',
- 'ext_the_tickets_date'=> 'Дата',
- 'ext_the_tickets_status'=> 'Статус',
- 'ext_the_tickets_message_from_team'=>'Съобщение от екипа на сайта',
- 'ext_the_tickets_your_message'=>'Твоето съобщение',
- 'ext_the_tickets_first_message'=>'Твоето първо съобщение',
- 'ext_the_tickets_send'=>'Изпрати',
- 'ext_the_tickets_send_ticket'=>'Изпрати тикет',
- 'ext_the_tickets_home'=>'Начало',
- 'ext_the_tickets_ticket_closed'=>'Не можеш да отговаряш повече на този тикет, тъй като той е затворен (приключен)',
- 'ext_the_tickets_message_has_send'=>'Съобщението е изпратено, моля рефрешнете страницата.',
- 'ext_the_tickets_no_tickets_for_now'=>'За момента няма отворени тикети.',
- 'ext_the_tickets_no_tickets_for_now_user'=>'За момента нямаш отворени тикети.',
- //form
- 'ext_the_tickets_login_to_send'=>'Логни се, за да видиш тази секция!',
- 'ext_the_tickets_your_question'=>'Вашият въпрос',
- 'ext_the_tickets_your_text'=>'Вашия текст',
- 'ext_the_ticket_select_1'=> 'Общи въпроси',
- 'ext_the_ticket_select_2'=> 'Проблем със сървърите',
- 'ext_the_ticket_select_3'=> 'Относно вип привилегиите',
- 'ext_the_ticket_select_4'=> 'За реклама',
- 'ext_the_ticket_select_5'=> 'Проблеми със сайта',
- 'ext_the_tickets_form_succ'=> 'Тикета е изпратен успешно! :)',
- ]);
- }
- if(get_current_language() == 'en') {
- $this->lang= array_merge($this->lang, [
- 'ext_the_tickets_welcome'=>'From here, you can reply to the tickets released by your users!',
- 'ext_the_tickets_open'=>'Open',
- 'ext_the_tickets_closed'=>'Closed',
- 'ext_the_tickets_date'=> 'Date',
- 'ext_the_tickets_status'=> 'Status',
- 'ext_the_tickets_message_from_team'=>'Message from the site team',
- 'ext_the_tickets_your_message'=>'Your message',
- 'ext_the_tickets_first_message'=>'Your first message',
- 'ext_the_tickets_send'=>'Send',
- 'ext_the_tickets_send_ticket'=>'Send ticket',
- 'ext_the_tickets_home'=>'Home',
- 'ext_the_tickets_ticket_closed'=>'You can no longer reply to this ticket as it is closed',
- 'ext_the_tickets_message_has_send'=>'The message has been sent, please refresh the page.',
- 'ext_the_tickets_no_tickets_for_now'=>'There are currently no open tickets.',
- 'ext_the_tickets_no_tickets_for_now_user'=>'You currently have no open tickets.',
- //form
- 'ext_the_tickets_login_to_send'=>'Login, to see this section!',
- 'ext_the_tickets_your_question'=>'Your question',
- 'ext_the_tickets_your_text'=>'Your text',
- 'ext_the_ticket_select_1'=> 'General questions',
- 'ext_the_ticket_select_2'=> 'Problems with servers',
- 'ext_the_ticket_select_3'=> 'About VIP privileges',
- 'ext_the_ticket_select_4'=> 'For advertising',
- 'ext_the_ticket_select_5'=> 'Problems with the site',
- 'ext_the_tickets_form_succ'=> 'The ticket was sent successfully! :)',
- ]);
- }
- if(get_current_language() == 'ru') {
- $this->lang= array_merge($this->lang, [
- 'ext_the_tickets_welcome'=>'Отсюда вы можете отвечать на тикеты, выпущенные вашими пользователями!',
- 'ext_the_tickets_open'=>'Oткрытым',
- 'ext_the_tickets_closed'=>'Закрыто',
- 'ext_the_tickets_date'=> 'Дата',
- 'ext_the_tickets_status'=> 'Положение дел',
- 'ext_the_tickets_message_from_team'=>'Сообщение от команды сайта',
- 'ext_the_tickets_your_message'=>'Ваше сообщение',
- 'ext_the_tickets_first_message'=>'Ваше первое сообщение',
- 'ext_the_tickets_send'=>'Отправить',
- 'ext_the_tickets_send_ticket'=>'Отправить билет',
- 'ext_the_tickets_home'=>'Дома',
- 'ext_the_tickets_ticket_closed'=>'Вы больше не можете отвечать на этот тикет, так как он закрыт',
- 'ext_the_tickets_message_has_send'=>'Сообщение отправлено, обновите страницу.',
- 'ext_the_tickets_no_tickets_for_now'=>'В настоящее время нет открытых билетов.',
- 'ext_the_tickets_no_tickets_for_now_user'=>'В настоящее время у вас нет открытых билетов.',
- //form
- 'ext_the_tickets_login_to_send'=>'Войдите, чтобы увидеть этот раздел!',
- 'ext_the_tickets_your_question'=>'Ваш вопрос',
- 'ext_the_tickets_your_text'=>'Ваш текст',
- 'ext_the_ticket_select_1'=> 'Основные вопросы',
- 'ext_the_ticket_select_2'=> 'Проблема с сервером',
- 'ext_the_ticket_select_3'=> 'О VIP-привилегиях',
- 'ext_the_ticket_select_4'=> 'Для рекламы',
- 'ext_the_ticket_select_5'=> 'Проблемы с сайтом',
- 'ext_the_tickets_form_succ'=> 'Билет успешно отправлен! :)',
- ]);
- }
- }
- public function load() {
- $this->dispatcher->dispatch('core_admin_event_custom_pages_ext',$this->custom_page_admin());
- $this->dispatcher->dispatch('core_event_before_header',$this->custom_page());
- if (strpos($_SERVER['REQUEST_URI'], '/pages/send_ticket') !== false) {
- $this->dispatcher->dispatch('core_event_head_append','<link rel="stylesheet" href="ext/pok4/the_tickets/css/css.css">');
- }
- if (strpos($_SERVER['REQUEST_URI'], 'page=view_tickets') !== false) {
- $this->dispatcher->dispatch('core_admin_event_head_append','<link rel="stylesheet" href="../ext/pok4/the_tickets/css/css.css">');
- }
- $this->dispatcher->dispatch('core_admin_event_ext_pages','<li><a href="custom_pages_ext.php?apage=view_tickets">Tickets</a></li>');
- }
- };
- $load_ext = new the_tickets;
- $load_ext->load();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement