Example #1
0
 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);
 }
Example #2
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);
         }
     }
 }
Example #3
0
 /**
  * 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();
 }
Example #4
0
 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);
 }
Example #5
0
 /**
  * Удаляет канал
  * @param string $mountPoint
  */
 public function deleteChannel($mountPoint)
 {
     $db = \Difra\MySQL::getInstance();
     $q = "DELETE FROM `radio_channels` WHERE `mount`='" . $db->escape($mountPoint) . "'";
     $db->query($q);
 }
Example #6
0
 /**
  * Возвращает 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'));
     }
 }
Example #7
0
 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) . "'");
     }
 }
Example #8
0
 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));
     }
 }
Example #9
0
 /**
  * Возвращает в 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++;
                 }
             }
         }
     }
 }
Example #10
0
 /**
  * Выбирает рабочий 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;
     }
 }
Example #11
0
 /**
  * @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;
 }
Example #12
0
 /**
  * Возвращает все формы в 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);
     }
 }
Example #13
0
 /**
  * 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) . '\'');
     }
 }
Example #14
0
 public static function delete($id, $module)
 {
     $db = \Difra\MySQL::getInstance();
     $db->query("DELETE FROM `{$module}_comments` WHERE `id`='" . intval($id) . "'");
     return true;
 }
Example #15
0
 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) . "'");
     }
 }
Example #16
0
 /**
  * Удаляет категорию
  * @static
  * @param $id
  */
 public static function delete($id)
 {
     MySQL::getInstance()->query("DELETE FROM `announcements_category` WHERE `id`='" . intval($id) . "'");
     self::cleanCache();
 }
Example #17
0
 /**
  * Удаляет альяс у тега
  * @param $aliasId
  */
 public function deleteAlias($aliasId)
 {
     $db = \Difra\MySQL::getInstance();
     $db->query("DELETE FROM `tags_aliases` WHERE `id`='" . intval($aliasId) . "'");
 }
Example #18
0
 /**
  * Меняет название добавленного в базу видео
  * @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) . "'");
 }
Example #19
0
 /**
  * Удаление формы
  */
 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();
 }
Example #20
0
 /**
  * Сохраняет в базу дополнительное поле
  */
 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);
 }
Example #21
0
 /**
  * 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;
 }
Example #22
0
 /**
  * Возвращает 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);
 }
Example #23
0
 /**
  * Удаляет элемент
  */
 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;
 }
Example #24
0
 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) . "'");
 }
Example #25
0
 /**
  * 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;
 }
Example #26
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;
 }
Example #27
0
 /**
  * Устанавливает флаг экспорта для массива 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);
 }
Example #28
0
 /**
  * Возвращает объект по ссылке
  * @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;
 }
Example #29
0
 /**
  * Делает +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;
 }
Example #30
0
 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) . "'");
 }