Import framework started.

pull/2219/head
Aaron Ogle 10 years ago
parent 40181db27c
commit 769f4fa42c
  1. 1
      .meteor/packages
  2. 1
      .meteor/versions
  3. 6
      client/routes/adminRouter.coffee
  4. 6
      client/views/admin/adminFlex.html
  5. 18
      client/views/admin/adminImport.coffee
  6. 34
      client/views/admin/adminImport.html
  7. 5
      packages/rocketchat-authorization/server/startup.coffee
  8. 19
      packages/rocketchat-importer-test/main.coffee
  9. 22
      packages/rocketchat-importer-test/package.js
  10. 48
      packages/rocketchat-lib/lib/importTool.coffee
  11. 1
      packages/rocketchat-lib/package.js

@ -46,6 +46,7 @@ rocketchat:webrtc
#rocketchat:livechat
#rocketchat:hubot
#rocketchat:irc
rocketchat:importer-test
konecty:change-case
konecty:delayed-task

@ -110,6 +110,7 @@ rocketchat:favico@0.0.1
rocketchat:file@0.0.1
rocketchat:gitlab@0.0.1
rocketchat:highlight@0.0.1
rocketchat:importer-test@0.0.1
rocketchat:ldap@0.0.1
rocketchat:lib@0.0.1
rocketchat:logger@0.0.1

@ -24,6 +24,12 @@ FlowRouter.route '/admin/statistics',
action: ->
BlazeLayout.render 'main', {center: 'adminStatistics'}
FlowRouter.route '/admin/import',
name: 'admin-import'
triggersEnter: [tabReset]
triggersExit: [tabReset]
action: ->
BlazeLayout.render 'main', {center: 'adminImport'}
FlowRouter.route '/admin/:group?',
name: 'admin'

@ -13,6 +13,12 @@
</li>
{{/if}}
{{#if hasPermission 'run-import'}}
<li>
<a href="{{pathFor 'admin-import'}}" class="admin-link">Import</a>
</li>
{{/if}}
{{#if hasPermission 'view-room-administration'}}
<li>
<a href="{{pathFor 'admin-rooms'}}" class="admin-link">{{_ "Rooms"}}</a>

@ -0,0 +1,18 @@
Template.adminImport.helpers
isAdmin: ->
return RocketChat.authz.hasRole(Meteor.userId(), 'admin')
isImporters: ->
return Object.keys(RocketChat.importTool.importers).length > 0
importers: ->
importers = []
_.each RocketChat.importTool.importers, (importer, key) ->
importer.key = key
importers.push importer
console.log importers
return importers
Template.adminImport.events
'click .start-import': (event) ->
importer = @
console.log importer

@ -0,0 +1,34 @@
<template name="adminImport">
<section class="page-container page-home page-static page-settings">
<head class="fixed-title">
{{> burger}}
<h2>
<span class="room-title">Import</span>
</h2>
</head>
<div class="content">
{{#unless isAdmin}}
<p>You are not authorized to view this page.</p>
{{else}}
{{#if isImporters}}
<div class="rocket-form">
<fieldset>
{{#each importers}}
<div class="section">
<h1>{{name}}</h1>
<div class="section-content">
<div>{{description}}</div>
<button class="button start-import">Start</button>
</div>
</div>
{{/each}}
</fieldset>
</div>
{{else}}
No Importers Available
{{/if}}
{{/unless}}
</div>
</section>
</template>

@ -9,6 +9,9 @@ Meteor.startup ->
{ _id: 'view-statistics',
roles : ['admin', 'temp-role']}
{ _id: 'run-import',
roles : ['admin']}
{ _id: 'view-privileged-setting',
roles : ['admin']}
@ -83,5 +86,3 @@ Meteor.startup ->
unless role in roles
Roles.createRole role
roles.push(role)

@ -0,0 +1,19 @@
###
# Invite is a named function that will replace /invite commands
# @param {Object} message - The message object
###
if Meteor.isClient
Test = undefined
else
class Test
constructor: () ->
console.log 'Importer Test initialized'
prepare: ->
console.log 'test'
doImport: (data) ->
console.log data
RocketChat.importTool.add 'test', Test,
name: '[Platform X] Import'
fileType: 'application/zip'
description: 'Imports [Platform X] data into Rocket.Chat'

@ -0,0 +1,22 @@
Package.describe({
name: 'rocketchat:importer-test',
version: '0.0.1',
summary: 'Importer for test',
git: ''
});
Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
'coffeescript',
'check',
'rocketchat:lib@0.0.1'
]);
api.addFiles('main.coffee');
});
Package.onTest(function(api) {
});

@ -0,0 +1,48 @@
RocketChat.importTool =
importers: {}
RocketChat.importTool.add = (name, importer, options) ->
if not RocketChat.importTool.importers[name]?
RocketChat.importTool.importers[name] =
name: options?.name
importer: importer
fileType: options?.fileType
description: options?.description
return
RocketChat.importTool.setup = (name) ->
if RocketChat.importTool.importers[name]?.importer?
importer = RocketChat.importTool.importers[name]?.importer()
RocketChat.importTool.importers[name].importerInstance = importer
# Takes name and a file stream
RocketChat.importTool.prepare = (name, file) ->
if RocketChat.importTool.importers[name]?.importerInstance?
prepare = RocketChat.importTool.importers[name].importerInstance.prepare
prepare name, file
# Takes name and object with users / channels selected to import
RocketChat.importTool.import = (name, input) ->
if RocketChat.importTool.importers[name]?.importerInstance?
importer = RocketChat.importTool.importers[name].importerInstance.import
importer name, input
Meteor.methods
setupImport: (name) ->
if not Meteor.userId()
throw new Meteor.Error 203, t('User_logged_out')
RocketChat.importTool.setup name
prepareImport: (name, file) ->
if not Meteor.userId()
throw new Meteor.Error 203, t('User_logged_out')
RocketChat.importTool.prepare name, file
startImport: (name, input) ->
if not Meteor.userId()
throw new Meteor.Error 203, t('User_logged_out')
RocketChat.importTool.import name, input

@ -35,6 +35,7 @@ Package.onUse(function(api) {
api.addFiles('lib/core.coffee');
api.addFiles('lib/callbacks.coffee');
api.addFiles('lib/slashCommand.coffee');
api.addFiles('lib/importTool.coffee');
// MODELS SERVER
api.addFiles('server/models/_Base.coffee', 'server');

Loading…
Cancel
Save