Skip to content
This repository has been archived by the owner on Dec 17, 2019. It is now read-only.

[IMPR] Improved ticket view for 10.0 #10

Open
wants to merge 12 commits into
base: 10.0
Choose a base branch
from
630 changes: 630 additions & 0 deletions UNRELEASED/website_support/i18n/de-v8.po

Large diffs are not rendered by default.

Binary file added UNRELEASED/website_support/i18n/de.mo
Binary file not shown.
1,692 changes: 1,692 additions & 0 deletions UNRELEASED/website_support/i18n/de.po

Large diffs are not rendered by default.

1,691 changes: 1,691 additions & 0 deletions UNRELEASED/website_support/i18n/de_exp.po

Large diffs are not rendered by default.

631 changes: 631 additions & 0 deletions UNRELEASED/website_support/i18n/fr-v8.po

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions app_store/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import models, controllers
23 changes: 23 additions & 0 deletions app_store/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
'name': "Custom App Store",
'version': "0.5.2",
'author': "Sythil Tech",
'category': "Tools",
'support': "[email protected]",
'summary': "Create your own app store",
'license':'LGPL-3',
'data': [
'views/module_overview_templates.xml',
'views/module_overview_views.xml',
'views/appstore_account_views.xml',
'data/website.menu.csv',
'data/ir.cron.csv',
'security/ir.model.access.csv',
],
'demo': [],
'depends': ['website'],
'images':[
'static/description/1.jpg',
],
'installable': True,
}
1 change: 1 addition & 0 deletions app_store/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import main
124 changes: 124 additions & 0 deletions app_store/controllers/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# -*- coding: utf-8 -*-
import base64
import requests
import urllib
import StringIO
import os
from os.path import expanduser
from datetime import datetime
from lxml import html, etree
import zipfile
import io
import csv
import werkzeug.utils
import werkzeug.wrappers
import urllib2

from odoo.tools import ustr
import odoo.http as http
from odoo.http import request
import logging
_logger = logging.getLogger(__name__)


class AppsController(http.Controller):

@http.route('/client/apps', type="http", auth="public", website=True)
def client_browse_apps(self, **kwargs):
"""Browse all the modules inside Odoo client"""

values = {}
for field_name, field_value in kwargs.items():
values[field_name] = field_value

modules = request.env['module.overview'].search([])
return http.request.render('app_store.client_app_list', {'modules':modules})

@http.route('/apps', type="http", auth="public", website=True)
def browse_apps(self, **kwargs):
"""Browse all the modules"""

values = {}
for field_name, field_value in kwargs.items():
values[field_name] = field_value

modules = request.env['module.overview'].search([])
return http.request.render('app_store.app_list', {'modules':modules})

@http.route('/apps/modules/download/<module_name>', type="http", auth="public", website=True)
def app_download(self, module_name, **kwargs):
"""Download the module zip"""
filename = str(module_name) + ".zip"
headers = [
('Content-Type', 'application/octet-stream; charset=binary'),
('Content-Disposition', "attachment; filename=" + filename ),
]

module = request.env['module.overview'].sudo().search([('name', '=', module_name)])
module.module_download_count += 1

home_directory = os.path.expanduser('~')
app_directory = home_directory + "/apps"

response = werkzeug.wrappers.Response(file(app_directory + "/" + module_name + ".zip"), headers=headers, direct_passthrough=True)
return response

def content_disposition(self, filename):
filename = ustr(filename)
escaped = urllib2.quote(filename.encode('utf8'))
browser = request.httprequest.user_agent.browser
version = int((request.httprequest.user_agent.version or '0').split('.')[0])
if browser == 'msie' and version < 9:
return "attachment; filename=%s" % escaped
elif browser == 'safari' and version < 537:
return u"attachment; filename=%s" % filename.encode('ascii', 'replace')
else:
return "attachment; filename*=UTF-8''%s" % escaped

@http.route('/apps/modules/<module_name>', type="http", auth="public", website=True)
def app_page(self, module_name, **kwargs):
"""View all the details about a module"""

values = {}
for field_name, field_value in kwargs.items():
values[field_name] = field_value

