Skip to content

Commit

Permalink
Merge pull request #6326 from OCHA-DAP/dev
Browse files Browse the repository at this point in the history
dev into prod for onboarding phase 2
  • Loading branch information
danmihaila authored May 15, 2024
2 parents e49c10c + 04920f3 commit 65c9faa
Show file tree
Hide file tree
Showing 70 changed files with 1,858 additions and 278 deletions.
21 changes: 19 additions & 2 deletions ckan/public/base/vendor/webassets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ select2-css:
contents:
- select2/select2.css

# HDX Edit
# created this new entry to facilitate easy inclusion in hdx_theme/page-scripts, since we're using a new version of select2 in our onboarding pages
select2-js:
filters: rjsmin
output: vendor/%(version)s_select2.js
contents:
- select2/select2.js
# END HDX Edit

fontawesome:
output: vendor/%(version)s_fontawesome.css
filters: cssrewrite
Expand All @@ -27,12 +36,20 @@ vendor:
output: vendor/%(version)s_vendor.js
extra:
preload:
- vendor/select2-css
# HDX Edit
# commented out this line to allow a new version of select2 to be integrated into our new onboarding pages
# vendor/select2-css is now included in hdx_theme/page-styles
# - vendor/select2-css
# END HDX Edit
- vendor/jquery
contents:
- jed.js
- moment-with-locales.js
- select2/select2.js
# HDX Edit
# commented out this line to allow a new version of select2 to be integrated into our new onboarding pages
# vendor/select2-js (created above) is now included in hdx_theme/page-scripts
# - select2/select2.js
# END HDX Edit
- popperjs.js
- purify.js

Expand Down
4 changes: 1 addition & 3 deletions ckanext-hdx_dataviz/ckanext/hdx_dataviz/util/schema.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import six

import ckanext.hdx_dataviz.helpers.helpers as h
import ckan.plugins.toolkit as toolkit

import ckanext.hdx_dataviz.helpers.helpers as h
from ckan.lib.navl.validators import default, ignore_missing, ignore_empty
from ckan.logic.validators import boolean_validator, url_validator, natural_number_validator


missing = toolkit.missing
get_converter = toolkit.get_converter
get_validator = toolkit.get_validator
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import logging
import ckan.logic.auth.create as _auth_create

import ckan.authz as authz
import ckan.plugins.toolkit as tk

_ = tk._
Expand Down Expand Up @@ -35,3 +35,8 @@ def invalidate_data_completeness_for_location(context, data_dict):
## USERS
def hdx_organization_follower_list(context, data_dict):
return {'success': False, 'msg': _('Only sysadmins can view user permission page')}

# def hdx_org_join_request(context, data_dict):
# if authz.auth_is_anon_user(context):
# return {'success': False, 'msg': _('Only logged in users can join an organization')}
# return {'success': True}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import logging
from typing import cast

import ckan.model as model
import ckan.plugins.toolkit as tk
from ckan.common import current_user
from ckan.types import Context

get_action = tk.get_action
check_access = tk.check_access
config = tk.config
h = tk.h
NotAuthorized = tk.NotAuthorized

log = logging.getLogger(__name__)


class OrgJoinLogic(object):
def __init__(self, context: Context):
self.active_org_dict = {}
self.inactive_org_dict = {}
self.all_org_list = []
self.context = context


def read(self):
self._fetch_org_list_metadata()
return self

def _fetch_org_list_metadata(self):
'''
:returns: populated self object
:rtype:
'''

self.all_org_list = get_action(u'cached_organization_list')(self.context, {})

if len(self.all_org_list) > 0:
for o in self.all_org_list:
if not o.get('closed_organization'):
self.active_org_dict[o.get('id')] = o.get('display_name')
else:
self.inactive_org_dict[o.get('id')] = o.get('display_name')

Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import logging

import ckan.lib.navl.dictization_functions as dictization_functions
import ckan.logic as logic
import ckan.plugins.toolkit as tk
from ckan.types import Context
from ckan.logic.schema import validator_args
from ckan.lib.navl.dictization_functions import validate

get_action = tk.get_action
check_access = tk.check_access
config = tk.config
h = tk.h
NotAuthorized = tk.NotAuthorized
unicode_safe = tk.get_validator('unicode_safe')
log = logging.getLogger(__name__)


@validator_args
def request_new_organization_schema(not_empty, ignore_missing, hdx_url_validator):
schema = {
'name': [not_empty, unicode_safe],
'description': [not_empty, unicode_safe],
'website': [ignore_missing, unicode_safe, hdx_url_validator],
'role': [not_empty, unicode_safe],
'data_type': [not_empty, unicode_safe],
'data_already_available': [not_empty, unicode_safe],
'data_already_available_link': [ignore_missing, unicode_safe, hdx_url_validator],
}
return schema


