MailFiler: use record properties of Tine.Tinebase.Model.Tree_Node
[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.Tree_NodeArray.concat([
19     { name: 'message'}
20 ]), {
21     appName: 'MailFiler',
22     modelName: 'Node',
23     idProperty: 'id',
24     titleProperty: 'name',
25     // ngettext('File', 'Files', n); gettext('File');
26     recordName: 'File',
27     recordsName: 'Files',
28     // ngettext('Folder', 'Folders', n); gettext('Folder');
29     containerName: 'Folder',
30     containersName: 'Folders',
31     
32     /**
33      * virtual nodes are part of the tree but don't exists / are editable
34      *
35      * NOTE: only "real" virtual node is node with path "otherUsers". all other nodes exist
36      *
37      * @returns {boolean}
38      */
39     isVirtual: function() {
40         var _ = window.lodash;
41
42         return _.indexOf(['/', Tine.Tinebase.container.getMyFileNodePath(), '/personal', '/shared'], this.get('path')) >= 0;
43     }
44 });
45     
46 /**
47  * create Node from File
48  * 
49  * @param {File} file
50  */
51 Tine.MailFiler.Model.Node.createFromFile = function(file) {
52     return new Tine.MailFiler.Model.Node({
53         name: file.name ? file.name : file.fileName,  // safari and chrome use the non std. fileX props
54         size: file.size || 0,
55         type: 'file',
56         contenttype: file.type ? file.type : file.fileType, // missing if safari and chrome 
57         revision: 0
58     });
59 };
60
61 /**
62  * file record backend
63  */
64 Tine.MailFiler.fileRecordBackend = new Tine.Filemanager.FileRecordBackend({
65     appName: 'MailFiler',
66     modelName: 'Node',
67     recordClass: Tine.MailFiler.Model.Node
68 });
69
70
71 /**
72  * get filtermodel of Node records
73  * 
74  * @namespace Tine.MailFiler.Model
75  * @static
76  * @return {Object} filterModel definition
77  */ 
78 Tine.MailFiler.Model.Node.getFilterModel = function() {
79     var app = Tine.Tinebase.appMgr.get('MailFiler');
80        
81     return [
82         {label : i18n._('Quick Search'), field : 'query', operators : [ 'contains' ]},
83 //        {label: app.i18n._('Type'), field: 'type'}, // -> should be a combo
84         {label: app.i18n._('Contenttype'), field: 'contenttype'},
85         {label: app.i18n._('Creation Time'), field: 'creation_time', valueType: 'date'},
86         {label: app.i18n._('Description'), field: 'description', operators: ['contains', 'notcontains']},
87         {filtertype : 'tine.filemanager.pathfiltermodel', app : app}, 
88         {filtertype : 'tinebase.tag', app : app},
89         {label: app.i18n._('Subject'),     field: 'subject',       operators: ['contains']},
90         {label: app.i18n._('From (Email)'),field: 'from_email',    operators: ['contains']},
91         {label: app.i18n._('From (Name)'), field: 'from_name',     operators: ['contains']},
92         {label: app.i18n._('To'),          field: 'to',            operators: ['contains']},
93         {label: app.i18n._('Cc'),          field: 'cc',            operators: ['contains']},
94         {label: app.i18n._('Bcc'),         field: 'bcc',           operators: ['contains']},
95         {label: app.i18n._('Flags'),       field: 'flags',         filtertype: 'tinebase.multiselect', app: app, multiselectFieldConfig: {
96             valueStore: Tine.Felamimail.loadFlagsStore()
97         }},
98         {label: app.i18n._('Received'),    field: 'received',      valueType: 'date', pastOnly: true}
99     ];
100 };