From 97c748b1f09cd67161c7f1675a6045fc7f37425f Mon Sep 17 00:00:00 2001 From: freekode Date: Tue, 10 Sep 2013 20:44:57 +0200 Subject: [PATCH 01/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Tags/Tag.coffee | 188 ++++++++++++++++++ source/node/handlers/index.coffee | 9 + .../Manage/project/includes/project.coffee | 2 +- .../Manage/project/includes/tags/tags.coffee | 113 +++++++++++ .../views/templates/Manage/project/index.jade | 4 + .../partials/players/payments/index.jade | 2 +- .../Manage/project/partials/tags/index.jade | 24 +++ .../Manage/project/partials/tags/layout.jade | 5 + .../project/partials/tags/tags/index.jade | 27 +++ .../partials/tags/tags/tag/form/index.jade | 31 +++ 10 files changed, 403 insertions(+), 2 deletions(-) create mode 100644 source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee create mode 100644 source/node/views/templates/Manage/project/includes/tags/tags.coffee create mode 100644 source/node/views/templates/Manage/project/partials/tags/index.jade create mode 100644 source/node/views/templates/Manage/project/partials/tags/layout.jade create mode 100644 source/node/views/templates/Manage/project/partials/tags/tags/index.jade create mode 100644 source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee new file mode 100644 index 0000000..4739ff8 --- /dev/null +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -0,0 +1,188 @@ +express= require 'express' +async= require 'async' + + + + +### +Методы API для платежей +### +app= module.exports= do express +app.on 'mount', (parent) -> + cfg= parent.get 'config' + + + + app.post '/' + , access + , createTag + , (req, res) -> + res.json 200 + + app.get '/' + , access + , getTags + , (req, res) -> + res.json 200 + + app.get '/:tagId(\\d+)' + , access + , getTag + , (req, res) -> + res.json 200 + + app.put '/:tagId(\\d+)' + , access + , changeTag + , (req, res) -> + res.json 200 + + + app.delete '/:tagId(\\d+)' + , access + , deleteTag + , (req, res) -> + res.json 200 + + + + + +access= (req, res, next) -> + return next 401 if do req.isUnauthenticated + return do next + + + +createTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'INSERT INTO tag SET ?' + , [req.body] + , (err, resp) -> + tag= req.body + tag.id= resp.insertId + + return done err, conn, tag + + (conn, tag, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn, tag + + ], (err, conn, tag) -> + do conn.end if conn + + return next err if err + return res.json 200, tag + + + +getTags= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT * FROM tag' + , (err, rows) -> + return done err, conn, rows + + ], (err, conn, rows) -> + do conn.end if conn + + return next err if err + return res.json 200, rows + + + +getTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT * FROM tag WHERE id = ?' + , [req.params.tagId] + , (err, resp) -> + return done err, conn, resp + + ], (err, conn, resp) -> + do conn.end if conn + + return next err if err + return res.json 200, resp + + + +changeTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'UPDATE tag SET ? WHERE id = ?' + , [req.body, req.params.tagId] + , (err, resp) -> + tag= req.body + tag.id= req.params.tagId + return done err, conn, tag + + (conn, tag, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn, tag + + ], (err, conn, tag) -> + do conn.end if conn + + return next err if err + return res.json 200, tag + + + +deleteTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'DELETE FROM tag WHERE id = ?' + , [req.params.tagId] + , (err, resp) -> + return done err, conn + + (conn, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn + + ], (err, conn) -> + do conn.end if conn + + return next err if err + return res.json 200 diff --git a/source/node/handlers/index.coffee b/source/node/handlers/index.coffee index 23f5d13..709511b 100644 --- a/source/node/handlers/index.coffee +++ b/source/node/handlers/index.coffee @@ -145,6 +145,15 @@ app.on 'mount', (parent) -> + ### + Методы API для рассылки писем и смс. + ### + app.use '/api/v1/tags', require './Manage/Api/V1/Project/Tags/Tag' + + + + + ### Обрабатывает ошибку ### diff --git a/source/node/views/templates/Manage/project/includes/project.coffee b/source/node/views/templates/Manage/project/includes/project.coffee index 5beb812..b699a60 100644 --- a/source/node/views/templates/Manage/project/includes/project.coffee +++ b/source/node/views/templates/Manage/project/includes/project.coffee @@ -1,6 +1,6 @@ # создаем и возвращаем приложение из объявленных ранее модулей app= angular.module 'manage' -, ['project.servers', 'project.store', 'project.players', 'ngResource', 'ngRoute'] +, ['project.servers', 'project.store', 'project.players', 'project.tags', 'ngResource', 'ngRoute'] , ($routeProvider) -> $routeProvider.otherwise diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee new file mode 100644 index 0000000..893e559 --- /dev/null +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -0,0 +1,113 @@ +app= angular.module 'project.tags', ['ngResource','ngRoute'], ($routeProvider) -> + + # Теги + + $routeProvider.when '/tags', + templateUrl: 'partials/tags/', controller: 'TagsDashboardCtrl' + + + + $routeProvider.when '/tags/tag/list', + templateUrl: 'partials/tags/tags/', controller: 'TagsTagListCtrl' + + $routeProvider.when '/tags/tag/create', + templateUrl: 'partials/tags/tags/tag/form/', controller: 'TagsTagFormCtrl' + + $routeProvider.when '/tags/tag/update/:tagId', + templateUrl: 'partials/tags/tags/tag/form/', controller: 'TagsTagFormCtrl' + + + + + + + +### + +Ресурсы + +### +app.factory 'Tag', ($resource) -> + $resource '/api/v1/tags/:tagId', {}, + create: + method: 'post' + + update: + method: 'put' + params: + tagId: '@id' + + delete: + method: 'delete' + params: + tagId: '@id' + + + + + +### + +Контроллеры + +### + + +### +Контроллер панели управления. +### +app.controller 'TagsDashboardCtrl', ($scope) -> + $scope.state= 'loaded' + + +### +Контроллер списка тегов. +### +app.controller 'TagsTagListCtrl', ($scope, Tag) -> + load= -> + $scope.tags= Tag.query -> + $scope.state= 'loaded' + console.log 'Теги загружены' + + do load + + + $scope.reload= -> + do load + + + +### +Контроллер формы тега. +### +app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> + if $route.current.params.tagId + $scope.tag= Tag.get $route.current.params, -> + $scope.state= 'loaded' + $scope.action= 'update' + else + $scope.tag= new Tag + $scope.state= 'loaded' + $scope.action= 'create' + + # Действия + + $scope.create= (TagForm) -> + $scope.tag.$create -> + $location.path '/tags/tag/list', (err) -> + $scope.errors= err.data.errors + if 400 == err.status + angular.forEach err.data.errors, (error, input) -> + TagForm[input].$setValidity error.error, false + + $scope.update= (TagForm) -> + $scope.tag.$update -> + $location.path '/tags/tag/list', (err) -> + $scope.errors= err.data.errors + if 400 == err.status + angular.forEach err.data.errors, (error, input) -> + TagForm[input].$setValidity error.error, false + + $scope.delete= -> + $scope.tag.$delete -> + $location.path '/tags/tag/list' diff --git a/source/node/views/templates/Manage/project/index.jade b/source/node/views/templates/Manage/project/index.jade index 9f438e0..37843b1 100644 --- a/source/node/views/templates/Manage/project/index.jade +++ b/source/node/views/templates/Manage/project/index.jade @@ -16,6 +16,7 @@ append head-scripts include includes/players/players.coffee include includes/servers/servers.coffee include includes/store/store.coffee + include includes/tags/tags.coffee include includes/project.coffee include ../manage.coffee @@ -42,6 +43,9 @@ append body li: a(href='#/store') Магазин  b.caret + li: a(href='#/tags') Теги  + b.caret + ul.nav.navbar-nav.pull-right li: a(href='../engine/') Управление системой diff --git a/source/node/views/templates/Manage/project/partials/players/payments/index.jade b/source/node/views/templates/Manage/project/partials/players/payments/index.jade index bd3f7ee..516e58a 100644 --- a/source/node/views/templates/Manage/project/partials/players/payments/index.jade +++ b/source/node/views/templates/Manage/project/partials/players/payments/index.jade @@ -23,5 +23,5 @@ block section-body td {{payment.createdAt}} td {{payment.amount}} td - select.input(required, ng-model='payment.status', ng-change='change(payment)', style='width:110px') + select.input(required, ng-model='payment.status', ng-change='change(payment)') option(ng-repeat='status in paymentStatuses', value='{{status}}', ng-selected='payment.status == status') {{status}} diff --git a/source/node/views/templates/Manage/project/partials/tags/index.jade b/source/node/views/templates/Manage/project/partials/tags/index.jade new file mode 100644 index 0000000..fcc09dd --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/index.jade @@ -0,0 +1,24 @@ +extends ./layout + +block section-body + .row + .col-12 + script(src='/js/libs/chart.min.js') + script. + data= { + labels: ["January","February","March","April","May","June","July"], + datasets: [ + { + fillColor: 'rgba(151,187,205,0.5)', + strokeColor: 'rgba(151,187,205,1)', + pointColor: 'rgba(151,187,205,1)', + pointStrokeColor: '#fff', + data: [65,59,90,81,56,55,40] + } + ] + } + ctx= $("#serverStatsChart")[0].getContext('2d'); + serverChart= new Chart(ctx).Line(data) + + canvas#serverStatsChart(height='200',width='400') + diff --git a/source/node/views/templates/Manage/project/partials/tags/layout.jade b/source/node/views/templates/Manage/project/partials/tags/layout.jade new file mode 100644 index 0000000..60e82c4 --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/layout.jade @@ -0,0 +1,5 @@ +extends ../layout + +block section-side + ul.nav + li: a(href='#/tags/tag/list') Теги diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade new file mode 100644 index 0000000..85623a7 --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade @@ -0,0 +1,27 @@ +extends ../../layout +extends ../layout + +block section-body + input.input(placeholder='Поиск', ng-model='tagSearch') + table.table.players + thead + tr + th # + th.col-flex: .table-col: .table-col-sortable Тег + th Дочерние + th + button.btn.btn-info(ng-click='reload()') + i.icon-refresh + + tbody + tr(ng-repeat='tag in tags | filter:tagSearch') + td {{tag.id}} + td {{tag.titleRuPlural}} + td + td + a(ng-href='#/tags/tag/update/{{tag.id}}') + button.btn.btn-success + i.icon-wrench + .row + .col-12 + a(href='#/tags/tag/create')= 'Создать' diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade new file mode 100644 index 0000000..ab4987f --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -0,0 +1,31 @@ +extends ../../../../layout +extends ../../../layout + + +block section-body + form(name='TagForm') + h3(style='text-align:center') Тег + + fieldset + input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') + + fieldset + input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') + input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + + fieldset + input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') + input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') + + + fieldset(ng-if='action=="create"') + button.btn.btn-primary.btn-block(type='submit', ng-click='create(TagForm)', ng-disabled='!TagForm.$valid') + span Создать тег + + fieldset(ng-if='action=="update"'): .row + .col-10 + button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') + span Обновить тег + .col-2 + button.btn.btn-link.btn-block.text-left(ng-click='delete(TagForm)') + span Удалить From 4c0d07dbba950be3059f5d2ad18cdada83fed724 Mon Sep 17 00:00:00 2001 From: freekode Date: Wed, 11 Sep 2013 16:32:18 +0200 Subject: [PATCH 02/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20api=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=20=D1=82=D0=B5=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Tags/Tag.coffee | 7 ++++--- .../Manage/project/includes/tags/tags.coffee | 12 ++++-------- .../partials/tags/tags/tag/form/index.jade | 18 +++++++++++------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index 4739ff8..0e46756 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -119,13 +119,14 @@ getTag= (req, res, next) -> SELECT * FROM tag WHERE id = ?' , [req.params.tagId] , (err, resp) -> - return done err, conn, resp + tag= do resp.shift if not err + return done err, conn, tag - ], (err, conn, resp) -> + ], (err, conn, tag) -> do conn.end if conn return next err if err - return res.json 200, resp + return res.json 200, tag diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index 893e559..add1dd7 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -92,22 +92,18 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> # Действия + ### $scope.create= (TagForm) -> $scope.tag.$create -> $location.path '/tags/tag/list', (err) -> - $scope.errors= err.data.errors - if 400 == err.status - angular.forEach err.data.errors, (error, input) -> - TagForm[input].$setValidity error.error, false + console.log 'err', err $scope.update= (TagForm) -> $scope.tag.$update -> $location.path '/tags/tag/list', (err) -> - $scope.errors= err.data.errors - if 400 == err.status - angular.forEach err.data.errors, (error, input) -> - TagForm[input].$setValidity error.error, false + console.log 'err', err $scope.delete= -> $scope.tag.$delete -> $location.path '/tags/tag/list' + ### diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index ab4987f..8c8aa71 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -9,13 +9,17 @@ block section-body fieldset input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') - fieldset - input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') - input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') - - fieldset - input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') - input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') + fieldset: .row + .col-6 + input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') + .col-6 + input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + + fieldset: .row + .col-6 + input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') + .col-6 + input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') fieldset(ng-if='action=="create"') From 3663a1375519cd819fcba99819d972cd0e83b23c Mon Sep 17 00:00:00 2001 From: freekode Date: Wed, 11 Sep 2013 20:31:17 +0200 Subject: [PATCH 03/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D0=B3=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BA=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BC=D0=B5=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Servers/Item.coffee | 56 +++++++++++++++++++ .../project/includes/servers/servers.coffee | 1 - .../project/includes/store/store.coffee | 43 ++++++++++---- .../Manage/project/includes/tags/tags.coffee | 7 ++- .../partials/store/items/item/form/index.jade | 16 ++++++ .../Manage/project/partials/tags/layout.jade | 4 +- .../partials/tags/tags/tag/form/index.jade | 2 + 7 files changed, 113 insertions(+), 16 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee index 0cdee8c..02e539f 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee @@ -16,6 +16,9 @@ app= module.exports= do express Добавляет предмет. ### app.post '/', access, (req, res, next) -> + console.log req.body + + async.waterfall [ (done) -> @@ -73,6 +76,24 @@ app.post '/', access, (req, res, next) -> , (err, resp) -> return done err, conn + (conn, id, done) -> + console.log req.body.tags + # а есть ли теги Оо + if not req.body.tags + return done null, conn + + tags= [] + for tag in req.body.tags + tags.push [id, tag.id] + conn.query " + INSERT INTO item_tag + (`itemId`, `tagId`) + VALUES ? + " + , [tags] + , (err, resp) -> + return done err, conn + (conn, done) -> conn.query 'COMMIT', (err) -> console.log err @@ -185,6 +206,24 @@ app.get '/:itemId(\\d+)', access, (req, res, next) -> item.servers= resp return done err, conn, item + (conn, item, done) -> + conn.query ' + SELECT + tag.id, + tag.name, + tag.titleRuSingular, + tag.titleRuPlural, + tag.titleEnSingular, + tag.titleEnPlural + FROM item_tag AS connection + JOIN tag AS tag + ON tag.id = connection.tagId + WHERE itemId = ?' + , [req.params.itemId] + , (err, resp) -> + item.tags= resp + return done err, conn, item + ], (err, conn, item) -> do conn.end if conn @@ -209,6 +248,9 @@ app.put '/:itemId(\\d+)', access, (req, res, next) -> servers= item.servers or [] delete item.servers + tags= item.tags or [] + delete item.tags + async.waterfall [ (done) -> @@ -258,6 +300,20 @@ app.put '/:itemId(\\d+)', access, (req, res, next) -> , (err, resp) -> return done err, conn + (conn, done) -> + conn.query 'DELETE FROM item_tag WHERE itemId = ?' + , [itemId] + , (err, resp) -> + return done err, conn if err + return done err, conn if not tags.length + + bulk= [] + for tag in tags + bulk.push [itemId, tag.id] + conn.query 'INSERT INTO item_tag (`itemId`, `tagId`) VALUES ?' + , [bulk] + , (err, resp) -> + return done err, conn (conn, done) -> conn.query 'COMMIT', (err) -> diff --git a/source/node/views/templates/Manage/project/includes/servers/servers.coffee b/source/node/views/templates/Manage/project/includes/servers/servers.coffee index bf7f4cd..c9b20ef 100644 --- a/source/node/views/templates/Manage/project/includes/servers/servers.coffee +++ b/source/node/views/templates/Manage/project/includes/servers/servers.coffee @@ -111,7 +111,6 @@ app.controller 'ServersServerListCtrl', ($scope, Server) -> ### app.controller 'ServersServerFormCtrl', ($scope, $route, $location, Server) -> if $route.current.params.serverId - console.log $route.current.params.serverId $scope.server= Server.get $route.current.params, -> $scope.state= 'loaded' $scope.action= 'update' diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index bb3df98..88dd225 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -99,6 +99,11 @@ app.factory 'ServerList', ($resource) -> +app.factory 'TagList', ($resource) -> + $resource '/api/v1/tags/' + + + ### Модель предмета. ### @@ -119,13 +124,6 @@ app.factory 'Item', ($resource) -> -### -Модель заказа. -### -app.factory 'Order', ($resource) -> - $resource '/api/v1/store/orders/:orderId', - orderId:'@id' - ### @@ -372,49 +370,70 @@ app.controller 'StoreItemListCtrl', ($scope, $location, Item) -> ### Контроллер формы предмета. ### -app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, Item, Material, Enchantment, ServerList) -> +app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, Item, Material, Enchantment, ServerList, TagList) -> if $route.current.params.itemId $scope.item= Item.get $route.current.params, -> $scope.materials= Material.query -> $scope.enchantments= Enchantment.query -> $scope.servers= ServerList.query -> - $scope.state= 'loaded' - $scope.action= 'update' + $scope.tags= TagList.query -> + $scope.state= 'loaded' + $scope.action= 'update' else $scope.item= new Item $scope.materials= Material.query -> $scope.enchantments= Enchantment.query -> $scope.servers= ServerList.query -> - $scope.state= 'loaded' - $scope.action= 'create' + $scope.tags= TagList.query -> + $scope.state= 'loaded' + $scope.action= 'create' + $scope.changeMaterial= (material) -> $scope.item.titleRu= JSON.parse(material).titleRu $scope.item.titleEn= JSON.parse(material).titleEn + $scope.addEnchantment= (enchantment) -> newEnchantment= JSON.parse angular.copy enchantment newEnchantment.level= 1 $scope.item.enchantments= [] if not $scope.item.enchantments $scope.item.enchantments.push newEnchantment + $scope.removeEnchantment= (enchantment) -> remPosition= null $scope.item.enchantments.map (ench, i) -> if ench.id == enchantment.id $scope.item.enchantments.splice i, 1 + $scope.addServer= (server) -> newServer= JSON.parse angular.copy server $scope.item.servers= [] if not $scope.item.servers $scope.item.servers.push newServer + $scope.removeServer= (server) -> remPosition= null $scope.item.servers.map (srv, i) -> if srv.id == server.id $scope.item.servers.splice i, 1 + + $scope.addTag= (tag) -> + newTag= JSON.parse angular.copy tag + $scope.item.tags= [] if not $scope.item.tags + $scope.item.tags.push newTag + + + $scope.removeTag= (tag) -> + remPosition= null + $scope.item.tags.map (srv, i) -> + if srv.id == tag.id + $scope.item.tags.splice i, 1 + + # Действия $scope.create= (ItemForm) -> diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index add1dd7..e489fc3 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -90,9 +90,13 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.state= 'loaded' $scope.action= 'create' + $scope.tagEntity= [ + 'server' + 'item' + ] + # Действия - ### $scope.create= (TagForm) -> $scope.tag.$create -> $location.path '/tags/tag/list', (err) -> @@ -106,4 +110,3 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.delete= -> $scope.tag.$delete -> $location.path '/tags/tag/list' - ### diff --git a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade index c6442e2..3e429c7 100644 --- a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade @@ -52,6 +52,22 @@ block section-body i.icon-minus + fieldset(name='ItemTagForm') + .row + .col-10 + select.input(ng-model='tag') + option(ng-repeat='tag in tags', value='{{tag}}') {{tag.name}} + .col-1 + button.btn(ng-click='addTag(tag)',ng-disabled='!tag') + i.icon-plus + + .row(ng-repeat='itemTag in item.tags') + .col-3 {{itemTag.name}} + .col-1 + button.btn(ng-click='removeTag(itemTag)') + i.icon-minus + + fieldset(ng-if='action=="create"') button.btn.btn-primary.btn-block(type='submit', ng-click='create(ItemForm)', ng-disabled='!ItemForm.$valid') span Добавить предмет diff --git a/source/node/views/templates/Manage/project/partials/tags/layout.jade b/source/node/views/templates/Manage/project/partials/tags/layout.jade index 60e82c4..1500473 100644 --- a/source/node/views/templates/Manage/project/partials/tags/layout.jade +++ b/source/node/views/templates/Manage/project/partials/tags/layout.jade @@ -2,4 +2,6 @@ extends ../layout block section-side ul.nav - li: a(href='#/tags/tag/list') Теги + li: a(href='#/tags/tag/list') Теги (все) + li: a(href='#/tags/servertag/list') Теги (серверов) + li: a(href='#/tags/itemtag/list') Теги (айтемов) diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index 8c8aa71..c31d267 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -9,12 +9,14 @@ block section-body fieldset input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') + fieldset: .row .col-6 input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') .col-6 input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + fieldset: .row .col-6 input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') From c916a5a4ac55438c599462f20851d5f327a032ec Mon Sep 17 00:00:00 2001 From: freekode Date: Wed, 11 Sep 2013 21:33:01 +0200 Subject: [PATCH 04/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Servers/Item.coffee | 57 ------------- .../Manage/Api/V1/Project/Tags/Tag.coffee | 31 +++++++ source/node/handlers/index.coffee | 2 - .../project/includes/store/store.coffee | 11 --- .../Manage/project/includes/tags/tags.coffee | 84 +++++++++++++++++++ .../partials/store/items/item/form/index.jade | 16 ---- 6 files changed, 115 insertions(+), 86 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee index 02e539f..e5b3f83 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee @@ -16,9 +16,6 @@ app= module.exports= do express Добавляет предмет. ### app.post '/', access, (req, res, next) -> - console.log req.body - - async.waterfall [ (done) -> @@ -76,24 +73,6 @@ app.post '/', access, (req, res, next) -> , (err, resp) -> return done err, conn - (conn, id, done) -> - console.log req.body.tags - # а есть ли теги Оо - if not req.body.tags - return done null, conn - - tags= [] - for tag in req.body.tags - tags.push [id, tag.id] - conn.query " - INSERT INTO item_tag - (`itemId`, `tagId`) - VALUES ? - " - , [tags] - , (err, resp) -> - return done err, conn - (conn, done) -> conn.query 'COMMIT', (err) -> console.log err @@ -206,24 +185,6 @@ app.get '/:itemId(\\d+)', access, (req, res, next) -> item.servers= resp return done err, conn, item - (conn, item, done) -> - conn.query ' - SELECT - tag.id, - tag.name, - tag.titleRuSingular, - tag.titleRuPlural, - tag.titleEnSingular, - tag.titleEnPlural - FROM item_tag AS connection - JOIN tag AS tag - ON tag.id = connection.tagId - WHERE itemId = ?' - , [req.params.itemId] - , (err, resp) -> - item.tags= resp - return done err, conn, item - ], (err, conn, item) -> do conn.end if conn @@ -248,9 +209,6 @@ app.put '/:itemId(\\d+)', access, (req, res, next) -> servers= item.servers or [] delete item.servers - tags= item.tags or [] - delete item.tags - async.waterfall [ (done) -> @@ -300,21 +258,6 @@ app.put '/:itemId(\\d+)', access, (req, res, next) -> , (err, resp) -> return done err, conn - (conn, done) -> - conn.query 'DELETE FROM item_tag WHERE itemId = ?' - , [itemId] - , (err, resp) -> - return done err, conn if err - return done err, conn if not tags.length - - bulk= [] - for tag in tags - bulk.push [itemId, tag.id] - conn.query 'INSERT INTO item_tag (`itemId`, `tagId`) VALUES ?' - , [bulk] - , (err, resp) -> - return done err, conn - (conn, done) -> conn.query 'COMMIT', (err) -> return done err, conn diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index 0e46756..70c2713 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -25,6 +25,12 @@ app.on 'mount', (parent) -> , (req, res) -> res.json 200 + app.get '/server/:serverId(\\d+)' + , access + , getServerTags + , (req, res) -> + res.json 200 + app.get '/:tagId(\\d+)' , access , getTag @@ -107,6 +113,31 @@ getTags= (req, res, next) -> +getServerTags= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT * FROM tag AS tag + JOIN server_tag AS server + ON server.tagId = tag.id + WHERE server.serverId = ?' + , [req.params.serverId] + , (err, rows) -> + return done err, conn, rows + + ], (err, conn, rows) -> + do conn.end if conn + + return next err if err + return res.json 200, rows + + + getTag= (req, res, next) -> async.waterfall [ diff --git a/source/node/handlers/index.coffee b/source/node/handlers/index.coffee index 709511b..a87593b 100644 --- a/source/node/handlers/index.coffee +++ b/source/node/handlers/index.coffee @@ -152,8 +152,6 @@ app.on 'mount', (parent) -> - - ### Обрабатывает ошибку ### diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index 88dd225..b3655d2 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -421,17 +421,6 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, It $scope.item.servers.splice i, 1 - $scope.addTag= (tag) -> - newTag= JSON.parse angular.copy tag - $scope.item.tags= [] if not $scope.item.tags - $scope.item.tags.push newTag - - - $scope.removeTag= (tag) -> - remPosition= null - $scope.item.tags.map (srv, i) -> - if srv.id == tag.id - $scope.item.tags.splice i, 1 # Действия diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index e489fc3..d5cc387 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -18,6 +18,26 @@ app= angular.module 'project.tags', ['ngResource','ngRoute'], ($routeProvider) - + $routeProvider.when '/tags/servertag/list', + templateUrl: 'partials/tags/servertags/', controller: 'TagsServerTagListCtrl' + + $routeProvider.when '/tags/servertag/create', + templateUrl: 'partials/tags/servertags/servertag/form/', controller: 'TagsServerTagFormCtrl' + + $routeProvider.when '/tags/servertag/update/:tagId', + templateUrl: 'partials/tags/servertags/servertag/form/', controller: 'TagsServerTagFormCtrl' + + + + $routeProvider.when '/tags/itemtag/list', + templateUrl: 'partials/tags/servertags/', controller: 'TagsItemTagListCtrl' + + $routeProvider.when '/tags/servertag/create', + templateUrl: 'partials/tags/itemtags/itemtag/form/', controller: 'TagsItemTagFormCtrl' + + $routeProvider.when '/tags/servertag/update/:tagId', + templateUrl: 'partials/tags/itemtags/itemtag/form/', controller: 'TagsItemTagFormCtrl' + @@ -44,6 +64,19 @@ app.factory 'Tag', ($resource) -> +app.factory 'ServerList', ($resource) -> + $resource '/api/v1/servers/server', + + + +app.factory 'TagServer', ($resource) -> + $resource '/api/v1/tags/server/:serverId', {}, + get: + method: 'get' + isArray: true + params: + serverId: '@id' + ### @@ -110,3 +143,54 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.delete= -> $scope.tag.$delete -> $location.path '/tags/tag/list' + + + + + +### +Контроллер списка тегов. +### +app.controller 'TagsServerTagListCtrl', ($scope, ServerList, TagServer) -> + $scope.servers= ServerList.query -> + $scope.state= 'loaded' + console.log 'Сервера загружены' + + + $scope.changeServer= (serverId) -> + $scope.tags= TagServer.get + serverId: serverId + , -> + $scope.state= 'loaded' + $scope.action= 'update' + + + +### +Контроллер формы тега. +### +app.controller 'TagsServerTagFormCtrl', ($scope, $route, $q, $location, Tag) -> + if $route.current.params.tagId + $scope.tag= Tag.get $route.current.params, -> + $scope.state= 'loaded' + $scope.action= 'update' + else + $scope.tag= new Tag + $scope.state= 'loaded' + $scope.action= 'create' + + # Действия + + $scope.create= (TagForm) -> + $scope.tag.$create -> + $location.path '/tags/tag/list', (err) -> + console.log 'err', err + + $scope.update= (TagForm) -> + $scope.tag.$update -> + $location.path '/tags/tag/list', (err) -> + console.log 'err', err + + $scope.delete= -> + $scope.tag.$delete -> + $location.path '/tags/tag/list' diff --git a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade index 3e429c7..c6442e2 100644 --- a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade @@ -52,22 +52,6 @@ block section-body i.icon-minus - fieldset(name='ItemTagForm') - .row - .col-10 - select.input(ng-model='tag') - option(ng-repeat='tag in tags', value='{{tag}}') {{tag.name}} - .col-1 - button.btn(ng-click='addTag(tag)',ng-disabled='!tag') - i.icon-plus - - .row(ng-repeat='itemTag in item.tags') - .col-3 {{itemTag.name}} - .col-1 - button.btn(ng-click='removeTag(itemTag)') - i.icon-minus - - fieldset(ng-if='action=="create"') button.btn.btn-primary.btn-block(type='submit', ng-click='create(ItemForm)', ng-disabled='!ItemForm.$valid') span Добавить предмет From 1c8c51fad02af7cdee0ea8fbc80be62d13b89912 Mon Sep 17 00:00:00 2001 From: freekode Date: Wed, 11 Sep 2013 22:45:51 +0200 Subject: [PATCH 05/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D0=B3=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/V1/Project/Servers/Server.coffee | 85 +++++++- .../Manage/Api/V1/Project/Tags/ItemTag.coffee | 189 ++++++++++++++++++ .../project/includes/servers/servers.coffee | 34 +++- .../Manage/project/includes/tags/tags.coffee | 9 +- .../servers/servers/server/form/index.jade | 19 +- .../project/partials/tags/itemtags/index.jade | 27 +++ .../tags/itemtags/itemtag/form/index.jade | 37 ++++ .../partials/tags/servertags/index.jade | 28 +++ .../tags/servertags/servertag/form/index.jade | 41 ++++ 9 files changed, 451 insertions(+), 18 deletions(-) create mode 100644 source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee create mode 100644 source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade create mode 100644 source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade create mode 100644 source/node/views/templates/Manage/project/partials/tags/servertags/index.jade create mode 100644 source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee index 652acf3..c129f65 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee @@ -27,13 +27,34 @@ app.post '/', access, (req, res, next) -> return done err, conn (conn, done) -> + data= + name: req.body.name + title: req.body.title + key: req.body.key + conn.query 'INSERT INTO server SET ?' - , [req.body] + , [data] , (err, resp) -> server= req.body server.id= resp.insertId return done err, conn, server + (conn, server, done) -> + # а есть ли вобще энчаты у предмета + if not req.body.tags + return done null, conn, server + + bulk= [] + for tag in req.body.tag + bulk.push [server.id, tag.id] + conn.query ' + INSERT INTO server_tag + (`serverId`, `tagId`) + VALUES ?' + , [bulk] + , (err, resp) -> + return done err, conn, server + (conn, server, done) -> conn.query 'COMMIT', (err) -> return done err, conn, server @@ -80,10 +101,38 @@ app.get '/:serverId(\\d+)', access, (req, res, next) -> return done err, conn (conn, done) -> - conn.query 'SELECT * FROM server WHERE id = ?' + conn.query ' + SELECT + server.id, + server.name, + server.title, + server.key, + tag.id AS tagId, + tag.name AS tagName + FROM server AS server + JOIN server_tag AS connection + ON connection.serverId = server.id + JOIN tag AS tag + ON tag.id = connection.tagId + WHERE server.id = ?' , [req.params.serverId] - , (err, resp) -> - server= do resp.shift if not err + , (err, rows) -> + server= + id: '' + name: '' + title: '' + key: '' + tags: [] + + rows.map (srv) -> + server.id= srv.id + server.name= srv.name + server.title= srv.title + server.key= srv.key + server.tags.push + id: srv.tagId + name: srv.tagName + return done err, conn, server ], (err, conn, server) -> @@ -99,6 +148,14 @@ app.get '/:serverId(\\d+)', access, (req, res, next) -> Изменяет сервер ### app.put '/:serverId(\\d+)', access, (req, res, next) -> + serverId= req.params.serverId + delete req.body.id + + server= req.body + + tags= server.tags or [] + delete server.tags + async.waterfall [ (done) -> @@ -111,12 +168,28 @@ app.put '/:serverId(\\d+)', access, (req, res, next) -> (conn, done) -> conn.query 'UPDATE server SET ? WHERE id = ?' - , [req.body, req.params.serverId] + , [server, req.params.serverId] , (err, resp) -> - server= req.body server.id= req.params.serverId return done err, conn + (conn, done) -> + conn.query 'DELETE FROM server_tag WHERE serverId = ?' + , [serverId] + , (err, resp) -> + return done err, conn if err + return done err, conn if not tags.length + + bulk= [] + for tag in tags + bulk.push [serverId, tag.id] + conn.query ' + INSERT INTO server_tag (`serverId`, `tagId`) VALUES ? + ' + , [bulk] + , (err, resp) -> + return done err, conn + (conn, done) -> conn.query 'COMMIT', (err) -> return done err, conn diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee new file mode 100644 index 0000000..0e46756 --- /dev/null +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee @@ -0,0 +1,189 @@ +express= require 'express' +async= require 'async' + + + + +### +Методы API для платежей +### +app= module.exports= do express +app.on 'mount', (parent) -> + cfg= parent.get 'config' + + + + app.post '/' + , access + , createTag + , (req, res) -> + res.json 200 + + app.get '/' + , access + , getTags + , (req, res) -> + res.json 200 + + app.get '/:tagId(\\d+)' + , access + , getTag + , (req, res) -> + res.json 200 + + app.put '/:tagId(\\d+)' + , access + , changeTag + , (req, res) -> + res.json 200 + + + app.delete '/:tagId(\\d+)' + , access + , deleteTag + , (req, res) -> + res.json 200 + + + + + +access= (req, res, next) -> + return next 401 if do req.isUnauthenticated + return do next + + + +createTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'INSERT INTO tag SET ?' + , [req.body] + , (err, resp) -> + tag= req.body + tag.id= resp.insertId + + return done err, conn, tag + + (conn, tag, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn, tag + + ], (err, conn, tag) -> + do conn.end if conn + + return next err if err + return res.json 200, tag + + + +getTags= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT * FROM tag' + , (err, rows) -> + return done err, conn, rows + + ], (err, conn, rows) -> + do conn.end if conn + + return next err if err + return res.json 200, rows + + + +getTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT * FROM tag WHERE id = ?' + , [req.params.tagId] + , (err, resp) -> + tag= do resp.shift if not err + return done err, conn, tag + + ], (err, conn, tag) -> + do conn.end if conn + + return next err if err + return res.json 200, tag + + + +changeTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'UPDATE tag SET ? WHERE id = ?' + , [req.body, req.params.tagId] + , (err, resp) -> + tag= req.body + tag.id= req.params.tagId + return done err, conn, tag + + (conn, tag, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn, tag + + ], (err, conn, tag) -> + do conn.end if conn + + return next err if err + return res.json 200, tag + + + +deleteTag= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'DELETE FROM tag WHERE id = ?' + , [req.params.tagId] + , (err, resp) -> + return done err, conn + + (conn, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn + + ], (err, conn) -> + do conn.end if conn + + return next err if err + return res.json 200 diff --git a/source/node/views/templates/Manage/project/includes/servers/servers.coffee b/source/node/views/templates/Manage/project/includes/servers/servers.coffee index c9b20ef..2ec3a3c 100644 --- a/source/node/views/templates/Manage/project/includes/servers/servers.coffee +++ b/source/node/views/templates/Manage/project/includes/servers/servers.coffee @@ -75,6 +75,10 @@ app.factory 'Instance', ($resource) -> +app.factory 'TagList', ($resource) -> + $resource '/api/v1/tags' + + ### @@ -109,16 +113,32 @@ app.controller 'ServersServerListCtrl', ($scope, Server) -> ### Контроллер формы сервера. ### -app.controller 'ServersServerFormCtrl', ($scope, $route, $location, Server) -> +app.controller 'ServersServerFormCtrl', ($scope, $route, $location, Server, TagList) -> if $route.current.params.serverId - $scope.server= Server.get $route.current.params, -> - $scope.state= 'loaded' - $scope.action= 'update' + $scope.tags= TagList.query -> + $scope.server= Server.get $route.current.params, -> + $scope.state= 'loaded' + $scope.action= 'update' else - $scope.server= new Server - $scope.state= 'loaded' - $scope.action= 'create' + $scope.tags= TagList.query -> + $scope.server= new Server + $scope.state= 'loaded' + $scope.action= 'create' + + + $scope.addTag= (tag) -> + newTag= JSON.parse angular.copy tag + $scope.server.tags= [] if not $scope.server.tags + $scope.server.tags.push newTag + + + $scope.removeTag= (tag) -> + remPosition= null + $scope.server.tags.map (tg, i) -> + if tg.id == tag.id + $scope.server.tags.splice i, 1 + # Действия diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index d5cc387..0668c8e 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -30,7 +30,7 @@ app= angular.module 'project.tags', ['ngResource','ngRoute'], ($routeProvider) - $routeProvider.when '/tags/itemtag/list', - templateUrl: 'partials/tags/servertags/', controller: 'TagsItemTagListCtrl' + templateUrl: 'partials/tags/itemtags/', controller: 'TagsItemTagListCtrl' $routeProvider.when '/tags/servertag/create', templateUrl: 'partials/tags/itemtags/itemtag/form/', controller: 'TagsItemTagFormCtrl' @@ -171,9 +171,10 @@ app.controller 'TagsServerTagListCtrl', ($scope, ServerList, TagServer) -> ### app.controller 'TagsServerTagFormCtrl', ($scope, $route, $q, $location, Tag) -> if $route.current.params.tagId - $scope.tag= Tag.get $route.current.params, -> - $scope.state= 'loaded' - $scope.action= 'update' + $scope.servers= ServerList.query -> + $scope.tag= Tag.get $route.current.params, -> + $scope.state= 'loaded' + $scope.action= 'update' else $scope.tag= new Tag $scope.state= 'loaded' diff --git a/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade b/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade index 7764098..b42b4d7 100644 --- a/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade @@ -4,13 +4,30 @@ extends ../../../layout block section-body form(name='ServerForm') - h3(style='text-align:center') Создание сервера + h3(style='text-align:center') Сервер fieldset input.input(placeholder='Название сервера', type='text', required, ng-maxlength='50', ng-model='server.title') input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='server.name') input.input(placeholder='Ключ', type='text', required, ng-maxlength='50', ng-model='server.key') + + fieldset(name='ServerTagForm') + .row + .col-10 + select.input(ng-model='tag') + option(ng-repeat='tag in tags', value='{{tag}}') {{tag.name}} + .col-1 + button.btn(ng-click='addTag(tag)',ng-disabled='!tag') + i.icon-plus + + .row(ng-repeat='serverTag in server.tags') + .col-3 {{serverTag.name}} + .col-1 + button.btn(ng-click='removeTag(serverTag)') + i.icon-minus + + fieldset(ng-if='action=="create"') button.btn.btn-primary.btn-block(type='submit', ng-click='create(SeverForm)', ng-disabled='!ServerForm.$valid') span Создать сервер diff --git a/source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade b/source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade new file mode 100644 index 0000000..85623a7 --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade @@ -0,0 +1,27 @@ +extends ../../layout +extends ../layout + +block section-body + input.input(placeholder='Поиск', ng-model='tagSearch') + table.table.players + thead + tr + th # + th.col-flex: .table-col: .table-col-sortable Тег + th Дочерние + th + button.btn.btn-info(ng-click='reload()') + i.icon-refresh + + tbody + tr(ng-repeat='tag in tags | filter:tagSearch') + td {{tag.id}} + td {{tag.titleRuPlural}} + td + td + a(ng-href='#/tags/tag/update/{{tag.id}}') + button.btn.btn-success + i.icon-wrench + .row + .col-12 + a(href='#/tags/tag/create')= 'Создать' diff --git a/source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade new file mode 100644 index 0000000..c31d267 --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade @@ -0,0 +1,37 @@ +extends ../../../../layout +extends ../../../layout + + +block section-body + form(name='TagForm') + h3(style='text-align:center') Тег + + fieldset + input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') + + + fieldset: .row + .col-6 + input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') + .col-6 + input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + + + fieldset: .row + .col-6 + input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') + .col-6 + input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') + + + fieldset(ng-if='action=="create"') + button.btn.btn-primary.btn-block(type='submit', ng-click='create(TagForm)', ng-disabled='!TagForm.$valid') + span Создать тег + + fieldset(ng-if='action=="update"'): .row + .col-10 + button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') + span Обновить тег + .col-2 + button.btn.btn-link.btn-block.text-left(ng-click='delete(TagForm)') + span Удалить diff --git a/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade b/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade new file mode 100644 index 0000000..d6e3cbc --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade @@ -0,0 +1,28 @@ +extends ../../layout +extends ../layout + +block section-body + select.input(required, ng-model='serverId', ng-change='changeServer(serverId)') + option(ng-repeat='server in servers', value='{{server.id}}') {{server.id}} - {{server.title}} ({{server.name}}) + table.table.players + thead + tr + th # + th.col-flex: .table-col: .table-col-sortable Тег + th Дочерние + th + button.btn.btn-info(ng-click='changeServer(serverId)') + i.icon-refresh + + tbody + tr(ng-repeat='tag in tags') + td {{tag.id}} + td {{tag.titleRuPlural}} + td + td + a(ng-href='#/servers/server/update/{{serverId}}') + button.btn.btn-success + i.icon-wrench + .row + .col-12 + a(href='#/tags/tag/create')= 'Создать' diff --git a/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade new file mode 100644 index 0000000..df561bf --- /dev/null +++ b/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade @@ -0,0 +1,41 @@ +extends ../../../../layout +extends ../../../layout + + +block section-body + form(name='TagForm') + h3(style='text-align:center') Тег + + fieldset + select.input(required, ng-model='serverId', ng-change='changeServer(serverId)') + option(ng-repeat='server in servers', value='{{server.id}}') {{server.id}} - {{server.title}} ({{server.name}}) + + fieldset + input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') + + + fieldset: .row + .col-6 + input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') + .col-6 + input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + + + fieldset: .row + .col-6 + input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') + .col-6 + input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') + + + fieldset(ng-if='action=="create"') + button.btn.btn-primary.btn-block(type='submit', ng-click='create(TagForm)', ng-disabled='!TagForm.$valid') + span Создать тег + + fieldset(ng-if='action=="update"'): .row + .col-10 + button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') + span Обновить тег + .col-2 + button.btn.btn-link.btn-block.text-left(ng-click='delete(TagForm)') + span Удалить From 66c93f3d4094871fd44e7777e4e67fff4d6b2fdd Mon Sep 17 00:00:00 2001 From: freekode Date: Thu, 12 Sep 2013 01:16:15 +0200 Subject: [PATCH 06/20] =?UTF-8?q?=D0=BD=D0=B0=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D1=83=D0=B5=D0=BC=D1=8B=D0=B5=20=D1=82=D0=B5=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/V1/Project/Servers/Server.coffee | 49 +++++- .../Manage/Api/V1/Project/Tags/Tag.coffee | 153 +++++++++++++++++- .../Manage/project/includes/tags/tags.coffee | 21 ++- .../tags/servertags/servertag/form/index.jade | 52 +++--- .../project/partials/tags/tags/index.jade | 1 + .../partials/tags/tags/tag/form/index.jade | 16 ++ 6 files changed, 245 insertions(+), 47 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee index c129f65..c048cbf 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee @@ -9,13 +9,46 @@ access= (req, res, next) -> Методы API для работы c серверами. ### app= module.exports= do express +app.on 'mount', (parent) -> + cfg= parent.get 'config' + app.post '/' + , access + , createServer + , (req, res) -> + res.json 200 + + app.get '/' + , access + , getServers + , (req, res) -> + res.json 200 + + app.get '/:serverId(\\d+)' + , access + , getServer + , (req, res) -> + res.json 200 + + app.put '/:serverId(\\d+)' + , access + , changeServer + , (req, res) -> + res.json 200 + + app.delete '/:serverId(\\d+)' + , access + , deleteServer + , (req, res) -> + res.json 200 + + ### Добавляет сервер. ### -app.post '/', access, (req, res, next) -> +createServer= (req, res, next) -> async.waterfall [ (done) -> @@ -45,7 +78,7 @@ app.post '/', access, (req, res, next) -> return done null, conn, server bulk= [] - for tag in req.body.tag + for tag in req.body.tags bulk.push [server.id, tag.id] conn.query ' INSERT INTO server_tag @@ -70,7 +103,7 @@ app.post '/', access, (req, res, next) -> ### Отдает список серверов. ### -app.get '/', access, (req, res, next) -> +getServers= (req, res, next) -> async.waterfall [ (done) -> @@ -93,7 +126,7 @@ app.get '/', access, (req, res, next) -> ### Отдает сервер. ### -app.get '/:serverId(\\d+)', access, (req, res, next) -> +getServer= (req, res, next) -> async.waterfall [ (done) -> @@ -110,9 +143,9 @@ app.get '/:serverId(\\d+)', access, (req, res, next) -> tag.id AS tagId, tag.name AS tagName FROM server AS server - JOIN server_tag AS connection + LEFT JOIN server_tag AS connection ON connection.serverId = server.id - JOIN tag AS tag + LEFT JOIN tag AS tag ON tag.id = connection.tagId WHERE server.id = ?' , [req.params.serverId] @@ -147,7 +180,7 @@ app.get '/:serverId(\\d+)', access, (req, res, next) -> ### Изменяет сервер ### -app.put '/:serverId(\\d+)', access, (req, res, next) -> +changeServer= (req, res, next) -> serverId= req.params.serverId delete req.body.id @@ -205,7 +238,7 @@ app.put '/:serverId(\\d+)', access, (req, res, next) -> ### Удаляет сервер ### -app.delete '/:serverId(\\d+)', access, (req, res, next) -> +deleteServer= (req, res, next) -> async.waterfall [ (done) -> diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index 70c2713..cdf89d8 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -31,6 +31,12 @@ app.on 'mount', (parent) -> , (req, res) -> res.json 200 + app.get '/items/:tagId(\\d+)' + , access + , getTagItems + , (req, res) -> + res.json 200 + app.get '/:tagId(\\d+)' , access , getTag @@ -43,7 +49,6 @@ app.on 'mount', (parent) -> , (req, res) -> res.json 200 - app.delete '/:tagId(\\d+)' , access , deleteTag @@ -72,14 +77,38 @@ createTag= (req, res, next) -> return done err, conn (conn, done) -> + data= + name: req.body.name + titleRuSingular: req.body.titleRuSingular + titleRuPlural: req.body.titleRuPlural + titleEnSingular: req.body.titleEnSingular + titleEnPlural: req.body.titleEnPlural + conn.query 'INSERT INTO tag SET ?' - , [req.body] + , [data] , (err, resp) -> tag= req.body tag.id= resp.insertId return done err, conn, tag + (conn, tag, done) -> + # а есть ли сервера + if not req.body.inheritTags + return done null, conn + + bulk= [] + for tagInh in req.body.inheritTags + bulk.push [tag.id, tagInh.id] + conn.query " + INSERT INTO tag_tags + (`tagId`, `childId`) + VALUES ? + " + , [bulk] + , (err, resp) -> + return done err, conn, tag + (conn, tag, done) -> conn.query 'COMMIT', (err) -> return done err, conn, tag @@ -105,6 +134,25 @@ getTags= (req, res, next) -> , (err, rows) -> return done err, conn, rows + (conn, tags, done) -> + conn.query ' + SELECT + * + FROM tag_tags AS connection + JOIN tag AS tag + ON connection.childId = tag.id' + , (err, rows) -> + tags.map (tag, i) -> + tags[i].inheritTags= [] + + rows.map (r) -> + if tag.id == r.tagId + tags[i].inheritTags.push + id: r.id + name: r.name + + return done err, conn, tags + ], (err, conn, rows) -> do conn.end if conn @@ -137,6 +185,62 @@ getServerTags= (req, res, next) -> return res.json 200, rows +### +Получить айтемы определенного тега +### +getTagItems= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT + tag.id, + tag.name, + tag.titleRuSingular, + tag.titleRuPlural, + tag.titleEnSingular, + tag.titleEnPlural, + item.id AS itemId, + item.material, + item.titleRu AS itemTitle + FROM item AS item + JOIN item_tag AS connection + ON connection.itemId = item.id + JOIN tag AS tag + ON tag.id = connection.tagId + WHERE tag.id = ?' + , [req.params.tagId] + , (err, rows) -> + tag= + id: '' + name: '' + titleRuSingular: '' + titleRuPlural: '' + items: [] + + rows.map (r) -> + tag.id= r.id + tag.name= r.name + tag.titleRuSingular= r.titleRuSingular + tag.titleRuPlural= r.titleRuPlural + tag.items.push + id: r.itemId + material: r.material + titleRu: r.itemTitle + + return done err, conn, tag + + ], (err, conn, tag) -> + do conn.end if conn + + return next err if err + return res.json 200, tag + + getTag= (req, res, next) -> async.waterfall [ @@ -153,6 +257,26 @@ getTag= (req, res, next) -> tag= do resp.shift if not err return done err, conn, tag + (conn, tag, done) -> + conn.query ' + SELECT + * + FROM tag_tags AS connection + JOIN tag AS tag + ON connection.childId = tag.id + WHERE connection.tagId = ?' + , [req.params.tagId] + , (err, rows) -> + tag.inheritTags= [] + + rows.map (r) -> + if tag.id == r.tagId + tag.inheritTags.push + id: r.id + name: r.name + + return done err, conn, tag + ], (err, conn, tag) -> do conn.end if conn @@ -162,6 +286,14 @@ getTag= (req, res, next) -> changeTag= (req, res, next) -> + tagId= req.params.tagId + delete req.body.id + + tag= req.body + + inheritTags= tag.inheritTags or [] + delete tag.inheritTags + async.waterfall [ (done) -> @@ -174,12 +306,27 @@ changeTag= (req, res, next) -> (conn, done) -> conn.query 'UPDATE tag SET ? WHERE id = ?' - , [req.body, req.params.tagId] + , [tag, req.params.tagId] , (err, resp) -> tag= req.body tag.id= req.params.tagId return done err, conn, tag + (conn, tag, done) -> + conn.query 'DELETE FROM tag_tags WHERE tagId = ?' + , [tagId] + , (err, resp) -> + return done err, conn if err + return done err, conn if not inheritTags.length + + bulk= [] + for inherit in inheritTags + bulk.push [tagId, inherit.id] + conn.query 'INSERT INTO tag_tags (`tagId`, `childId`) VALUES ?' + , [bulk] + , (err, resp) -> + return done err, conn, tag + (conn, tag, done) -> conn.query 'COMMIT', (err) -> return done err, conn, tag diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index 0668c8e..48319b0 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -116,17 +116,26 @@ app.controller 'TagsTagListCtrl', ($scope, Tag) -> app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> if $route.current.params.tagId $scope.tag= Tag.get $route.current.params, -> - $scope.state= 'loaded' - $scope.action= 'update' + $scope.tags= Tag.query -> + $scope.state= 'loaded' + $scope.action= 'update' else $scope.tag= new Tag $scope.state= 'loaded' $scope.action= 'create' - $scope.tagEntity= [ - 'server' - 'item' - ] + + $scope.addTag= (tag) -> + newTag= JSON.parse angular.copy tag + $scope.tag.inheritTags= [] if not $scope.tag.inheritTags + $scope.tag.inheritTags.push newTag + + + $scope.removeTag= (tag) -> + remPosition= null + $scope.tag.inheritTags.map (tg, i) -> + if tg.id == tag.id + $scope.tag.inheritTags.splice i, 1 # Действия diff --git a/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade index df561bf..8ec8745 100644 --- a/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade @@ -7,35 +7,27 @@ block section-body h3(style='text-align:center') Тег fieldset - select.input(required, ng-model='serverId', ng-change='changeServer(serverId)') - option(ng-repeat='server in servers', value='{{server.id}}') {{server.id}} - {{server.title}} ({{server.name}}) - - fieldset - input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') - - - fieldset: .row - .col-6 - input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') - .col-6 - input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + p {{tag.name}} + p {{tag.titleRuSingular}} ({{tag.titleRuPlural}}) + //p {{tag.titleEnSingular}} ({{tag.titleEnPlural}}) - fieldset: .row - .col-6 - input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') - .col-6 - input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') - - - fieldset(ng-if='action=="create"') - button.btn.btn-primary.btn-block(type='submit', ng-click='create(TagForm)', ng-disabled='!TagForm.$valid') - span Создать тег - - fieldset(ng-if='action=="update"'): .row - .col-10 - button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') - span Обновить тег - .col-2 - button.btn.btn-link.btn-block.text-left(ng-click='delete(TagForm)') - span Удалить + fieldset + .row + .col-10 + select.input(ng-model='item') + option(ng-repeat='item in items', value='{{item}}') {{item.material}} {{item.titleRu}} + .col-1 + button.btn(ng-click='addItem(item)',ng-disabled='!item') + i.icon-plus + + .row(ng-repeat='tagItem in tag.items') + .col-3 {{tagItem.titleRu}} + .col-1 + button.btn(ng-click='removeItem(tagItem)') + i.icon-minus + + + fieldset(ng-if='action=="update"') + button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') + span Обновить тег diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade index 85623a7..96b64cb 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade @@ -18,6 +18,7 @@ block section-body td {{tag.id}} td {{tag.titleRuPlural}} td + span(ng-repeat='inherit in tag.inheritTags')= '{{inherit.name}} ' td a(ng-href='#/tags/tag/update/{{tag.id}}') button.btn.btn-success diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index c31d267..e8457ab 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -24,6 +24,22 @@ block section-body input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') + fieldset + .row + .col-10 + select.input(ng-model='inheritTag') + option(ng-repeat='inheritTag in tags', value='{{inheritTag}}') {{inheritTag.name}} + .col-1 + button.btn(ng-click='addTag(inheritTag)',ng-disabled='!inheritTag') + i.icon-plus + + .row(ng-repeat='tagTag in tag.inheritTags') + .col-3 {{tagTag.name}} + .col-1 + button.btn(ng-click='removeTag(tagTag)') + i.icon-minus + + fieldset(ng-if='action=="create"') button.btn.btn-primary.btn-block(type='submit', ng-click='create(TagForm)', ng-disabled='!TagForm.$valid') span Создать тег From 3e2ed95959cd53c7db2c7dc91d43eb0c541b59f3 Mon Sep 17 00:00:00 2001 From: freekode Date: Thu, 12 Sep 2013 02:25:39 +0200 Subject: [PATCH 07/20] =?UTF-8?q?=D1=82=D0=B5=D0=B3=D0=B8=20=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B8=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/V1/Project/Servers/Server.coffee | 1 + .../Manage/Api/V1/Project/Tags/Tag.coffee | 86 +++++++++++++------ .../Manage/project/includes/tags/tags.coffee | 31 ++++--- .../partials/tags/servertags/index.jade | 2 +- 4 files changed, 80 insertions(+), 40 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee index c048cbf..2e10ba8 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Server.coffee @@ -123,6 +123,7 @@ getServers= (req, res, next) -> + ### Отдает сервер. ### diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index cdf89d8..0836e76 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -37,6 +37,13 @@ app.on 'mount', (parent) -> , (req, res) -> res.json 200 + app.get '/srv/:tagId(\\d+)' + , access + , getServerItems + , (req, res) -> + res.json 200 + + app.get '/:tagId(\\d+)' , access , getTag @@ -203,35 +210,26 @@ getTagItems= (req, res, next) -> tag.titleRuSingular, tag.titleRuPlural, tag.titleEnSingular, - tag.titleEnPlural, - item.id AS itemId, - item.material, - item.titleRu AS itemTitle - FROM item AS item - JOIN item_tag AS connection - ON connection.itemId = item.id - JOIN tag AS tag - ON tag.id = connection.tagId + tag.titleEnPlural + FROM tag AS tag WHERE tag.id = ?' , [req.params.tagId] - , (err, rows) -> - tag= - id: '' - name: '' - titleRuSingular: '' - titleRuPlural: '' - items: [] + , (err, resp) -> + tag= do resp.shift if not err - rows.map (r) -> - tag.id= r.id - tag.name= r.name - tag.titleRuSingular= r.titleRuSingular - tag.titleRuPlural= r.titleRuPlural - tag.items.push - id: r.itemId - material: r.material - titleRu: r.itemTitle + return done err, conn, tag + (conn, tag, done) -> + conn.query ' + SELECT + * + FROM item_tag AS connection + LEFT JOIN item AS item + ON item.id = connection.itemId + WHERE connection.tagId = ?' + , [req.params.tagId] + , (err, rows) -> + tag.items= rows return done err, conn, tag ], (err, conn, tag) -> @@ -242,6 +240,44 @@ getTagItems= (req, res, next) -> +### +Получить айтемы через жопу +### +getServerItems= (req, res, next) -> + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn + + (conn, done) -> + conn.query ' + SELECT + item.* + FROM server_tag AS serverTag + JOIN server_item AS serverItem + ON serverItem.serverId = serverTag.serverId + JOIN item AS item + ON item.id = serverItem.itemId + WHERE serverTag.tagId = ?' + , [req.params.tagId] + , (err, rows) -> + return done err, conn, rows + + ], (err, conn, rows) -> + do conn.end if conn + + return next err if err + return res.json 200, rows + + + +changeTagConnection= (req, res, next) -> + res.send 200 + + + + getTag= (req, res, next) -> async.waterfall [ diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index 48319b0..6d28928 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -29,17 +29,6 @@ app= angular.module 'project.tags', ['ngResource','ngRoute'], ($routeProvider) - - $routeProvider.when '/tags/itemtag/list', - templateUrl: 'partials/tags/itemtags/', controller: 'TagsItemTagListCtrl' - - $routeProvider.when '/tags/servertag/create', - templateUrl: 'partials/tags/itemtags/itemtag/form/', controller: 'TagsItemTagFormCtrl' - - $routeProvider.when '/tags/servertag/update/:tagId', - templateUrl: 'partials/tags/itemtags/itemtag/form/', controller: 'TagsItemTagFormCtrl' - - - ### @@ -79,6 +68,20 @@ app.factory 'TagServer', ($resource) -> +app.factory 'TagItem', ($resource) -> + $resource '/api/v1/tags/items/:tagId' + + + +app.factory 'TagItemServer', ($resource) -> + $resource '/api/v1/tags/srv/:tagId', {}, + get: + method: 'get' + isArray: true + params: + tagId: '@id' + + ### Контроллеры @@ -178,10 +181,10 @@ app.controller 'TagsServerTagListCtrl', ($scope, ServerList, TagServer) -> ### Контроллер формы тега. ### -app.controller 'TagsServerTagFormCtrl', ($scope, $route, $q, $location, Tag) -> +app.controller 'TagsServerTagFormCtrl', ($scope, $route, $q, $location, TagItem, TagItemServer) -> if $route.current.params.tagId - $scope.servers= ServerList.query -> - $scope.tag= Tag.get $route.current.params, -> + $scope.items= TagItemServer.get $route.current.params, -> + $scope.tag= TagItem.get $route.current.params, -> $scope.state= 'loaded' $scope.action= 'update' else diff --git a/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade b/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade index d6e3cbc..02749a9 100644 --- a/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade @@ -20,7 +20,7 @@ block section-body td {{tag.titleRuPlural}} td td - a(ng-href='#/servers/server/update/{{serverId}}') + a(ng-href='#/tags/servertag/update/{{serverId}}') button.btn.btn-success i.icon-wrench .row From 01af9770d0ca05c32870f26575b015a912f52f1e Mon Sep 17 00:00:00 2001 From: freekode Date: Thu, 12 Sep 2013 02:40:09 +0200 Subject: [PATCH 08/20] =?UTF-8?q?=D1=81=D0=B2=D1=8F=D0=B7=D1=8C=20=D0=B0?= =?UTF-8?q?=D0=B9=D1=82=D0=B5=D0=BC=D0=BE=D0=B2=20=D0=B8=20=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Tags/Tag.coffee | 47 ++++++++++++++++++- .../Manage/project/includes/tags/tags.coffee | 30 ++++++++---- 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index 0836e76..dc153ed 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -43,6 +43,11 @@ app.on 'mount', (parent) -> , (req, res) -> res.json 200 + app.put '/srv/:tagId(\\d+)' + , access + , changeTagConnection + , (req, res) -> + res.json 200 app.get '/:tagId(\\d+)' , access @@ -273,7 +278,47 @@ getServerItems= (req, res, next) -> changeTagConnection= (req, res, next) -> - res.send 200 + tagId= req.params.tagId + delete req.body.id + + items= req.body.items + + async.waterfall [ + + (done) -> + req.db.getConnection (err, conn) -> + return done err, conn if err + conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> + return done err, conn if err + conn.query 'START TRANSACTION', (err) -> + return done err, conn + + (conn, done) -> + conn.query 'DELETE FROM item_tag WHERE tagId = ?' + , [tagId] + , (err, resp) -> + return done err, conn if err + return done err, conn if not items.length + + bulk= [] + for item in items + bulk.push [tagId, item.id] + conn.query ' + INSERT INTO item_tag (`tagId`, `itemId`) VALUES ? + ' + , [bulk] + , (err, resp) -> + return done err, conn + + (conn, done) -> + conn.query 'COMMIT', (err) -> + return done err, conn + + ], (err, conn) -> + do conn.end if conn + + return next err if err + return res.json 200 diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index 6d28928..bc98ea1 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -81,6 +81,11 @@ app.factory 'TagItemServer', ($resource) -> params: tagId: '@id' + update: + method: 'put' + params: + tagId: '@id' + ### @@ -192,18 +197,23 @@ app.controller 'TagsServerTagFormCtrl', ($scope, $route, $q, $location, TagItem, $scope.state= 'loaded' $scope.action= 'create' - # Действия - $scope.create= (TagForm) -> - $scope.tag.$create -> - $location.path '/tags/tag/list', (err) -> - console.log 'err', err + $scope.addItem= (item) -> + newItem= JSON.parse angular.copy item + $scope.tag.items= [] if not $scope.tag.items + $scope.tag.items.push newItem + + + $scope.removeItem= (item) -> + remPosition= null + $scope.tag.items.map (tg, i) -> + if tg.id == item.id + $scope.tag.items.splice i, 1 + + $scope.update= (TagForm) -> - $scope.tag.$update -> + news= new TagItemServer angular.copy $scope.tag + news.$update -> $location.path '/tags/tag/list', (err) -> console.log 'err', err - - $scope.delete= -> - $scope.tag.$delete -> - $location.path '/tags/tag/list' From d6eeeb6e24753cfc7bcdc1eab6f4c77b422fee90 Mon Sep 17 00:00:00 2001 From: freekode Date: Thu, 12 Sep 2013 18:49:49 +0200 Subject: [PATCH 09/20] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/templates/Manage/project/partials/tags/layout.jade | 1 - 1 file changed, 1 deletion(-) diff --git a/source/node/views/templates/Manage/project/partials/tags/layout.jade b/source/node/views/templates/Manage/project/partials/tags/layout.jade index 1500473..c1f5a0f 100644 --- a/source/node/views/templates/Manage/project/partials/tags/layout.jade +++ b/source/node/views/templates/Manage/project/partials/tags/layout.jade @@ -4,4 +4,3 @@ block section-side ul.nav li: a(href='#/tags/tag/list') Теги (все) li: a(href='#/tags/servertag/list') Теги (серверов) - li: a(href='#/tags/itemtag/list') Теги (айтемов) From 2453f648f9fc3da259ac7db02203fc9806818b3e Mon Sep 17 00:00:00 2001 From: freekode Date: Fri, 13 Sep 2013 16:55:00 +0200 Subject: [PATCH 10/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BA=20=D0=B0=D0=B9?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/Manage/project/includes/store/store.coffee | 9 +++++++++ .../project/partials/store/items/item/form/index.jade | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index b3655d2..05f3bf6 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -389,6 +389,15 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, It $scope.action= 'create' + $scope.filterServer= (server) -> + isThere= true + $scope.item.servers.map (srv) -> + if srv.id == server.id + isThere= false + + return isThere + + $scope.changeMaterial= (material) -> $scope.item.titleRu= JSON.parse(material).titleRu $scope.item.titleEn= JSON.parse(material).titleEn diff --git a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade index c6442e2..9bd7226 100644 --- a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade @@ -40,7 +40,7 @@ block section-body .row .col-10 select.input(ng-model='server') - option(ng-repeat='server in servers', value='{{server}}') {{server.title}} + option(ng-repeat='server in servers | filter:filterServer:server', value='{{server}}') {{server.title}} .col-1 button.btn(ng-click='addServer(server)',ng-disabled='!server') i.icon-plus From 4c547c759774caddb659904a041f87bdb9926e0a Mon Sep 17 00:00:00 2001 From: freekode Date: Fri, 13 Sep 2013 16:55:22 +0200 Subject: [PATCH 11/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BA=20=D0=B0=D0=B9?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/templates/Manage/project/includes/store/store.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index 05f3bf6..1e2946a 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -395,6 +395,8 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, It if srv.id == server.id isThere= false + + console.log $scope.servers return isThere From 04527dbd4d77ec0973a18a9d465f79fb78e1d1f4 Mon Sep 17 00:00:00 2001 From: freekode Date: Fri, 13 Sep 2013 18:01:45 +0200 Subject: [PATCH 12/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BA=20=D0=B0=D0=B9?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Servers/Item.coffee | 48 +++++++++++++++++++ .../Manage/Api/V1/Project/Tags/Tag.coffee | 8 +++- .../project/includes/store/store.coffee | 47 +++++++++++++----- .../partials/store/items/item/form/index.jade | 16 +++++++ 4 files changed, 107 insertions(+), 12 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee index e5b3f83..efee597 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee @@ -73,6 +73,23 @@ app.post '/', access, (req, res, next) -> , (err, resp) -> return done err, conn + (conn, id, done) -> + # а есть ли теги + if not req.body.tags + return done null, conn + + bulk= [] + for tag in req.body.tags + bulk.push [id, tag.id] + conn.query " + INSERT INTO item_tag + (`itemId`, `tagId`) + VALUES ? + " + , [bulk] + , (err, resp) -> + return done err, conn + (conn, done) -> conn.query 'COMMIT', (err) -> console.log err @@ -185,6 +202,19 @@ app.get '/:itemId(\\d+)', access, (req, res, next) -> item.servers= resp return done err, conn, item + (conn, item, done) -> + conn.query ' + SELECT + tag.* + FROM item_tag AS connection + JOIN tag AS tag + ON tag.id = connection.tagId + WHERE itemId = ?' + , [req.params.itemId] + , (err, resp) -> + item.tags= resp + return done err, conn, item + ], (err, conn, item) -> do conn.end if conn @@ -209,6 +239,9 @@ app.put '/:itemId(\\d+)', access, (req, res, next) -> servers= item.servers or [] delete item.servers + tags= item.tags or [] + delete item.tags + async.waterfall [ (done) -> @@ -258,6 +291,21 @@ app.put '/:itemId(\\d+)', access, (req, res, next) -> , (err, resp) -> return done err, conn + (conn, done) -> + conn.query 'DELETE FROM item_tag WHERE itemId = ?' + , [itemId] + , (err, resp) -> + return done err, conn if err + return done err, conn if not tags.length + + bulk= [] + for tag in tags + bulk.push [itemId, tag.id] + conn.query 'INSERT INTO item_tag (`itemId`, `tagId`) VALUES ?' + , [bulk] + , (err, resp) -> + return done err, conn + (conn, done) -> conn.query 'COMMIT', (err) -> return done err, conn diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index dc153ed..3dc2466 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -142,7 +142,13 @@ getTags= (req, res, next) -> (conn, done) -> conn.query ' - SELECT * FROM tag' + SELECT + tag.*, + connection.serverId + FROM tag AS tag + LEFT JOIN server_tag AS connection + ON connection.tagId = tag.id + GROUP BY tag.id' , (err, rows) -> return done err, conn, rows diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index 1e2946a..cbdd11f 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -94,16 +94,6 @@ app.factory 'Enchantment', ($resource) -> -app.factory 'ServerList', ($resource) -> - $resource '/api/v1/servers/server' - - - -app.factory 'TagList', ($resource) -> - $resource '/api/v1/tags/' - - - ### Модель предмета. ### @@ -124,6 +114,15 @@ app.factory 'Item', ($resource) -> +app.factory 'ServerList', ($resource) -> + $resource '/api/v1/servers/server' + + + +app.factory 'TagList', ($resource) -> + $resource '/api/v1/tags/' + + ### @@ -395,8 +394,20 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, It if srv.id == server.id isThere= false + return isThere + + + # ищем теги подходящие выбранным серверам + $scope.filterTag= (tag) -> + isThere= false + $scope.item.servers.map (server) -> + if tag.serverId == server.id + isThere= true + + $scope.item.tags.map (t) -> + if t.id == tag.id + isThere= false - console.log $scope.servers return isThere @@ -432,6 +443,20 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, It $scope.item.servers.splice i, 1 + $scope.addTag= (tag) -> + newTag= JSON.parse angular.copy tag + $scope.item.tags= [] if not $scope.item.tags + $scope.item.tags.push newTag + + + $scope.removeTag= (tag) -> + remPosition= null + $scope.item.tags.map (t, i) -> + if t.id == tag.id + $scope.item.tags.splice i, 1 + + + # Действия diff --git a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade index 9bd7226..5d65430 100644 --- a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade @@ -52,6 +52,22 @@ block section-body i.icon-minus + fieldset(name='ItemTagForm') + .row + .col-10 + select.input(ng-model='tag') + option(ng-repeat='tag in tags | filter:filterTag:tag', value='{{tag}}') {{tag.name}} + .col-1 + button.btn(ng-click='addTag(tag)',ng-disabled='!tag') + i.icon-plus + + .row(ng-repeat='itemTag in item.tags') + .col-3 {{itemTag.name}} + .col-1 + button.btn(ng-click='removeTag(itemTag)') + i.icon-minus + + fieldset(ng-if='action=="create"') button.btn.btn-primary.btn-block(type='submit', ng-click='create(ItemForm)', ng-disabled='!ItemForm.$valid') span Добавить предмет From d180a2fd434700454608be721dbd49649d59e91c Mon Sep 17 00:00:00 2001 From: freekode Date: Fri, 13 Sep 2013 18:02:49 +0200 Subject: [PATCH 13/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B0=D0=B9=D1=82=D0=B5=D0=BC=D0=B0=D0=BC=20=D1=82?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=82=D0=B5=D0=B3=D0=BE=D0=B2=20=D0=B8=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2=20=D0=B2=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/templates/Manage/project/includes/store/store.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index cbdd11f..61f1871 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -411,6 +411,7 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, It return isThere + $scope.changeMaterial= (material) -> $scope.item.titleRu= JSON.parse(material).titleRu $scope.item.titleEn= JSON.parse(material).titleEn From b81c9ae6d69b962b0299bfd4c1fed151dc9d6aca Mon Sep 17 00:00:00 2001 From: freekode Date: Fri, 13 Sep 2013 18:23:03 +0200 Subject: [PATCH 14/20] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/includes/store/store.coffee | 80 +------------------ .../Manage/project/includes/tags/tags.coffee | 78 +++--------------- .../project/partials/tags/itemtags/index.jade | 27 ------- .../tags/itemtags/itemtag/form/index.jade | 37 --------- .../Manage/project/partials/tags/layout.jade | 3 +- .../partials/tags/servertags/index.jade | 28 ------- .../tags/servertags/servertag/form/index.jade | 33 -------- .../partials/tags/tags/tag/form/index.jade | 2 +- 8 files changed, 13 insertions(+), 275 deletions(-) delete mode 100644 source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade delete mode 100644 source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade delete mode 100644 source/node/views/templates/Manage/project/partials/tags/servertags/index.jade delete mode 100644 source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index 61f1871..6bff7b6 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -125,84 +125,6 @@ app.factory 'TagList', ($resource) -> -### -Модель формы предмета. -### -app.factory 'ItemForm', ($q, Item, Enchantment, Server) -> - - @loadEnchantments= -> - dfd= do $q.defer - Enchantment.query (enchantments) -> - dfd.resolve enchantments - dfd.promise - - @loadServers= -> - dfd= do $q.defer - Server.query (servers) -> - dfd.resolve servers - dfd.promise - - @load= => - dfd= do $q.defer - result= $q.all [ - @loadEnchantments() - @loadServers() - ] - result.then (data) -> - data= - enchantments: data[0] - servers: data[1] - dfd.resolve data - dfd.promise - - @ - - - - - -### - -Фильтры - -### - -### -Фильтр чар в редакторе для предмета. -### -app.filter 'filterExistsServer', -> - (servers, itemServers) -> - filtered= [] - - if !itemServers - return servers - else - servers.map (server) -> - itemServers.map (itemServer) -> - if server.id != itemServer.id - filtered.push server - console.log filtered - console.log itemServers - return filtered - - - -### -app.filter 'filterExistsServer', -> - (enchantments, item) -> - filtered= [] - angular.forEach enchantments, (enchantment) -> - found= false - angular.forEach item.enchantments, (e) -> - found= true if e.id == enchantment.id - - filtered.push enchantment if not found - filtered -### - - - - ### @@ -369,7 +291,7 @@ app.controller 'StoreItemListCtrl', ($scope, $location, Item) -> ### Контроллер формы предмета. ### -app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, ItemForm, Item, Material, Enchantment, ServerList, TagList) -> +app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, Item, Material, Enchantment, ServerList, TagList) -> if $route.current.params.itemId $scope.item= Item.get $route.current.params, -> $scope.materials= Material.query -> diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index bc98ea1..4853c39 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -18,17 +18,6 @@ app= angular.module 'project.tags', ['ngResource','ngRoute'], ($routeProvider) - - $routeProvider.when '/tags/servertag/list', - templateUrl: 'partials/tags/servertags/', controller: 'TagsServerTagListCtrl' - - $routeProvider.when '/tags/servertag/create', - templateUrl: 'partials/tags/servertags/servertag/form/', controller: 'TagsServerTagFormCtrl' - - $routeProvider.when '/tags/servertag/update/:tagId', - templateUrl: 'partials/tags/servertags/servertag/form/', controller: 'TagsServerTagFormCtrl' - - - ### @@ -133,6 +122,16 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.action= 'create' + $scope.filterTag= (tag) -> + isThere= true + $scope.tag.inheritTags.map (t) -> + if t.id == tag.id + isThere= false + + return isThere + + + $scope.addTag= (tag) -> newTag= JSON.parse angular.copy tag $scope.tag.inheritTags= [] if not $scope.tag.inheritTags @@ -160,60 +159,3 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.delete= -> $scope.tag.$delete -> $location.path '/tags/tag/list' - - - - - -### -Контроллер списка тегов. -### -app.controller 'TagsServerTagListCtrl', ($scope, ServerList, TagServer) -> - $scope.servers= ServerList.query -> - $scope.state= 'loaded' - console.log 'Сервера загружены' - - - $scope.changeServer= (serverId) -> - $scope.tags= TagServer.get - serverId: serverId - , -> - $scope.state= 'loaded' - $scope.action= 'update' - - - -### -Контроллер формы тега. -### -app.controller 'TagsServerTagFormCtrl', ($scope, $route, $q, $location, TagItem, TagItemServer) -> - if $route.current.params.tagId - $scope.items= TagItemServer.get $route.current.params, -> - $scope.tag= TagItem.get $route.current.params, -> - $scope.state= 'loaded' - $scope.action= 'update' - else - $scope.tag= new Tag - $scope.state= 'loaded' - $scope.action= 'create' - - - $scope.addItem= (item) -> - newItem= JSON.parse angular.copy item - $scope.tag.items= [] if not $scope.tag.items - $scope.tag.items.push newItem - - - $scope.removeItem= (item) -> - remPosition= null - $scope.tag.items.map (tg, i) -> - if tg.id == item.id - $scope.tag.items.splice i, 1 - - - - $scope.update= (TagForm) -> - news= new TagItemServer angular.copy $scope.tag - news.$update -> - $location.path '/tags/tag/list', (err) -> - console.log 'err', err diff --git a/source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade b/source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade deleted file mode 100644 index 85623a7..0000000 --- a/source/node/views/templates/Manage/project/partials/tags/itemtags/index.jade +++ /dev/null @@ -1,27 +0,0 @@ -extends ../../layout -extends ../layout - -block section-body - input.input(placeholder='Поиск', ng-model='tagSearch') - table.table.players - thead - tr - th # - th.col-flex: .table-col: .table-col-sortable Тег - th Дочерние - th - button.btn.btn-info(ng-click='reload()') - i.icon-refresh - - tbody - tr(ng-repeat='tag in tags | filter:tagSearch') - td {{tag.id}} - td {{tag.titleRuPlural}} - td - td - a(ng-href='#/tags/tag/update/{{tag.id}}') - button.btn.btn-success - i.icon-wrench - .row - .col-12 - a(href='#/tags/tag/create')= 'Создать' diff --git a/source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade deleted file mode 100644 index c31d267..0000000 --- a/source/node/views/templates/Manage/project/partials/tags/itemtags/itemtag/form/index.jade +++ /dev/null @@ -1,37 +0,0 @@ -extends ../../../../layout -extends ../../../layout - - -block section-body - form(name='TagForm') - h3(style='text-align:center') Тег - - fieldset - input.input(placeholder='Name', type='text', required, ng-maxlength='50', ng-model='tag.name') - - - fieldset: .row - .col-6 - input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') - .col-6 - input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') - - - fieldset: .row - .col-6 - input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') - .col-6 - input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') - - - fieldset(ng-if='action=="create"') - button.btn.btn-primary.btn-block(type='submit', ng-click='create(TagForm)', ng-disabled='!TagForm.$valid') - span Создать тег - - fieldset(ng-if='action=="update"'): .row - .col-10 - button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') - span Обновить тег - .col-2 - button.btn.btn-link.btn-block.text-left(ng-click='delete(TagForm)') - span Удалить diff --git a/source/node/views/templates/Manage/project/partials/tags/layout.jade b/source/node/views/templates/Manage/project/partials/tags/layout.jade index c1f5a0f..60e82c4 100644 --- a/source/node/views/templates/Manage/project/partials/tags/layout.jade +++ b/source/node/views/templates/Manage/project/partials/tags/layout.jade @@ -2,5 +2,4 @@ extends ../layout block section-side ul.nav - li: a(href='#/tags/tag/list') Теги (все) - li: a(href='#/tags/servertag/list') Теги (серверов) + li: a(href='#/tags/tag/list') Теги diff --git a/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade b/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade deleted file mode 100644 index 02749a9..0000000 --- a/source/node/views/templates/Manage/project/partials/tags/servertags/index.jade +++ /dev/null @@ -1,28 +0,0 @@ -extends ../../layout -extends ../layout - -block section-body - select.input(required, ng-model='serverId', ng-change='changeServer(serverId)') - option(ng-repeat='server in servers', value='{{server.id}}') {{server.id}} - {{server.title}} ({{server.name}}) - table.table.players - thead - tr - th # - th.col-flex: .table-col: .table-col-sortable Тег - th Дочерние - th - button.btn.btn-info(ng-click='changeServer(serverId)') - i.icon-refresh - - tbody - tr(ng-repeat='tag in tags') - td {{tag.id}} - td {{tag.titleRuPlural}} - td - td - a(ng-href='#/tags/servertag/update/{{serverId}}') - button.btn.btn-success - i.icon-wrench - .row - .col-12 - a(href='#/tags/tag/create')= 'Создать' diff --git a/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade deleted file mode 100644 index 8ec8745..0000000 --- a/source/node/views/templates/Manage/project/partials/tags/servertags/servertag/form/index.jade +++ /dev/null @@ -1,33 +0,0 @@ -extends ../../../../layout -extends ../../../layout - - -block section-body - form(name='TagForm') - h3(style='text-align:center') Тег - - fieldset - p {{tag.name}} - p {{tag.titleRuSingular}} ({{tag.titleRuPlural}}) - //p {{tag.titleEnSingular}} ({{tag.titleEnPlural}}) - - - fieldset - .row - .col-10 - select.input(ng-model='item') - option(ng-repeat='item in items', value='{{item}}') {{item.material}} {{item.titleRu}} - .col-1 - button.btn(ng-click='addItem(item)',ng-disabled='!item') - i.icon-plus - - .row(ng-repeat='tagItem in tag.items') - .col-3 {{tagItem.titleRu}} - .col-1 - button.btn(ng-click='removeItem(tagItem)') - i.icon-minus - - - fieldset(ng-if='action=="update"') - button.btn.btn-primary.btn-block(type='submit',ng-click='update(TagForm)',ng-disabled='!TagForm.$valid') - span Обновить тег diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index e8457ab..dad135a 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -28,7 +28,7 @@ block section-body .row .col-10 select.input(ng-model='inheritTag') - option(ng-repeat='inheritTag in tags', value='{{inheritTag}}') {{inheritTag.name}} + option(ng-repeat='inheritTag in tags | filter:filterTag:inheritTag', value='{{inheritTag}}') {{inheritTag.name}} .col-1 button.btn(ng-click='addTag(inheritTag)',ng-disabled='!inheritTag') i.icon-plus From d2959f0a8a68189b59c3606af6a2a75f863d4de9 Mon Sep 17 00:00:00 2001 From: freekode Date: Fri, 13 Sep 2013 18:30:23 +0200 Subject: [PATCH 15/20] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=B8,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Tags/Tag.coffee | 174 ------------------ .../project/includes/servers/servers.coffee | 9 + .../partials/players/payments/index.jade | 2 +- .../servers/servers/server/form/index.jade | 2 +- 4 files changed, 11 insertions(+), 176 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index 3dc2466..a05bf8f 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -25,30 +25,6 @@ app.on 'mount', (parent) -> , (req, res) -> res.json 200 - app.get '/server/:serverId(\\d+)' - , access - , getServerTags - , (req, res) -> - res.json 200 - - app.get '/items/:tagId(\\d+)' - , access - , getTagItems - , (req, res) -> - res.json 200 - - app.get '/srv/:tagId(\\d+)' - , access - , getServerItems - , (req, res) -> - res.json 200 - - app.put '/srv/:tagId(\\d+)' - , access - , changeTagConnection - , (req, res) -> - res.json 200 - app.get '/:tagId(\\d+)' , access , getTag @@ -179,156 +155,6 @@ getTags= (req, res, next) -> -getServerTags= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn - - (conn, done) -> - conn.query ' - SELECT * FROM tag AS tag - JOIN server_tag AS server - ON server.tagId = tag.id - WHERE server.serverId = ?' - , [req.params.serverId] - , (err, rows) -> - return done err, conn, rows - - ], (err, conn, rows) -> - do conn.end if conn - - return next err if err - return res.json 200, rows - - -### -Получить айтемы определенного тега -### -getTagItems= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn - - (conn, done) -> - conn.query ' - SELECT - tag.id, - tag.name, - tag.titleRuSingular, - tag.titleRuPlural, - tag.titleEnSingular, - tag.titleEnPlural - FROM tag AS tag - WHERE tag.id = ?' - , [req.params.tagId] - , (err, resp) -> - tag= do resp.shift if not err - - return done err, conn, tag - - (conn, tag, done) -> - conn.query ' - SELECT - * - FROM item_tag AS connection - LEFT JOIN item AS item - ON item.id = connection.itemId - WHERE connection.tagId = ?' - , [req.params.tagId] - , (err, rows) -> - tag.items= rows - return done err, conn, tag - - ], (err, conn, tag) -> - do conn.end if conn - - return next err if err - return res.json 200, tag - - - -### -Получить айтемы через жопу -### -getServerItems= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn - - (conn, done) -> - conn.query ' - SELECT - item.* - FROM server_tag AS serverTag - JOIN server_item AS serverItem - ON serverItem.serverId = serverTag.serverId - JOIN item AS item - ON item.id = serverItem.itemId - WHERE serverTag.tagId = ?' - , [req.params.tagId] - , (err, rows) -> - return done err, conn, rows - - ], (err, conn, rows) -> - do conn.end if conn - - return next err if err - return res.json 200, rows - - - -changeTagConnection= (req, res, next) -> - tagId= req.params.tagId - delete req.body.id - - items= req.body.items - - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn if err - conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> - return done err, conn if err - conn.query 'START TRANSACTION', (err) -> - return done err, conn - - (conn, done) -> - conn.query 'DELETE FROM item_tag WHERE tagId = ?' - , [tagId] - , (err, resp) -> - return done err, conn if err - return done err, conn if not items.length - - bulk= [] - for item in items - bulk.push [tagId, item.id] - conn.query ' - INSERT INTO item_tag (`tagId`, `itemId`) VALUES ? - ' - , [bulk] - , (err, resp) -> - return done err, conn - - (conn, done) -> - conn.query 'COMMIT', (err) -> - return done err, conn - - ], (err, conn) -> - do conn.end if conn - - return next err if err - return res.json 200 - - - - getTag= (req, res, next) -> async.waterfall [ diff --git a/source/node/views/templates/Manage/project/includes/servers/servers.coffee b/source/node/views/templates/Manage/project/includes/servers/servers.coffee index 2ec3a3c..c033941 100644 --- a/source/node/views/templates/Manage/project/includes/servers/servers.coffee +++ b/source/node/views/templates/Manage/project/includes/servers/servers.coffee @@ -127,6 +127,15 @@ app.controller 'ServersServerFormCtrl', ($scope, $route, $location, Server, TagL $scope.action= 'create' + $scope.filterTag= (tag) -> + isThere= true + $scope.server.tags.map (t) -> + if t.id == tag.id + isThere= false + + return isThere + + $scope.addTag= (tag) -> newTag= JSON.parse angular.copy tag $scope.server.tags= [] if not $scope.server.tags diff --git a/source/node/views/templates/Manage/project/partials/players/payments/index.jade b/source/node/views/templates/Manage/project/partials/players/payments/index.jade index 516e58a..a38ff97 100644 --- a/source/node/views/templates/Manage/project/partials/players/payments/index.jade +++ b/source/node/views/templates/Manage/project/partials/players/payments/index.jade @@ -23,5 +23,5 @@ block section-body td {{payment.createdAt}} td {{payment.amount}} td - select.input(required, ng-model='payment.status', ng-change='change(payment)') + select.input(required, ng-model='payment.status', ng-change='change(payment)', style='width:100px') option(ng-repeat='status in paymentStatuses', value='{{status}}', ng-selected='payment.status == status') {{status}} diff --git a/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade b/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade index b42b4d7..3db077a 100644 --- a/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade @@ -16,7 +16,7 @@ block section-body .row .col-10 select.input(ng-model='tag') - option(ng-repeat='tag in tags', value='{{tag}}') {{tag.name}} + option(ng-repeat='tag in tags | filter:filterTag:tag', value='{{tag}}') {{tag.name}} .col-1 button.btn(ng-click='addTag(tag)',ng-disabled='!tag') i.icon-plus From ef5a97be214794a6702f6bac0f6354b966939245 Mon Sep 17 00:00:00 2001 From: freekode Date: Sat, 14 Sep 2013 00:40:59 +0200 Subject: [PATCH 16/20] =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D1=80=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D0=BA=D0=B8=D0=B5=20=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D0=B4?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D1=80=D0=BD=D0=B8=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manage/Api/V1/Project/Tags/ItemTag.coffee | 189 ------------------ .../Manage/Api/V1/Project/Tags/Tag.coffee | 29 +-- .../Manage/project/includes/tags/tags.coffee | 2 +- .../project/partials/servers/index.jade | 2 +- .../project/partials/tags/tags/index.jade | 6 +- .../partials/tags/tags/tag/form/index.jade | 8 +- 6 files changed, 25 insertions(+), 211 deletions(-) delete mode 100644 source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee deleted file mode 100644 index 0e46756..0000000 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/ItemTag.coffee +++ /dev/null @@ -1,189 +0,0 @@ -express= require 'express' -async= require 'async' - - - - -### -Методы API для платежей -### -app= module.exports= do express -app.on 'mount', (parent) -> - cfg= parent.get 'config' - - - - app.post '/' - , access - , createTag - , (req, res) -> - res.json 200 - - app.get '/' - , access - , getTags - , (req, res) -> - res.json 200 - - app.get '/:tagId(\\d+)' - , access - , getTag - , (req, res) -> - res.json 200 - - app.put '/:tagId(\\d+)' - , access - , changeTag - , (req, res) -> - res.json 200 - - - app.delete '/:tagId(\\d+)' - , access - , deleteTag - , (req, res) -> - res.json 200 - - - - - -access= (req, res, next) -> - return next 401 if do req.isUnauthenticated - return do next - - - -createTag= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn if err - conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> - return done err, conn if err - conn.query 'START TRANSACTION', (err) -> - return done err, conn - - (conn, done) -> - conn.query 'INSERT INTO tag SET ?' - , [req.body] - , (err, resp) -> - tag= req.body - tag.id= resp.insertId - - return done err, conn, tag - - (conn, tag, done) -> - conn.query 'COMMIT', (err) -> - return done err, conn, tag - - ], (err, conn, tag) -> - do conn.end if conn - - return next err if err - return res.json 200, tag - - - -getTags= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn - - (conn, done) -> - conn.query ' - SELECT * FROM tag' - , (err, rows) -> - return done err, conn, rows - - ], (err, conn, rows) -> - do conn.end if conn - - return next err if err - return res.json 200, rows - - - -getTag= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn - - (conn, done) -> - conn.query ' - SELECT * FROM tag WHERE id = ?' - , [req.params.tagId] - , (err, resp) -> - tag= do resp.shift if not err - return done err, conn, tag - - ], (err, conn, tag) -> - do conn.end if conn - - return next err if err - return res.json 200, tag - - - -changeTag= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn if err - conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> - return done err, conn if err - conn.query 'START TRANSACTION', (err) -> - return done err, conn - - (conn, done) -> - conn.query 'UPDATE tag SET ? WHERE id = ?' - , [req.body, req.params.tagId] - , (err, resp) -> - tag= req.body - tag.id= req.params.tagId - return done err, conn, tag - - (conn, tag, done) -> - conn.query 'COMMIT', (err) -> - return done err, conn, tag - - ], (err, conn, tag) -> - do conn.end if conn - - return next err if err - return res.json 200, tag - - - -deleteTag= (req, res, next) -> - async.waterfall [ - - (done) -> - req.db.getConnection (err, conn) -> - return done err, conn if err - conn.query 'SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"', (err) -> - return done err, conn if err - conn.query 'START TRANSACTION', (err) -> - return done err, conn - - (conn, done) -> - conn.query 'DELETE FROM tag WHERE id = ?' - , [req.params.tagId] - , (err, resp) -> - return done err, conn - - (conn, done) -> - conn.query 'COMMIT', (err) -> - return done err, conn - - ], (err, conn) -> - do conn.end if conn - - return next err if err - return res.json 200 diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index a05bf8f..49f9372 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -86,8 +86,8 @@ createTag= (req, res, next) -> return done null, conn bulk= [] - for tagInh in req.body.inheritTags - bulk.push [tag.id, tagInh.id] + for tagInherit in req.body.inheritTags + bulk.push [tag.id, tagInherit.id] conn.query " INSERT INTO tag_tags (`tagId`, `childId`) @@ -134,14 +134,14 @@ getTags= (req, res, next) -> * FROM tag_tags AS connection JOIN tag AS tag - ON connection.childId = tag.id' + ON connection.tagId = tag.id' , (err, rows) -> tags.map (tag, i) -> - tags[i].inheritTags= [] + tags[i].parentTags= [] rows.map (r) -> - if tag.id == r.tagId - tags[i].inheritTags.push + if tag.id == r.childId + tags[i].parentTags.push id: r.id name: r.name @@ -176,17 +176,18 @@ getTag= (req, res, next) -> * FROM tag_tags AS connection JOIN tag AS tag - ON connection.childId = tag.id - WHERE connection.tagId = ?' + ON connection.tagId = tag.id + WHERE connection.childId = ?' , [req.params.tagId] , (err, rows) -> - tag.inheritTags= [] + tag.parentTags= rows + - rows.map (r) -> - if tag.id == r.tagId - tag.inheritTags.push - id: r.id - name: r.name + #rows.map (r) -> + # if tag.id == r.tagId + # tag.parentTags.push + # id: r.id + # name: r.name return done err, conn, tag diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index 4853c39..0295f6f 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -124,7 +124,7 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.filterTag= (tag) -> isThere= true - $scope.tag.inheritTags.map (t) -> + $scope.tag.parentTags.map (t) -> if t.id == tag.id isThere= false diff --git a/source/node/views/templates/Manage/project/partials/servers/index.jade b/source/node/views/templates/Manage/project/partials/servers/index.jade index fcc09dd..ee88cec 100644 --- a/source/node/views/templates/Manage/project/partials/servers/index.jade +++ b/source/node/views/templates/Manage/project/partials/servers/index.jade @@ -3,7 +3,7 @@ extends ./layout block section-body .row .col-12 - script(src='/js/libs/chart.min.js') + script(src='/scripts/libs/chart.min.js') script. data= { labels: ["January","February","March","April","May","June","July"], diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade index 96b64cb..2d54eec 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade @@ -8,7 +8,8 @@ block section-body tr th # th.col-flex: .table-col: .table-col-sortable Тег - th Дочерние + th Name + th Родительские th button.btn.btn-info(ng-click='reload()') i.icon-refresh @@ -17,8 +18,9 @@ block section-body tr(ng-repeat='tag in tags | filter:tagSearch') td {{tag.id}} td {{tag.titleRuPlural}} + td {{tag.name}} td - span(ng-repeat='inherit in tag.inheritTags')= '{{inherit.name}} ' + span(ng-repeat='parent in tag.parentTags')= '{{parent.name}} ' td a(ng-href='#/tags/tag/update/{{tag.id}}') button.btn.btn-success diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index dad135a..ab60ae7 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -27,13 +27,13 @@ block section-body fieldset .row .col-10 - select.input(ng-model='inheritTag') - option(ng-repeat='inheritTag in tags | filter:filterTag:inheritTag', value='{{inheritTag}}') {{inheritTag.name}} + select.input(ng-model='parentTag') + option(ng-repeat='parentTag in tags | filter:filterTag: parentTag', value='{{parentTag}}') {{parentTag.name}} .col-1 - button.btn(ng-click='addTag(inheritTag)',ng-disabled='!inheritTag') + button.btn(ng-click='addTag(parentTag)',ng-disabled='!parentTag') i.icon-plus - .row(ng-repeat='tagTag in tag.inheritTags') + .row(ng-repeat='tagTag in tag.parentTags') .col-3 {{tagTag.name}} .col-1 button.btn(ng-click='removeTag(tagTag)') From 79975f6c4f2d8000dbf272aa75d96299be0e9701 Mon Sep 17 00:00:00 2001 From: freekode Date: Sun, 15 Sep 2013 22:57:47 +0200 Subject: [PATCH 17/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8E,=20sql=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/V1/Project/Players/Player.coffee | 15 +++++++ .../Manage/Api/V1/Project/Servers/Item.coffee | 2 +- .../Manage/Api/V1/Project/Tags/Tag.coffee | 41 +++++++++++-------- .../project/includes/servers/servers.coffee | 7 ++-- .../project/includes/store/store.coffee | 23 ++++++----- .../Manage/project/includes/tags/tags.coffee | 20 +++++---- .../players/players/player/form/index.jade | 2 +- 7 files changed, 70 insertions(+), 40 deletions(-) diff --git a/source/node/handlers/Manage/Api/V1/Project/Players/Player.coffee b/source/node/handlers/Manage/Api/V1/Project/Players/Player.coffee index 094989b..22ff04e 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Players/Player.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Players/Player.coffee @@ -29,6 +29,19 @@ app.post '/', access, (req, res, next) -> (conn, done) -> conn.query 'INSERT INTO player SET ?' , [req.body] + , (err, resp) -> + playerId= resp.insertId + return done err, conn, playerId + + (conn, playerId, done) -> + conn.query ' + INSERT + INTO player_balance + SET + playerId = ?, + amount = 0.00, + updatedAt = NOW()' + , [playerId] , (err, resp) -> return done err, conn @@ -101,6 +114,8 @@ app.get '/:playerId(\\d+)', access, (req, res, next) -> WHERE id = ?' , [req.params.playerId] , (err, resp) -> + console.log 'err', err + console.log 'player', player player= do resp.shift if not err return done err, conn, player diff --git a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee index efee597..3ba7070 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Servers/Item.coffee @@ -71,7 +71,7 @@ app.post '/', access, (req, res, next) -> " , [bulk] , (err, resp) -> - return done err, conn + return done err, conn, id (conn, id, done) -> # а есть ли теги diff --git a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee index 49f9372..36d89c0 100644 --- a/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee +++ b/source/node/handlers/Manage/Api/V1/Project/Tags/Tag.coffee @@ -81,18 +81,18 @@ createTag= (req, res, next) -> return done err, conn, tag (conn, tag, done) -> - # а есть ли сервера - if not req.body.inheritTags - return done null, conn + # а есть ли родительские теги + if not req.body.parentTags + return done null, conn, tag bulk= [] - for tagInherit in req.body.inheritTags - bulk.push [tag.id, tagInherit.id] - conn.query " + for parent in req.body.parentTags + bulk.push [parent.id, tag.id] + + conn.query ' INSERT INTO tag_tags (`tagId`, `childId`) - VALUES ? - " + VALUES ?' , [bulk] , (err, resp) -> return done err, conn, tag @@ -101,6 +101,7 @@ createTag= (req, res, next) -> conn.query 'COMMIT', (err) -> return done err, conn, tag + ], (err, conn, tag) -> do conn.end if conn @@ -205,8 +206,8 @@ changeTag= (req, res, next) -> tag= req.body - inheritTags= tag.inheritTags or [] - delete tag.inheritTags + parentTags= tag.parentTags or [] + delete tag.parentTags async.waterfall [ @@ -219,23 +220,31 @@ changeTag= (req, res, next) -> return done err, conn (conn, done) -> + data= + name: tag.name + titleRuSingular: tag.titleRuSingular + titleRuPlural: tag.titleRuPlural + titleEnSingular: tag.titleEnSingular + titleEnPlural: tag.titleEnPlural + conn.query 'UPDATE tag SET ? WHERE id = ?' - , [tag, req.params.tagId] + , [data, req.params.tagId] , (err, resp) -> tag= req.body tag.id= req.params.tagId return done err, conn, tag (conn, tag, done) -> - conn.query 'DELETE FROM tag_tags WHERE tagId = ?' + conn.query 'DELETE FROM tag_tags WHERE childId = ?' , [tagId] , (err, resp) -> - return done err, conn if err - return done err, conn if not inheritTags.length + return done err, conn, tag if err + return done err, conn, tag if not parentTags.length bulk= [] - for inherit in inheritTags - bulk.push [tagId, inherit.id] + for parent in parentTags + bulk.push [parent.id, tagId] + conn.query 'INSERT INTO tag_tags (`tagId`, `childId`) VALUES ?' , [bulk] , (err, resp) -> diff --git a/source/node/views/templates/Manage/project/includes/servers/servers.coffee b/source/node/views/templates/Manage/project/includes/servers/servers.coffee index c033941..a159dda 100644 --- a/source/node/views/templates/Manage/project/includes/servers/servers.coffee +++ b/source/node/views/templates/Manage/project/includes/servers/servers.coffee @@ -129,9 +129,10 @@ app.controller 'ServersServerFormCtrl', ($scope, $route, $location, Server, TagL $scope.filterTag= (tag) -> isThere= true - $scope.server.tags.map (t) -> - if t.id == tag.id - isThere= false + if $scope.server.tags + $scope.server.tags.map (t) -> + if t.id == tag.id + isThere= false return isThere diff --git a/source/node/views/templates/Manage/project/includes/store/store.coffee b/source/node/views/templates/Manage/project/includes/store/store.coffee index 6bff7b6..645982f 100644 --- a/source/node/views/templates/Manage/project/includes/store/store.coffee +++ b/source/node/views/templates/Manage/project/includes/store/store.coffee @@ -312,9 +312,10 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, Item, Materi $scope.filterServer= (server) -> isThere= true - $scope.item.servers.map (srv) -> - if srv.id == server.id - isThere= false + if $scope.item.servers + $scope.item.servers.map (srv) -> + if srv.id == server.id + isThere= false return isThere @@ -322,13 +323,15 @@ app.controller 'StoreItemFormCtrl', ($scope, $route, $q, $location, Item, Materi # ищем теги подходящие выбранным серверам $scope.filterTag= (tag) -> isThere= false - $scope.item.servers.map (server) -> - if tag.serverId == server.id - isThere= true - - $scope.item.tags.map (t) -> - if t.id == tag.id - isThere= false + if $scope.item.servers + $scope.item.servers.map (server) -> + if tag.serverId == server.id + isThere= true + + if $scope.item.tags + $scope.item.tags.map (t) -> + if t.id == tag.id + isThere= false return isThere diff --git a/source/node/views/templates/Manage/project/includes/tags/tags.coffee b/source/node/views/templates/Manage/project/includes/tags/tags.coffee index 0295f6f..1d9daee 100644 --- a/source/node/views/templates/Manage/project/includes/tags/tags.coffee +++ b/source/node/views/templates/Manage/project/includes/tags/tags.coffee @@ -118,15 +118,17 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.action= 'update' else $scope.tag= new Tag - $scope.state= 'loaded' - $scope.action= 'create' + $scope.tags= Tag.query -> + $scope.state= 'loaded' + $scope.action= 'create' $scope.filterTag= (tag) -> isThere= true - $scope.tag.parentTags.map (t) -> - if t.id == tag.id - isThere= false + if $scope.tag.parentTags + $scope.tag.parentTags.map (t) -> + if t.id == tag.id + isThere= false return isThere @@ -134,15 +136,15 @@ app.controller 'TagsTagFormCtrl', ($scope, $route, $q, $location, Tag) -> $scope.addTag= (tag) -> newTag= JSON.parse angular.copy tag - $scope.tag.inheritTags= [] if not $scope.tag.inheritTags - $scope.tag.inheritTags.push newTag + $scope.tag.parentTags= [] if not $scope.tag.parentTags + $scope.tag.parentTags.push newTag $scope.removeTag= (tag) -> remPosition= null - $scope.tag.inheritTags.map (tg, i) -> + $scope.tag.parentTags.map (tg, i) -> if tg.id == tag.id - $scope.tag.inheritTags.splice i, 1 + $scope.tag.parentTags.splice i, 1 # Действия diff --git a/source/node/views/templates/Manage/project/partials/players/players/player/form/index.jade b/source/node/views/templates/Manage/project/partials/players/players/player/form/index.jade index 470619c..b6f4245 100644 --- a/source/node/views/templates/Manage/project/partials/players/players/player/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/players/players/player/form/index.jade @@ -12,7 +12,7 @@ block section-body input.input(placeholder='Пароль sha1', type='text', required, ng-maxlength='40', ng-model='player.pass') fieldset - input.input.input-auto(placeholder='Email', type='text', required, ng-maxlength='50', ng-pattern='/^[a-zA-Z\\.\\-\\_]+@[a-zA-Z]+\\.[a-zA-Z]+$/', ng-model='player.email') + input.input.input-auto(placeholder='Email', type='text', required, ng-maxlength='50', ng-pattern='/^[a-zA-Z0-9\\.\\-\\_]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+$/', ng-model='player.email') input.input.input-auto(placeholder='Phone', type='text', ng-pattern='/^\\+[0-9]{0,14}$/', ng-model='player.phone') From eac1da109de79f90e10f49d42471dffd8051b2ff Mon Sep 17 00:00:00 2001 From: Michael F Date: Mon, 16 Sep 2013 16:52:45 +0300 Subject: [PATCH 18/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=B0=D0=BC=D0=BF=20=D1=82=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D1=86=20=D1=82=D0=B5=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/node/db/sql/tables.sql | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/source/node/db/sql/tables.sql b/source/node/db/sql/tables.sql index a130a45..79d1f66 100644 --- a/source/node/db/sql/tables.sql +++ b/source/node/db/sql/tables.sql @@ -261,3 +261,52 @@ CREATE TABLE IF NOT EXISTS `server_item` ( CONSTRAINT `server_id_item` FOREIGN KEY (`serverId`) REFERENCES `server` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `server_item_id_item` FOREIGN KEY (`itemId`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `tag` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(45) NOT NULL, + `titleRuPlural` varchar(255) DEFAULT NULL, + `titleRuSingular` varchar(255) DEFAULT NULL, + `titleEnPlural` varchar(45) DEFAULT NULL, + `titleEnSingular` varchar(255) DEFAULT NULL, + `descRu` mediumtext, + `descEn` mediumtext, + `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `name_UNIQUE` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='тег'; + +CREATE TABLE `tag_tags` ( + `childId` int(11) NOT NULL, + `tagId` int(11) NOT NULL, + `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`childId`,`tagId`), + KEY `f_tag_tags_child_idx` (`childId`), + KEY `f_tag_tags_tag_idx` (`tagId`), + CONSTRAINT `f_tag_tags_child` FOREIGN KEY (`childId`) REFERENCES `tag` (`id`) ON DELETE CASCADE, + CONSTRAINT `f_tag_tags_tag` FOREIGN KEY (`tagId`) REFERENCES `tag` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='теги тега'; + +CREATE TABLE `server_tag` ( + `serverId` int(11) NOT NULL, + `tagId` int(11) NOT NULL, + `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`serverId`,`tagId`), + KEY `f_server_tag_server_idx` (`serverId`), + KEY `f_server_tag_tag_idx` (`tagId`), + CONSTRAINT `f_server_tag_server` FOREIGN KEY (`serverId`) REFERENCES `server` (`id`) ON DELETE CASCADE, + CONSTRAINT `f_server_tag_tag` FOREIGN KEY (`tagId`) REFERENCES `tag` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='теги сервера'; + +CREATE TABLE `item_tag` ( + `itemId` int(11) NOT NULL, + `tagId` int(11) NOT NULL, + `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`itemId`,`tagId`), + KEY `f_item_tag_item_idx` (`itemId`), + KEY `f_item_tag_tag_idx` (`tagId`), + CONSTRAINT `f_item_tag_item` FOREIGN KEY (`itemId`) REFERENCES `item` (`id`) ON DELETE CASCADE, + CONSTRAINT `f_item_tag_tag` FOREIGN KEY (`tagId`) REFERENCES `tag` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='теги предмета'; From ed20c9f4b4513ef434b4384077f23698551ca7a0 Mon Sep 17 00:00:00 2001 From: freekode Date: Mon, 16 Sep 2013 19:34:03 +0200 Subject: [PATCH 19/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=84=D1=8B=20=D0=B2=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84?= =?UTF-8?q?=D0=B5=D0=B9=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/Manage/project/partials/tags/tags/index.jade | 2 +- .../Manage/project/partials/tags/tags/tag/form/index.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade index 2d54eec..c35ef65 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade @@ -17,7 +17,7 @@ block section-body tbody tr(ng-repeat='tag in tags | filter:tagSearch') td {{tag.id}} - td {{tag.titleRuPlural}} + td {{tag.titleRuPlural}} ({{tag.name}}) td {{tag.name}} td span(ng-repeat='parent in tag.parentTags')= '{{parent.name}} ' diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index ab60ae7..d98aa25 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -28,7 +28,7 @@ block section-body .row .col-10 select.input(ng-model='parentTag') - option(ng-repeat='parentTag in tags | filter:filterTag: parentTag', value='{{parentTag}}') {{parentTag.name}} + option(ng-repeat='parentTag in tags | filter:filterTag: parentTag', value='{{parentTag}}') {{parentTag.titleRuSingular}} ({{parentTag.name}}) .col-1 button.btn(ng-click='addTag(parentTag)',ng-disabled='!parentTag') i.icon-plus From be1244a0f45d1ee86452b20da348698b94d4e1c8 Mon Sep 17 00:00:00 2001 From: freekode Date: Mon, 16 Sep 2013 20:20:23 +0200 Subject: [PATCH 20/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9?= =?UTF-8?q?=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gruntfile.coffee | 8 ++++++++ package.json | 8 ++++++-- .../partials/servers/servers/server/form/index.jade | 2 +- .../project/partials/store/items/item/form/index.jade | 4 ++-- .../Manage/project/partials/tags/tags/index.jade | 4 ++-- .../project/partials/tags/tags/tag/form/index.jade | 10 +++++----- 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 305042b..ba2005d 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -74,6 +74,13 @@ module.exports= (grunt) -> dest: '<%= pkg.config.build.app.node %>/db/sql' }] + watch: + scripts: + files: '<%= pkg.config.build.src.node %>/views/assets/**/*' + tasks: ['jade', 'less', 'copy:views'] + options: + event: ['added', 'deleted', 'changed'] + #coffeelint: # app: # options: @@ -106,6 +113,7 @@ module.exports= (grunt) -> grunt.loadNpmTasks 'grunt-contrib-jade' grunt.loadNpmTasks 'grunt-contrib-less' grunt.loadNpmTasks 'grunt-yaml' + grunt.loadNpmTasks 'grunt-contrib-watch' #grunt.loadNpmTasks 'grunt-coffeelint' #grunt.loadNpmTasks 'grunt-docco' diff --git a/package.json b/package.json index c347e04..271b4f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "name": "apiserver.builder", - "repository": { "type": "git", "url": "https://github.com/okdas/apiserver.git" }, + "repository": { + "type": "git", + "url": "https://github.com/okdas/apiserver.git" + }, "private": true, "config": { "build": { @@ -28,7 +31,8 @@ "grunt-contrib-less": "0.6.4", "grunt-yaml": "0.2.1", "grunt-cli": "0.1.9", - "coffee-script": "1.6.3" + "coffee-script": "1.6.3", + "grunt-contrib-watch": "0.5.3" }, "engines": { "node": "0.10.17" diff --git a/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade b/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade index 3db077a..19c0126 100644 --- a/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/servers/servers/server/form/index.jade @@ -16,7 +16,7 @@ block section-body .row .col-10 select.input(ng-model='tag') - option(ng-repeat='tag in tags | filter:filterTag:tag', value='{{tag}}') {{tag.name}} + option(ng-repeat='tag in tags | filter:filterTag:tag', value='{{tag}}') {{tag.name}} ({{tag.titleRuSingular}}) .col-1 button.btn(ng-click='addTag(tag)',ng-disabled='!tag') i.icon-plus diff --git a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade index 5d65430..fad0901 100644 --- a/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/store/items/item/form/index.jade @@ -56,13 +56,13 @@ block section-body .row .col-10 select.input(ng-model='tag') - option(ng-repeat='tag in tags | filter:filterTag:tag', value='{{tag}}') {{tag.name}} + option(ng-repeat='tag in tags | filter:filterTag:tag', value='{{tag}}') {{tag.name}} ({{tag.titleRuSingular}}) .col-1 button.btn(ng-click='addTag(tag)',ng-disabled='!tag') i.icon-plus .row(ng-repeat='itemTag in item.tags') - .col-3 {{itemTag.name}} + .col-3 {{itemTag.name}} ({{itemTag.titleRuSingular}}) .col-1 button.btn(ng-click='removeTag(itemTag)') i.icon-minus diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade index c35ef65..90be18a 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/index.jade @@ -8,7 +8,7 @@ block section-body tr th # th.col-flex: .table-col: .table-col-sortable Тег - th Name + th Название th Родительские th button.btn.btn-info(ng-click='reload()') @@ -17,8 +17,8 @@ block section-body tbody tr(ng-repeat='tag in tags | filter:tagSearch') td {{tag.id}} - td {{tag.titleRuPlural}} ({{tag.name}}) td {{tag.name}} + td {{tag.titleRuPlural}} td span(ng-repeat='parent in tag.parentTags')= '{{parent.name}} ' td diff --git a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade index d98aa25..032b17f 100644 --- a/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade +++ b/source/node/views/templates/Manage/project/partials/tags/tags/tag/form/index.jade @@ -12,23 +12,23 @@ block section-body fieldset: .row .col-6 - input.input(placeholder='В единственном числе', type='text', required, ng-maxlength='50', ng-model='tag.titleRuSingular') + input.input(placeholder='В единственном числе', type='text', ng-maxlength='50', ng-model='tag.titleRuSingular') .col-6 - input.input(placeholder='Во множественном', type='text', required, ng-maxlength='50', ng-model='tag.titleRuPlural') + input.input(placeholder='Во множественном', type='text', ng-maxlength='50', ng-model='tag.titleRuPlural') fieldset: .row .col-6 - input.input(placeholder='Singular', type='text', required, ng-maxlength='50', ng-model='tag.titleEnSingular') + input.input(placeholder='Singular', type='text', ng-maxlength='50', ng-model='tag.titleEnSingular') .col-6 - input.input(placeholder='Plural', type='text', required, ng-maxlength='50', ng-model='tag.titleEnPlural') + input.input(placeholder='Plural', type='text', ng-maxlength='50', ng-model='tag.titleEnPlural') fieldset .row .col-10 select.input(ng-model='parentTag') - option(ng-repeat='parentTag in tags | filter:filterTag: parentTag', value='{{parentTag}}') {{parentTag.titleRuSingular}} ({{parentTag.name}}) + option(ng-repeat='parentTag in tags | filter:filterTag: parentTag', value='{{parentTag}}') {{parentTag.name}} ({{parentTag.titleRuSingular}}) .col-1 button.btn(ng-click='addTag(parentTag)',ng-disabled='!parentTag') i.icon-plus