module = request.env['module.overview'].search([('name','=',module_name)])

module.module_view_count += 1

header_string = ""
for keys,values in request.httprequest.headers.items():
header_string += keys + ": " + values + "\n"

ref = ""
if "Referer" in request.httprequest.headers:
ref = request.httprequest.headers['Referer']

request.env['module.overview.store.view'].create({'mo_id': module.id, 'ref':ref, 'ip': request.httprequest.remote_addr,'header':header_string})

return http.request.render('app_store.app_page', {'overview':module})

@http.route('/client/apps/modules/<module_name>', type="http", auth="public", website=True)
def app_page_client(self, module_name, **kwargs):
"""View all the details about a module"""

values = {}
for field_name, field_value in kwargs.items():
values[field_name] = field_value

module = request.env['module.overview'].search([('name','=',module_name)])

module.module_view_count += 1

header_string = ""
for keys,values in request.httprequest.headers.items():
header_string += keys + ": " + values + "\n"

ref = ""
if "Referer" in request.httprequest.headers:
ref = request.httprequest.headers['Referer']

request.env['module.overview.store.view'].create({'mo_id': module.id, 'ref':ref, 'ip': request.httprequest.remote_addr,'header':header_string})

return http.request.render('app_store.client_app_page', {'overview':module})
2 changes: 2 additions & 0 deletions app_store/data/ir.cron.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
id,name,model,function,interval_number,interval_type,numbercall,active
"appstore_check","App Store Repository Sync",appstore.account.repository,check_all_repositories,12,hours,-1,true
2 changes: 2 additions & 0 deletions app_store/data/website.menu.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"id","name","url","parent_id/id"
"app_store","App Store","/apps","website.main_menu"
11 changes: 11 additions & 0 deletions app_store/doc/changelog.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
v0.5.2
======
* Changelog on app page

v0.5.1
======
* Add repositories

v0.5
====
* Added option to install from inside Odoo
1 change: 1 addition & 0 deletions app_store/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import module_overview, appstore_account
62 changes: 62 additions & 0 deletions app_store/models/appstore_account.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# -*- coding: utf-8 -*
import io
import zipfile
import tempfile
import urllib
import os
from odoo import api, fields, models
import logging
_logger = logging.getLogger(__name__)


class AppstoreAccount(models.Model):

_name = "appstore.account"
_description = "App Store Account"

name = fields.Char(string="Name")
repositories_ids = fields.One2many('appstore.account.repository', 'asa_id', string="Repositories")


class AppstoreAccountRepository(models.Model):

_name = "appstore.account.repository"
_description = "App Store Account Repository"

asa_id = fields.Many2one('appstore.account', string="App Store Account")
url = fields.Char(string="Repository URL")

@api.model
def check_all_repositories(self):
"""Checks to see if there are any new modules"""
#https://github.com/SythilTech/Odoo9#9.0
#https://github.com/SythilTech/Odoo9/archive/9.0.zip

filename = tempfile.mktemp('.zip')
destDir = tempfile.mktemp()
home_directory = os.path.expanduser('~')
app_directory = home_directory + "/apps"

for account_repository in self.env['appstore.account.repository'].search([]):
rep_directory = app_directory + "/" + account_repository.url.split("/")[3]

repository_url = account_repository.url.split("#")[0] + "/archive/" + account_repository.url.split("#")[1] + ".zip"
name, hdrs = urllib.urlretrieve(repository_url, filename)
thefile = zipfile.ZipFile(filename)

if not os.path.exists(rep_directory):
os.makedirs(rep_directory)

thefile.extractall(rep_directory)

thefile.close()

rep_name = account_repository.url.split("/")[4].replace("#","-")

full_rep_path = rep_directory + "/" + rep_name
_logger.error(full_rep_path)

#Go through all module folders under the repository directory and analyse the module
for dir in os.listdir(full_rep_path):
if os.path.isdir(os.path.join(full_rep_path, dir)):
self.env['module.overview.wizard'].create({'name':'temp wizard'}).analyse_module(dir, full_rep_path)
Loading