Built motion from commit ae98c6c.|0.0.149
[motion.git] / server / models / user.js
index c278622..4341c9c 100644 (file)
@@ -4,7 +4,6 @@ var crypto = require('crypto');
 var md5 = require('md5');
 var _ = require('lodash');
 var moment = require('moment');
-var VoiceQueue = require('.').VoiceQueue;
 
 module.exports = function(sequelize, DataTypes) {
   var User = sequelize.define('User', {
@@ -23,6 +22,7 @@ module.exports = function(sequelize, DataTypes) {
     fullname: {
       type: DataTypes.STRING,
       allowNull: false,
+      unique: true
     },
     email: {
       type: DataTypes.STRING,
@@ -113,16 +113,16 @@ module.exports = function(sequelize, DataTypes) {
     voicePause: {
       type: DataTypes.BOOLEAN,
       defaultValue: false,
-      set: function(voicePause) {
-        this.setDataValue('voicePause', voicePause);
-        if (voicePause) {
-          this.setDataValue('queueStatus', 'paused');
-          this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
-        } else {
-          this.setDataValue('queueStatus', 'complete');
-          this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
-        }
-      }
+      // set: function(voicePause) {
+      //   this.setDataValue('voicePause', voicePause);
+      //   if (voicePause) {
+      //     this.setDataValue('queueStatus', 'paused');
+      //     this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+      //   } else {
+      //     this.setDataValue('queueStatus', 'complete');
+      //     this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+      //   }
+      // }
     },
     chatPause: {
       type: DataTypes.BOOLEAN,
@@ -140,6 +140,10 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.BOOLEAN,
       defaultValue: false
     },
+    openchannelPause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
     pauseType: {
       type: DataTypes.STRING,
       defaultValue: 'Default Pause'
@@ -163,6 +167,10 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.INTEGER,
       defaultValue: 0
     },
+    openchannelCapacity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
     phoneBarAutoAnswer: {
       type: DataTypes.BOOLEAN,
       defaultValue: false
@@ -220,7 +228,7 @@ module.exports = function(sequelize, DataTypes) {
     },
     phoneBarExpires: {
       type: DataTypes.INTEGER(5),
-      defaultValue: 3600
+      defaultValue: 120
     },
     phoneBarNameServer: {
       type: DataTypes.STRING,
@@ -232,7 +240,7 @@ module.exports = function(sequelize, DataTypes) {
     },
     phoneBarVADEnabled: {
       type: DataTypes.BOOLEAN,
-      defaultValue: true
+      defaultValue: false
     },
     phoneBarNoUDP: {
       type: DataTypes.BOOLEAN,
@@ -250,6 +258,14 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.BOOLEAN,
       defaultValue: false
     },
+    phoneBarRemoteControl: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarRemoteControlPort: {
+      type: DataTypes.INTEGER,
+      defaultValue: 9888
+    },
     chanspy: {
       type: DataTypes.BOOLEAN,
       defaultValue: false
@@ -258,6 +274,11 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.STRING,
       allowNull: true,
     },
+    host: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'dynamic'
+    },
     ipaddr: { //REALTIME ASTERISK
       type: DataTypes.STRING,
       allowNull: true,
@@ -382,15 +403,15 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.STRING,
       allowNull: true
     },
-    allow: {
+    disallow: {
       type: DataTypes.STRING,
       allowNull: true,
-      defaultValue: 'alaw;ulaw;gsm'
+      defaultValue: 'all'
     },
-    disallow: {
+    allow: {
       type: DataTypes.STRING,
       allowNull: true,
-      defaultValue: null
+      defaultValue: 'alaw;ulaw;gsm'
     },
     autoframing: {
       type: DataTypes.ENUM('yes', 'no'),
@@ -523,11 +544,6 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.STRING,
       allowNull: true,
     },
-    host: {
-      type: DataTypes.STRING,
-      allowNull: true,
-      defaultValue: 'dynamic'
-    },
     qualify: {
       type: DataTypes.ENUM('yes', 'no'),
       allowNull: true,
@@ -679,7 +695,7 @@ module.exports = function(sequelize, DataTypes) {
     call_limit: {
       type: DataTypes.INTEGER(11),
       allowNull: true,
-      defaultValue: null
+      defaultValue: 10
     },
     registertrying: { //Send a 100 Trying when the device registers.
       type: DataTypes.ENUM('yes', 'no'),
@@ -710,6 +726,20 @@ module.exports = function(sequelize, DataTypes) {
       allowNull: true,
       defaultValue: 'no'
     },
+    loginInPause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    resetPasswordToken: {
+      type: DataTypes.STRING
+    },
+    resetPasswordExpires: {
+      type: DataTypes.DATE
+    },
+    phoneBarEnableRecording: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
   }, {
     tableName: 'users',
     instanceMethods: {
@@ -773,27 +803,68 @@ module.exports = function(sequelize, DataTypes) {
       User.belongsToMany(models.MailRoom, {
         through: 'user_has_mail_rooms'
       });
+      User.belongsToMany(models.SmsRoom, {
+        through: 'user_has_sms_rooms'
+      });
+      User.belongsToMany(models.OpenchannelRoom, {
+        through: 'user_has_openchannel_rooms'
+      });
+      User.belongsToMany(models.FaxRoom, {
+        through: 'user_has_fax_rooms'
+      });
       User.belongsToMany(models.Team, {
         through: models.UserHasTeam
       });
-      User.belongsToMany(models.ChatRoom, {
-        through: models.UserHasChatRoom
+      User.belongsToMany(models.VoiceQueue, {
+        through: models.UserHasVoiceQueue,
+        required: false
+      });
+      User.belongsToMany(models.VoiceQueue, {
+        through: models.UserHasVoiceQueuePermit,
+        as: 'PVoiceQueues'
       });
       User.belongsToMany(models.MailQueue, {
         through: models.UserHasMailQueue,
         required: false
       });
+      User.belongsToMany(models.SmsQueue, {
+        through: models.UserHasSmsQueue,
+        required: false
+      });
+      User.belongsToMany(models.SmsQueue, {
+        through: models.UserHasSmsQueuePermit,
+        as: 'PSmsQueues'
+      });
+      User.belongsToMany(models.OpenchannelQueue, {
+        through: models.UserHasOpenchannelQueue,
+        required: false
+      });
+      User.belongsToMany(models.OpenchannelQueue, {
+        through: models.UserHasOpenchannelQueuePermit,
+        as: 'POpenchannelQueues'
+      });
+      User.belongsToMany(models.MailQueue, {
+        through: models.UserHasMailQueuePermit,
+        as: 'PMailQueues'
+      });
       User.belongsToMany(models.FaxQueue, {
         through: models.UserHasFaxQueue,
         required: false
       });
+      User.belongsToMany(models.FaxQueue, {
+        through: models.UserHasFaxQueuePermit,
+        as: 'PFaxQueues'
+      });
       User.belongsToMany(models.ChatQueue, {
         through: models.UserHasChatQueue,
         required: false
       });
-      User.belongsToMany(models.VoiceQueue, {
-        through: models.UserHasVoiceQueue,
-        required: false
+      User.belongsToMany(models.ChatQueue, {
+        through: models.UserHasChatQueuePermit,
+        as: 'PChatQueues'
+      });
+      User.belongsToMany(models.ChatRoom, {
+        through: models.UserHasChatRoom
       });
       User.belongsToMany(models.List, {
         through: models.UserHasList
@@ -806,6 +877,32 @@ module.exports = function(sequelize, DataTypes) {
       });
 
       // SCOPES MANAGEMENT
+      User.addScope('all', {
+        attributes: ['id',
+          'name',
+          'email',
+          'internal',
+          'fullname',
+          'role',
+          'online',
+          'userpic',
+          'accountcode',
+          'transport',
+          'host',
+          'role',
+          'nat',
+          'type',
+          'allow',
+          'lastLoginAt',
+          'ipaddr',
+          'fullcontact',
+          'port',
+          'lastms',
+          'description'
+        ]
+      });
+
+      // SCOPES MANAGEMENT
       User.addScope('user', {
         where: {
           role: {
@@ -817,9 +914,12 @@ module.exports = function(sequelize, DataTypes) {
           'email',
           'internal',
           'fullname',
+          'role',
+          'userpic',
           'accountcode',
           'transport',
           'host',
+          'role',
           'nat',
           'type',
           'allow',
@@ -828,7 +928,7 @@ module.exports = function(sequelize, DataTypes) {
           'fullcontact',
           'port',
           'lastms',
-          'description'
+          'description',
         ]
       });
       User.addScope('agent', {
@@ -840,6 +940,8 @@ module.exports = function(sequelize, DataTypes) {
           'email',
           'internal',
           'fullname',
+          'role',
+          'userpic',
           'accountcode',
           'transport',
           'host',
@@ -849,6 +951,8 @@ module.exports = function(sequelize, DataTypes) {
           'chatCapacity',
           'mailCapacity',
           'faxCapacity',
+          'smsCapacity',
+          'openchannelCapacity',
           'online',
           'lastLoginAt',
           'phoneBarAutoAnswer',
@@ -860,11 +964,17 @@ module.exports = function(sequelize, DataTypes) {
           'phoneBarNoReplyNumber',
           'phoneBarBusyNumber',
           'phoneBarListenPort',
+          'phoneBarExpires',
+          'phoneBarRemoteControl',
+          'phoneBarRemoteControlPort',
+          'phoneBarEnableRecording',
           'chanspy',
           'voicePause',
           'mailPause',
           'faxPause',
           'chatPause',
+          'smsPause',
+          'openchannelPause',
           'pauseType',
           'lastPauseAt',
           'status',
@@ -877,7 +987,8 @@ module.exports = function(sequelize, DataTypes) {
           'fullcontact',
           'port',
           'lastms',
-          'description'
+          'description',
+          'loginInPause'
         ]
       });
       User.addScope('telephone', {
@@ -886,7 +997,9 @@ module.exports = function(sequelize, DataTypes) {
         }
       });
       User.addScope('queues', {
-        include: [models.VoiceQueue, models.ChatQueue, models.MailQueue, models.FaxQueue]
+        include: [models.VoiceQueue, models.ChatQueue, models.MailQueue,
+          models.FaxQueue, models.SmsQueue, models.OpenchannelQueue
+        ]
       });
 
       User.addScope('checkPauseStatus', function(query) {
@@ -894,17 +1007,29 @@ module.exports = function(sequelize, DataTypes) {
           where: {}
         };
         if (query.voicePause) {
-          scope.where.voicePause = (query.voicePause === 'true') ? true : false;
+          scope.where.voicePause = (query.voicePause === 'true') ?
+            true : false;
           delete query.voicePause;
         } else if (query.faxPause) {
-          scope.where.faxPause = (query.faxPause === 'true') ? true : false;
+          scope.where.faxPause = (query.faxPause === 'true') ? true :
+            false;
           delete query.faxPause;
         } else if (query.chatPause) {
-          scope.where.chatPause = (query.chatPause === 'true') ? true : false;
+          scope.where.chatPause = (query.chatPause === 'true') ?
+            true : false;
           delete query.chatPause;
         } else if (query.mailPause) {
-          scope.where.mailPause = (query.mailPause === 'true') ? true : false;
+          scope.where.mailPause = (query.mailPause === 'true') ?
+            true : false;
           delete query.mailPause;
+        } else if (query.smsPause) {
+          scope.where.smsPause = (query.smsPause === 'true') ?
+            true : false;
+          delete query.smsPause;
+        } else if (query.openchannelPause) {
+          scope.where.openchannelPause = (query.openchannelPause === 'true') ?
+            true : false;
+          delete query.openchannelPause;
         }
         return scope;
       });
@@ -913,7 +1038,8 @@ module.exports = function(sequelize, DataTypes) {
           where: {}
         };
         if (query.online) {
-          scope.where.online = (query.online === 'true') ? true : false;
+          scope.where.online = (query.online === 'true') ? true :
+            false;
           delete query.online;
         }
         return scope;
@@ -938,6 +1064,53 @@ module.exports = function(sequelize, DataTypes) {
         }
         return scope;
       });
+
+      User.addScope('me', function(userId) {
+        var scope = {
+          where: {
+            id: userId
+          },
+          attributes: ['id', 'fullname', 'name', 'email', 'role', 'userpic', 'lastLoginAt', 'voicePause',
+            'mailPause',
+            'chatPause',
+            'faxPause',
+            'smsPause',
+            'openchannelPause',
+            'lastPauseAt',
+            'pauseType',
+            'phoneBarRemoteControl',
+            'phoneBarRemoteControlPort',
+            'loginInPause'
+          ],
+          include: [{
+            model: models.Module,
+            include: [{
+              model: models.Module,
+              as: 'SubModules',
+              required: false,
+              include: [{
+                all: true
+              }]
+            }]
+          }, {
+            model: models.VoiceQueue,
+            as: 'PVoiceQueues'
+          }, {
+            model: models.ChatQueue,
+            as: 'PChatQueues'
+          }, {
+            model: models.MailQueue,
+            as: 'PMailQueues'
+          }, {
+            model: models.FaxQueue,
+            as: 'PFaxQueues'
+          }, {
+            model: models.SmsQueue,
+            as: 'PSmsQueues'
+          }]
+        };
+        return scope;
+      });
     }
   });