meraproject/module/common/comment/discuss/model.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

298 lines
9.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
namespace common\comment;
use common\Comment;
use common\comment\Discuss\structure\eDiscussType;
use common\comment\discuss\Vote;
use core\db\structure\Column as C;
use core\db\structure\eColumnType;
use ms\ms\structure\msTo;
use ui\form\structure\eInputType;
use ui\Form;
use ui\input\Input;
use core\lang\structure\LangVariable as V;
use ms\ms\structure\msModuleTable;
use common\comment\discuss\structure\commentDiscussLang as Vars;
class Discuss extends msModuleTable {
static $self;
static $table_name = 'commentDiscuss';
static $controller = 'common.comment.discuss';
static $ID = 'id';
static $NAME = 'name';
static $TO = 'to';
static $OID = 'oid';
static $GROUP = 'group';
static $PROFILE = 'profile';
static $VOTES = 'votes';
static $TYPE = 'type';
static $COMMENTS = 'comments';
static $COMMENT = 'comment'; // Комментарий, который нужен для отображения текст-анонса
static $ACCOUNT = 'account';
static $CREATED = 'created';
static $UPDATED = 'updated';
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
static function getSystemLangValues():array{ return Vars::getArray(); }
public static function installUniques() {
\DB::addIndexManyColumns(self::$table_name,[self::$TO,self::$OID]);
}
static function addComment($id,$text){
$res = ['e'=>0,'m'=>''];
$id = intval($id);
$text = trim((string)$text);
if(!IF_PROFILE) {
$res['e']=1;
$res['m']='Пожалуйста, авторизуйтесь, для оставления сообщения';
}
if($text=='') {
$res['e']=1;
$res['m']='Введите текст сообщения';
}
if($res['e']==0){
$r = Comment::insert([
Comment::$TO=>msTo::DISCUSS,
Comment::$OID=>$id,
Comment::$TEXT=>$text,
Comment::$PROFILE => PID,
]);
self::updateById($id,[
self::$COMMENT => $r->id,
self::$UPDATED => time(),
]);
}
return $res;
}
static function getComments($id){
$res = [];
return Comment::get(msTo::DISCUSS,$id);
}
static function get($to,$oid,$type=eDiscussType::DISCUSS,$options=[]){
$res = [];
$to = intval($to);
$oid = intval($oid);
$type = intval($type);
$search = trim((string)$options['search']);
if($to and $oid){
$res = self::select([
\Query::LEFT_JOINS => [
[\Profile::$table_name,\Profile::$ID,self::$PROFILE],
[Comment::$table_name,Comment::$ID,self::$COMMENT],
],
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(self::$TO,'=',$to),
\Where::_operator(self::$OID,'=',$oid),
\Where::_operator(self::$TYPE,'=',$type),
$search ? \Where::_operator(self::$NAME,'LIKE','%'.$search.'%') : null,
])),
\Query::SORT => [self::$UPDATED=>'DESC'],
],true);
}
return $res;
}
static function remathVotes($id){
$id = intval($id);
$r = Vote::select($q = [
\Query::SELECT => [
'COUNT('.Vote::$ID.') as cc'
],
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(Vote::$DISCUSS,'=',$id)
]))
]);
$l = \DB::fetch($r);
$count = intval($l['cc']);
self::updateById($id,[
self::$VOTES => $count,
]);
}
static function getFormatted($to,$oid,$type=eDiscussType::DISCUSS,$options = []){
$res = [];
$a = self::get($to,$oid,$type,$options);
foreach ($a as $v){
$res[] = self::format($v);
}
return $res;
}
static function getVoted($v){
$res = false;
if(!IF_PROFILE) return false;
if($v[self::$TYPE]==eDiscussType::PROPOSALS){
$res = boolval(Vote::get($v[self::$ID]));
}
return $res;
}
static function format($v){
return [
'id' => $v[self::$ID],
'date' => $v[self::$CREATED],
'name' => trim((string)$v[self::$NAME]),
'comment' => Comment::format($v),
'comments' => intval($v[self::$COMMENTS]),
'votes' => intval($v[self::$VOTES]),
'voted' => self::getVoted($v),
'type' => intval($v[self::$TYPE]),
'is_my' => boolval($v[self::$PROFILE]==PID),
];
}
static function add($to,$oid,$name,$text,$type=eDiscussType::DISCUSS){
$res = ['e'=>0,'m'=>'',];
$name = trim((string)$name);
$test = trim((string)$text);
$type = trim((string)$type);
$to = intval($to);
$oid = intval($oid);
if( !$to || !$oid ) {
$res['e'] = 1;
$res['m'] = 'Не удаётся создать обсуждение';
}
if($name==''){
$res['e'] = 1;
$res['m'] = 'Введите, пожалуйста, название обсуждения';
} else if($text==''){
$res['e'] = 1;
$res['m'] = 'Введите, пожалуйста, текст первого сообщения';
} else if(!IF_PROFILE){
$res['e'] = 1;
$res['m'] = 'Для начала обсуждения, пожалуйста, авторизуйтесь';
}
if($res['e']==0){
$r2 = self::insert([
self::$NAME => $name,
self::$PROFILE => PID,
self::$TO => $to,
self::$OID => $oid,
self::$TYPE => $type,
]);
$r = comment::insert([
Comment::$TEXT => $text,
Comment::$PROFILE => PID,
Comment::$TO => msTo::DISCUSS,
Comment::$OID => $r2->id,
]);
$r3 = self::updateById($r2->id,[
self::$COMMENT => $r->id
]);
$res['r'] = $r;
$res['r2'] = $r2;
$res['r3'] = $r3;
$res['id'] = $r2->id;
}
return $res;
}
static function columnInfo() : array {
return [
new C([
C::VAR_NAME =>&self::$ID,
C::TYPE =>eColumnType::INT,
C::AUTO_INCREMENT =>true,
C::PRIMARY =>true,
C::DEFAULT =>0,
C::HIDDEN =>true,
C::TH =>V::get(Vars::$ID),
]),
new C([
C::VAR_NAME => &self::$NAME,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 1023,
C::TH => V::get(Vars::$NAME),
]),
new C([
C::VAR_NAME => &self::$TO,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$OID,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$GROUP,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$PROFILE,
C::TYPE => eColumnType::INT,
C::DEFAULT => intval(PID),
]),
new C([
C::VAR_NAME => &self::$TYPE,
C::TYPE => eColumnType::TINYINT,
C::DEFAULT => intval(eDiscussType::DISCUSS),
C::COL_DEFAULT => intval(eDiscussType::DISCUSS),
]),
new C([
C::VAR_NAME => &self::$COMMENT,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$VOTES,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$COMMENTS,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$ACCOUNT,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$ACCOUNT),
C::DEFAULT => intval(\Site::$owner_id),
c::HIDDEN=>true,
c::FUNC_VALUE => function($v){
if($id = $v[self::$ACCOUNT]) {
return \Account::getName( \Account::getByID($id) );
} else return '-';
},
]),
new C([
C::VAR_NAME => &self::$CREATED,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$CREATED),
C::DEFAULT => time(),
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);},
c::HIDDEN=>true,
]),
new C([
C::VAR_NAME => &self::$UPDATED,
C::TYPE => eColumnType::INT,
C::DEFAULT => time(),
C::TH => V::get(Vars::$UPDATED),
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$UPDATED]);},
c::HIDDEN=>true,
]),
];
}
}
new Discuss();
///