298 lines
9.9 KiB
PHP
298 lines
9.9 KiB
PHP
<?
|
||
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();
|
||
|
||
|
||
///
|
||
|