katello 3.1.0.1 → 3.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (390) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -47
  3. data/app/assets/javascripts/katello/common/index.js +0 -1
  4. data/app/assets/javascripts/katello/providers/redhat/index.js +0 -1
  5. data/app/assets/stylesheets/katello/_katello_colors.scss +0 -2
  6. data/app/assets/stylesheets/katello/katello.scss +0 -2
  7. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +45 -42
  8. data/app/controllers/katello/api/v2/activation_keys_controller.rb +7 -19
  9. data/app/controllers/katello/api/v2/api_controller.rb +3 -3
  10. data/app/controllers/katello/api/v2/capsule_content_controller.rb +3 -3
  11. data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -2
  12. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +29 -18
  13. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +2 -2
  14. data/app/controllers/katello/api/v2/content_view_histories_controller.rb +1 -1
  15. data/app/controllers/katello/api/v2/content_view_puppet_modules_controller.rb +2 -2
  16. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +10 -8
  17. data/app/controllers/katello/api/v2/content_views_controller.rb +5 -5
  18. data/app/controllers/katello/api/v2/environments_controller.rb +10 -9
  19. data/app/controllers/katello/api/v2/file_units_controller.rb +16 -0
  20. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +4 -4
  21. data/app/controllers/katello/api/v2/host_autocomplete_controller.rb +2 -2
  22. data/app/controllers/katello/api/v2/host_collections_controller.rb +41 -13
  23. data/app/controllers/katello/api/v2/host_errata_controller.rb +12 -5
  24. data/app/controllers/katello/api/v2/host_packages_controller.rb +4 -4
  25. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +9 -9
  26. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +52 -13
  27. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -3
  28. data/app/controllers/katello/api/v2/packages_controller.rb +1 -1
  29. data/app/controllers/katello/api/v2/ping_controller.rb +2 -2
  30. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +2 -2
  31. data/app/controllers/katello/api/v2/products_controller.rb +6 -16
  32. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +1 -1
  33. data/app/controllers/katello/api/v2/repositories_controller.rb +60 -21
  34. data/app/controllers/katello/api/v2/repository_sets_controller.rb +3 -3
  35. data/app/controllers/katello/api/v2/root_controller.rb +2 -2
  36. data/app/controllers/katello/api/v2/subscriptions_controller.rb +19 -10
  37. data/app/controllers/katello/api/v2/sync_controller.rb +3 -3
  38. data/app/controllers/katello/api/v2/sync_plans_controller.rb +2 -2
  39. data/app/controllers/katello/api/v2/uebercerts_controller.rb +1 -1
  40. data/app/controllers/katello/application_controller.rb +7 -7
  41. data/app/controllers/katello/auto_complete_search_controller.rb +1 -1
  42. data/app/controllers/katello/concerns/api/api_controller.rb +1 -1
  43. data/app/controllers/katello/concerns/api/v2/hostgroups_controller_extensions.rb +19 -16
  44. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +8 -6
  45. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +10 -6
  46. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +1 -1
  47. data/app/controllers/katello/concerns/smart_proxies_controller_extensions.rb +1 -1
  48. data/app/controllers/katello/errors_controller.rb +2 -2
  49. data/app/controllers/katello/organizations_controller.rb +1 -1
  50. data/app/controllers/katello/products_controller.rb +4 -4
  51. data/app/controllers/katello/providers_controller.rb +2 -2
  52. data/app/helpers/katello/application_helper.rb +0 -240
  53. data/app/helpers/katello/concerns/hosts_and_hostgroups_helper_extensions.rb +19 -0
  54. data/app/lib/actions/candlepin/import_pool_handler.rb +11 -6
  55. data/app/lib/actions/katello/capsule_content/create_repos.rb +3 -3
  56. data/app/lib/actions/katello/capsule_content/sync.rb +23 -9
  57. data/app/lib/actions/katello/content_view/add_to_environment.rb +1 -1
  58. data/app/lib/actions/katello/content_view/errata_mail.rb +2 -2
  59. data/app/lib/actions/katello/content_view/incremental_updates.rb +60 -1
  60. data/app/lib/actions/katello/content_view/remove.rb +2 -2
  61. data/app/lib/actions/katello/content_view_environment/destroy.rb +1 -1
  62. data/app/lib/actions/katello/content_view_environment/reassign_objects.rb +2 -2
  63. data/app/lib/actions/katello/content_view_puppet_environment/create.rb +3 -1
  64. data/app/lib/actions/katello/host/attach_subscriptions.rb +13 -6
  65. data/app/lib/actions/katello/host/destroy.rb +0 -19
  66. data/app/lib/actions/katello/host/generate_applicability.rb +8 -3
  67. data/app/lib/actions/katello/host/hypervisors.rb +17 -9
  68. data/app/lib/actions/katello/host/hypervisors_update.rb +19 -44
  69. data/app/lib/actions/katello/host/reassign.rb +14 -0
  70. data/app/lib/actions/katello/host/register.rb +3 -22
  71. data/app/lib/actions/katello/host/remove_subscriptions.rb +15 -2
  72. data/app/lib/actions/katello/host/update.rb +0 -6
  73. data/app/lib/actions/katello/organization/destroy.rb +2 -2
  74. data/app/lib/actions/katello/product/content_destroy.rb +7 -9
  75. data/app/lib/actions/katello/product/destroy.rb +23 -7
  76. data/app/lib/actions/katello/repository/clear.rb +1 -0
  77. data/app/lib/actions/katello/repository/clone_file_content.rb +17 -0
  78. data/app/lib/actions/katello/repository/clone_to_environment.rb +2 -0
  79. data/app/lib/actions/katello/repository/clone_to_version.rb +2 -0
  80. data/app/lib/actions/katello/repository/create.rb +2 -1
  81. data/app/lib/actions/katello/repository/destroy.rb +20 -10
  82. data/app/lib/actions/katello/repository/errata_mail.rb +2 -2
  83. data/app/lib/actions/katello/repository/filtered_index_content.rb +2 -0
  84. data/app/lib/actions/katello/repository/import_upload.rb +6 -2
  85. data/app/lib/actions/katello/repository/{refresh_repostiory.rb → refresh_repository.rb} +0 -0
  86. data/app/lib/actions/katello/repository/remove_content.rb +2 -0
  87. data/app/lib/actions/katello/repository/sync.rb +8 -12
  88. data/app/lib/actions/katello/repository_set/disable_repository.rb +6 -5
  89. data/app/lib/actions/katello/repository_set/enable_repository.rb +1 -1
  90. data/app/lib/actions/katello/repository_set/scan_cdn.rb +1 -1
  91. data/app/lib/actions/pulp/abstract_async_task.rb +1 -1
  92. data/app/lib/actions/pulp/consumer/unassociate_units.rb +20 -0
  93. data/app/lib/actions/pulp/repository/copy_files.rb +11 -0
  94. data/app/lib/actions/pulp/repository/create.rb +5 -1
  95. data/app/lib/actions/pulp/repository/presenters/file_presenter.rb +1 -1
  96. data/app/lib/actions/pulp/repository/refresh.rb +4 -2
  97. data/app/lib/actions/pulp/repository/remove_file.rb +15 -0
  98. data/app/lib/actions/pulp/repository/sync.rb +3 -1
  99. data/app/lib/actions/pulp/repository_group/export.rb +1 -1
  100. data/app/lib/katello/errors.rb +1 -1
  101. data/app/lib/katello/lazy_accessor.rb +1 -1
  102. data/app/lib/katello/resources/candlepin.rb +14 -0
  103. data/app/lib/katello/util/cdn_var_substitutor.rb +5 -2
  104. data/app/lib/katello/util/model.rb +1 -2
  105. data/app/lib/katello/util/package.rb +2 -2
  106. data/app/models/katello/activation_key.rb +0 -49
  107. data/app/models/katello/authorization/content_view_version.rb +7 -0
  108. data/app/models/katello/candlepin/content.rb +15 -3
  109. data/app/models/katello/concerns/container_extensions.rb +1 -2
  110. data/app/models/katello/concerns/content_facet_host_extensions.rb +11 -1
  111. data/app/models/katello/concerns/host_managed_extensions.rb +4 -13
  112. data/app/models/katello/concerns/hostgroup_extensions.rb +0 -2
  113. data/app/models/katello/concerns/medium_extensions.rb +2 -2
  114. data/app/models/katello/concerns/organization_extensions.rb +0 -5
  115. data/app/models/katello/concerns/pulp_database_unit.rb +5 -1
  116. data/app/models/katello/concerns/smart_proxy_extensions.rb +21 -1
  117. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +1 -2
  118. data/app/models/katello/content_view.rb +12 -6
  119. data/app/models/katello/content_view_component.rb +0 -3
  120. data/app/models/katello/content_view_environment.rb +2 -2
  121. data/app/models/katello/content_view_package_filter_rule.rb +13 -0
  122. data/app/models/katello/content_view_puppet_environment.rb +2 -2
  123. data/app/models/katello/content_view_repository.rb +2 -1
  124. data/app/models/katello/content_view_version.rb +9 -2
  125. data/app/models/katello/erratum.rb +1 -5
  126. data/app/models/katello/file_unit.rb +41 -0
  127. data/app/models/katello/glue/candlepin/activation_key.rb +2 -2
  128. data/app/models/katello/glue/candlepin/pool.rb +19 -14
  129. data/app/models/katello/glue/pulp/repo.rb +44 -10
  130. data/app/models/katello/host/content_facet.rb +6 -6
  131. data/app/models/katello/host/subscription_facet.rb +6 -8
  132. data/app/models/katello/kt_environment.rb +3 -5
  133. data/app/models/katello/package_group.rb +1 -3
  134. data/app/models/katello/pool.rb +7 -2
  135. data/app/models/katello/pool_with_quantities.rb +12 -0
  136. data/app/models/katello/product.rb +6 -0
  137. data/app/models/katello/provider.rb +1 -1
  138. data/app/models/katello/puppet_module.rb +1 -2
  139. data/app/models/katello/repository.rb +7 -3
  140. data/app/models/katello/repository_file.rb +9 -0
  141. data/app/models/katello/rpm.rb +1 -1
  142. data/app/models/katello/subscription_status.rb +1 -1
  143. data/app/models/katello/sync_plan.rb +2 -1
  144. data/app/models/katello/task_status.rb +3 -36
  145. data/app/models/setting/content.rb +4 -1
  146. data/app/overrides/add_activation_keys_input.rb +2 -2
  147. data/app/presenters/katello/activation_key_subscriptions_presenter.rb +10 -0
  148. data/app/services/katello/candlepin/consumer.rb +5 -1
  149. data/app/services/katello/pulp/file_unit.rb +13 -0
  150. data/app/views/dashboard/_errata_widget.html.erb +1 -1
  151. data/app/views/dashboard/_subscription_widget.html.erb +30 -8
  152. data/app/views/foreman/job_templates/install_errata.erb +1 -1
  153. data/app/views/katello/api/v2/activation_keys/product_content.json.rabl +1 -0
  154. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +2 -2
  155. data/app/views/katello/api/v2/content_facet/base.json.rabl +2 -4
  156. data/app/views/katello/api/v2/{systems → content_facet}/erratum.json.rabl +0 -0
  157. data/app/views/katello/api/v2/content_facet/show.json.rabl +1 -1
  158. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +5 -4
  159. data/app/views/katello/api/v2/environments/show.json.rabl +1 -1
  160. data/app/views/katello/api/v2/file_units/base.json.rabl +7 -0
  161. data/app/views/katello/api/v2/{systems → file_units}/index.json.rabl +1 -1
  162. data/app/views/katello/api/v2/file_units/show.json.rabl +3 -0
  163. data/app/views/katello/api/v2/host_errata/index.json.rabl +1 -1
  164. data/app/views/katello/api/v2/host_errata/show.json.rabl +1 -1
  165. data/app/views/katello/api/v2/package_groups/base.json.rabl +1 -1
  166. data/app/views/katello/api/v2/ping/show.json.rabl +1 -1
  167. data/app/views/katello/api/v2/repositories/base.json.rabl +2 -1
  168. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -1
  169. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
  170. data/app/views/katello/api/v2/subscription_facet/base_with_root.json.rabl +0 -4
  171. data/app/views/katello/api/v2/subscription_facet/show.json.rabl +1 -5
  172. data/app/views/katello/api/v2/subscriptions/base.json.rabl +3 -3
  173. data/app/views/katello/api/v2/subscriptions/index.json.rabl +1 -0
  174. data/app/views/katello/api/v2/tasks/task_status_show.json.rabl +0 -1
  175. data/app/views/katello/providers/redhat/show.html.erb +1 -1
  176. data/app/views/katello/sync_management/_products.html.erb +5 -1
  177. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +1 -9
  178. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +1 -0
  179. data/config/routes/api/v2.rb +9 -2
  180. data/config/routes/overrides.rb +9 -0
  181. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  182. data/db/migrate/20160617124149_remove_duplicate_view_filters.rb +38 -0
  183. data/db/migrate/20160627125310_delete_system.rb +7 -0
  184. data/db/migrate/20160722193256_add_verify_ssl_on_sync_to_repository.rb +9 -0
  185. data/db/migrate/20160727144242_add_registered_through_to_katello_subscription_facets.rb +5 -0
  186. data/db/migrate/20160808002834_add_files.rb +30 -0
  187. data/db/migrate/20160906181923_add_puppet_path_to_smart_proxy.rb +5 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.module.js +1 -0
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-associations.controller.js +7 -6
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-add-subscriptions.html +6 -2
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +4 -0
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +101 -102
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-subscriptions-list.html +3 -0
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/new/views/activation-key-new.html +82 -83
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/views/activation-keys.html +4 -0
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion-katello-bootstrap.js +1 -0
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.module.js +3 -1
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsules/capsules.module.js +4 -1
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/common.module.js +2 -0
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/registration.html +1 -0
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-action-subscriptions.controller.js +46 -72
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-action.controller.js +1 -2
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/bulk-actions-errata.html +5 -0
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/bulk-actions-host-collections.html +5 -0
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/bulk-actions-subscriptions.html +79 -33
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.module.js +1 -0
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-errata.controller.js +10 -0
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-errata.html +27 -15
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages.html +57 -45
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-subscriptions.controller.js +5 -18
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-base-subscriptions.controller.js +2 -3
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +2 -1
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-subscriptions.controller.js +3 -3
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-add-subscriptions.html +4 -0
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +117 -118
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +13 -8
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions-list.html +5 -0
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +5 -0
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.module.js +1 -0
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +26 -0
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +11 -4
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +1 -1
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +1 -1
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +3 -3
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +2 -2
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +2 -2
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +47 -0
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +8 -0
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +45 -0
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +4 -0
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +3 -0
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +6 -6
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/views/content-view-puppet-module-names.html +6 -0
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/views/content-view-puppet-modules.html +4 -0
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-composite-available-content-views.html +2 -1
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-composite-content-views-list.html +2 -1
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +151 -140
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +1 -1
  239. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +118 -0
  240. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +1 -1
  241. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +1 -1
  242. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +13 -2
  243. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +8 -0
  244. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-versions.module.js +1 -0
  245. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +8 -6
  246. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +22 -0
  247. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +6 -16
  248. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +4 -0
  249. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-manifests/docker-manifests.module.js +6 -1
  250. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/views/docker-tags-details.html +59 -61
  251. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/docker-tags.module.js +3 -0
  252. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/views/docker-tags.html +4 -0
  253. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +5 -0
  254. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-docker.html +4 -0
  255. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-errata.html +4 -0
  256. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-ostree.html +4 -0
  257. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-packages.html +4 -0
  258. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-puppet-modules.html +4 -0
  259. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-repositories.html +4 -0
  260. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.module.js +1 -0
  261. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/errata-content-hosts.controller.js +1 -1
  262. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/errata-details-content-hosts.html +6 -2
  263. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/errata-details-repositories.html +4 -0
  264. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/errata-details.html +44 -45
  265. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata.module.js +2 -0
  266. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/errata.html +5 -0
  267. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/details/gpg-key-details-info.controller.js +11 -0
  268. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/details/gpg-key-details.controller.js +1 -1
  269. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/details/views/gpg-key-details.html +52 -48
  270. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/details/views/gpg-key-info.html +1 -0
  271. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/details/views/gpg-key-products.html +1 -1
  272. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/details/views/gpg-key-repositories.html +1 -1
  273. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/gpg-keys.module.js +1 -0
  274. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/new/views/gpg-key-new.html +62 -63
  275. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/gpg-keys/views/gpg-keys.html +6 -3
  276. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-add-hosts.html +4 -0
  277. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-details.html +85 -86
  278. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-hosts-list.html +4 -0
  279. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/host-collections.module.js +1 -0
  280. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/new/views/host-collection-new.html +16 -17
  281. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/views/host-collections.html +5 -0
  282. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-bulk-action.factory.js +28 -0
  283. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-erratum.factory.js +1 -0
  284. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host.factory.js +1 -27
  285. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/hosts.module.js +3 -1
  286. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/organization.factory.js +0 -1
  287. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/organizations.module.js +4 -1
  288. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/ostree-branches-details-repositories.controller.js +60 -0
  289. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/ostree-branches-details.controller.js +31 -0
  290. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/views/ostree-branches-details-info.html +23 -0
  291. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/views/ostree-branches-details-repositories.html +83 -0
  292. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/views/ostree-branches-details.html +43 -0
  293. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branches.controller.js +67 -0
  294. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branches.module.js +5 -1
  295. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branches.routes.js +53 -0
  296. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/views/ostree-branches-table-collapsed.html +19 -0
  297. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/views/ostree-branches-table-full.html +21 -0
  298. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/views/ostree-branches.html +19 -0
  299. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/package-groups/package-groups.module.js +7 -1
  300. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package-details.controller.js +17 -2
  301. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/packages-details-info.html +10 -0
  302. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/packages-details-repositories.html +4 -0
  303. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/packages-details.html +51 -52
  304. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.module.js +3 -0
  305. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/views/packages.html +5 -0
  306. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/views/product-details.html +72 -73
  307. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/views/product-repositories.html +19 -7
  308. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery-create.html +144 -145
  309. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/new/views/product-new.html +17 -18
  310. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.module.js +1 -0
  311. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/views/products.html +4 -0
  312. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/details/views/puppet-modules-details.html +44 -40
  313. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/puppet-modules.module.js +7 -1
  314. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/views/puppet-modules.html +4 -0
  315. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/repositories/details/repository-details-info.controller.js +11 -5
  316. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/repositories/details/views/repository-info.html +343 -324
  317. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/repositories/new/new-repository.controller.js +4 -4
  318. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/repositories/new/views/repository-new.html +10 -0
  319. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/repositories/repositories.module.js +1 -0
  320. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/settings/settings.module.js +2 -0
  321. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/views/subscription-associations-content-hosts.html +2 -2
  322. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/views/subscription-details.html +46 -47
  323. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/manifest-import.controller.js +10 -0
  324. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest-import.html +1 -0
  325. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest.html +41 -42
  326. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscriptions-helper.service.js +15 -1
  327. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscriptions.module.js +1 -0
  328. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscriptions.html +4 -0
  329. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-details.html +54 -55
  330. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/sync-plans.module.js +1 -0
  331. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/views/sync-plans.html +4 -0
  332. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/tasks.module.js +3 -1
  333. data/engines/bastion_katello/lib/bastion_katello/engine.rb +1 -0
  334. data/lib/katello/engine.rb +11 -1
  335. data/lib/katello/permissions/host_permissions.rb +13 -1
  336. data/lib/katello/plugin.rb +20 -1
  337. data/lib/katello/tasks/reimport.rake +1 -0
  338. data/lib/katello/tasks/test.rake +8 -0
  339. data/lib/katello/tasks/unify_hosts.rake +91 -0
  340. data/lib/katello/tasks/upgrade_check.rake +3 -2
  341. data/lib/katello/tasks/upgrades/3.0/update_subscription_facet_backend_data.rake +2 -4
  342. data/lib/katello/version.rb +1 -1
  343. data/lib/proxy_api/pulp.rb +7 -0
  344. data/lib/proxy_api/pulp_node.rb +7 -0
  345. metadata +79 -67
  346. data/app/assets/javascripts/katello/common/jquery.jeditable.custominputs.js +0 -180
  347. data/app/assets/javascripts/katello/widgets/jquery.jeditable.helpers.js +0 -247
  348. data/app/assets/stylesheets/katello/widgets/_scrollpane.scss +0 -66
  349. data/app/controllers/katello/api/v2/systems_controller.rb +0 -213
  350. data/app/helpers/katello/activation_keys_helper.rb +0 -4
  351. data/app/helpers/katello/host_collection_events_helper.rb +0 -7
  352. data/app/helpers/katello/katello_form_builder.rb +0 -150
  353. data/app/helpers/katello/packages_helper.rb +0 -67
  354. data/app/helpers/katello/subscriptions_helper.rb +0 -32
  355. data/app/helpers/katello/system_events_helper.rb +0 -4
  356. data/app/helpers/katello/system_packages_helper.rb +0 -42
  357. data/app/lib/actions/katello/repository/incremental_import.rb +0 -61
  358. data/app/lib/actions/katello/subscription/subscribe.rb +0 -26
  359. data/app/lib/actions/katello/system/destroy.rb +0 -17
  360. data/app/lib/actions/katello/system/reassign.rb +0 -14
  361. data/app/models/katello/authorization/system.rb +0 -53
  362. data/app/models/katello/glue/candlepin/consumer.rb +0 -386
  363. data/app/models/katello/glue/pulp/consumer.rb +0 -171
  364. data/app/models/katello/hypervisor.rb +0 -15
  365. data/app/models/katello/system.rb +0 -283
  366. data/app/models/katello/system_activation_key.rb +0 -8
  367. data/app/models/katello/system_repository.rb +0 -8
  368. data/app/presenters/katello/activation_key_subscription_presenter.rb +0 -10
  369. data/app/views/katello/api/v2/errata/_applicable_errata.json.rabl +0 -3
  370. data/app/views/katello/api/v2/subscriptions/create.json.rabl +0 -3
  371. data/app/views/katello/api/v2/systems/_pool.json.rabl +0 -6
  372. data/app/views/katello/api/v2/systems/activate.json.rabl +0 -3
  373. data/app/views/katello/api/v2/systems/add_host_collections.json.rabl +0 -3
  374. data/app/views/katello/api/v2/systems/available_host_collections.json.rabl +0 -5
  375. data/app/views/katello/api/v2/systems/base.json.rabl +0 -35
  376. data/app/views/katello/api/v2/systems/enabled_repos.json.rabl +0 -3
  377. data/app/views/katello/api/v2/systems/events.json.rabl +0 -3
  378. data/app/views/katello/api/v2/systems/package.json.rabl +0 -5
  379. data/app/views/katello/api/v2/systems/package_profile.json.rabl +0 -7
  380. data/app/views/katello/api/v2/systems/pools.json.rabl +0 -7
  381. data/app/views/katello/api/v2/systems/regenerate_identity_certificates.json.rabl +0 -3
  382. data/app/views/katello/api/v2/systems/remove_host_collections.json.rabl +0 -3
  383. data/app/views/katello/api/v2/systems/show.json.rabl +0 -64
  384. data/app/views/katello/api/v2/systems/subscriptions.json.rabl +0 -8
  385. data/app/views/katello/api/v2/systems/upload_package_profile.json.rabl +0 -3
  386. data/db/seeds.d/105-roles_permissions.rb +0 -71
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host.factory.js +0 -25
  388. data/lib/katello/permissions/content_host_permissions.rb +0 -30
  389. data/lib/katello/tasks/yard.rake +0 -9
  390. data/vendor/assets/stylesheets/katello/jquery.jscrollpane.css +0 -120
