protected static function save($data) { if (empty($data) or !is_array($data)) { return; } $data['__difra_ttl__'] = time() + self::SAPE_TTL; $db = \Difra\MySQL::getInstance(\Difra\MySQL::INST_AUTO, true); $queries = ['DELETE FROM `sape`']; foreach ($data as $k => $v) { if (empty($v)) { continue; } if (!is_array($v)) { $queries[] = 'INSERT INTO `sape` (`key`,`value`) VALUES (\'' . $db->escape($k) . "','" . $db->escape($v) . "')"; continue; } foreach ($v as $v1) { if (is_array($v1)) { continue; } $queries[] = 'INSERT INTO `sape` (`key`,`value`) VALUES (\'' . $db->escape($k) . "','" . $db->escape($v1) . "')"; } } $db->query($queries); }
/** * Возвращает 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); } } }
/** * Alter table for Unify object * * @param \Difra\Param\AnyString $name */ public function alterAjaxAction(\Difra\Param\AnyString $name) { try { /** @var \Difra\Unify\Item $class */ $class = \Difra\Unify\Storage::getClass($name->val()); $status = $class::getObjDbStatus(); if ($status['status'] == 'alter') { \Difra\MySQL::getInstance()->query($status['sql']); } } catch (\Difra\Exception $ex) { \Difra\Ajaxer::notify($ex->getMessage()); } \Difra\Ajaxer::refresh(); }
public function indexAction() { $node = $this->root->appendChild($this->xml->createElement('database')); // stats/mysql /** @var \DOMElement $mysqlNode */ $mysqlNode = $node->appendChild($this->xml->createElement('mysql')); try { \Difra\MySQL\Parser::getStatusXML($mysqlNode); } catch (Exception $ex) { $mysqlNode->setAttribute('error', $ex->getMessage() . ': ' . \Difra\MySQL::getInstance()->getError()); } // stats of Unify tables $unifyNode = $node->appendChild($this->xml->createElement('unify')); \Difra\Unify\DBAPI::getDbStatusXML($unifyNode); }
/** * Удаляет канал * @param string $mountPoint */ public function deleteChannel($mountPoint) { $db = \Difra\MySQL::getInstance(); $q = "DELETE FROM `radio_channels` WHERE `mount`='" . $db->escape($mountPoint) . "'"; $db->query($q); }
/** * Возвращает xml с последними игравшими исполнителями * @param \DOMElement $node */ public function getLastPlayedArtistsXML($node) { $db = \Difra\MySQL::getInstance(); // показываем ограничения $node->setAttribute('minArtistInQuery', $this->minArtistInQuery); $query = "SELECT rt.`lastPlayedArtist`, rt.`group_id`, g.`name`,\n\t\t\t\tIF( UNIX_TIMESTAMP( rt.`lastPlayedArtist` )>0, UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP( rt.`lastPlayedArtist` ), NULL) AS `tdiff`\n\t\t\t\tFROM `radio_tracks` rt\n\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=rt.`group_id`\n\t\t\t\tWHERE `channel`='" . $this->name . "'\n\t\t\t\tGROUP BY rt.`group_id`\n\t\t\t\tORDER BY rt.`lastPlayedArtist` ASC"; $res = $db->fetch($query); if (!empty($res)) { foreach ($res as $data) { /** @var \DOMElement $itemNode */ $itemNode = $node->appendChild($node->ownerDocument->createElement('artist')); foreach ($data as $key => $value) { if ($key == 'tdiff' && $value > 0) { $value = floor($value / 60); } $itemNode->setAttribute($key, $value); } } } else { $node->appendChild($node->ownerDocument->createElement('empty')); } }
public function moveDown() { $this->load(); $db = \Difra\MySQL::getInstance(); $items = $db->fetch("SELECT `id`,`position` FROM `catalog_categories`" . " WHERE `parent`" . ($this->parent ? "='" . $db->escape($this->parent) . "'" : ' IS NULL') . " ORDER BY `position`"); $newSort = []; $pos = 1; $next = false; foreach ($items as $item) { if ($item['id'] != $this->id) { $newSort[$item['id']] = $pos++; if ($next) { $newSort[$next['id']] = $pos++; $next = false; } } else { $next = $item; } } if ($next) { $newSort[$next['id']] = $pos; } foreach ($newSort as $id => $pos) { $db->query("UPDATE `catalog_categories` SET `position`='{$pos}' WHERE `id`='" . $db->escape($id) . "'"); } }
public static function delete($id) { $db = MySQL::getInstance(); $db->query("DELETE FROM `blogs_posts` WHERE `id`='" . intval($id) . "'"); if (is_dir(DIR_HTDOCS . '/blogs/images/' . intval($id))) { $objects = scandir(DIR_HTDOCS . '/blogs/images/' . intval($id)); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype(DIR_HTDOCS . '/blogs/images/' . intval($id) . "/" . $object) == "dir") { rmdir(DIR_HTDOCS . '/blogs/images/' . intval($id) . "/" . $object); } else { unlink(DIR_HTDOCS . '/blogs/images/' . intval($id) . "/" . $object); } } } reset($objects); rmdir(DIR_HTDOCS . '/blogs/images/' . intval($id)); } }
/** * Возвращает в xml последние пять работ * @param \DOMNode $node * @param int $limit * @param int $picLimit */ public static function getLastWorksXML(\DOMNode $node, $limit = 5, $picLimit = 3) { $db = \Difra\MySQL::getInstance(); $query = "SELECT `name`, `uri`, `description`, `id` FROM `portfolio_entry` ORDER BY `release` DESC LIMIT " . intval($limit); $res = $db->fetch($query); if (!empty($res)) { $idArray = []; foreach ($res as $k => $data) { $idArray[] = $data['id']; } // забираем картинки работ $query = "SELECT `id`, `portfolio` FROM `portfolio_images` WHERE `portfolio` IN (" . implode(', ', $idArray) . ") ORDER BY `position` ASC"; $imgRes = $db->fetch($query); $imagesArray = []; if (!empty($imgRes)) { foreach ($imgRes as $k => $data) { $imagesArray[$data['portfolio']][] = $data['id']; } } // собираем xml foreach ($res as $k => $data) { $workNode = $node->appendChild($node->ownerDocument->createElement('work')); foreach ($data as $key => $value) { $workNode->setAttribute($key, $value); } if (isset($imagesArray[$data['id']]) && is_array($imagesArray[$data['id']])) { $maxPics = 0; foreach ($imagesArray[$data['id']] as $img) { if ($maxPics < $picLimit) { $imgNode = $workNode->appendChild($node->ownerDocument->createElement('image')); $imgNode->setAttribute('id', $img); } $maxPics++; } } } } }
/** * Выбирает рабочий cdn хост */ public function selectHost() { $this->_getSettings(); $db = \Difra\MySQL::getInstance(); $res = null; $stage = null; // stage 1 — select from 'ok' hosts with softer load of new cdn hosts try { $queryWrk = "SELECT `id`, `host`, `port` FROM `cdn_hosts_work`\n\t\t\t\tWHERE (`status`='ok'\n\t\t\t\tOR `failed`<DATE_SUB(NOW(),INTERVAL " . intval($this->settings['failtime']) . " MINUTE))\n\t\t\t\tAND `created`<DATE_SUB(NOW(),INTERVAL " . intval(rand(0, 24)) . " HOUR)\n\t\t\t\tORDER BY `selected`\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($queryWrk); if (!$res) { $db->query('REPLACE INTO `cdn_hosts_work` SELECT * FROM `cdn_hosts`'); $res = $db->fetchRow($queryWrk); } $stage = 1; } catch (\Difra\Exception $ex) { } // stage 2 — select from 'ok' hosts without softer load of new cdn hosts if (!$res) { try { $query = "SELECT `id`, `host`, `port` FROM `cdn_hosts_work`\n\t\t\t\tWHERE `status`='ok'\n\t\t\t\tAND `failed`<DATE_SUB(NOW(),INTERVAL " . intval($this->settings['failtime']) . " MINUTE)\n\t\t\t\tORDER BY `selected`\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($query); $stage = 2; } catch (\Difra\Exception $ex) { } } // stage 3 — select from busy hosts if (!$res) { try { $query = "SELECT `id`, `host`, `port` FROM `cdn_hosts_work`\n\t\t\t\tWHERE `status`='busy'\n\t\t\t\tORDER BY `selected` DESC\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($query); $stage = 3; } catch (\Difra\Exception $ex) { } } // stage 4 - select from hosts that haven't been checked for a long time if (!$res) { try { $query = "SELECT `id`, `host`, `port` FROM `cdn_hosts`\n\t\t\t\tWHERE `failed`<DATE_SUB(NOW(),INTERVAL " . intval($this->settings['failtime']) . " MINUTE)\n\t\t\t\tORDER BY `selected`\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($query); $stage = 4; } catch (\Difra\Exception $ex) { } } if (!empty($res)) { $rootNode = \Difra\Action::getInstance()->controller->root; $rootNode->setAttribute('cdn_host', $res['host'] . ':' . $res['port']); $rootNode->setAttribute('cdn_host_id', $res['id']); $this->_updateSelected($res['id'], $res['host'] . ':' . $res['port']); if (\Difra\Debugger::getInstance()->isEnabled()) { $rootNode->setAttribute('cdn_stage', $stage); } return; } }
/** * @param int $limit * @return self[] */ public static function getForExport($limit = 3) { $db = MySQL::getInstance(); $eventsArray = null; $query = "SELECT an.*, u.`email`, uf.`value` AS `nickname`, aloc.`locationData`,\n\t\t\t\tIF(`fromEventDate`='0000-00-00', `eventDate`, `fromEventDate`) AS `sortDate`,\n\t\t\t\tDATE_FORMAT( CURRENT_TIMESTAMP, '%Y-%m-%d 00:00:00' ) as `curStamp`\n \t\tFROM `announcements` an\n \t\t\tLEFT JOIN `users` AS `u` ON u.`id`=an.`user`\n \t\t\tLEFT JOIN `users_fields` AS `uf` ON uf.`id`=an.`user` AND uf.`name`='nickname'\n \t\t\tLEFT JOIN `anouncements_locations` AS `aloc` ON an.`location`=aloc.`id`\n \t\tWHERE an.`exported`=0 AND an.`visible`=1 AND an.`beginDate`<=NOW()\n \t\tORDER BY eventDate>=curStamp DESC,\n \t\t\tIF(eventDate>=curStamp,sortDate,''), sortDate DESC, priority DESC LIMIT " . intval($limit); $res = $db->fetch($query); if (!empty($res)) { // массивчик id'шников $idArray = []; foreach ($res as $k => $data) { $idArray[] = $data['id']; } $addData = Additionals::getByIdArray($idArray); foreach ($res as $k => $data) { $Event = new self(); if (!empty($addData) && isset($addData[$data['id']]) && !empty($addData[$data['id']])) { foreach ($addData[$data['id']] as $tmpaddData) { $data['additionalData'][] = $tmpaddData; } } if (isset($data['locationData']) && $data['locationData'] != '') { $data['locationData'] = unserialize($data['locationData']); } $Event->setObject($data); $eventsArray[$data['id']] = $Event; } } return $eventsArray; }
/** * Возвращает все формы в XML * @param \DOMNode $node */ public function getListXML($node) { $cached = true; $Cache = \Difra\Cache::getInstance(); $forms = $Cache->get('fp_forms'); $formsArray = null; if (!$forms) { $cached = false; $db = \Difra\MySQL::getInstance(); $query = "SELECT * FROM `fp_forms`"; $forms = $db->fetch($query); } foreach ($forms as $k => $data) { $formXML = $node->appendChild($node->ownerDocument->createElement('form')); $formXML->setAttribute('id', $data['id']); $formXML->setAttribute('title', $data['title']); $formXML->setAttribute('uri', $data['uri']); $formXML->setAttribute('hidden', $data['hidden']); $formXML->setAttribute('fieldsCount', count(unserialize($data['fields']))); if (!$cached) { $formsArray[$data['id']] = $data; } } if (!$cached && !empty($formsArray)) { // устанавливаем кэш $Cache->put('fp_forms', $formsArray, 10800); } }
/** * Delete item */ public function delete() { $this->_new = false; $this->_modified = []; if ($primary = $this->getPrimaryValue()) { $db = MySQL::getInstance(); $db->query('DELETE FROM `' . static::getTable() . '` WHERE `' . $db->escape($this->getPrimary()) . '`=\'' . $db->escape($primary) . '\''); } }
public static function delete($id, $module) { $db = \Difra\MySQL::getInstance(); $db->query("DELETE FROM `{$module}_comments` WHERE `id`='" . intval($id) . "'"); return true; }
public function imageDown($id) { $this->load(); $db = \Difra\MySQL::getInstance(); $items = $db->fetch("SELECT `id`,`position` FROM `gallery_photos` WHERE `album`='" . $db->escape($this->id) . "' ORDER BY `position`"); $newSort = []; $pos = 1; $next = false; foreach ($items as $item) { if ($item['id'] != $id) { $newSort[$item['id']] = $pos++; if ($next) { $newSort[$next['id']] = $pos++; $next = false; } } else { $next = $item; } } if ($next) { $newSort[$next['id']] = $pos; } foreach ($newSort as $k => $pos) { $db->query("UPDATE `gallery_photos` SET `position`='{$pos}' WHERE `id`='" . $db->escape($k) . "'"); } }
/** * Удаляет категорию * @static * @param $id */ public static function delete($id) { MySQL::getInstance()->query("DELETE FROM `announcements_category` WHERE `id`='" . intval($id) . "'"); self::cleanCache(); }
/** * Удаляет альяс у тега * @param $aliasId */ public function deleteAlias($aliasId) { $db = \Difra\MySQL::getInstance(); $db->query("DELETE FROM `tags_aliases` WHERE `id`='" . intval($aliasId) . "'"); }
/** * Меняет название добавленного в базу видео * @param $id * @param $name */ public function changeName($id, $name) { $db = \Difra\MySQL::getInstance(); $db->query("UPDATE `videos` SET `name`='" . $db->escape($name) . "' WHERE `id`='" . intval($id) . "'"); }
/** * Удаление формы */ public function delete() { $this->loaded = true; $this->modified = false; if ($this->id) { $path = DIR_DATA . 'forms/img/' . $this->id; if (is_dir($path)) { $dir = opendir($path); while (false !== ($file = readdir($dir))) { if ($file[0] == '.') { continue; } @unlink("{$path}/{$file}"); } rmdir($path); } } $db = \Difra\MySQL::getInstance(); $db->query("DELETE FROM `fp_forms` WHERE `id`='" . intval($this->id) . "'"); self::cleanCache(); }
/** * Сохраняет в базу дополнительное поле */ private function save() { $db = MySQL::getInstance(); if (!is_null($this->id)) { //update $query = "UPDATE `announcements_additionals` SET `name`='" . $db->escape($this->name) . "', `alias`='" . $db->escape($this->alias) . "' WHERE `id`='" . intval($this->id) . "'"; } else { // insert $query = "INSERT INTO `announcements_additionals` SET `name`='" . $db->escape($this->name) . "', `alias`='" . $db->escape($this->alias) . "'"; } $db->query($query); }
/** * Get keys from current database table * @return array */ private static function getCurrentIndexes() { $db = MySQL::getInstance(); $escTable = $db->escape(static::getTable()); $dbIndexes = $db->fetch('SHOW INDEXES FROM `' . $escTable . '`'); $foreignKeys = $db->fetch('SELECT `constraint_name`,`column_name`,`referenced_table_name`,`referenced_column_name`' . ' FROM `information_schema`.`key_column_usage`' . ' WHERE `referenced_table_name` IS NOT NULL AND `table_schema`=DATABASE() AND `table_name`=\'' . $escTable . '\'' . ' ORDER BY `ordinal_position`'); $result = []; // regular indexes if (!empty($dbIndexes)) { foreach ($dbIndexes as $row) { if (!isset($result[$row['Key_name']])) { if ($row['Key_name'] == 'PRIMARY') { $type = 'primary'; } elseif ($row['Non_unique'] == '0') { $type = 'unique'; } elseif ($row['Index_type'] == 'FULLTEXT') { $type = 'fulltext'; } else { $type = 'index'; } $result[$row['Key_name']] = ['type' => $type, 'columns' => [$row['Seq_in_index'] => $row['Column_name']]]; } else { $result[$row['Key_name']]['columns'][$row['Seq_in_index']] = $row['Column_name']; } } } // foreign keys if (!empty($foreignKeys)) { foreach ($foreignKeys as $foreign) { if (!isset($result[$foreign['constraint_name']])) { $result[$foreign['constraint_name']] = ['type' => 'foreign', 'source' => (array) $foreign['column_name'], 'target' => $foreign['referenced_table_name'], 'keys' => (array) $foreign['referenced_column_name']]; } else { $result[$foreign['constraint_name']]['column_name'][] = $foreign['column_name']; $result[$foreign['constraint_name']]['referenced_column_name'][] = $foreign['referenced_column_name']; } } } return $result; }
/** * Возвращает XML с названиями групп в которых состоит юзер * @static * @param int $userId * @param \DOMNode $node */ public static function getUsersGroups($userId, $node) { $db = \Difra\MySQL::getInstance(); $query = "SELECT gu.`group`, g.`name`, g.`domain`, gu.`role`\n\t\t\t\tFROM `groups_users` gu\n\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=gu.`group`\n\t\t\t\tWHERE gu.`confirmed` = 1 AND gu.`user`=" . intval($userId) . " AND gu.`group`>1"; $db->fetchXML($node, $query); }
/** * Удаляет элемент */ public function delete() { // TODO: проверять, есть ли такой id в заказах. если есть, перемещать в архив (класс ItemArchive extends Item). // При удалении заказа вызывать ItemArchive::getInstance($id)->delete(), где проверять, // используется ли ещё этот элемент и удалять только если элемент больше не используется. // Для этого надо упоминания таблицы catalog_items заменить на константу, чтобы в наследуемом классе сделать // catalog_archive $db = MySQL::getInstance(); $this->cleanImages(); if ($this->id) { @rmdir(DIR_DATA . 'catalog/items/' . $this->id); $path = DIR_DATA . 'catalog/desc/' . $this->id; if (is_dir($path)) { $dir = opendir($path); while (false !== ($file = readdir($dir))) { if ($file[0] == '.') { continue; } @unlink("{$path}/{$file}"); } @rmdir($path); } $db->query("DELETE FROM `catalog_items` WHERE `id`='" . $db->escape($this->id) . "'"); } $this->modified = $this->modifiedExt = false; }
public static function deleteValue($id) { @unlink($path = DIR_DATA . 'catalog/ext/' . intval($id) . '.png'); $db = \Difra\MySQL::getInstance(); $db->query("DELETE FROM `catalog_ext_sets` WHERE `id`='" . $db->escape($id) . "'"); }
/** * Get ORDER for SQL * @return string */ public function getOrder() { if (empty($this->order)) { return ''; } /** @var Unify $class */ $class = Unify::getClass($this->objKey); $db = MySQL::getInstance(); $table = $db->escape($class::getTable()); $ord = ' ORDER BY '; $d = ''; foreach ((array) $this->order as $column) { $ord .= "{$d}`{$table}`.`" . $db->escape($column) . '`' . ((empty($this->orderDesc) or !in_array($column, $this->orderDesc)) ? '' : ' DESC'); $d = ', '; } return $ord; }
/** * Возвращает массив с новостями для карты сайта */ 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; }
/** * Устанавливает флаг экспорта для массива id анонсов * @param array $exportIds */ public function setExported(array $exportIds) { $exportIds = array_map('intval', $exportIds); $db = MySQL::getInstance(); $query = "UPDATE `announcements` SET `exported`=1 WHERE `id` IN (" . implode(', ', $exportIds) . ")"; $db->query($query); }
/** * Возвращает объект по ссылке * @static * @param string $link */ public static function getByLink($link) { $link = explode('-', $link, 2); if (sizeof($link) < 2 || !is_numeric($link[0])) { return null; } $db = \Difra\MySQL::getInstance(); $query = "SELECT * FROM `news` WHERE `id`='" . intval($link[0]) . "' AND `link`='" . $db->escape($link[1]) . "'"; $res = $db->fetchRow($query); if (!empty($res)) { $Pub = new self(); $Pub->_setObject($res); return $Pub; } return null; }
/** * Делает +1 для статистики поста * @param $postId * @param null $groupId * @param null $userId * @return bool */ public function savePostStat($postId, $groupId = null, $userId = null) { $Cache = \Difra\Cache::getInstance(); $db = \Difra\MySQL::getInstance(); if (!$db->fetchRow("SHOW TABLES LIKE 'blogs_stat'")) { return false; } $postsStat = $Cache->get('posts_stat'); $client = \Difra\Auth::getInstance()->getEmail(); if (is_null($client)) { $client = $_SERVER['REMOTE_ADDR']; } $groupAdd = $userAdd = ''; if (!is_null($groupId)) { $groupAdd = ", `group_id`='" . intval($groupId) . "' "; } if (!is_null($userId)) { $userAdd = ", `user_id`='" . intval($userId) . "' "; } $query = "INSERT INTO `blogs_stat` SET `date`='" . date('Y-m-d', time()) . "', `post_id`='" . intval($postId) . "', `count`=1 " . $groupAdd . $userAdd . " ON DUPLICATE KEY UPDATE `count`=`count`+1"; if (isset($postsStat[$client])) { if (!in_array($postId, $postsStat[$client])) { if (count($postsStat[$client]) == 3) { array_shift($postsStat[$client]); } $postsStat[$client][] = $postId; $Cache->put('posts_stat', $postsStat); $db->query($query); return true; } else { return false; } } $postsStat[$client][] = $postId; $Cache->put('posts_stat', $postsStat); $db->query($query); return true; }
public static function getFriendsPreviewXML($user, $node) { $db = \Difra\MySQL::getInstance(); $db->fetchXML($node, "SELECT bf.`blog`, b.`user`, b.`group`, g.`name` AS `groupName`, g.`domain`, uf.`value` AS `nickname`\n\t\t\t\t\t\tFROM `blogs_friends` bf\n\t\t\t\t\t\tRIGHT JOIN `blogs` AS `b` ON b.`id`=bf.`blog`\n\t\t\t\t\t\tLEFT JOIN `groups` AS `g` ON g.`id`=b.`group`\n\t\t\t\t\t\tLEFT JOIN `users_fields` AS `uf` ON uf.`id`=b.`user` AND uf.`name`='nickname'\n\t\t\t\t\t\tWHERE bf.`user` = '" . intval($user) . "'"); }