Exemplo n.º 1
0
 /**
  * Возвращает XML со всеми комментариями по всем описанным в конфиге модулям
  * @param \DOMElement $node
  */
 public function getAllCommentsXML($node)
 {
     $modules = \Difra\Config::getInstance()->get('comments');
     if (empty($modules)) {
         $node->appendChild($node->ownerDocument->createElement('empty'));
         return;
     }
     $db = \Difra\MySQL::getInstance();
     foreach ($modules['modules'] as $module) {
         $moduleXML = $node->appendChild($node->ownerDocument->createElement($module . '_comments'));
         $moduleXML->setAttribute('module', $module);
         // забираем комментарии по модулю
         $query = '';
         switch ($module) {
             case 'albums':
                 $query = "SELECT c.`id`, c.`text`, c.`reply_id`, DATE_FORMAT( c.`date`, '%T %d-%m-%Y' ) as `date`,\n\t\t\t\t\t\t\t\tuf.`value` AS `nickname`, bp.`link` AS `post_link`, bp.`name` AS `title`, g.`domain`,\n\t\t\t\t\t\t\t\tbp.`id` AS `post_id`\n\t\t\t\t\t\t\tFROM `albums_comments` c\n\t\t\t\t\t\t\tLEFT JOIN `users_fields` AS `uf` ON uf.`id`=c.`user` AND uf.`name`='nickname'\n\t\t\t\t\t\t\tLEFT JOIN `albums` AS `bp` ON bp.`id`=c.`parent_id`\n\t\t\t\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=bp.`group_id`\n\t\t\t\t\t\t\tORDER BY c.`date` DESC";
                 break;
             case 'blogs':
                 $query = "SELECT c.`id`, c.`user`, c.`text`, c.`reply_id`, bp.`title`, b.`user` `post_owner`, b.`group`,\n\t\t\t\t\t\t\t\tg.`domain`, of.`value` AS `owner_nickname`, bp.`link` AS `post_link`, bp.`id` AS `post_id`,\n\t\t\t\t\t\t\t\tDATE_FORMAT( c.`date`, '%T %d-%m-%Y' ) as `date`, uf.`value` AS `nickname`\n\t\t\t\t\t\t\tFROM `blogs_comments` `c`\n\t\t\t\t\t\t\tLEFT JOIN `users_fields` AS `uf` ON uf.`id`=c.`user` AND uf.`name`='nickname'\n\t\t\t\t\t\t\tLEFT JOIN `blogs_posts` AS `bp` ON bp.`id`=c.`parent_id`\n\t\t\t\t\t\t\tLEFT JOIN `blogs` AS `b` ON b.`id`=bp.`blog`\n\t\t\t\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=b.`group`\n\t\t\t\t\t\t\tLEFT JOIN `users_fields` AS `of` ON of.`id`=b.`user` AND of.`name`='nickname'\n\t\t\t\t\t\t\tORDER BY c.`date` DESC";
                 break;
             case 'catalog':
                 $query = "SELECT c.`id`, c.`text`, c.`reply_id`, DATE_FORMAT( c.`date`, '%T %d-%m-%Y' ) as `date`,\n\t\t\t\t\t\t\t\tuf.`value` AS `nickname`, bp.`name` AS `title`\n\t\t\t\t\t\t\tFROM `catalog_comments` c\n\t\t\t\t\t\t\tLEFT JOIN `users_fields` AS `uf` ON uf.`id`=c.`user` AND uf.`name`='nickname'\n\t\t\t\t\t\t\tLEFT JOIN `catalog_items` AS `bp` ON bp.`id`=c.`parent_id`\n\t\t\t\t\t\t\tORDER BY c.`date` DESC";
                 break;
         }
         $res = $db->fetch($query);
         foreach ($res as $data) {
             /** @var $itemNode \DOMElement */
             $itemNode = $moduleXML->appendChild($node->ownerDocument->createElement('item'));
             $itemNode->setAttribute('id', $data['id']);
             $itemNode->setAttribute('nickname', $data['nickname']);
             $itemNode->setAttribute('date', $data['date']);
             $itemNode->setAttribute('text', $data['text']);
             $itemNode->setAttribute('reply_id', $data['reply_id']);
             $itemNode->setAttribute('title', $data['title']);
             $link = 'http://';
             switch ($module) {
                 case 'blogs':
                     if ($data['domain'] != '') {
                         // ссылка на блог группы
                         $link .= $data['domain'] . '.' . \Difra\Site::getInstance()->getMainhost() . '/' . $data['post_id'] . '/' . rawurlencode($data['post_link']) . '/#comment' . $data['id'];
                     } else {
                         // ссылка на блог юзера
                         $link .= \Difra\Site::getInstance()->getMainhost() . '/blogs/' . $data['owner_nickname'] . '/' . $data['post_id'] . '/' . rawurldecode($data['post_link']) . '/#comment' . $data['id'];
                     }
                     break;
                 case 'albums':
                     $link = 'http://' . $data['domain'] . '.' . \Difra\Site::getInstance()->getMainhost() . '/album/' . rawurldecode($data['post_link']) . '/#comment' . $data['id'];
                     break;
                 case 'catalog':
                     $link = 'http://' . \Difra\Site::getInstance()->getMainhost() . '/c/';
                     break;
             }
             $itemNode->setAttribute('parentLink', $link);
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Возвращает полную ссылку на новость
  */
 public function getTrueLink()
 {
     return 'http://' . \Difra\Site::getInstance()->getHostname() . '/news/' . $this->id . '-' . $this->link;
 }
Exemplo n.º 3
0
 /**
  * Возвращает массив с новостями для карты сайта
  */
 public function getSiteMapArray()
 {
     $db = \Difra\MySQL::getInstance();
     $where = " WHERE `visible`=1 AND `viewDate`<=NOW() AND (( NOT(`stopDate`='0000-00-00 00:00:00') AND `stopDate`>=NOW() ) " . "OR `stopDate`='0000-00-00 00:00:00') ";
     $query = "SELECT `id`, `link`, `modified` FROM `news` " . $where;
     $res = $db->fetch($query);
     if (!empty($res)) {
         $returnArray = null;
         $mainLink = 'http://' . \Difra\Site::getInstance()->getHostname() . '/news/';
         foreach ($res as $k => $data) {
             $returnArray[] = ['loc' => $mainLink . $data['id'] . '-' . $data['link'], 'lastmod' => date('Y-m-d', strtotime($data['modified']))];
         }
         return $returnArray;
     }
     return false;
 }
Exemplo n.º 4
0
 public static function getByDomain($domain)
 {
     $mainHost = Difra\Site::getInstance()->getMainhost();
     if ($mainHost == $domain) {
         return null;
     }
     if (substr($domain, strlen($domain) - strlen($mainHost)) != $mainHost) {
         return null;
     }
     $domain = substr($domain, 0, strlen($domain) - strlen($mainHost) - 1);
     $db = Difra\MySQL::getInstance();
     $groupData = $db->fetchRow('SELECT * FROM `groups` WHERE `domain`=\'' . $db->escape($domain) . "'");
     return self::makeGroup($groupData);
 }
Exemplo n.º 5
0
 /**
  * Возвращает XML с добавленными в базу видео
  * @param \DOMNOde $node
  */
 public function getAddedVideosXML($node)
 {
     if (!is_dir($this->dirOut)) {
         $errorNode = $node->appendChild($node->ownerDocument->createElement('error'));
         $errorNode->setAttribute('type', 'badOutDir');
         return;
     }
     $db = \Difra\MySQL::getInstance();
     $query = "SELECT `id`, `video`, `status`, `name`, `date`, `thumbs`, `length`, `hasPoster`, `original_file` FROM `videos`\n\t\t\t\tWHERE `site`='" . Site::getInstance()->getHost() . "' ORDER BY `date` ASC";
     $db->fetchXML($node, $query);
 }
Exemplo n.º 6
0
 private function sendMail()
 {
     $db = \Difra\MySQL::getInstance();
     // определяем кто владелец родительского элемента
     switch ($this->module) {
         case 'albums':
             $query = "SELECT a.`name` AS `title`, a.`link`, a.`group_id`, g.`domain`, g.`owner`\n\t\t\t\t\t\tFROM `albums` a\n\t\t\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=a.`group_id`\n\t\t\t\t\t\tWHERE a.`id`='" . $this->moduleId . "'";
             break;
         case 'catalog':
             // TODO: замутить отправку письма если это ответ на коммент юзера
             // XXX: есть ведь уже? //nap
             return;
         case 'blogs':
         default:
             $query = "SELECT b.`user`, g.`owner`, bp.`title`, g.`domain`, bp.`link`\n\t\t\t\t\tFROM `blogs_posts` bp\n\t\t\t\t\tLEFT JOIN `blogs` AS `b` ON b.`id`=bp.`blog`\n\t\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=b.`group`\n\t\t\t\t\tWHERE bp.`id`='" . $this->moduleId . "'";
             break;
     }
     $res = $db->fetchRow($query);
     if (empty($res)) {
         return;
     }
     if (isset($res['user']) && $res['user'] != '') {
         $elementOwner = $res['user'];
     } else {
         $elementOwner = $res['owner'];
     }
     // смотрим можно ли юзеру отправить email
     $userAdditionals = \Difra\Additionals::getAdditionals('users', $elementOwner);
     if (!isset($userAdditionals['unsubscribe']) || $userAdditionals['unsubscribe'] == 0) {
         // отправляем письмо владельцу родительского элемента
         $query = "SELECT `email`, `activation` FROM `users` WHERE `id`='" . intval($elementOwner) . "' AND `banned`=0 AND `active`=1";
         $replyText = [];
         if ($this->replyId) {
             // это ответ на чужой коммент.
             // забираем данные об ответе
             $query = "SELECT c.`text`, c.`user` FROM `" . $this->module . "_comments` c WHERE c.`id`='" . $this->replyId . "'";
             $replyText = $db->fetchRow($query);
             $query = "SELECT `email`, `activation` FROM `users` WHERE `id`='" . intval($replyText['user']) . "' AND `banned`=0 AND `active`=1";
         }
         $userData = $db->fetchRow($query);
         if (!empty($userData)) {
             // получаем никнейм отправителя:
             $replyUser = \Difra\Additionals::getAdditionalValue('users', $this->user, 'nickname');
             // ссылка на родительский элемент
             $elementLink = '';
             if ($this->module == 'albums') {
                 // если альбом
                 $elementLink = 'http://' . $res['domain'] . '.' . \Difra\Site::getInstance()->getMainhost() . '/album/' . rawurlencode($res['link']) . '/';
             } elseif ($this->module == 'blogs') {
                 if (isset($res['domain']) && $res['domain'] != '') {
                     // если пост в блоге группы
                     $elementLink = 'http://' . $res['domain'] . '.' . \Difra\Site::getInstance()->getMainhost() . '/' . $this->moduleId . '/' . rawurlencode($res['link']) . '/';
                 } else {
                     // если пост в личном блоге юзера
                     $ownerNickname = \Difra\Additionals::getAdditionalValue('users', $elementOwner, 'nickname');
                     $elementLink = 'http://' . \Difra\Site::getInstance()->getMainhost() . '/blogs/' . $ownerNickname . '/' . $this->moduleId . '/' . rawurlencode($res['link']) . '/';
                 }
             }
             $unsubscribeLink = 'http://' . \Difra\Site::getInstance()->getMainhost() . '/unsubscribe/' . $userData['activation'] . '/';
             $sendData = ['unsubscribe' => $unsubscribeLink, 'message' => $this->text, 'module' => $this->module, 'link' => $elementLink, 'reply_nickname' => $replyUser, 'mainHost' => \Difra\Site::getInstance()->getMainhost(), 'title' => $res['title']];
             if ($this->replyId) {
                 $sendData['replay'] = 1;
                 $sendData['original'] = $replyText['text'];
             }
             \Difra\Mailer::getInstance()->CreateMail($userData['email'], 'mail_newcomment', $sendData);
         }
     }
 }