@@ -1,24 +1,23 @@
1
1
  <span page-title>{{ 'New Product' | translate }}</span>
2
2
 
3
- <div class="loading-mask loading-mask-panel" ng-show="panel.loading">
4
- <i class="fa fa-spinner fa-spin"></i>
5
- {{ "Loading..." | translate }}
6
- </div>
3
+ <div data-extend-template="layouts/panel.html">
4
+ <div data-block="panel">
5
+ <section class="nutupane-details" ng-cloak bst-container-scroll>
6
+ <header class="new-header details-header">
7
+ <h2 class="fl" translate>New Product</h2>
7
8
 
8
- <section class="nutupane-details" ng-cloak bst-container-scroll>
9
- <header class="new-header details-header">
10
- <h2 class="fl" translate>New Product</h2>
9
+ <div class="fr">
10
+ <button class="btn btn-default" ui-sref="products.index">
11
+ <i class="fa fa-remove"></i>
12
+ {{ "Close" | translate }}
13
+ </button>
14
+ </div>
15
+ </header>
11
16
 
12
- <div class="fr">
13
- <button class="btn btn-default" ui-sref="products.index">
14
- <i class="fa fa-remove"></i>
15
- {{ "Close" | translate }}
16
- </button>
17
- </div>
18
- </header>
17
+ <div bst-alerts error-messages="errorMessages" success-messages="successMessages"></div>
19
18
 