class OrgRequestLogic(object):
def __init__(self, context: Context, request):
self.request = request
self.context = context
self.form = request.form
self.schema = request_new_organization_schema()

def read(self):
data_dict = logic.clean_dict(
dictization_functions.unflatten(
logic.tuplize_dict(logic.parse_params(self.form))))
return data_dict

def validate(self, data_dict):
try:
validated_response = validate(data_dict, self.schema, self.context)
except Exception as ex:
log.error(ex)
return validated_response
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,18 @@
import ckan.authz as authz
import ckan.plugins.toolkit as tk
import ckan.lib.navl.dictization_functions as df
import string
from typing import Any
from urllib.parse import urlparse

from ckan.types import (
FlattenDataDict, FlattenKey, Context, FlattenErrorDict)

missing = df.missing
StopOnError = df.StopOnError
Invalid = df.Invalid
get_action = tk.get_action
# check_access = tk.check_access

# NotAuthorized = tk.NotAuthorized
_ = tk._

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -47,12 +51,13 @@ def active_if_missing(key, data, errors, context):
if value is missing or value is None:
data[key] = 'active'


def set_inactive_if_closed_organization(key, data, errors, context):
value = data.get(key)
title = data.get(('title',))
if title:
if value=='true' or value=='True':
title= title.replace('(closed)','')
if value == 'true' or value == 'True':
title = title.replace('(closed)', '')
if not 'inactive' in title:
if title.endswith(' '):
title = title + '(inactive)'
Expand All @@ -63,5 +68,39 @@ def set_inactive_if_closed_organization(key, data, errors, context):
title = title.replace('(inactive)', '')
if title.endswith(' '):
title = title[:-1]
data[('title',)]= title
data[('title',)] = title


def hdx_url_validator(
key: FlattenKey,
data: FlattenDataDict,
errors: FlattenErrorDict,
context: Context,
) -> Any:
"""Checks that the provided value (if it is present) is a valid URL"""
url = data.get(key, None)
if not url:
return

try:
pieces = urlparse(url)
if pieces.scheme =='http' or pieces.scheme is None:
errors[key].append(_("Please provide a valid URL that starts with https://"))
return
elif all([pieces.scheme, pieces.netloc]) and pieces.scheme in [
"https",
]:
hostname, port = (
pieces.netloc.split(":")
if ":" in pieces.netloc
else (pieces.netloc, None)
)
if set(hostname) <= set(
string.ascii_letters + string.digits + "-."
) and (port is None or port.isdigit()):
return
except ValueError:
# url is invalid
pass

errors[key].append(_("Please provide a valid URL"))
18 changes: 15 additions & 3 deletions ckanext-hdx_org_group/ckanext/hdx_org_group/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ def get_auth_functions(self):
'hdx_trigger_screencap': authorize.hdx_trigger_screencap,
'member_delete': authorize.member_delete,
'invalidate_data_completeness_for_location': authorize.invalidate_data_completeness_for_location,
'hdx_organization_follower_list': authorize.hdx_organization_follower_list
'hdx_organization_follower_list': authorize.hdx_organization_follower_list,
# 'hdx_org_join_request': authorize.hdx_org_join_request,
}

# IGroupForm
Expand All @@ -100,7 +101,8 @@ def get_validators(self):
'correct_hdx_org_type': custom_validator.general_value_in_list(org_type_keys, False),
'hdx_org_keep_prev_value_if_empty_unless_sysadmin': org_custom_validator.hdx_org_keep_prev_value_if_empty_unless_sysadmin,
'active_if_missing': org_custom_validator.active_if_missing,
'set_inactive_if_closed_organization': org_custom_validator.set_inactive_if_closed_organization
'set_inactive_if_closed_organization': org_custom_validator.set_inactive_if_closed_organization,
'hdx_url_validator': org_custom_validator.hdx_url_validator,
}

def _modify_group_schema(self, schema):
Expand Down Expand Up @@ -302,4 +304,14 @@ def edit(self, country):
def get_blueprint(self):
import ckanext.hdx_org_group.views.group as group
import ckanext.hdx_org_group.views.light_group as light_group
return [group.hdx_group, group.hdx_country_topline, light_group.hdx_light_group, light_group.hdx_group_eaa_maps]
import ckanext.hdx_org_group.views.organization_join as org_join
import ckanext.hdx_org_group.views.organization_request as org_request

return [
group.hdx_group,
group.hdx_country_topline,
light_group.hdx_light_group,
light_group.hdx_group_eaa_maps,
org_join.hdx_org_join,
org_request.hdx_org_request,
]
Loading

0 comments on commit 65c9faa

Please sign in to comment.