7b310616711c33aac01af0b8ce6c8c95314fc8d5
[tine20] / tine20 / MailFiler / js / Model.js
1 /*
2  * Tine 2.0
3  * 
4  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
5  * @author      Cornelius Weiss <c.weiss@metaways.de>
6  * @copyright   Copyright (c) 2007-2017 Metaways Infosystems GmbH (http://www.metaways.de)
7  */
8 Ext.ns('Tine.MailFiler.Model');
9     
10 /**
11  * @namespace   Tine.MailFiler.Model
12  * @class       Tine.MailFiler.Model.Node
13  * @extends     Tine.Tinebase.data.Record
14  * Example record definition
15  * 
16  * @author      Cornelius Weiss <c.weiss@metaways.de>
17  */
18 Tine.MailFiler.Model.Node = Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.modlogFields.concat([
19     { name: 'id' },
20     { name: 'name' },
21     { name: 'path' },
22     { name: 'size' },
23     { name: 'revision' },
24     { name: 'type' },
25     { name: 'contenttype' },
26     { name: 'description' },
27     { name: 'grants' },
28     { name: 'account_grants' },
29     { name: 'description' },
30     { name: 'object_id'},
31     { name: 'message'},
32
33     { name: 'relations' },
34     { name: 'customfields' },
35     { name: 'notes' },
36     { name: 'tags' }
37 ]), {
38     appName: 'MailFiler',
39     modelName: 'Node',
40     idProperty: 'id',
41     titleProperty: 'name',
42     // ngettext('File', 'Files', n); gettext('File');
43     recordName: 'File',
44     recordsName: 'Files',
45     // ngettext('Folder', 'Folders', n); gettext('Folder');
46     containerName: 'Folder',
47     containersName: 'Folders',
48     
49     /**
50      * virtual nodes are part of the tree but don't exists / are editable
51      *
52      * NOTE: only "real" virtual node is node with path "otherUsers". all other nodes exist
53      *
54      * @returns {boolean}
55      */
56     isVirtual: function() {
57         var _ = window.lodash;
58
59         return _.indexOf(['/', Tine.Tinebase.container.getMyFileNodePath(), '/personal', '/shared'], this.get('path')) >= 0;
60     }
61 });
62     
63 /**
64  * create Node from File
65  * 
66  * @param {File} file
67  */
68 Tine.MailFiler.Model.Node.createFromFile = function(file) {
69     return new Tine.MailFiler.Model.Node({
70         name: file.name ? file.name : file.fileName,  // safari and chrome use the non std. fileX props
71         size: file.size || 0,
72         type: 'file',
73         contenttype: file.type ? file.type : file.fileType, // missing if safari and chrome 
74         revision: 0
75     });
76 };
77
78 /**
79  * file record backend
80  */
81 Tine.MailFiler.fileRecordBackend = new Tine.Filemanager.FileRecordBackend({
82     appName: 'MailFiler',
83     modelName: 'Node',
84     recordClass: Tine.MailFiler.Model.Node
85 });
86
87
88 /**
89  * get filtermodel of Node records
90  * 
91  * @namespace Tine.MailFiler.Model
92  * @static
93  * @return {Object} filterModel definition
94  */ 
95 Tine.MailFiler.Model.Node.getFilterModel = function() {
96     var app = Tine.Tinebase.appMgr.get('MailFiler');
97        
98     return [
99         {label : i18n._('Quick Search'), field : 'query', operators : [ 'contains' ]},
100 //        {label: app.i18n._('Type'), field: 'type'}, // -> should be a combo
101         {label: app.i18n._('Contenttype'), field: 'contenttype'},
102         {label: app.i18n._('Creation Time'), field: 'creation_time', valueType: 'date'},
103         {label: app.i18n._('Description'), field: 'description', operators: ['contains', 'notcontains']},
104         {filtertype : 'tine.filemanager.pathfiltermodel', app : app}, 
105         {filtertype : 'tinebase.tag', app : app},
106         {label: app.i18n._('Subject'),     field: 'subject',       operators: ['contains']},
107         {label: app.i18n._('From (Email)'),field: 'from_email',    operators: ['contains']},
108         {label: app.i18n._('From (Name)'), field: 'from_name',     operators: ['contains']},
109         {label: app.i18n._('To'),          field: 'to',            operators: ['contains']},
110         {label: app.i18n._('Cc'),          field: 'cc',            operators: ['contains']},
111         {label: app.i18n._('Bcc'),         field: 'bcc',           operators: ['contains']},
112         {label: app.i18n._('Flags'),       field: 'flags',         filtertype: 'tinebase.multiselect', app: app, multiselectFieldConfig: {
113             valueStore: Tine.Felamimail.loadFlagsStore()
114         }},
115         {label: app.i18n._('Received'),    field: 'received',      valueType: 'date', pastOnly: true}
116     ];
117 };