20
- <div bst-alerts error-messages="errorMessages" success-messages="successMessages"></div>
19
+ <div ui-view></div>
21
20
 
22
- <div ui-view></div>
23
-
24
- </section>
21
+ </section>
22
+ </div>
23
+ </div>
@@ -9,6 +9,7 @@ angular.module('Bastion.products', [
9
9
  'ngResource',
10
10
  'ui.router',
11
11
  'Bastion',
12
+ 'Bastion.i18n',
12
13
  'Bastion.utils',
13
14
  'Bastion.components',
14
15
  'Bastion.sync-plans',
@@ -32,4 +32,8 @@
32
32
  You currently don't have any Products<span bst-feature-flag="custom_products">, you can add Products using the button on the right</span>.
33
33
  </span>
34
34
 
35
+ <span data-block="no-search-results-message">
36
+ Your search returned zero Products.
37
+ </span>
38
+
35
39
  </div>
@@ -1,48 +1,52 @@
1
1
  <span page-title ng-model="puppetModule">{{ 'Puppet Module: ' | translate }} {{ puppetModule.name }}</span>
2
2
 
3
- <section class="nutupane-details" ng-cloak bst-container-scroll>
4
- <div ng-show="panel.error" bst-alerts success-messages="successMessages" error-messages="errorMessages"></div>
3
+ <div data-extend-template="layouts/panel.html">
4
+ <div data-block="panel">
5
+ <section class="nutupane-details" ng-cloak bst-container-scroll>
6
+ <div ng-show="panel.error" bst-alerts success-messages="successMessages" error-messages="errorMessages"></div>
5
7
 
6
- <div ng-hide="panel.error">
7
- <header class="details-header">
8
- <h2 class="fl">{{ puppetModule.name }}</h2>
8
+ <div ng-hide="panel.error">
9
+ <header class="details-header">
10
+ <h2 class="fl">{{ puppetModule.name }}</h2>
9
11
 
10
- <div class="details-actions fr">
11
- <button class="btn btn-default" ui-sref="puppet-modules.index">
12
- <i class="fa fa-remove"></i>
13
- {{ "Close" | translate }}
14
- </button>
15
- </div>
16
- </header>
12
+ <div class="details-actions fr">
13
+ <button class="btn btn-default" ui-sref="puppet-modules.index">
14
+ <i class="fa fa-remove"></i>
15
+ {{ "Close" | translate }}
16
+ </button>
17
+ </div>
18
+ </header>
17
19
 
18
- <nav class="details-navigation">
19
- <ul>
20
- <li ng-class="{active: isState('puppet-modules.details.info')}">
21
- <a ui-sref="puppet-modules.details.info">
22
- <span translate>
23
- Details
24
- </span>
25
- </a>
26
- </li>
27
- <li ng-show="permitted('view_products')" ng-class="{active: isState('puppet-modules.details.repositories')}">
28
- <a ui-sref="puppet-modules.details.repositories">
29
- <span translate>
30
- Library Repositories
31
- </span>
32
- </a>
33
- </li>
34
- <li ng-show="permitted('view_content_views')" ng-class="{active: isState('puppet-modules.details.content-views')}">
35
- <a ui-sref="puppet-modules.details.content-views">
36
- <span translate>
37
- Content Views
38
- </span>
39
- </a>
40
- </li>
41
- </ul>
42
- </nav>
20
+ <nav class="details-navigation">
21
+ <ul>
22
+ <li ng-class="{active: isState('puppet-modules.details.info')}">
23
+ <a ui-sref="puppet-modules.details.info">
24
+ <span translate>
25
+ Details
26
+ </span>
27
+ </a>
28
+ </li>
29
+ <li ng-show="permitted('view_products')" ng-class="{active: isState('puppet-modules.details.repositories')}">
30
+ <a ui-sref="puppet-modules.details.repositories">
31
+ <span translate>
32
+ Library Repositories
33
+ </span>
34
+ </a>
35
+ </li>
36
+ <li ng-show="permitted('view_content_views')" ng-class="{active: isState('puppet-modules.details.content-views')}">
37
+ <a ui-sref="puppet-modules.details.content-views">
38
+ <span translate>
39
+ Content Views
40
+ </span>
41
+ </a>
42
+ </li>
43
+ </ul>
44
+ </nav>
43
45
 
44
- <div bst-alerts success-messages="successMessages" error-messages="errorMessages"></div>
46
+ <div bst-alerts success-messages="successMessages" error-messages="errorMessages"></div>
45
47
 
46
- <section ui-view></section>
48
+ <section ui-view></section>
49
+ </div>
50
+ </section>
47
51
  </div>
48
- </section>
52
+ </div>
@@ -9,6 +9,12 @@
9
9
  * Module for Puppet Module related functionality.
10
10
  */
11
11
  angular
12
- .module('Bastion.puppet-modules', ['Bastion', 'Bastion.common']);
12
+ .module('Bastion.puppet-modules', [
13
+ 'ngResource',
14
+ 'ui.router',
15
+ 'Bastion',
16
+ 'Bastion.common',
17
+ 'Bastion.i18n'
18
+ ]);
13
19
 
14
20
  })();
