Merge branch 'master' of ssh://172.20.0.1/var/git/espo/backend

This commit is contained in:
Taras Machyshyn
2015-02-06 17:37:32 +02:00
12 changed files with 105 additions and 112 deletions
-3
View File
@@ -67,13 +67,10 @@ class ServiceFactory
protected function getClassName($name)
{
$name = Util::normilizeClassName($name);
if (!isset($this->data)) {
$this->init();
}
$name = ucfirst($name);
if (isset($this->data[$name])) {
return $this->data[$name];
}
+21 -17
View File
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
************************************************************************/
namespace Espo\EntryPoints;
@@ -29,45 +29,49 @@ use \Espo\Core\Exceptions\BadRequest;
class Download extends \Espo\Core\EntryPoints\Base
{
public static $authRequired = true;
protected $fileTypesToShowInline = array(
'application/pdf',
'application/vnd.ms-word',
'application/vnd.ms-excel',
'application/vnd.oasis.opendocument.text',
'application/vnd.oasis.opendocument.spreadsheet',
'text/plain',
);
public function run()
{
{
$id = $_GET['id'];
if (empty($id)) {
throw new BadRequest();
}
$attachment = $this->getEntityManager()->getEntity('Attachment', $id);
if (!$attachment) {
throw new NotFound();
}
}
if ($attachment->get('parentId') && $attachment->get('parentType')) {
$parent = $this->getEntityManager()->getEntity($attachment->get('parentType'), $attachment->get('parentId'));
$parent = $this->getEntityManager()->getEntity($attachment->get('parentType'), $attachment->get('parentId'));
if (!$this->getAcl()->check($parent)) {
throw new Forbidden();
}
}
$fileName = "data/upload/{$attachment->id}";
if (!file_exists($fileName)) {
throw new NotFound();
}
$type = $attachment->get('type');
$disposition = 'attachment';
if (in_array($type, $this->fileTypesToShowInline)) {
$disposition = 'inline';
}
header('Content-Description: File Transfer');
if ($type) {
header('Content-Type: ' . $type);
@@ -80,7 +84,7 @@ class Download extends \Espo\Core\EntryPoints\Base
ob_clean();
flush();
readfile($fileName);
exit;
}
exit;
}
}
@@ -17,7 +17,7 @@
},
"seconds": {
"type": "enumInt",
"options": [0, 60, 120, 300, 900, 1800, 3600, 7200, 10800, 18000, 86400],
"options": [0, 60, 120, 300, 600, 900, 1800, 3600, 7200, 10800, 18000, 86400],
"default": 0
},
"entityType": {
@@ -26,7 +26,6 @@ use \Espo\ORM\Entity;
class CaseObj extends \Espo\Services\Record
{
protected $mergeLinkList = array(
'tasks',
'meetings',
@@ -44,6 +44,7 @@
"Uploading...": "Uploading...",
"Sending...": "Sending...",
"Merging...": "Merging...",
"Merged": "Merged",
"Removed": "Removed",
"Posted": "Posted",
"Linked": "Linked",
@@ -1 +1,7 @@
{"entity":true,"layouts":true,"tab":false,"acl":false,"customizable":true}
{
"entity": true,
"layouts": true,
"tab": true,
"acl": false,
"customizable": true
}
+7 -6
View File
@@ -72,7 +72,7 @@ class Record extends \Espo\Core\Services\Base
$name = $matches[1];
}
if ($name != 'Record') {
$this->entityName = $name;
$this->entityName = Util::normilizeScopeName($name);
}
}
}
@@ -763,8 +763,7 @@ class Record extends \Espo\Core\Services\Base
UPDATE `note`
SET
`parent_id` = " . $pdo->quote($entity->id) . ",
`parent_type` = " . $pdo->quote($entity->getEntityName()) . ",
`parent_type` = " . $pdo->quote($entity->getEntityName()) . "
WHERE
`type` IN ('Post', 'EmailSent', 'EmailReceived') AND
`parent_id` = " . $pdo->quote($source->id) . " AND
@@ -774,16 +773,18 @@ class Record extends \Espo\Core\Services\Base
$pdo->query($sql);
}
$repository = $this->getEntityManager()->getRepository($entity->getEntityName());
foreach ($sourceList as $source) {
foreach ($this->mergeLinkList as $link) {
$linkedList = $this->getEntityManager()->getRepository($this->name)->findRelated($source, $link);
$linkedList = $repository->findRelated($source, $link);
foreach ($linkedList as $linked) {
$this->getEntityManager()->getRepository()->relate($entity, $link, $linked);
$this->getEntityManager()->getRepository()->unrelate($source, $link, $linked);
$repository->relate($entity, $link, $linked);
}
}
}
foreach ($sourceList as $source) {
$this->getEntityManager()->removeEntity($source);
}
@@ -22,7 +22,7 @@
Espo.define('Crm:Views.Meeting.Fields.Reminders', 'Views.Fields.Base', function (Dep) {
return Dep.extend({
detailTemplate: 'crm:meeting.fields.reminders.detail',
listTemplate: 'crm:meeting.fields.reminders.detail',
@@ -33,7 +33,7 @@ Espo.define('Crm:Views.Meeting.Fields.Reminders', 'Views.Fields.Base', function
'click [data-action="addReminder"]': function () {
var type = this.getMetadata().get('entityDefs.Reminder.fields.type.default');
var seconds = this.getMetadata().get('entityDefs.Reminder.fields.seconds.default');
var item = {
type: type,
seconds: seconds
@@ -66,7 +66,7 @@ Espo.define('Crm:Views.Meeting.Fields.Reminders', 'Views.Fields.Base', function
}, this);
this.typeList = this.getMetadata().get('entityDefs.Reminder.fields.type.options');
this.secondsList = this.getMetadata().get('entityDefs.Reminder.fields.seconds.options');;
this.secondsList = this.getMetadata().get('entityDefs.Reminder.fields.seconds.options');
},
afterRender: function () {
@@ -1 +1 @@
<a href="{{url}}">{{value}}</a>
<a href="{{url}}" target="_blank">{{value}}</a>
@@ -17,16 +17,16 @@
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
************************************************************************/
Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
return Dep.extend({
template: "admin.extensions.index",
packageContents: null,
events: {
'change input[name="package"]': function (e) {
this.$el.find('button[data-action="upload"]').addClass('disabled');
@@ -41,22 +41,22 @@ Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
},
'click [data-action="install"]': function (e) {
var id = $(e.currentTarget).data('id');
var name = this.collection.get(id).get('name');
var version = this.collection.get(id).get('version');
this.run(id, name, version);
},
'click [data-action="uninstall"]': function (e) {
var id = $(e.currentTarget).data('id');
var name = this.collection.get(id).get('name');
var self = this;
if (confirm(this.translate('uninstallConfirmation', 'messages', 'Admin'))) {
if (confirm(this.translate('uninstallConfirmation', 'messages', 'Admin'))) {
Espo.Ui.notify(this.translate('Uninstalling...', 'labels', 'Admin'));
$.ajax({
url: 'Extension/action/uninstall',
type: 'POST',
@@ -67,25 +67,25 @@ Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
var msg = xhr.getResponseHeader('X-Status-Reason');
this.showErrorNotification(this.translate('Error') + ': ' + msg);
}.bind(this)
}).done(function () {
}).done(function () {
this.listenToOnce(this.collection, 'sync', function () {
Espo.Ui.success(this.translate('uninstalled', 'messages', 'Extension').replace('{name}', name));
}, this);
this.collection.fetch();
}.bind(this));
}
}
},
setup: function () {
this.getCollectionFactory().create('Extension', function (collection) {
this.collection = collection;
collection.maxSize = this.getConfig().get('recordsPerPage');
this.wait(true);
this.listenToOnce(collection, 'sync', function () {
this.listenToOnce(collection, 'sync', function () {
this.createView('list', 'Extension.Record.List', {
collection: collection,
el: this.options.el + ' > .list-container',
@@ -97,36 +97,36 @@ Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
}
this.wait(false);
});
collection.fetch();
}, this);
},
selectFile: function (file) {
var fileReader = new FileReader();
fileReader.onload = function (e) {
fileReader.onload = function (e) {
this.packageContents = e.target.result;
this.$el.find('button[data-action="upload"]').removeClass('disabled');
}.bind(this);
fileReader.readAsDataURL(file);
},
showError: function (msg) {
msg = this.translate(msg, 'errors', 'Admin');
this.$el.find('.message-container').html(msg);
},
showErrorNotification: function (msg) {
if (!msg) {
this.$el.find('.notify-text').addClass('hidden');
} else {
} else {
msg = this.translate(msg, 'errors', 'Admin');
this.$el.find('.notify-text').html(msg);
this.$el.find('.notify-text').removeClass('hidden');
}
},
upload: function () {
this.$el.find('button[data-action="upload"]').addClass('disabled');
this.notify('Uploading...');
@@ -134,9 +134,9 @@ Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
url: 'Extension/action/upload',
type: 'POST',
contentType: 'application/zip',
timeout: 0,
timeout: 0,
data: this.packageContents,
error: function (xhr, t, e) {
error: function (xhr, t, e) {
this.showError(xhr.getResponseHeader('X-Status-Reason'));
this.notify(false);
}.bind(this)
@@ -151,23 +151,23 @@ Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
}, function (view) {
view.render();
this.$el.find('button[data-action="upload"]').removeClass('disabled');
view.once('run', function () {
view.close();
this.$el.find('.panel.upload').addClass('hidden');
this.run(data.id, data.version, data.name);
}, this);
}.bind(this));
}.bind(this));
}.bind(this)).error;
},
run: function (id, version, name) {
},
run: function (id, version, name) {
var msg = this.translate('Installing...', 'labels', 'Admin');
this.notify('Please wait...');
this.showError(false);
this.showErrorNotification(false);
this.showErrorNotification(false);
$.ajax({
url: 'Extension/action/install',
type: 'POST',
@@ -178,26 +178,26 @@ Espo.define('Views.Admin.Extensions.Index', 'View', function (Dep) {
this.$el.find('.panel.upload').removeClass('hidden');
var msg = xhr.getResponseHeader('X-Status-Reason');
this.showErrorNotification(this.translate('Error') + ': ' + msg);
}.bind(this)
}.bind(this)
}).done(function () {
var cache = this.getCache();
if (cache) {
cache.clear();
cache.clear();
}
this.createView('popup', 'Admin.Extensions.Done', {
version: version,
name: name
}, function (view) {
this.collection.fetch();
this.$el.find('.list-container').removeClass('hidden');
this.$el.find('.panel.upload').removeClass('hidden');
this.$el.find('.list-container').removeClass('hidden');
this.$el.find('.panel.upload').removeClass('hidden');
this.notify(false);
view.render();
view.render();
}.bind(this));
}.bind(this));
},
});
});
});
@@ -17,14 +17,14 @@
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
************************************************************************/
Espo.define('Views.Admin.Upgrade.Index', 'View', function (Dep) {
return Dep.extend({
template: 'admin.upgrade.index',
packageContents: null,
data: function () {
@@ -50,21 +50,21 @@ Espo.define('Views.Admin.Upgrade.Index', 'View', function (Dep) {
setup: function () {
},
selectFile: function (file) {
var fileReader = new FileReader();
fileReader.onload = function (e) {
fileReader.onload = function (e) {
this.packageContents = e.target.result;
this.$el.find('button[data-action="upload"]').removeClass('disabled');
}.bind(this);
fileReader.readAsDataURL(file);
},
showError: function (msg) {
msg = this.translate(msg, 'errors', 'Admin');
this.$el.find('.message-container').html(msg);
},
upload: function () {
this.$el.find('button[data-action="upload"]').addClass('disabled');
this.notify('Uploading...');
@@ -72,11 +72,11 @@ Espo.define('Views.Admin.Upgrade.Index', 'View', function (Dep) {
url: 'Admin/action/uploadUpgradePackage',
type: 'POST',
contentType: 'application/zip',
timeout: 0,
timeout: 0,
data: this.packageContents,
error: function (xhr, t, e) {
error: function (xhr, t, e) {
this.showError(xhr.getResponseHeader('X-Status-Reason'));
this.notify(false);
this.notify(false);
}.bind(this)
}).done(function (data) {
if (!data.id) {
@@ -89,25 +89,25 @@ Espo.define('Views.Admin.Upgrade.Index', 'View', function (Dep) {
}, function (view) {
view.render();
this.$el.find('button[data-action="upload"]').removeClass('disabled');
view.once('run', function () {
view.close();
this.$el.find('.panel.upload').addClass('hidden');
this.run(data.id, data.version);
}, this);
}.bind(this));
}.bind(this));
}.bind(this)).error;
},
textNotification: function (text) {
this.$el.find('.notify-text').html(text);
this.$el.find('.notify-text').html(text);
},
run: function (id, version) {
run: function (id, version) {
var msg = this.translate('Upgrading...', 'labels', 'Admin');
this.notify('Please wait...');
this.textNotification(msg);
this.textNotification(msg);
$.ajax({
url: 'Admin/action/runUpgrade',
type: 'POST',
@@ -118,17 +118,17 @@ Espo.define('Views.Admin.Upgrade.Index', 'View', function (Dep) {
this.$el.find('.panel.upload').removeClass('hidden');
var msg = xhr.getResponseHeader('X-Status-Reason');
this.textNotification(this.translate('Error') + ': ' + msg);
}.bind(this)
}.bind(this)
}).done(function () {
var cache = this.getCache();
if (cache) {
cache.clear();
cache.clear();
}
this.createView('popup', 'Admin.Upgrade.Done', {
version: version
}, function (view) {
this.notify(false);
view.render();
view.render();
}.bind(this));
}.bind(this));
},
-15
View File
@@ -108,26 +108,11 @@ Espo.define('Views.Record.Merge', 'View', function (Dep) {
})
})
}).done(function () {
return;
model.once('sync', function () {
this.notify('Merged', 'success');
this.getRouter().navigate('#' + this.scope + '/view/' + model.id, {trigger: true});
/*var i = 0;
var count = this.models.length;
this.models.forEach(function (m) {
if (m.id != model.id) {
m.once('destroy', function () {
i++;
if (i == count - 1) {
this.notify('Merged', 'success');
this.getRouter().navigate('#' + this.scope + '/view/' + model.id, {trigger: true});
}
}, this);
m.destroy();
}
}, this);*/
}, this);
model.save(attributes, {