diff --git a/app/assets/javascripts/app/views/package.jst.eco b/app/assets/javascripts/app/views/package.jst.eco
index 2200a0632656..8f59206cfdc2 100644
--- a/app/assets/javascripts/app/views/package.jst.eco
+++ b/app/assets/javascripts/app/views/package.jst.eco
@@ -58,7 +58,7 @@
<%= item.name %> |
<%= item.version %> |
- <%= item.vendor %> |
+ <% if item.url: %><% end %><%= item.vendor %><% if item.url: %><% end %> |
<%- @T(item.state) %> |
<% for action in item.action: %><%- @T(action) %> <% end %> |
diff --git a/app/models/package.rb b/app/models/package.rb
index 783156d44e4f..d8963c7dad35 100644
--- a/app/models/package.rb
+++ b/app/models/package.rb
@@ -237,6 +237,7 @@ def self.install(data)
name: package['name'],
version: package['version'],
vendor: package['vendor'],
+ url: package['url'],
state: 'uninstalled',
created_by_id: 1,
updated_by_id: 1,
diff --git a/db/migrate/20120101000001_create_base.rb b/db/migrate/20120101000001_create_base.rb
index dc415db0a44d..b9254e8281e1 100644
--- a/db/migrate/20120101000001_create_base.rb
+++ b/db/migrate/20120101000001_create_base.rb
@@ -296,6 +296,7 @@ def up
t.string :version, limit: 50, null: false
t.string :vendor, limit: 150, null: false
t.string :state, limit: 50, null: false
+ t.string :url, limit: 512, null: true
t.integer :updated_by_id, null: false
t.integer :created_by_id, null: false
t.timestamps limit: 3, null: false
diff --git a/db/migrate/20230825101042_show_package_url.rb b/db/migrate/20230825101042_show_package_url.rb
new file mode 100644
index 000000000000..6d7eb500992d
--- /dev/null
+++ b/db/migrate/20230825101042_show_package_url.rb
@@ -0,0 +1,19 @@
+# Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
+
+class ShowPackageUrl < ActiveRecord::Migration[6.1]
+ def change
+ # return if it's a new setup
+ return if !Setting.exists?(name: 'system_init_done')
+
+ add_column :packages, :url, :string, limit: 512
+ Package.reset_column_information
+
+ Package.find_each do |package|
+ json_file = Package._get_bin(package.name, package.version)
+ data = JSON.parse(json_file)
+ next if data['url'].blank?
+
+ package.update!(url: data['url'])
+ end
+ end
+end
diff --git a/spec/models/package_spec.rb b/spec/models/package_spec.rb
index f881c0a48d66..c2362a19a1c5 100644
--- a/spec/models/package_spec.rb
+++ b/spec/models/package_spec.rb
@@ -279,4 +279,11 @@ def expect_uninstall_package
expect_uninstall_package
end
end
+
+ describe 'Vendor url in installed package is the zammad instance url #4753' do
+ it 'does have a url for the package' do
+ described_class.install(string: package_zpm_json)
+ expect(described_class.last.url).to eq('https://zammad.org/')
+ end
+ end
end