From 66993dd5863fca7f91f4d6d8d2841242b278782c Mon Sep 17 00:00:00 2001 From: Serg <64j@mail.ru> Date: Tue, 18 Jul 2017 16:00:51 +0300 Subject: [PATCH 01/10] fix contextmenu --- manager/media/style/default/js/modx.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index a709737263..4936904dad 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -918,8 +918,10 @@ e.preventDefault(); var tree = d.getElementById('tree'), el = d.getElementById('node' + id) || e.target; + if(el.firstChild && el.firstChild.dataset && el.firstChild.dataset.contextmenu) { + el = el.firstChild; + } if(el) { - if(!el.dataset.contextmenu) el = el.firstChild; if(el.dataset.contextmenu) { e.target.dataset.toggle = '#contextmenu'; modx.hideDropDown(e); @@ -976,7 +978,7 @@ this.selectedObjectName = title; this.dopopup(this.ctx, x + 10, y) } else { - //el = el.firstChild; + el = el.firstChild; var ctx = d.getElementById('mx_contextmenu'); e.target.dataset.toggle = '#mx_contextmenu'; modx.hideDropDown(e); From 21ec58cfbf23e180732ca313a32d39feeac6ac79 Mon Sep 17 00:00:00 2001 From: Serg <64j@mail.ru> Date: Tue, 18 Jul 2017 16:04:07 +0300 Subject: [PATCH 02/10] fix show icon dragndrop --- manager/media/style/default/css/tree.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/css/tree.css b/manager/media/style/default/css/tree.css index 4d457a8f94..1cca025e21 100644 --- a/manager/media/style/default/css/tree.css +++ b/manager/media/style/default/css/tree.css @@ -26,7 +26,7 @@ #treeRoot a.protected .title { color: #aaa; } #treeRoot a .lockedResource { cursor: pointer; } #treeRoot a .editResource { margin-left: 0.2em } -#treeRoot .indent { float: left; height: 1.5em; } +#treeRoot .indent { position: relative; float: left; height: 1.5em; } #treeRoot .indent i { float: left; height: 1.2em; width: 1.5em } #treeRoot .empty { color: #aaa; cursor: default; } #treeRoot .icon { cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } From 30a552fdb3f18193967d6d6e38c28974759f8f1c Mon Sep 17 00:00:00 2001 From: Pathologic Date: Tue, 18 Jul 2017 17:12:49 +0300 Subject: [PATCH 03/10] fix autoloader paths --- index.php | 2 +- install/index.php | 2 +- manager/index.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/index.php b/index.php index 7f87015f0a..0e385153ac 100644 --- a/index.php +++ b/index.php @@ -45,7 +45,7 @@ * ----------------------------- */ -$autoloader = 'vendor/autoload.php'; +$autoloader = __DIR__'/vendor/autoload.php'; if (file_exists($autoloader) && is_readable($autoloader)) { include_once($autoloader); } diff --git a/install/index.php b/install/index.php index 71ef4b2de7..94f7169e7b 100644 --- a/install/index.php +++ b/install/index.php @@ -8,7 +8,7 @@ @ ini_set('magic_quotes_sybase', 0); } -$autoloader = '../vendor/autoload.php'; +$autoloader = realpath(__DIR__'/../vendor/autoload.php'); if (file_exists($autoloader) && is_readable($autoloader)) { include_once($autoloader); } diff --git a/manager/index.php b/manager/index.php index 54d4a1a941..4342f7f740 100644 --- a/manager/index.php +++ b/manager/index.php @@ -49,7 +49,7 @@ * content */ -$autoloader = '../vendor/autoload.php'; +$autoloader = realpath(__DIR__'/../vendor/autoload.php'); if (file_exists($autoloader) && is_readable($autoloader)) { include_once($autoloader); } From ccbf89fb4d7a586864ef98e0bcc8a42b535d6613 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Tue, 18 Jul 2017 17:40:08 +0300 Subject: [PATCH 04/10] fix 30a552f --- index.php | 2 +- install/index.php | 2 +- manager/index.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/index.php b/index.php index 0e385153ac..bbdc63e953 100644 --- a/index.php +++ b/index.php @@ -45,7 +45,7 @@ * ----------------------------- */ -$autoloader = __DIR__'/vendor/autoload.php'; +$autoloader = __DIR__.'/vendor/autoload.php'; if (file_exists($autoloader) && is_readable($autoloader)) { include_once($autoloader); } diff --git a/install/index.php b/install/index.php index 94f7169e7b..4f4f4cdf18 100644 --- a/install/index.php +++ b/install/index.php @@ -8,7 +8,7 @@ @ ini_set('magic_quotes_sybase', 0); } -$autoloader = realpath(__DIR__'/../vendor/autoload.php'); +$autoloader = realpath(__DIR__.'/../vendor/autoload.php'); if (file_exists($autoloader) && is_readable($autoloader)) { include_once($autoloader); } diff --git a/manager/index.php b/manager/index.php index 4342f7f740..fbebbbdbaf 100644 --- a/manager/index.php +++ b/manager/index.php @@ -49,7 +49,7 @@ * content */ -$autoloader = realpath(__DIR__'/../vendor/autoload.php'); +$autoloader = realpath(__DIR__.'/../vendor/autoload.php'); if (file_exists($autoloader) && is_readable($autoloader)) { include_once($autoloader); } From fd23c49803503fc985f99e9c4ff9628be9368a6f Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Tue, 18 Jul 2017 20:40:20 +0300 Subject: [PATCH 05/10] Update FormLister to 1.7.3 --- assets/snippets/FormLister/core/FormLister.abstract.php | 7 +++++-- assets/snippets/FormLister/docs/history.md | 4 ++++ ...64 \320\264\320\260\320\275\320\275\321\213\321\205.md" | 2 ++ assets/snippets/FormLister/snippet.FormLister.php | 4 +++- install/assets/plugins/userHelper.tpl | 2 +- install/assets/snippets/FormLister.tpl | 2 +- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/assets/snippets/FormLister/core/FormLister.abstract.php b/assets/snippets/FormLister/core/FormLister.abstract.php index 01ef022b74..96d7c872ff 100644 --- a/assets/snippets/FormLister/core/FormLister.abstract.php +++ b/assets/snippets/FormLister/core/FormLister.abstract.php @@ -993,7 +993,10 @@ public function redirect($param = 'redirectTo', $_query = array()) if ($redirect = $this->getCFGDef($param, 0)) { $redirect = $this->config->loadArray($redirect); $query = $header = ''; - if (isset($redirect[0])) { + if (is_numeric($redirect)) { + $page = $redirect; + $query = http_build_query($_query); + } elseif (isset($redirect[0])) { $page = $redirect[0]; $query = http_build_query($_query); } else { @@ -1003,7 +1006,7 @@ public function redirect($param = 'redirectTo', $_query = array()) if (isset($redirect['header'])) { $header = $redirect['header']; } - $page = isset($redirect['page']) ? $redirect['page'] : 0; + $page = isset($redirect['page']) ? $redirect['page'] : $this->modx->config['site_start']; } if (is_numeric($page)) { $redirect = $this->modx->makeUrl($page, '', $query, 'full'); diff --git a/assets/snippets/FormLister/docs/history.md b/assets/snippets/FormLister/docs/history.md index 76eb972dfc..c2b10f7a60 100644 --- a/assets/snippets/FormLister/docs/history.md +++ b/assets/snippets/FormLister/docs/history.md @@ -1,4 +1,8 @@ ## History +### 1.7.3 +* [Refactor] Подключать __autoload.php, если не задан другой загрузчик. +* [Fix] Ошибка в обработке параметра редиректа (Core). + ### 1.7.2 * [Enhancement] Параметр &context в контроллере Login для поддержки модели modManagers (Login). * [Fix] Ошибка в обработке параметра редиректа (Core). diff --git "a/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264 \320\264\320\260\320\275\320\275\321\213\321\205.md" "b/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264 \320\264\320\260\320\275\320\275\321\213\321\205.md" index f34644afbf..8dc1af8cf9 100644 --- "a/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264 \320\264\320\260\320\275\320\275\321\213\321\205.md" +++ "b/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264 \320\264\320\260\320\275\320\275\321\213\321\205.md" @@ -32,6 +32,8 @@ Вывод сообщений обработчика: [+form.messages+] +В плейсхолдер [+form.messages+] могут выводиться три типа сообщений: нарушения правила required, нарушения остальных правил, произвольные сообщения, которые задаются методом addMessage. По умолчанию выводятся только последние, см. описание параметра messagesTpl. + Вывод значений из лексиконов: [%ключ лексикона%] diff --git a/assets/snippets/FormLister/snippet.FormLister.php b/assets/snippets/FormLister/snippet.FormLister.php index 8bddf6a5f0..622d2b0b5d 100644 --- a/assets/snippets/FormLister/snippet.FormLister.php +++ b/assets/snippets/FormLister/snippet.FormLister.php @@ -12,7 +12,9 @@ $this->modx->logEvent(0, 1, "Parameter &formid is not set", 'FormLister'); return; } -include_once ('__autoload.php'); +if (!class_exists('\FormLister\Core')) { + include_once('__autoload.php'); +} $out = ''; $FLDir = MODX_BASE_PATH . 'assets/snippets/FormLister/'; if (isset($controller)) { diff --git a/install/assets/plugins/userHelper.tpl b/install/assets/plugins/userHelper.tpl index 2c08da34b2..ffc96893a7 100644 --- a/install/assets/plugins/userHelper.tpl +++ b/install/assets/plugins/userHelper.tpl @@ -5,7 +5,7 @@ * addition to FormLister * * @category plugin - * @version 1.7.2 + * @version 1.7.3 * @internal @properties &logoutKey=Request key;text;logout &cookieName=Cookie Name;text;WebLoginPE &cookieLifetime=Cookie Lifetime, seconds;text;157680000 &maxFails=Max failed logins;text;3 &blockTime=Block for, seconds;text;3600 * @internal @events OnWebPageInit,OnPageNotFound,OnWebLogin * @internal @disabled 1 diff --git a/install/assets/snippets/FormLister.tpl b/install/assets/snippets/FormLister.tpl index 04eb839a86..1d97f016f8 100644 --- a/install/assets/snippets/FormLister.tpl +++ b/install/assets/snippets/FormLister.tpl @@ -5,7 +5,7 @@ * Form processor * * @category snippet - * @version 1.7.2 + * @version 1.7.3 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) * @internal @modx_category Content * @internal @installset base, sample From 6c316c18d62c90ed59b78d7830d36ecbe23e5db8 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Tue, 18 Jul 2017 20:42:05 +0300 Subject: [PATCH 06/10] Update DocLister add DLmenu --- .../DocLister/core/controller/onetable.php | 33 +- .../DocLister/core/controller/shopkeeper.php | 6 +- .../core/controller/site_content.php | 36 +- .../core/controller/site_content_menu.php | 549 ++++++++++++++++++ assets/snippets/DocLister/snippet.DLMenu.php | 8 + install/assets/snippets/DLMenu.tpl | 15 + 6 files changed, 619 insertions(+), 28 deletions(-) create mode 100644 assets/snippets/DocLister/core/controller/site_content_menu.php create mode 100644 assets/snippets/DocLister/snippet.DLMenu.php create mode 100644 install/assets/snippets/DLMenu.tpl diff --git a/assets/snippets/DocLister/core/controller/onetable.php b/assets/snippets/DocLister/core/controller/onetable.php index 987820a8a7..e25e0b1900 100644 --- a/assets/snippets/DocLister/core/controller/onetable.php +++ b/assets/snippets/DocLister/core/controller/onetable.php @@ -98,10 +98,15 @@ public function _render($tpl = '') "dl") . '.iteration'] = $i; //[+iteration+] - Number element. Starting from zero $date = $this->getCFGDef('dateSource', 'pub_date'); - $date = isset($item[$date]) ? $item[$date] + $this->modx->config['server_offset_time'] : ''; - if ($date != '' && $this->getCFGDef('dateFormat', '%d.%b.%y %H:%M') != '') { - $item[$this->getCFGDef("sysKey", "dl") . '.date'] = strftime($this->getCFGDef('dateFormat', - '%d.%b.%y %H:%M'), $date); + if (isset($item[$date])) { + $_date = is_numeric($item[$date]) && $item[$date] == (int)$item[$date] ? $item[$date] : strtotime($item[$date]); + if ($_date !== false) { + $_date = $_date + $this->modx->config['server_offset_time']; + $dateFormat = $this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'); + if ($dateFormat) { + $item['date'] = strftime($dateFormat, $_date); + } + } } $findTpl = $this->renderTPL; @@ -163,18 +168,24 @@ public function getJSON($data, $fields, $array = array()) */ $extE = $this->getExtender('e', true, true); - foreach ($data as $num => $item) { - $row = $item; + foreach ($data as $num => $row) { switch (true) { case ((array('1') == $fields || in_array('summary', $fields)) && $extSummary): - $row['summary'] = $this->getSummary($this->_docs[$num], $extSummary, 'introtext'); + $row['summary'] = $this->getSummary($row, $extSummary, 'introtext'); //without break case ((array('1') == $fields || in_array('date', $fields)) && $date != 'date'): - $tmp = (isset($this->_docs[$num][$date]) && $date != 'createdon' && $this->_docs[$num][$date] != 0 && $this->_docs[$num][$date] == (int)$this->_docs[$num][$date]) ? $this->_docs[$num][$date] : $this->_docs[$num]['createdon']; - $row['date'] = strftime($this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'), - $tmp + $this->modx->config['server_offset_time']); - // no break + if (isset($row[$date])) { + $_date = is_numeric($row[$date]) && $row[$date] == (int)$row[$date] ? $row[$date] : strtotime($row[$date]); + if ($_date !== false) { + $_date = $_date + $this->modx->config['server_offset_time']; + $dateFormat = $this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'); + if ($dateFormat) { + $row['date'] = strftime($dateFormat, $_date); + } + } + } + //nobreak } if ($extE && $tmp = $extE->init($this, array('data' => $row))) { diff --git a/assets/snippets/DocLister/core/controller/shopkeeper.php b/assets/snippets/DocLister/core/controller/shopkeeper.php index db87d95b78..5b1d984426 100644 --- a/assets/snippets/DocLister/core/controller/shopkeeper.php +++ b/assets/snippets/DocLister/core/controller/shopkeeper.php @@ -203,7 +203,7 @@ public function getChildrenCount() if (trim($where) == 'WHERE') { $where = ''; } - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); $sort = $this->SortOrderSQL("c.createdon"); list($from) = $this->injectSortByTV($from, $sort); @@ -251,7 +251,7 @@ protected function getDocList() $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); $sort = $this->SortOrderSQL("c.createdon"); list($tbl_site_content, $sort) = $this->injectSortByTV($tbl_site_content . ' ' . $this->_filters['join'], $sort); @@ -363,7 +363,7 @@ protected function getChildrenList() $where = ''; } $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); if ($sanitarInIDs != "''" || $this->getCFGDef('ignoreEmpty', '0')) { $sql = $this->dbQuery("SELECT {$fields} FROM " . $from . " " . $where . " " . $group . " " . diff --git a/assets/snippets/DocLister/core/controller/site_content.php b/assets/snippets/DocLister/core/controller/site_content.php index e628c242b9..e90a288a22 100644 --- a/assets/snippets/DocLister/core/controller/site_content.php +++ b/assets/snippets/DocLister/core/controller/site_content.php @@ -149,11 +149,15 @@ public function _render($tpl = '') } if (isset($item[$date])) { + if (!$item[$date] && $date == 'pub_date' && isset($item['createdon'])) { + $date = 'createdon'; + } $_date = is_numeric($item[$date]) && $item[$date] == (int)$item[$date] ? $item[$date] : strtotime($item[$date]); if ($_date !== false) { $_date = $_date + $this->modx->config['server_offset_time']; - if ($this->getCFGDef('dateFormat', '%d.%b.%y %H:%M') != '') { - $item['date'] = strftime($this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'), $_date); + $dateFormat = $this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'); + if ($dateFormat) { + $item['date'] = strftime($dateFormat, $_date); } } } @@ -205,7 +209,6 @@ public function getJSON($data, $fields, $array = array()) $out = array(); $fields = is_array($fields) ? $fields : explode(",", $fields); $date = $this->getCFGDef('dateSource', 'pub_date'); - /** * @var $extSummary summary_DL_Extender */ @@ -221,22 +224,27 @@ public function getJSON($data, $fields, $array = array()) */ $extE = $this->getExtender('e', true, true); - foreach ($data as $num => $item) { - $row = $item; + foreach ($data as $num => $row) { if ((array('1') == $fields || in_array('summary', $fields)) && $extSummary) { - $row['summary'] = $this->getSummary($this->_docs[$num], $extSummary, 'introtext', 'content'); + $row['summary'] = $this->getSummary($row, $extSummary, 'introtext', 'content'); } + if (array('1') == $fields || in_array('date', $fields)) { - if (isset($this->_docs[$num][$date])) { - $_date = is_numeric($this->_docs[$num][$date]) && $this->_docs[$num][$date] == (int)$this->_docs[$num][$date] ? $this->_docs[$num][$date] : strtotime($this->_docs[$num][$date]); + if (isset($row[$date])) { + if (!$row[$date] && $date == 'pub_date' && isset($row['createdon'])) { + $date = 'createdon'; + } + $_date = is_numeric($row[$date]) && $row[$date] == (int)$row[$date] ? $row[$date] : strtotime($row[$date]); if ($_date !== false) { $_date = $_date + $this->modx->config['server_offset_time']; - if ($this->getCFGDef('dateFormat', '%d.%b.%y %H:%M') != '') { - $row['date'] = strftime($this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'), $_date); + $dateFormat = $this->getCFGDef('dateFormat', '%d.%b.%y %H:%M'); + if ($dateFormat) { + $row['date'] = strftime($dateFormat, $_date); } } } } + if (array('1') == $fields || in_array(array('menutitle', 'pagetitle'), $fields)) { $row['title'] = ($row['menutitle'] == '' ? $row['pagetitle'] : $row['menutitle']); } @@ -340,11 +348,11 @@ public function getChildrenCount() if (trim($where) == 'WHERE') { $where = ''; } - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); $sort = $this->SortOrderSQL("if(c.pub_date=0,c.createdon,c.pub_date)"); list($from) = $this->injectSortByTV($from, $sort); - $q_true = $q_true ? $q_true : $group != 'GROUP BY c.id'; + $q_true = $q_true ? $q_true : $group != ''; if ( $q_true ){ $rs = $this->dbQuery("SELECT count(*) FROM (SELECT count(*) FROM {$from} {$where} {$group}) as `tmp`"); @@ -395,7 +403,7 @@ protected function getDocList() $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); $sort = $this->SortOrderSQL("if(c.pub_date=0,c.createdon,c.pub_date)"); list($tbl_site_content, $sort) = $this->injectSortByTV($tbl_site_content . ' ' . $this->_filters['join'], $sort); @@ -520,7 +528,7 @@ protected function getChildrenList() $where = ''; } $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); if ($sanitarInIDs != "''" || $this->getCFGDef('ignoreEmpty', '0')) { $sql = $this->dbQuery("SELECT {$fields} FROM " . $from . " " . $where . " " . diff --git a/assets/snippets/DocLister/core/controller/site_content_menu.php b/assets/snippets/DocLister/core/controller/site_content_menu.php new file mode 100644 index 0000000000..507d4c5ef2 --- /dev/null +++ b/assets/snippets/DocLister/core/controller/site_content_menu.php @@ -0,0 +1,549 @@ +, kabachello + */ +class site_content_menuDocLister extends site_contentDocLister +{ + public $levels = array(); + protected $currentLevel = 1; + protected $docTvs = array(); + protected $IDs = array(); + protected $activeBranch = array(); + protected $countChildren = array(); + + /** + * Очистка массива $IDs по которому потом будет производиться выборка документов + * + * @param mixed $IDs список id документов по которым необходима выборка + * @return array очищенный массив + */ + public function setIDs($IDs) + { + $this->debug->debug('set ID list ' . $this->debug->dumpData($IDs), 'setIDs', 2); + $IDs = $this->cleanIDs($IDs); + $this->debug->debugEnd("setIDs"); + + return ($this->IDs = $IDs); + } + + /** + * @param string $tvlist + * @return array + */ + public function getDocs($tvlist = '') + { + $maxDepth = $this->getCFGDef('maxDepth', 10); + //TODO кэширование + if ($this->getCFGDef('hideSubMenus', 0) && empty($this->getCFGDef('openIds'))) { + $maxDepth = $this->setActiveBranch($this->getHereId()); + } else { + $this->setActiveBranch($this->getHereId()); + } + if ($oIds = $this->getCFGDef('openIds')) { + $maxDepth = 1; + $oIds = $this->cleanIDs($oIds); + $oIds[] = $this->getHereId(); + foreach ($oIds as $id) { + if (($c = $this->setActiveBranch($id)) > $maxDepth) { + $maxDepth = $c; + } + } + $this->config->setConfig(array('hideSubMenus' => 1)); + } + $currentLevel = &$this->currentLevel; + $currentLevel = 1; + if ($this->getCFGDef('showParent', 0) && in_array(0, $this->IDs)) { + $this->config->setConfig(array('showParent' => 0)); + } + if ($this->getCFGDef('showParent', 0)) { + $orderBy = $this->getCFGDef('orderBy'); + $docs = $this->getDocList(); + $this->config->setConfig(array('orderBy' => $orderBy)); + $this->levels[$currentLevel++] = $docs; + $this->IDs = $ids = array_keys($docs); + $this->config->setConfig(array('showParent' => 0)); + } + while ($currentLevel <= $maxDepth) { + $orderBy = $this->getCFGDef('orderBy'); + $docs = $this->getChildrenList(); + $this->config->setConfig(array('orderBy' => $orderBy)); + if (empty($docs)) { + break; + } + $this->levels[$currentLevel++] = $docs; + $this->IDs = array_keys($docs); + } + + if ($tvlist == '') { + $tvlist = $this->getCFGDef('tvList', ''); + } + + if ($tvlist != '') { + $this->extTV->getAllTV_Name(); + $ids = array(); + foreach ($this->levels as $level => $docs) { + $ids = array_merge($ids, array_keys($docs)); + } + if ($ids) { + $tv = $this->extTV->getTVList($ids, $tvlist); + if (!is_array($tv)) { + $tv = array(); + } + $this->docTvs = $tv; + } + + } + if ($this->getCFGDef('countChildren', 0)) { + $this->countChildren(); + } + + return $this->levels; + } + + /** + * Список активных документов + * @param $id + * @param int $maxDepth + */ + public function setActiveBranch($id, $maxDepth = 10) + { + $ids = array_values($this->modx->getParentIds($id, $maxDepth)); + $ids[] = $id; + $ids[] = 0; + $this->activeBranch = array_merge($this->activeBranch, $ids); + $this->activeBranch = array_keys(array_flip($this->activeBranch)); + + return count($ids); + } + + /** + * Подсчет количества непосредственных дочерних документов + */ + public function countChildren() + { + $ids = array(); + $out = &$this->countChildren; + foreach ($this->levels as $level => $docs) { + $ids = array_merge($ids, array_keys($docs)); + } + $maxDepth = count($this->levels); + $currentDepth = 1; + while ($currentDepth <= $maxDepth) { + $_ids = implode(',', $ids); + if (empty($_ids)) { + break; + } + $q = $this->dbQuery("SELECT `parent`,COUNT(*) as `count` FROM {$this->getTable('site_content')} WHERE `parent` IN ({$_ids}) AND `published`=1 AND `deleted`=0 GROUP BY `parent`"); + $_ids = array(); + while ($row = $this->modx->db->getRow($q)) { + $_ids[] = $row['parent']; + $out[$row['parent']] = $row['count']; + } + if ($_ids) { + $ids = $this->diff($ids, $_ids); + } else { + break; + } + $currentDepth++; + } + } + + /** + * Возвращает элементы массива $a, которых нет в массиве $b + * @param $b + * @param $a + * @return array + */ + private function diff($b, $a) + { + $at = array_flip($a); + $d = array(); + foreach ($b as $i) { + if (!isset($at[$i])) { + $d[] = $i; + } + } + + return $d; + } + + + /** + * Подготовка результатов к отображению в соответствии с настройками + * + * @param string $tpl шаблон + * @return string + */ + public function render($tpl = '') + { + $this->debug->debug(array('Render data with template ' => $tpl), 'render', 2, array('html')); + $out = $this->_render($tpl); + + if ($out) { + $this->outData = DLTemplate::getInstance($this->modx)->parseDocumentSource($out); + } + $this->debug->debugEnd('render'); + + return $this->outData; + } + + /** + * @param string $tpl + * @return string + */ + public function _render($tpl = '') + { + $currentLevel = &$this->currentLevel; + $currentLevel = count($this->levels); + $docs = $this->levels; + /** @var prepare_DL_Extender_ $extPrepare */ + $extPrepare = $this->getExtender('prepare'); + + while ($currentLevel > 0) { + foreach ($docs[$currentLevel] as $id => &$data) { + if ($out = $this->prepareData($data)) { + if (is_array($out)) { + $data = $out; + } + }; + + if (!isset($data['maxLevel'])) { + $data['maxLevel'] = 1; + $docs[$currentLevel - 1][$data[$this->parentField]]['maxLevel'] = 0; + } + + if (isset($data['here']) || isset($data['active'])) { + $docs[$currentLevel - 1][$data[$this->parentField]]['active'] = 1; + } + + if ($extPrepare) { + $data = $extPrepare->init($this, array( + 'data' => $data, + 'nameParam' => 'prepare' + )); + if (is_bool($data) && $data === false) { + continue; + } + } + + if (isset($data['wrap'])) { + $data['wrap'] = is_array($data['wrap']) ? $this->parseRow($data['wrap']) : $data['wrap']; + $data['wrap'] = $this->parseOuter($data); + } + $hideSubMenus = $this->getCFGDef('hideSubMenus', 0); + $hideSubMenus = !$hideSubMenus || ($hideSubMenus && in_array((int)$data[$this->parentField], + $this->activeBranch)); + if ($hideSubMenus) { + $docs[$currentLevel - 1][$data[$this->parentField]]['wrap'][] = $data; + } + } + unset($docs[$currentLevel]); + $currentLevel--; + } + unset($data); + $out = ''; + $joinMenus = $this->getCFGDef('joinMenus',0) && !$this->getCFGDef('showParents',0); + foreach ($docs[0] as $id => $data) { + if (isset($data['wrap'])) { + if ($joinMenus) { + $out .= $this->parseRow($data['wrap']); + } else { + $data['wrap'] = $this->parseRow($data['wrap']); + $out .= $this->parseOuter($data); + } + } + } + if ($joinMenus) $out = $this->parseOuter(array('wrap'=>$out)); + + return $out; + } + + /** + * Добавление виртуальных плейсхолдеров + * @param $data + * @return array + */ + public function prepareData($data) + { + /** + * @var e_DL_Extender $extE + */ + $extE = $this->getExtender('e', true, true); + $id = $data['id']; + if (isset($this->docTvs[$id])) { + $data = array_merge($data, $this->docTvs[$id]); + } + if ($id == $this->getHereId()) { + $data['here'] = 1; + } + if (in_array($id,$this->activeBranch)) { + $data['active'] = 1; + } + if ($this->getCFGDef('hideSubMenus') && isset($data['isfolder']) && $data['isfolder']) { + $data['state'] = in_array($data['id'], $this->activeBranch) ? 'open' : 'closed'; + } + + $titleField = $this->getCFGDef('titleField', 'title'); + $data[$titleField] = isset($data['menutitle']) && !empty($data['menutitle']) ? $data['menutitle'] : $data['pagetitle']; + $data['level'] = $this->currentLevel; + $data['url'] = $this->makeUrl($data); + if ($this->getCFGDef('countChildren', 1)) { + $data['count'] = isset($this->countChildren[$data['id']]) ? $this->countChildren[$data['id']] : 0; + } + + if ($out = $extE->init($this, compact('data'))) { + if (is_array($out)) { + $data = $out; + } + } + + return $data; + } + + /** + * Вывод обертки блока меню + * @param array $data + * @return string + */ + public function parseOuter($data = array()) + { + $tpl = $this->getCFGDef('outerTpl', '@CODE:[+wrap+]'); + $classes = ''; + $classNames = $this->getCFGDef('outerClass'); + if ($this->currentLevel >= 1) { + $tpl = $this->getCFGDef('innerTpl', $tpl); + $classNames = $this->getCFGDef('innerClass'); + } + if ($classNames) { + $classes = " class=\"{$classNames}\""; + } + $tpl = isset($data['_renderOuterTpl']) ? $data['_renderOuterTpl'] : $tpl; + $out = $this->parseChunk($tpl, + array_merge($data, + array('classes' => $classes, 'classNames' => $classNames))); + + return $out; + } + + /** + * Вывод пункта меню + * @param array $data + * @return string + */ + public function parseRow($data = array()) + { + $out = ''; + $maxIteration = count($data) - 1; + foreach ($data as $iteration => $item) { + $item['iteration'] = $iteration + 1; + if ($iteration == 0) { + $item['first'] = 1; + } + if ($iteration == $maxIteration) { + $item['last'] = 1; + } + $tpl = isset($item['_renderRowTpl']) ? $item['_renderRowTpl'] : $this->getRowTemplate($item); + $item = array_merge($item, $this->getClasses($item)); + $out .= $this->parseChunk($tpl, $item); + } + + return $out; + } + + /** + * Формирование ссылки на документ + * @param array $data + * @return string + */ + protected function makeUrl($data = array()) + { + $out = ''; + if ($this->getCFGDef('makeUrl', 1)) { + if (isset($data['type']) && $data['type'] == 'reference' && isset($data['content'])) { + $out = is_numeric($data['content']) ? $this->modx->makeUrl($data['content'], '', '', + $this->getCFGDef('urlScheme', '')) : $data['content']; + } else { + $out = isset($data['id']) && is_numeric($data['id']) ? $this->modx->makeUrl($data['id'], '', '', + $this->getCFGDef('urlScheme', '')) : ''; + } + } + + return $out; + } + + /** + * Вовзращает id текущего документа + * @return int + */ + public function getHereId() + { + if (!$hereId = (int)$this->getCFGDef('hereId')) { + $hereId = isset($this->modx->documentIdentifier) ? (int)$this->modx->documentIdentifier : 0; + } + + return $hereId; + } + + /** + * Задание классов пункту меню + * @param array $data + * @return array + */ + protected function getClasses($data = array()) + { + $classes = isset($data['classes']) ? $data['classes'] : array( + 'rowClass' => '', + 'firstClass' => '', + 'lastClass' => '', + 'levelClass' => '', + 'webLinkClass' => '', + 'parentClass' => '', + 'hereClass' => '', + 'activeClass' => '', + 'oddClass' => '', + 'evenClass' => '' + ); + if (isset($data['state'])) { + $classes['stateClass'] = $this->getCFGDef($data['state'] . 'Class', $data['state']); + } + if (isset($data['here'])) { + $classes['hereClass'] = $this->getCFGDef('hereClass', 'current'); + } + if (isset($data['active'])) { + $classes['activeClass'] = $this->getCFGDef('activeClass', 'active'); + } + $classes['rowClass'] = $this->getCFGDef('rowClass'); + if ($data['iteration'] % 2 == 1) { + $classes['oddClass'] = $this->getCFGDef('oddClass', 'odd'); + } else { + $classes['evenClass'] = $this->getCFGDef('evenClass', 'even'); + } + if (isset($data['first'])) { + $classes['firstClass'] = $this->getCFGDef('firstClass', 'first'); + } + if (isset($data['last'])) { + $classes['lastClass'] = $this->getCFGDef('lastClass', 'last'); + } + if ($levelClass = $this->getCFGDef('levelClass', 'level')) { + $classes['levelClass'] = $levelClass . $data['level']; + } + if (isset($data['type']) && $data['type'] == 'reference') { + $classes['webLinkClass'] = $this->getCFGDef('webLinkClass'); + } + if (!empty($data['wrap'])) { + $classes['parentClass'] = $this->getCFGDef('parentClass'); + } + $classNames = implode(' ', array_filter(array_values($classes))); + $classes['classNames'] = $classNames; + $classes['classes'] = " class=\"{$classNames}\""; + + return $classes; + } + + /** + * Вывод пункта меню + * @param array $data + * @return string + */ + protected function getRowTemplate($data = array()) + { + $tpl = $this->getCFGDef('rowTpl', '@CODE:[+title+]'); + if ($data['wrap']) { + $tpl = $this->getCFGDef('parentRowTpl', + '@CODE:[+title+][+wrap+]'); + if ((isset($data['template']) && !$data['template']) || (isset($data['link_attributes']) && strpos($data['link_attributes'], + 'category') !== false) + ) { + $tpl = $this->getCFGDef('categoryFolderTpl', $tpl); + } elseif ($data['here']) { + $tpl = $this->getCFGDef('parentRowHereTpl', $tpl); + } elseif ($data['active']) { + $tpl = $this->getCFGDef('parentRowActiveTpl', $tpl); + } + } elseif ($data['level'] > 1) { + $tpl = $this->getCFGDef('innerRowTpl', $tpl); + if ($data['here']) { + $tpl = $this->getCFGDef('innerRowHereTpl', $tpl); + } + } else { + if ($data['here']) { + $tpl = $this->getCFGDef('rowHereTpl', $tpl); + } + } + + return $tpl; + } + + /** + * @param array $data + * @param mixed $fields + * @param array $array + * @return string + */ + public function getJSON($data, $fields, $array = array()) + { + $currentLevel = &$this->currentLevel; + $currentLevel = count($this->levels); + $docs = $this->levels; + /** @var prepare_DL_Extender_ $extPrepare */ + $extPrepare = $this->getExtender('prepare'); + + while ($currentLevel > 0) { + foreach ($docs[$currentLevel] as $id => &$data) { + if ($out = $this->prepareData($data)) { + if (is_array($out)) { + $data = $out; + } + }; + + if (isset($data['here']) || isset($data['active'])) { + $docs[$currentLevel - 1][$data[$this->parentField]]['active'] = 1; + } + + if ($extPrepare) { + $data = $extPrepare->init($this, array( + 'data' => $data, + 'nameParam' => 'prepare' + )); + if (is_bool($data) && $data === false) { + continue; + } + } + + $hideSubMenus = $this->getCFGDef('hideSubMenus', 0); + $hideSubMenus = !$hideSubMenus || ($hideSubMenus && in_array((int)$data[$this->parentField], + $this->activeBranch)); + if ($hideSubMenus) { + $docs[$currentLevel - 1][$data[$this->parentField]]['children'][] = $data; + } + } + unset($docs[$currentLevel]); + $currentLevel--; + } + unset($data); + + $out = $docs[0][0]['children']; + unset($docs); + + return json_encode($out, JSON_UNESCAPED_UNICODE); + } + + /** + * Получение информации из конфига с учетом уровня меню + * + * @param string $name имя параметра в конфиге + * @param mixed $def значение по умолчанию, если в конфиге нет искомого параметра + * @return mixed значение из конфига + */ + public function getCFGDef($name, $def = null) + { + return parent::getCFGDef($name . $this->currentLevel, parent::getCFGDef($name, $def)); + } +} diff --git a/assets/snippets/DocLister/snippet.DLMenu.php b/assets/snippets/DocLister/snippet.DLMenu.php new file mode 100644 index 0000000000..44ce0417a1 --- /dev/null +++ b/assets/snippets/DocLister/snippet.DLMenu.php @@ -0,0 +1,8 @@ +runSnippet('DocLister',$params); + diff --git a/install/assets/snippets/DLMenu.tpl b/install/assets/snippets/DLMenu.tpl new file mode 100644 index 0000000000..511c8132ce --- /dev/null +++ b/install/assets/snippets/DLMenu.tpl @@ -0,0 +1,15 @@ +// Date: Tue, 18 Jul 2017 21:04:18 +0300 Subject: [PATCH 07/10] fix toggle menu --- manager/media/style/default/css/tree.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/css/tree.css b/manager/media/style/default/css/tree.css index 1cca025e21..46b985a167 100644 --- a/manager/media/style/default/css/tree.css +++ b/manager/media/style/default/css/tree.css @@ -26,7 +26,7 @@ #treeRoot a.protected .title { color: #aaa; } #treeRoot a .lockedResource { cursor: pointer; } #treeRoot a .editResource { margin-left: 0.2em } -#treeRoot .indent { position: relative; float: left; height: 1.5em; } +#treeRoot .indent { position: relative; z-index: -1; float: left; height: 1.5em; } #treeRoot .indent i { float: left; height: 1.2em; width: 1.5em } #treeRoot .empty { color: #aaa; cursor: default; } #treeRoot .icon { cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } From 3dda520ab9ac6013dec9a59b95291a39fa193325 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Wed, 19 Jul 2017 01:06:38 +0300 Subject: [PATCH 08/10] update sortables list delete mootools sortables --- .../actions/mutate_menuindex_sort.dynamic.php | 282 ++++++++++-------- .../mutate_plugin_priority.dynamic.php | 75 +++-- .../mutate_template_tv_rank.dynamic.php | 278 +++++++++-------- manager/actions/mutate_tv_rank.dynamic.php | 161 +++++----- manager/media/style/default/css/custom.css | 2 +- 5 files changed, 450 insertions(+), 348 deletions(-) diff --git a/manager/actions/mutate_menuindex_sort.dynamic.php b/manager/actions/mutate_menuindex_sort.dynamic.php index b71f0f5a94..019ef032a0 100644 --- a/manager/actions/mutate_menuindex_sort.dynamic.php +++ b/manager/actions/mutate_menuindex_sort.dynamic.php @@ -24,7 +24,7 @@ } if(isset($_POST['listSubmitted'])) { - $updateMsg .= 'Updated!'; + $updateMsg .= '
' . $_lang['sort_updated'] . '
'; if(strlen($items) > 0) { $items = explode(';', $items); foreach($items as $key => $value) { @@ -65,136 +65,166 @@ } } -$header = ' - - - '; - $pagetitle = $id == 0 ? $site_name : $pagetitle; +?> + + + +

- ' . $_lang["sort_menuindex"] . ' +

-
- + + +
+
+ () +

+

+ + +

+ + +
    + +
+ +
+ + +
+
-
-
' . $pagetitle . ' (' . $id . ')
-
'; - -if(!$disabled) { - $header .= '

' . $_lang["sort_elements_msg"] . '

- '; -}; - -echo $header; - -echo $updateMsg . "Updating..."; - -if(!$disabled) { - echo ' -
    - ' . $ressourcelist . ' -
-
- - -
'; -} -echo ' -
-
'; + diff --git a/manager/actions/mutate_plugin_priority.dynamic.php b/manager/actions/mutate_plugin_priority.dynamic.php index c908a4c69d..a627e5e72e 100644 --- a/manager/actions/mutate_plugin_priority.dynamic.php +++ b/manager/actions/mutate_plugin_priority.dynamic.php @@ -61,19 +61,29 @@ ?> @@ -117,17 +127,44 @@
diff --git a/manager/actions/mutate_template_tv_rank.dynamic.php b/manager/actions/mutate_template_tv_rank.dynamic.php index 5056e2784d..cf22b6df6d 100644 --- a/manager/actions/mutate_template_tv_rank.dynamic.php +++ b/manager/actions/mutate_template_tv_rank.dynamic.php @@ -18,7 +18,7 @@ $updateMsg = ''; if(isset($_POST['listSubmitted'])) { - $updateMsg .= 'Updated!

'; + $updateMsg .= '
' . $_lang['sort_updated'] . '
'; foreach($_POST as $listName => $listValue) { if($listName == 'listSubmitted' || $listName == 'reset') { continue; @@ -53,140 +53,166 @@ $i = 0; foreach($tvsArr as $row) { if($i++ == 0) { - $evtLists .= '' . $row['templatename'] . '
    '; + $evtLists .= '' . $row['templatename'] . '
      '; } $caption = $row['caption'] != '' ? $row['caption'] : $row['name']; $evtLists .= '
    • ' . $caption . ' [*' . $row['name'] . '*]
    • '; } $evtLists .= '
    '; } +?> -$header = ' - - - '; - -$header .= ' - - -

    ' . $_lang["template_tv_edit_title"] . '

    - - + + + + +

    + + + +
    +
    + +

    +

    + + +

    + + + + +
    + + +
    +
    +
    -echo $evtLists; + diff --git a/manager/actions/mutate_tv_rank.dynamic.php b/manager/actions/mutate_tv_rank.dynamic.php index 7ea6431217..f93b8e157e 100644 --- a/manager/actions/mutate_tv_rank.dynamic.php +++ b/manager/actions/mutate_tv_rank.dynamic.php @@ -55,7 +55,36 @@ } ?> + + + - -

    @@ -143,61 +164,49 @@ function resetSortOrder() { + +
    + + +
    -
    - - -
    diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index 37851a69d3..7254001b63 100644 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -27,7 +27,7 @@ textarea { width: 100%; overflow: auto; resize: vertical } select.form-control:not([size]):not([multiple]), select:not([multiple]) { min-height: calc(2.235em + 2px); height: auto; } optgroup { font-style: normal; font-weight: 500; background-color: #ddd; } optgroup option { font-weight: normal; background-color: #fff; } -.form-row { margin-bottom: 0.1875rem; } +.form-row { margin-bottom: 0.25rem; } .form-row.row { margin-left: 0; margin-right: -1rem } .form-row label { margin-bottom: 0.15rem } .form-row .col, .form-row .col-1, .form-row .col-10, .form-row .col-11, .form-row .col-12, .form-row .col-2, .form-row .col-3, .form-row .col-4, .form-row .col-5, .form-row .col-6, .form-row .col-7, .form-row .col-8, .form-row .col-9, .form-row .col-lg, .form-row .col-lg-1, .form-row .col-lg-10, .form-row .col-lg-11, .form-row .col-lg-12, .form-row .col-lg-2, .form-row .col-lg-3, .form-row .col-lg-4, .form-row .col-lg-5, .form-row .col-lg-6, .form-row .col-lg-7, .form-row .col-lg-8, .form-row .col-lg-9, .form-row .col-md, .form-row .col-md-1, .form-row .col-md-10, .form-row .col-md-11, .form-row .col-md-12, .form-row .col-md-2, .form-row .col-md-3, .form-row .col-md-4, .form-row .col-md-5, .form-row .col-md-6, .form-row .col-md-7, .form-row .col-md-8, .form-row .col-md-9, .form-row .col-sm, .form-row .col-sm-1, .form-row .col-sm-10, .form-row .col-sm-11, .form-row .col-sm-12, .form-row .col-sm-2, .form-row .col-sm-3, .form-row .col-sm-4, .form-row .col-sm-5, .form-row .col-sm-6, .form-row .col-sm-7, .form-row .col-sm-8, .form-row .col-sm-9, .form-row .col-xl, .form-row .col-xl-1, .form-row .col-xl-10, .form-row .col-xl-11, .form-row .col-xl-12, .form-row .col-xl-2, .form-row .col-xl-3, .form-row .col-xl-4, .form-row .col-xl-5, .form-row .col-xl-6, .form-row .col-xl-7, .form-row .col-xl-8, .form-row .col-xl-9 { padding-left: 0 } From e263e07b96d4026ffb927727e395103c12f74757 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Wed, 19 Jul 2017 11:08:19 +0300 Subject: [PATCH 09/10] fix Russian lang --- manager/includes/lang/russian-UTF8.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/lang/russian-UTF8.inc.php b/manager/includes/lang/russian-UTF8.inc.php index 1a5f005397..12b87b6038 100644 --- a/manager/includes/lang/russian-UTF8.inc.php +++ b/manager/includes/lang/russian-UTF8.inc.php @@ -1036,7 +1036,7 @@ $_lang["template_reset_specific"] = 'Сбросить только страницы с шаблоном \'%s\''; $_lang["template_selectable"] = 'Шаблон выбирается при создании или редактировании ресурсов.'; $_lang["template_title"] = 'Создать / редактировать шаблон'; -$_lang["template_tv_edit"] = 'Редактировать порядок сортировки TV'; +$_lang["template_tv_edit"] = 'Редактировать порядок TV'; $_lang["template_tv_edit_message"] = 'Перетащите мышью для изменения порядка параметров (TV) для этого шаблона.'; $_lang["template_tv_edit_title"] = 'Порядок сортировки параметров (TV)'; $_lang["template_tv_msg"] = 'Ниже выводятся параметры (TV), назначенные этому шаблону.'; From 065836d7d6312c03f9f7e93480d42ada9f2eef37 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Wed, 19 Jul 2017 11:17:56 +0300 Subject: [PATCH 10/10] 1.3.0 --- assets/docs/changelog.txt | 38 ++++++++++++++++++++++++++++++++ manager/includes/version.inc.php | 8 +++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/assets/docs/changelog.txt b/assets/docs/changelog.txt index 5d2c85d33e..68242bcf83 100644 --- a/assets/docs/changelog.txt +++ b/assets/docs/changelog.txt @@ -1,6 +1,44 @@ This file shows the changes in recent releases of MODX. The most current release is usually the development release, and is only shown to give an idea of what's currently in the pipeline. +Evolution CMS 1.3.0(Jul 10, 2017) +* [GitHub:#3dda520a] - [R] update sortables list delete mootools sortables (64j) +* [GitHub:#9cafe6db] - [F] fix toggle menu (64j) +* [GitHub:#6c316c18] - [I] Update DocLister add DLmenu (dmi3yy) +* [GitHub:#fd23c498] - [I] Update FormLister to 1.7.3 (dmi3yy) +* [GitHub:#30a552fd] - [F] fix autoloader paths (Pathologic) +* [GitHub:#21ec58cf] - [F] fix show icon dragndrop (Serg) +* [GitHub:#56f57ec1] - [F] fix for OnManagerNodePrerender (dmi3yy) +* [GitHub:#aa04955b] - [F] fix issues #60 (Serg) +* [GitHub:#14503447] - [F] fix issues #62 (Serg) +* [GitHub:#c316e0d7] - [F] update tv rank (64j) +* [GitHub:#534deada] - [F] fix width logo in IE (64j) +* [GitHub:#0c3f8780] - [R] update plugins priority (64j) +* [GitHub:#aee4c3ed] - [R] format code style logs (64j) +* [GitHub:#8777bbf3] - [F] fix file managment (64j) +* [GitHub:#eaaaf777] - [R] upd actions buttons managment files (64j) +* [GitHub:#16cbb4f1] - [F] fix showChildren in tree (64j) +* [GitHub:#9258c4be] - [R] update actionbuttons (64j) +* [GitHub:#92f954fa] - [F] fixed issues #15 (64j) +* [GitHub:#328ad309] - [F] fix #12 (dmi3yy) +* [GitHub:#2bcc9874] - [F] change home ico from modx to home ) (dmi3yy) +* [GitHub:#626b416f] - [F] fix bkmanager header error (dmi3yy) +* [GitHub:#c43f140e] - [F] fix #9 (dmi3yy) +* [GitHub:#9da575f7] - [F] add favicon (64j) +* [GitHub:#2ff3f724] - [R] update loader (64j) +* [GitHub:#8df7c747] - [F] for update from older version (from security-fix) (dmi3yy) +* [GitHub:#f17a35ab] - [R] ajaxSearch 1.11.0 no use index-ajax.php for ajax (dmi3yy) +* [GitHub:#78e656e6] - [I] add updater plugin in core (dmi3yy) +* [GitHub:#8bbe38ae] - [F] Error : Undefined property (Serg) +* [GitHub:#ca775306] - [R] min php version set to 5.4 (dmi3yy) +* [GitHub:#95ea0349] - [F] update lang (dmi3yy) +* [GitHub:#e6224f43] - [С] rename modx to EVO (dmi3yy) +* [GitHub:#9e319a67] - [F] fix file path (dmi3yy) +* [GitHub:#524052e3] - [С] move new file from theme to core (dmi3yy) +* [GitHub:#1af46a1c] - [С] change logos, delete old theme, rename new theme to default (dmi3yy) +* [GitHub:#14d2a8f2] - [F] fix mysql_info (dmi3yy) + + MODX Evolution 1.2.2(Jul 10, 2017) * [GitHub:#99d1b62cd] - [F] fix properties for instal snippet,modules,plugins (dmi3yy) * [GitHub:#e18d5d373] - [F] mm multiplefields for php 7 (dmi3yy) diff --git a/manager/includes/version.inc.php b/manager/includes/version.inc.php index 398f53dfc0..228a66c7a7 100755 --- a/manager/includes/version.inc.php +++ b/manager/includes/version.inc.php @@ -1,5 +1,5 @@