@@ -13,4 +13,8 @@
13
13
  You currently don't have any Puppet Modules.
14
14
  </span>
15
15
 
16
+ <span data-block="no-search-results-message">
17
+ Your search returned zero Puppet Modules.
18
+ </span>
19
+
16
20
  </div>
@@ -99,11 +99,7 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
99
99
  $scope.repository.$get();
100
100
  updateRepositoriesTable();
101
101
  } else {
102
- if (angular.isString(returnData) && returnData.indexOf("Request Entity Too Large")) {
103
- error = translate('File too large. Please use the CLI instead.');
104
- } else {
105
- error = returnData.displayMessage;
106
- }
102
+ error = returnData.displayMessage;
107
103
  $scope.uploadErrorMessages = [translate('Error during upload: ') + error];
108
104
  }
109
105
 
@@ -111,6 +107,16 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
111
107
  }
112
108
  };
113
109
 
110
+ $scope.uploadError = function (error, content) {
111
+ if (angular.isString(content) && content.indexOf("Request Entity Too Large")) {
112
+ error = translate('File too large. Please use the CLI instead.');
113
+ } else {
114
+ error = content;
115
+ }
116
+ $scope.uploadErrorMessages = [translate('Error during upload: ') + error];
117
+ $scope.progress.uploading = false;
118
+ };
119
+
114
120
  $scope.syncInProgress = function (task) {
115
121
  var inProgress = false;
116
122
  if (task && (task.state === 'pending' || task.state === 'running')) {
@@ -1,371 +1,390 @@
1
1
  <span page-title ng-model="repository">{{ 'Repository:' | translate }} {{ repository.name }}</span>
2
- <div class="loading-mask loading-mask-panel fa-3x" ng-show="panel.loading">
3
- <i class="fa fa-spinner fa-spin"></i>
4
- {{ "Loading..." | translate }}
5
- </div>
6
2
 
7
3
  <div bst-alerts success-messages="successMessages" error-messages="errorMessages"></div>
8
4
 
9
- <div ng-hide="panel.error">
10
- <div>
11
- <a ui-sref="products.details.repositories.index({productId: product.id})">
12
- <i class="fa fa-double-angle-left"></i>
13
- {{ "Back to Repository List" | translate }}
14
- </a>
15
-
16
- <div class="fr">
17
- <button class="btn btn-default"
18
- ui-sref="products.details.repositories.manage-content.packages({productId: product.id, repositoryId: repository.id})"
19
- ng-hide="repository.content_type !== 'yum' || denied('edit_products', product)">
20
- <span translate>Manage Packages</span>
21
- </button>
22
-
23
- <button class="btn btn-default"
24
- ui-sref="products.details.repositories.manage-content.puppet-modules({productId: product.id, repositoryId: repository.id})"
25
- ng-hide="repository.content_type !== 'puppet' || denied('edit_products', product)">
26
- <span translate>Manage Puppet Modules</span>
27
- </button>
28
-
29
- <button class="btn btn-default"
30
- ui-sref="products.details.repositories.manage-content.docker-manifests({productId: product.id, repositoryId: repository.id})"
31
- ng-hide="repository.content_type !== 'docker' || denied('edit_products', product)">
32
- <span translate>Manage Docker Manifests</span>
33
- </button>
34
-
35
- <button class="btn btn-default"
36
- ui-sref="products.details.repositories.manage-content.ostree-branches({productId: product.id, repositoryId: repository.id})"
37
- ng-hide="repository.content_type !== 'ostree' || denied('edit_products', product)">
38
- <span translate>View Branches</span>
39
- </button>
40
-
41
- <button class="btn btn-default"
42
- ng-click="syncRepository(repository); working = true"
43
- ng-hide="!repository.url || denied('sync_products', product)"
44
- ng-disabled="syncInProgress(repository.last_sync)">
45
- <i class="fa fa-refresh"></i>
46
- <span translate>Sync Now</span>
47
- </button>
48
-
49
- <div bst-modal="removeRepository(repository)" model="repository">
50
- <div data-block="modal-header" translate>Remove Repository "{{ repository.name }}"?</div>
51
- <div data-block="modal-body" translate>Are you sure you want to remove repository "{{ repository.name }}"?</div>
52
- </div>
53
-
54
- <span ng-switch="getRepoNonDeletableReason(repository, product)">
55
- <i class="fa fa-question-sign" ng-switch-when="permissions"
56
- tooltip="{{ 'You cannot remove this repository because you do not have permission.' | translate }}"
57
- tooltip-animation="false"
58
- tooltip-placement="left"
59
- tooltip-append-to-body="true">
60
- </i>
61
- <i class="fa fa-question-sign" ng-switch-when="published"
62
- tooltip="{{ 'You cannot remove this repository because it was published to a content view.' | translate }}"
63
- tooltip-animation="false"
64
- tooltip-placement="left"
65
- tooltip-append-to-body="true">
66
- </i>
67
- <i class="fa fa-question-sign" ng-switch-when="redhat"
68
- tooltip="{{ 'You cannot remove this repository because it is a Red Hat repository.' | translate }}"
69
- tooltip-animation="false"
70
- tooltip-placement="left"
71
- tooltip-append-to-body="true">
72
- </i>
73
- </span>
74
-
75
- <button class="btn btn-default"
76
- ng-click="openModal()"
77
- ng-show="canRemove(repository, product)">
78
- {{ "Remove Repository" | translate }}
79
- </button>
80
- </div>
81
-
82
- </div>
83
-
84
- <div class="details fl">
85
- <section>
86
-
87
- <h4 translate>Basic Information</h4>
88
-
89
- <div class="detail">
90
- <span class="info-label" translate>Name</span>
91
- <span class="info-value"
92
- bst-edit-text="repository.name"
93
- on-save="save(repository)"
94
- readonly="product.redhat || denied('edit_products', product)">
95
- </span>
96
- </div>
5
+ <div data-extend-template="layouts/panel.html">
6
+ <div data-block="panel">
7
+
8
+ <div ng-hide="panel.error">
9
+ <div>
10
+ <a ui-sref="products.details.repositories.index({productId: product.id})">
11
+ <i class="fa fa-double-angle-left"></i>
12
+ {{ "Back to Repository List" | translate }}
13
+ </a>
14
+
15
+ <div class="fr">
16
+ <button class="btn btn-default"
17
+ ui-sref="products.details.repositories.manage-content.packages({productId: product.id, repositoryId: repository.id})"
18
+ ng-hide="repository.content_type !== 'yum' || denied('edit_products', product)">
19
+ <span translate>Manage Packages</span>
20
+ </button>
97
21
 
98
- <div class="detail">
99
- <span class="info-label" translate>Label</span>
100
- <span class="info-value">{{ repository.label }}</span>
101
- </div>
22
+ <button class="btn btn-default"
23
+ ui-sref="products.details.repositories.manage-content.puppet-modules({productId: product.id, repositoryId: repository.id})"
24
+ ng-hide="repository.content_type !== 'puppet' || denied('edit_products', product)">
25
+ <span translate>Manage Puppet Modules</span>
26
+ </button>
102
27
 
103
- <div class="detail">
104
- <span class="info-label" translate>Type</span>
105
- <span class="info-value">{{ repository.content_type }}</span>
106
- </div>
28
+ <button class="btn btn-default"
29
+ ui-sref="products.details.repositories.manage-content.docker-manifests({productId: product.id, repositoryId: repository.id})"
30
+ ng-hide="repository.content_type !== 'docker' || denied('edit_products', product)">
31
+ <span translate>Manage Docker Manifests</span>
32
+ </button>
107
33
 
108
- <div class="detail">
109
- <span ng-show="repository.content_type !== 'docker'" class="info-label" translate>URL</span>
110
- <span ng-show="repository.content_type === 'docker'" class="info-label" translate>Registry URL</span>
111
- <span class="info-value"
112
- bst-edit-text="repository.url"
113
- on-save="save(repository)"
114
- readonly="product.redhat || denied('edit_products', product)">
115
- </span>
116
- </div>
34
+ <button class="btn btn-default"
35
+ ui-sref="products.details.repositories.manage-content.ostree-branches({productId: product.id, repositoryId: repository.id})"
36
+ ng-hide="repository.content_type !== 'ostree' || denied('edit_products', product)">
37
+ <span translate>View Branches</span>
38
+ </button>
117
39
 
118
- <div class="detail" ng-show="repository.content_type === 'docker'" >
119
- <span class="info-label" translate>Upstream Repository Name</span>
120
- <span class="info-value"
121
- bst-edit-text="repository.docker_upstream_name"
122
- on-save="save(repository)"
123
- readonly="product.redhat || denied('edit_products', product)">
124
- </span>
125
- </div>
40
+ <button class="btn btn-default"
41
+ ng-click="syncRepository(repository); working = true"
42
+ ng-hide="!repository.url || denied('sync_products', product)"
43
+ ng-disabled="syncInProgress(repository.last_sync)">
44
+ <i class="fa fa-refresh"></i>
45
+ <span translate>Sync Now</span>
46
+ </button>
126
47
 
127
- <div class="detail" ng-show="repository.content_type === 'yum'">
128
- <span class="info-label" translate>Yum Metadata Checksum</span>
129
- <span class="info-value"
130
- bst-edit-select="checksumTypeDisplay(repository.checksum_type)"
131
- readonly="product.redhat || denied('edit_products', product)"
132
- selector="repository.checksum_type"
133
- options="checksums"
134
- on-save="save(repository)">
135
- </span>
136
- </div>
48
+ <div bst-modal="removeRepository(repository)" model="repository">
49
+ <div data-block="modal-header" translate>Remove Repository "{{ repository.name }}"?</div>
50
+ <div data-block="modal-body" translate>Are you sure you want to remove repository "{{ repository.name }}"?</div>
51
+ </div>
137
52
 
138
- <div class="detail" ng-show="repository.content_type === 'yum'">
139
- <span class="info-label" translate>Mirror on Sync</span>
140
- <span class="info-value"
141
- bst-edit-checkbox="repository.mirror_on_sync"
142
- formatter="booleanToYesNo"
143
- on-save="save(repository)"
144
- readonly="denied('edit_products', product)">
145
- </span>
146
- </div>
53
+ <span ng-switch="getRepoNonDeletableReason(repository, product)">
54
+ <i class="fa fa-question-sign" ng-switch-when="permissions"
55
+ tooltip="{{ 'You cannot remove this repository because you do not have permission.' | translate }}"
56
+ tooltip-animation="false"
57
+ tooltip-placement="left"
58
+ tooltip-append-to-body="true">
59
+ </i>
60
+ <i class="fa fa-question-sign" ng-switch-when="published"
61
+ tooltip="{{ 'You cannot remove this repository because it was published to a content view.' | translate }}"
62
+ tooltip-animation="false"
63
+ tooltip-placement="left"
64
+ tooltip-append-to-body="true">
65
+ </i>
66
+ <i class="fa fa-question-sign" ng-switch-when="redhat"
67
+ tooltip="{{ 'You cannot remove this repository because it is a Red Hat repository.' | translate }}"
68
+ tooltip-animation="false"
69
+ tooltip-placement="left"
70
+ tooltip-append-to-body="true">
71
+ </i>
72
+ </span>
73
+
74
+ <button class="btn btn-default"
75
+ ng-click="openModal()"
76
+ ng-show="canRemove(repository, product)">
77
+ {{ "Remove Repository" | translate }}
78
+ </button>
79
+ </div>
147
80
 
148
- <div class="detail">
149
- <span class="info-label" translate>Publish via HTTPS</span>
150
- <span class="info-value" translate>Yes</span>
151
81
  </div>
152
82
 
153
- <div class="detail" ng-hide="repository.content_type === 'ostree'">
154
- <span class="info-label" translate>Publish via HTTP</span>
155
- <span class="info-value"
156
- bst-edit-checkbox="repository.unprotected"
157
- formatter="booleanToYesNo"
158
- on-save="save(repository)"
159
- readonly="product.redhat || denied('edit_products', product)">
160
- </span>
161
- </div>
83
+ <div class="details fl">
84
+ <section>
162
85
 
163
- <div class="detail">
164
- <span class="info-label" translate>Published At</span>
165
- <span class="info-value">
166
- <a ng-href="{{ repository.full_path }}">{{ repository.full_path }}</a>
86
+ <h4 translate>Basic Information</h4>
167
87
 
168
- <p bst-alert='info' ng-hide="repository.unprotected">
169
- <span translate>
170
- In order to browse this repository you must <a ng-href="/organizations/{{ organization }}/edit">download the certificate</a>
171
- or ask your admin for a certificate.
88
+ <div class="detail">
89
+ <span class="info-label" translate>Name</span>
90
+ <span class="info-value"
91
+ bst-edit-text="repository.name"
92
+ on-save="save(repository)"
93
+ readonly="product.redhat || denied('edit_products', product)">
172
94
  </span>
173
- </p>
174
- </span>
175
- </div>
95
+ </div>
176
96
 
177
- <div class="detail" ng-if="repository.content_type === 'yum' && !product.redhat">
178
- <span class="info-label" translate>GPG Key</span>
179
- <span class="info-value"
180
- bst-edit-select="repository.gpg_key.name"
181
- readonly="product.redhat ||denied('edit_products', product)"
182
- selector="repository.gpg_key_id"
183
- options="gpgKeys()"
184
- on-save="save(repository)">
185
- </span>
186
- </div>
97
+ <div class="detail">
98
+ <span class="info-label" translate>Label</span>
99
+ <span class="info-value">{{ repository.label }}</span>
100
+ </div>
187
101
 
188
- <div class="detail" ng-if="repository.content_type == 'yum'">
189
- <span class="info-label" translate>Download Policy</span>
190
- <span class="info-value"
191
- bst-edit-select="downloadPolicyDisplay(repository.download_policy)"
192
- readonly="denied('edit_products', product)"
193
- selector="repository.download_policy"
194
- options="downloadPolicies"
195
- options-format="id as name for (id, name) in options"
196
- on-save="save(repository)">
197
- </span>
198
- </div>
102
+ <div class="detail">
103
+ <span class="info-label" translate>Type</span>
104
+ <span class="info-value">{{ repository.content_type }}</span>
105
+ </div>
199
106
 
200
- <div class="divider"></div>
201
- </section>
107
+ <div class="detail">
108
+ <span ng-show="repository.content_type !== 'docker'" class="info-label" translate>URL</span>
109
+ <span ng-show="repository.content_type === 'docker'" class="info-label" translate>Registry URL</span>
110
+ <span class="info-value"
111
+ bst-edit-text="repository.url"
112
+ on-save="save(repository)"
113
+ readonly="product.redhat || denied('edit_products', product)">
114
+ </span>
115
+ </div>
202
116
 
203
- <section>
204
- <h4 translate>Sync Status</h4>
117
+ <div class="detail" ng-show="repository.content_type === 'docker'" >
118
+ <span class="info-label" translate>Upstream Repository Name</span>
119
+ <span class="info-value"
120
+ bst-edit-text="repository.docker_upstream_name"
121
+ on-save="save(repository)"
122
+ readonly="product.redhat || denied('edit_products', product)">
123
+ </span>
124
+ </div>
205
125
 
206
- <div ng-include="'products/details/partials/sync-status.html'"></div>
126
+ <div class="detail">
127
+ <span class="info-label" translate>Verify SSL</span>
128
+ <span class="info-value"
129
+ bst-edit-checkbox="repository.verify_ssl_on_sync"
130
+ formatter="booleanToYesNo"
131
+ on-save="save(repository)"
132
+ readonly="denied('edit_products', product)">
133
+ </span>
134
+ </div>
207
135
 
208
- <div class="detail">
209
- <span class="info-label" translate>Last Sync</span>
210
- <span class="info-value" translate>
211
- {{ repository.last_sync_words }} Ago ({{ repository.last_sync.ended_at | date:'medium' }} Local Time)
212
- </span>
213
- </div>
136
+ <div class="detail" ng-show="repository.content_type === 'yum'">
137
+ <span class="info-label" translate>Yum Metadata Checksum</span>
138
+ <span class="info-value"
139
+ bst-edit-select="checksumTypeDisplay(repository.checksum_type)"
140
+ readonly="product.redhat || denied('edit_products', product)"
141
+ selector="repository.checksum_type"
142
+ options="checksums"
143
+ on-save="save(repository)">
144
+ </span>
145
+ </div>
214
146
 
215
- <div class="detail">
216
- <span class="info-label" translate>Next Sync</span>
217
- <span class="info-value" ng-show="repository.product.sync_plan.next_sync" translate>
218
- {{ repository.product.sync_plan.next_sync | date:'medium' }} (Server Time)
219
- </span>
220
- <span class="info-value" ng-hide="repository.product.sync_plan.next_sync" translate>
221
- Synced manually, no interval set.
222
- </span>
223
- </div>
147
+ <div class="detail" ng-show="repository.content_type === 'yum'">
148
+ <span class="info-label" translate>Mirror on Sync</span>
149
+ <span class="info-value"
150
+ bst-edit-checkbox="repository.mirror_on_sync"
151
+ formatter="booleanToYesNo"
152
+ on-save="save(repository)"
153
+ readonly="denied('edit_products', product)">
154
+ </span>
155
+ </div>
224
156
 
225
- <div class="detail">
226
- <span class="info-label" translate>Sync State</span>
227
- <span class="info-value">
228
- <a href="/foreman_tasks/tasks/{{repository.last_sync.id}}">{{ repository.last_sync.result }}</a>
229
- </span>
230
- </div>
231
- </section>
157
+ <div class="detail">
158
+ <span class="info-label" translate>Publish via HTTPS</span>
159
+ <span class="info-value" translate>Yes</span>
160
+ </div>
232
161
 
233
- </div>
162
+ <div class="detail" ng-hide="repository.content_type === 'ostree'">
163
+ <span class="info-label" translate>Publish via HTTP</span>
164
+ <span class="info-value"
165
+ bst-edit-checkbox="repository.unprotected"
166
+ formatter="booleanToYesNo"
167
+ on-save="save(repository)"
168
+ readonly="product.redhat || denied('edit_products', product)">
169
+ </span>
170
+ </div>
234
171
 
235
- <div class="details fl">
236
-
237
- <section ng-if="repository.content_type !== 'file'">
238
- <h4 translate>Content Counts</h4>
239
-
240
- <table class="table table-striped">
241
- <thead>
242
- <tr>
243
- <th colspan="2" translate>Content Type</th>
244
- </tr>
245
- </thead>
246
-
247
- <tbody>
248
- <tr ng-show="repository.content_type === 'yum'">
249
- <td translate>Packages</td>
250
- <td class="align-center">
251
- <a ui-sref="products.details.repositories.manage-content.packages({productId: product.id, repositoryId: repository.id})">
252
- {{ repository.content_counts.rpm || 0 }}
253
- </a>
254
- </td>
255
- </tr>
256
- <tr ng-show="repository.content_type === 'yum'">
257
- <td translate>Errata</td>
258
- <td class="align-center">
259
- <a ui-sref="errata.index({repositoryId: repository.id})">
260
- {{ repository.content_counts.erratum || 0 }}
261
- </a>
262
- </td>
263
- </tr>
264
- <tr ng-show="repository.content_type === 'yum'">
265
- <td translate>Package Groups</td>
266
- <td class="align-center">
267
- <a ui-sref="products.details.repositories.manage-content.package-groups({productId: product.id, repositoryId: repository.id})">
268
- {{ repository.content_counts.package_group || 0 }}
269
- </a>
270
- </td>
271
- </tr>
272
- <tr ng-show="repository.content_type === 'puppet'">
273
- <td translate>Puppet Modules</td>
274
- <td class="align-center">
275
- <a ui-sref="products.details.repositories.manage-content.puppet-modules({productId: product.id, repositoryId: repository.id})">
276
- {{ repository.content_counts.puppet_module || 0 }}
277
- </a>
278
- </td>
279
- </tr>
280
- <tr ng-show="repository.content_type === 'docker'">
281
- <td translate>Docker Manifests</td>
282
- <td class="align-center">{{ repository.content_counts.docker_manifest || 0 }}</td>
283
- </tr>
284
- <tr ng-show="repository.content_type === 'docker'">
285
- <td translate>Docker Tags</td>
286
- <td class="align-center">{{ repository.content_counts.docker_tag || 0 }}</td>
287
- </tr>
288
- <tr ng-show="repository.content_type === 'ostree'">
289
- <td translate>OSTree Branches</td>
290
- <td class="align-center">{{ repository.content_counts.ostree_branch || 0 }}</td>
291
- </tr>
292
- </tbody>
293
- </table>
294
-
295
- <div class="divider" ng-if="repository.content_type === 'ostree'"/>
296
- </section>
297
-
298
- <section class="well" ng-if="permitted('edit_products', product) && !product.redhat && repository.content_type !== 'docker' && repository.content_type !== 'ostree'">
299
- <h5 translate ng-show="repository.content_type === 'puppet'">Upload Puppet Module</h5>
300
- <h5 translate ng-show="repository.content_type === 'yum'">Upload Package</h5>
301
- <h5 translate ng-show="repository.content_type === 'file'">Upload File</h5>
302
-
303
- <div bst-alerts success-messages="uploadSuccessMessages" error-messages="uploadErrorMessages"></div>
304
-
305
- <form role="form"
306
- action="{{ uploadURL }}"
307
- ng-upload="uploadContent(content)"
308
- upload-options-enable-controls
309
- upload-options-enable-rails-csrf>
310
-
311
- <div class="form-group">
312
- <input type="file" name="content[]" ng-hide="denied('edit_products', product)" multiple/>
313
- </div>
172
+ <div class="detail">
173
+ <span class="info-label" translate>Published At</span>
174
+ <span class="info-value">
175
+ <a ng-href="{{ repository.full_path }}">{{ repository.full_path }}</a>
176
+
177
+ <p bst-alert='info' ng-hide="repository.unprotected">
178
+ <span translate>
179
+ In order to browse this repository you must <a ng-href="/organizations/{{ organization }}/edit">download the certificate</a>
180
+ or ask your admin for a certificate.
181
+ </span>
182
+ </p>
183
+ </span>
184
+ </div>
314
185
 
315
- <div class="form-group">
316
- <button class="btn btn-primary"
317
- ng-hide="denied('edit_products', product)"
318
- upload-submit ng-click="progress.uploading = true">
319
- <i class="fa fa-spinner fa-spin" ng-show="progress.uploading"></i>
320
- <span ng-show="progress.uploading" translate>Uploading...</span>
321
- <span ng-hide="progress.uploading" translate>Upload</span>
322
- </button>
323
- </div>
186
+ <div class="detail" ng-if="repository.content_type === 'yum' && !product.redhat">
187
+ <span class="info-label" translate>GPG Key</span>
188
+ <span class="info-value"
189
+ bst-edit-select="repository.gpg_key.name"
190
+ readonly="product.redhat ||denied('edit_products', product)"
191
+ selector="repository.gpg_key_id"
192
+ options="gpgKeys()"
193
+ on-save="save(repository)">
194
+ </span>
195
+ </div>
324
196
 
325
- </form>
326
- </section>
197
+ <div class="detail" ng-if="repository.content_type == 'yum'">
198
+ <span class="info-label" translate>Download Policy</span>
199
+ <span class="info-value"
200
+ bst-edit-select="downloadPolicyDisplay(repository.download_policy)"
201
+ readonly="denied('edit_products', product)"
202
+ selector="repository.download_policy"
203
+ options="downloadPolicies"
204
+ options-format="id as name for (id, name) in options"
205
+ on-save="save(repository)">
206
+ </span>
207
+ </div>
327
208
 
328
- <section ng-show="repository.content_type === 'yum'">
329
- <div class="divider"></div>
330
- <h4 translate>Distribution Information</h4>
209
+ <div class="divider"></div>
210
+ </section>
331
211
 
332
- <div class="detail" >
333
- <span class="info-value" ng-hide="repository.distribution_version ||
334
- repository.distribution_arch ||
335
- repository.distribution_family ||
336
- repository.distribution_variant">No distribution available</span>
212
+ <section>
213
+ <h4 translate>Sync Status</h4>
337
214
 
338
- <section ng-show="repository.distribution_version ||
339
- repository.distribution_arch ||
340
- repository.distribution_family ||
341
- repository.distribution_variant">
215
+ <div ng-include="'products/details/partials/sync-status.html'"></div>
342
216
 
343
217
  <div class="detail">
344
- <span class="info-label" translate>Version</span>
345
- <span class="info-value">{{ repository.distribution_version }}</span>
218
+ <span class="info-label" translate>Last Sync</span>
219
+ <span class="info-value" ng-show="repository.last_sync == null" translate>
220
+ Not Synced
221
+ </span>
222
+ <span class="info-value" ng-hide="repository.last_sync == null || repository.last_sync.ended_at == null" translate>
223
+ {{ repository.last_sync_words }} Ago ({{ repository.last_sync.ended_at | date:'medium' }} Local Time)
224
+ </span>
346
225
  </div>
347
226
 
348
227
  <div class="detail">
349
- <span class="info-label" translate>Architecture</span>
350
- <span class="info-value">{{ repository.distribution_arch}}</span>
228
+ <span class="info-label" translate>Next Sync</span>
229
+ <span class="info-value" ng-show="repository.product.sync_plan.next_sync" translate>
230
+ {{ repository.product.sync_plan.next_sync | date:'medium' }} (Server Time)
231
+ </span>
232
+ <span class="info-value" ng-hide="repository.product.sync_plan.next_sync" translate>
233
+ Synced manually, no interval set.
234
+ </span>
351
235
  </div>
352
236
 
353
237
  <div class="detail">
354
- <span class="info-label" translate>Family</span>
355
- <span class="info-value">{{ repository.distribution_family}}</span>
238
+ <span class="info-label" translate>Sync State</span>
239
+ <span class="info-value">
240
+ <a href="/foreman_tasks/tasks/{{repository.last_sync.id}}">{{ repository.last_sync.result }}</a>
241
+ </span>
356
242
  </div>
243
+ </section>
357
244
 
358
- <div class="detail">
359
- <span class="info-label" translate>Variant</span>
360
- <span class="info-value">{{ repository.distribution_variant}}</span>
361
- </div>
245
+ </div>
362
246
 
363
- <div class="detail">
364
- <span class="info-label" translate>Bootable</span>
365
- <span class="info-value">{{ repository.distribution_bootable}}</span>
247
+ <div class="details fl">
248
+
249
+ <section>
250
+ <h4 translate>Content Counts</h4>
251
+
252
+ <table class="table table-striped">
253
+ <thead>
254
+ <tr>
255
+ <th colspan="2" translate>Content Type</th>
256
+ </tr>
257
+ </thead>
258
+
259
+ <tbody>
260
+ <tr ng-show="repository.content_type === 'yum'">
261
+ <td translate>Packages</td>
262
+ <td class="align-center">
263
+ <a ui-sref="products.details.repositories.manage-content.packages({productId: product.id, repositoryId: repository.id})">
264
+ {{ repository.content_counts.rpm || 0 }}
265
+ </a>
266
+ </td>
267
+ </tr>
268
+ <tr ng-show="repository.content_type === 'yum'">
269
+ <td translate>Errata</td>
270
+ <td class="align-center">
271
+ <a ui-sref="errata.index({repositoryId: repository.id})">
272
+ {{ repository.content_counts.erratum || 0 }}
273
+ </a>
274
+ </td>
275
+ </tr>
276
+ <tr ng-show="repository.content_type === 'yum'">
277
+ <td translate>Package Groups</td>
278
+ <td class="align-center">
279
+ <a ui-sref="products.details.repositories.manage-content.package-groups({productId: product.id, repositoryId: repository.id})">
280
+ {{ repository.content_counts.package_group || 0 }}
281
+ </a>
282
+ </td>
283
+ </tr>
284
+ <tr ng-show="repository.content_type === 'puppet'">
285
+ <td translate>Puppet Modules</td>
286
+ <td class="align-center">
287
+ <a ui-sref="products.details.repositories.manage-content.puppet-modules({productId: product.id, repositoryId: repository.id})">
288
+ {{ repository.content_counts.puppet_module || 0 }}
289
+ </a>
290
+ </td>
291
+ </tr>
292
+ <tr ng-show="repository.content_type === 'docker'">
293
+ <td translate>Docker Manifests</td>
294
+ <td class="align-center">{{ repository.content_counts.docker_manifest || 0 }}</td>
295
+ </tr>
296
+ <tr ng-show="repository.content_type === 'docker'">
297
+ <td translate>Docker Tags</td>
298
+ <td class="align-center">{{ repository.content_counts.docker_tag || 0 }}</td>
299
+ </tr>
300
+ <tr ng-show="repository.content_type === 'ostree'">
301
+ <td translate>OSTree Branches</td>
302
+ <td class="align-center">{{ repository.content_counts.ostree_branch || 0 }}</td>
303
+ </tr>
304
+ <tr ng-show="repository.content_type === 'file'">
305
+ <td translate>Files</td>
306
+ <td class="align-center">{{ repository.content_counts.file || 0 }}</td>
307
+ </tr>
308
+ </tbody>
309
+ </table>
310
+
311
+ <div class="divider" ng-if="repository.content_type === 'ostree'"/>
312
+ </section>
313
+
314
+ <section class="well" ng-if="permitted('edit_products', product) && !product.redhat && repository.content_type !== 'docker' && repository.content_type !== 'ostree'">
315
+ <h5 translate ng-show="repository.content_type === 'puppet'">Upload Puppet Module</h5>
316
+ <h5 translate ng-show="repository.content_type === 'yum'">Upload Package</h5>
317
+ <h5 translate ng-show="repository.content_type === 'file'">Upload File</h5>
318
+
319
+ <div bst-alerts success-messages="uploadSuccessMessages" error-messages="uploadErrorMessages"></div>
320
+
321
+ <form role="form"
322
+ action="{{ uploadURL }}"
323
+ ng-upload="uploadContent(content)"
324
+ error-catcher="uploadError(error, content)"
325
+ upload-options-enable-controls
326
+ upload-options-enable-rails-csrf>
327
+
328
+ <div class="form-group">
329
+ <input type="file" name="content[]" ng-hide="denied('edit_products', product)" multiple/>
330
+ </div>
331
+
332
+ <div class="form-group">
333
+ <button class="btn btn-primary"
334
+ ng-hide="denied('edit_products', product)"
335
+ upload-submit ng-click="progress.uploading = true">
336
+ <i class="fa fa-spinner fa-spin" ng-show="progress.uploading"></i>
337
+ <span ng-show="progress.uploading" translate>Uploading...</span>
338
+ <span ng-hide="progress.uploading" translate>Upload</span>
339
+ </button>
340
+ </div>
341
+
342
+ </form>
343
+ </section>
344
+
345
+ <section ng-show="repository.content_type === 'yum'">
346
+ <div class="divider"></div>
347
+ <h4 translate>Distribution Information</h4>
348
+
349
+ <div class="detail" >
350
+ <span class="info-value" ng-hide="repository.distribution_version ||
351
+ repository.distribution_arch ||
352
+ repository.distribution_family ||
353
+ repository.distribution_variant">No distribution available</span>
354
+
355
+ <section ng-show="repository.distribution_version ||
356
+ repository.distribution_arch ||
357
+ repository.distribution_family ||
358
+ repository.distribution_variant">
359
+
360
+ <div class="detail">
361
+ <span class="info-label" translate>Version</span>
362
+ <span class="info-value">{{ repository.distribution_version }}</span>
363
+ </div>
364
+
365
+ <div class="detail">
366
+ <span class="info-label" translate>Architecture</span>
367
+ <span class="info-value">{{ repository.distribution_arch}}</span>
368
+ </div>
369
+
370
+ <div class="detail">
371
+ <span class="info-label" translate>Family</span>
372
+ <span class="info-value">{{ repository.distribution_family}}</span>
373
+ </div>
374
+
375
+ <div class="detail">
376
+ <span class="info-label" translate>Variant</span>
377
+ <span class="info-value">{{ repository.distribution_variant}}</span>
378
+ </div>
379
+
380
+ <div class="detail">
381
+ <span class="info-label" translate>Bootable</span>
382
+ <span class="info-value">{{ repository.distribution_bootable}}</span>
383
+ </div>
384
+ </section>
366
385
  </div>
367
386
  </section>
368
387
  </div>
369
- </section>
388
+ </div>
370
389
  </div>
371
390
  </div>