File: //proc/thread-self/cwd/pm/app/Models/Project_comments_model.php
<?php
namespace App\Models;
class Project_comments_model extends Crud_model {
protected $table = null;
private $Project_files_model;
private $Tasks_model;
function __construct() {
$this->Project_files_model = model("App\Models\Project_files_model");
$this->Tasks_model = model("App\Models\Tasks_model");
$this->table = 'project_comments';
parent::__construct($this->table);
}
function schema() {
return array(
"id" => array(
"label" => app_lang("id"),
"type" => "int"
),
"created_by" => array(
"label" => app_lang("created_by"),
"type" => "foreign_key",
"linked_model" => model("App\Models\Users_model"),
"label_fields" => array("first_name", "last_name"),
),
"created_at" => array(
"label" => app_lang("created_date"),
"type" => "date_time"
),
"description" => array(
"label" => app_lang("comment"),
"type" => "text"
),
"project_id" => array(
"label" => app_lang("project"),
"type" => "foreign_key",
"linked_model" => model("App\Models\Projects_model"),
"label_fields" => array("title"),
),
"task_id" => array(
"label" => app_lang("task"),
"type" => "foreign_key",
"linked_model" => model("App\Models\Tasks_model"),
"label_fields" => array("id"),
),
"file_id" => array(
"label" => app_lang("project"),
"type" => "foreign_key",
"linked_model" => model("App\Models\Project_files_model"),
"label_fields" => array("id"),
),
"customer_feedback_id" => array(
"label" => app_lang("feedback"),
"type" => "foreign_key",
"linked_model" => model("App\Models\Project_comments_model"),
"label_fields" => array("description"),
),
"comment_id" => array(
"label" => app_lang("comment"),
"type" => "foreign_key",
"linked_model" => model("App\Models\Project_comments_model"),
"label_fields" => array("description"),
),
"deleted" => array(
"label" => app_lang("deleted"),
"type" => "int"
)
);
}
function get_details($options = array()) {
$project_comments_table = $this->db->prefixTable('project_comments');
$likes_table = $this->db->prefixTable('likes');
$users_table = $this->db->prefixTable('users');
$pin_comments_table = $this->db->prefixTable('pin_comments');
$where = "";
$id = $this->_get_clean_value($options, "id");
if ($id) {
$where = " AND $project_comments_table.id=$id";
}
$project_id = $this->_get_clean_value($options, "project_id");
if ($project_id) {
$where .= " AND $project_comments_table.project_id=$project_id AND $project_comments_table.task_id=0 AND $project_comments_table.file_id=0 and $project_comments_table.customer_feedback_id=0";
}
$task_id = $this->_get_clean_value($options, "task_id");
if ($task_id) {
$where .= " AND $project_comments_table.task_id=$task_id";
}
$file_id = $this->_get_clean_value($options, "file_id");
if ($file_id) {
$where .= " AND $project_comments_table.file_id=$file_id";
}
$customer_feedback_id = $this->_get_clean_value($options, "customer_feedback_id");
if ($customer_feedback_id) {
$where .= " AND $project_comments_table.customer_feedback_id=$customer_feedback_id";
}
$extra_select = "";
$login_user_id = $this->_get_clean_value($options, "login_user_id");
if ($login_user_id) {
$extra_select = ", (SELECT count($likes_table.id) FROM $likes_table WHERE $likes_table.project_comment_id=$project_comments_table.id AND $likes_table.deleted=0 AND $likes_table.created_by=$login_user_id) as like_status,
(SELECT count($pin_comments_table.id) FROM $pin_comments_table WHERE $pin_comments_table.project_comment_id=$project_comments_table.id AND $pin_comments_table.deleted=0 AND $pin_comments_table.pinned_by=$login_user_id) as pinned_comment_status";
}
//show the main comments in descending mode
//but show the replies in ascedning mode
$sort = " DESC";
$comment_id = $this->_get_clean_value($options, "comment_id");
if ($comment_id) {
$where .= " AND $project_comments_table.comment_id=$comment_id";
$sort = "ASC";
} else {
$where .= " AND $project_comments_table.comment_id=0";
}
$sql = "SELECT $project_comments_table.*, $project_comments_table.id AS parent_commment_id, CONCAT($users_table.first_name, ' ',$users_table.last_name) AS created_by_user, $users_table.image as created_by_avatar, $users_table.user_type,
(SELECT COUNT($project_comments_table.id) as total_replies FROM $project_comments_table WHERE $project_comments_table.comment_id=parent_commment_id) AS total_replies,
(SELECT GROUP_CONCAT(' ', $users_table.first_name, ' ', $users_table.last_name)
FROM $users_table
WHERE $users_table.deleted=0 AND $users_table.user_type!='lead' AND $users_table.id IN(SELECT $likes_table.created_by FROM $likes_table WHERE $likes_table.deleted=0 AND $likes_table.project_comment_id=$project_comments_table.id)) AS comment_likers,
(SELECT COUNT($likes_table.id) as total_likes FROM $likes_table WHERE $likes_table.project_comment_id=$project_comments_table.id AND $likes_table.deleted=0) AS total_likes $extra_select
FROM $project_comments_table
LEFT JOIN $users_table ON $users_table.id= $project_comments_table.created_by
WHERE $project_comments_table.deleted=0 $where
ORDER BY $project_comments_table.created_at $sort";
return $this->db->query($sql);
}
function save_comment($data) {
//set extra info
$comment_id = $this->_get_clean_value($data, "comment_id");
$file_id = $this->_get_clean_value($data, "file_id");
$task_id = $this->_get_clean_value($data, "task_id");
$customer_feedback_id = $this->_get_clean_value($data, "customer_feedback_id");
if (get_array_value($data, "description")) {
parent::init_activity_log("project_comment", "description", "project", "project_id");
}
if ($comment_id) {
$comment_info = parent::get_one($comment_id);
$reply_type = "project_comment_reply";
$data["project_id"] = $comment_info->project_id;
$type = "";
$type_id = "";
if ($comment_info->task_id) {
$data["task_id"] = $comment_info->task_id;
$type = "task";
$type_id = "task_id";
$reply_type = "task_comment_reply";
} else if ($comment_info->file_id) {
$data["file_id"] = $comment_info->file_id;
$type = "file";
$type_id = "file_id";
$reply_type = "file_comment_reply";
} else if ($comment_info->customer_feedback_id) {
$data["customer_feedback_id"] = $comment_info->customer_feedback_id;
$type = "customer_feedback";
$type_id = "customer_feedback_id";
$reply_type = "customer_feedback_reply";
}
parent::init_activity_log($reply_type, "description", "project", "project_id", $type, $type_id);
} else if ($file_id) {
$file_info = $this->Project_files_model->get_one($file_id);
$data["project_id"] = $file_info->project_id;
parent::init_activity_log("project_comment", "description", "project", "project_id", "file", "file_id");
} else if ($task_id) {
$task_info = $this->Tasks_model->get_one($task_id);
$data["project_id"] = $task_info->project_id;
if (get_array_value($data, "description")) {
parent::init_activity_log("task_comment", "description", "project", "project_id", "task", "task_id");
}
} else if ($customer_feedback_id) {
$data["project_id"] = $customer_feedback_id;
parent::init_activity_log("customer_feedback", "description", "project", "project_id", "customer_feedback", "customer_feedback_id");
}
return parent::ci_save($data);
}
}