Commit ed338a9c authored by Roque's avatar Roque

Appstore improvements

See merge request nexedi/erp5!1454
parents b9abe7c2 2e4152f4
Pipeline #16530 failed with stage
in 0 seconds
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</div> </div>
</div> </div>
<div class="panel_img"> <div class="panel_img">
<img class="ui-title" alt="OfficeJS" src="gadget_erp5_panel.png"/> <img class="ui-title" alt="OfficeJS" src="officejs_logo.png"/>
</div> </div>
</div> </div>
</script> </script>
......
...@@ -267,7 +267,7 @@ ...@@ -267,7 +267,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>983.54930.13960.61730</string> </value> <value> <string>992.13065.39275.59033</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -285,7 +285,7 @@ ...@@ -285,7 +285,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1589291757.75</float> <float>1625152849.26</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
def rejectSoftwarePublication(software_publication):
software_publication.submit()
software_publication.reject()
return
def extractWebManifest(html_file):
html = context.Base_parseHtml(html_file)
for tag in html:
if tag[0] == 'starttag' and tag[1] == 'link' and ('rel', 'manifest') in tag[2]:
for attribute in tag[2]:
if attribute[0] == 'href':
return attribute[1]
def getBaseDirectory(namelist):
base = ""
for name in namelist:
if "/" in name:
temp_base = name.split("/")[0]
if base and base != temp_base:
base = ""
break
else:
base = temp_base
else:
base = ""
break
if base:
base += "/"
return base
portal = context.getPortalObject()
software_publication = context software_publication = context
if software_publication.getSimulationState() != "draft": if software_publication.getSimulationState() != "draft":
...@@ -6,13 +37,17 @@ if software_publication.getSimulationState() != "draft": ...@@ -6,13 +37,17 @@ if software_publication.getSimulationState() != "draft":
software_publication_line = software_publication.objectValues( software_publication_line = software_publication.objectValues(
portal_type="Software Publication Line", portal_type="Software Publication Line",
)[0] )[0]
software_product = software_publication_line.getResourceValue(portal_type="Software Product") software_product = software_publication_line.getResourceValue(portal_type="Software Product")
if not software_product: if not software_product:
rejectSoftwarePublication(software_publication)
return return
portal = context.getPortalObject() software_release = software_publication_line.getAggregateValue(portal_type="Software Release")
version = software_release.getReference()
software_release_url = software_release.getRelativeUrl()
user_login = software_publication.getSourceReference()
application_publication_section = portal.portal_categories.publication_section.application application_publication_section = portal.portal_categories.publication_section.application
zip_file = portal.portal_catalog.getResultValue( zip_file = portal.portal_catalog.getResultValue(
...@@ -22,50 +57,25 @@ zip_file = portal.portal_catalog.getResultValue( ...@@ -22,50 +57,25 @@ zip_file = portal.portal_catalog.getResultValue(
) )
if not zip_file: if not zip_file:
# XXX Do something? rejectSoftwarePublication(software_publication)
return return
software_release = software_publication_line.getAggregateValue(portal_type="Software Release")
from cStringIO import StringIO from cStringIO import StringIO
import zipfile import zipfile
from zipfile import BadZipfile
zipbuffer = StringIO() zipbuffer = StringIO()
zipbuffer.write(str(zip_file.getData())) zipbuffer.write(str(zip_file.getData()))
zip_reader = zipfile.ZipFile(zipbuffer) try:
user_login = software_publication.getSourceReference() zip_reader = zipfile.ZipFile(zipbuffer)
except BadZipfile:
version = software_release.getReference() rejectSoftwarePublication(software_publication)
return
# look for Base Directory base_length = len(getBaseDirectory(zip_reader.namelist()))
base = ""
for name in zip_reader.namelist():
if "/" in name:
temp_base = name.split("/")[0]
if base and base != temp_base:
base = ""
break
else:
base = temp_base
else:
base = ""
break
if base:
base += "/"
base_length = len(base)
def extractWebManifest(html_file):
html = context.Base_parseHtml(html_file)
for tag in html:
if tag[0] == 'starttag' and tag[1] == 'link' and ('rel', 'manifest') in tag[2]:
for attribute in tag[2]:
if attribute[0] == 'href':
return attribute[1]
software_release_url = software_release.getRelativeUrl()
tag = "preparing_sr_%s" % software_release_url tag = "preparing_sr_%s" % software_release_url
default_page = "" default_page = ""
web_manifest_url = None
for name in zip_reader.namelist(): for name in zip_reader.namelist():
if zip_reader.getinfo(name).file_size == 0: if zip_reader.getinfo(name).file_size == 0:
continue continue
...@@ -89,9 +99,14 @@ for name in zip_reader.namelist(): ...@@ -89,9 +99,14 @@ for name in zip_reader.namelist():
follow_up=software_release_url, follow_up=software_release_url,
portal_type="File", portal_type="File",
) )
try:
publication_source_category = "contributor/" + software_publication.getSource()
except TypeError:
rejectSoftwarePublication(software_publication)
return
# XX Hackish # XX Hackish
document.setCategoryList( document.setCategoryList(
document.getCategoryList() + ["contributor/" + software_publication.getSource()]) document.getCategoryList() + [publication_source_category])
if url in ("index.html", "index.htm"): if url in ("index.html", "index.htm"):
default_page = document.getRelativeUrl() default_page = document.getRelativeUrl()
web_manifest_url = extractWebManifest(document.getData()) web_manifest_url = extractWebManifest(document.getData())
......
...@@ -8,16 +8,23 @@ web_document_list = portal.portal_catalog( ...@@ -8,16 +8,23 @@ web_document_list = portal.portal_catalog(
validation_state="submitted", validation_state="submitted",
) )
for web_document in web_document_list: for web_document in web_document_list:
web_document.cancel() web_document.cancel()
software_product = context.getFollowUpValue(portal_type="Software Product") software_product = context.getFollowUpValue(portal_type="Software Product")
web_site = software_product.SoftwareProduct_getRelatedWebSite() web_site = software_product.SoftwareProduct_getRelatedWebSite()
version_web_section = None
if software_release.getReference() in web_site:
version_web_section = web_site[software_release.getReference()]
#backward compatibily
if not version_web_section and software_release.getVersion() in web_site:
version_web_section = web_site[software_release.getVersion()]
if not version_web_section:
return
version_web_section = web_site[software_release.getVersion()]
version_web_section.setCriterion('validation_state', 'cancel') version_web_section.setCriterion('validation_state', 'cancel')
version_web_section.setTitle("Rejected " + version_web_section.getTitle()) version_web_section.setTitle("Rejected " + version_web_section.getTitle())
def webSectionUpdatePredicate(current_section): def webSectionUpdatePredicate(current_section):
...@@ -26,5 +33,3 @@ def webSectionUpdatePredicate(current_section): ...@@ -26,5 +33,3 @@ def webSectionUpdatePredicate(current_section):
webSectionUpdatePredicate(child_section) webSectionUpdatePredicate(child_section)
webSectionUpdatePredicate(version_web_section) webSectionUpdatePredicate(version_web_section)
#version_web_section.cancel()
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Image" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value> <string>2da3b1fbfe49c09a2639a6f60f85a339</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>officejs_logo.png</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>filename</string> </key>
<value> <string>OfficeJS-logo.png</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>400</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>store_officejs_logo_png</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Image</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OfficeJS Logo</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>400</int> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1625152695.87</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="7" aka="AAAAAAAAAAc=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>993.8785.47238.42973</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1625152464.19</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment