def edit_info_update(request): form = forms.AccountInfoForm(request.POST) if form.is_valid(): account = request.auth_manager.get_account() preferences = {} form_fields_keys = form.fields.keys() for field_key in form_fields_keys: key = field_key.replace('_', '.') value = form.cleaned_data[field_key] account.set_preference(key, value) return HttpResponse(json.dumps({ 'status': 'ok', 'messages': [ugettext('APP-SETTINGS-SAVE-OK-TEXT')] }), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def edit_user(request): roles = AccountRoles.ALL form = forms.UserForm(roles, request.POST) if form.is_valid(): auth_manager = request.auth_manager user = User.objects.get(id=form.cleaned_data['id'], account=auth_manager.account_id) user.name = form.cleaned_data['name'] user.nick = form.cleaned_data['username'] user.email = form.cleaned_data['email'] user.save() user.roles.clear() role_code = form.cleaned_data['role'] role = Role.objects.get(code=role_code) user.roles.add(role) response = { 'status': 'ok', 'messages': [ugettext('APP-USER-UPDATEDSUCCESSFULLY-TEXT')] } return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def create_categories(request): form = forms.CategoryCreateForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager category_name = form.cleaned_data['name'] # check for duplicates in this account duplicated = CategoryI18n.objects.filter(name=category_name, category__account__id=auth_manager.account_id) if len(duplicated) > 0: errors = [ugettext('ERROR-DUPLICATED-CATEGORY')] response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400) category = Category.objects.create(account_id=auth_manager.account_id) categoryi18n = CategoryI18n.objects.create( category=category, name=category_name, description=form.cleaned_data['description'], language=auth_manager.language ) is_default = form.cleaned_data['is_default'] account = auth_manager.get_account() if is_default: account.set_preference('account.default.category', category.id) response = {'status': 'ok', 'messages': [ugettext('APP-CATEGORY-CREATEDSUCCESSFULLY-TEXT')]} return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400)
def create_sources(request): form = forms.SourceCreateForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager source_name = form.cleaned_data['name'] source, created = Source.objects.get_or_create( name=source_name, url=form.cleaned_data['url'], account=auth_manager.get_account()) # check for duplicates in this account if not created: errors = [ugettext('ERROR-DUPLICATED-SOURCE')] response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400) response = { 'status': 'ok', 'messages': [ugettext('APP-SOURCE-CREATEDSUCCESSFULLY-TEXT')] } return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def create_user(request): logger = logging.getLogger(__name__) roles = AccountRoles.ALL form = forms.UserForm(roles, request.POST) if form.is_valid(): auth_manager = request.auth_manager user = User.objects.create( account_id=auth_manager.account_id, name=form.cleaned_data['name'], nick=form.cleaned_data['username'], email=form.cleaned_data['email'], language=auth_manager.language ) role_code = form.cleaned_data['role'] role = Role.objects.get(code=role_code) user.roles.add(role) # to activate the user user_pass_ticket = UserPassTickets.objects.create( uuid=unicode(uuid4()), user=user, type=TicketChoices.USER_ACTIVATION ) account = auth_manager.get_account() preferences = account.get_preferences() company = preferences['account_name'] domain = settings.WORKSPACE_URI link = domain + reverse('accounts.activate') + '?' + urllib.urlencode({'ticket': user_pass_ticket.uuid}) language = auth_manager.language logger.debug('[list_subscribe] %s', user) country = preferences['account.contact.person.country'] extradata = {'country': country, 'company': company} # Suscribirlo a la lista de usuarios del workspace (si tiene servicio) if mail.mail_service: if settings.SUBSCRIBE_NEW_USERS_TO_MAIL_LIST: mail.mail_service.list_subscribe(user, language, extradata) # Enviarle el email de bienvenida mail.mail_service.send_welcome_mail(user, link, company) else: # necesita el codigo de activacion al menos, lo redirijo alli response = {'status': 'ok', 'messages': [ugettext('APP-USER-CREATEDSUCCESSFULLY-TEXT'), 'Activar en %s' % link], 'redirect': link} return HttpResponse(json.dumps(response), content_type='application/json') response = {'status': 'ok', 'messages': [ugettext('APP-USER-CREATEDSUCCESSFULLY-TEXT')]} return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400)
def edit_branding_update(request): logger = logging.getLogger(__name__) form = forms.AccountBrandingForm(request.POST) if form.is_valid(): urls = {} account = request.auth_manager.get_account() form_fields_keys = form.fields.keys() form_fields_keys.remove('account_favicon') form_fields_keys.remove('account_logo') for field_key in form_fields_keys: key = field_key.replace('_', '.') value = form.cleaned_data[field_key] account.set_preference(key, value) accountid = str(request.auth_manager.account_id) if request.FILES.has_key('account_favicon'): data = request.FILES['account_favicon'] keyname = 'favicon' active_datastore.upload(settings.AWS_CDN_BUCKET_NAME, keyname, data, account_id=accountid) value = '{}/{}/{}'.format(get_domain_with_protocol('cdn'), accountid, keyname) account.set_preference('account.favicon', value) urls['id_account_favicon'] = value if request.FILES.has_key('account_logo'): data = request.FILES['account_logo'] keyname = 'logo' active_datastore.upload(settings.AWS_CDN_BUCKET_NAME, keyname, data, account_id=accountid) value = '{}/{}/{}'.format(get_domain_with_protocol('cdn'), accountid, keyname) account.set_preference('account.logo', value) urls['id_account_logo'] = value is_ie = False if request.META.has_key('HTTP_USER_AGENT'): user_agent = request.META['HTTP_USER_AGENT'] pattern = "msie [1-9]\." prog = re.compile(pattern, re.IGNORECASE) match = prog.search(user_agent) if match: is_ie = True if is_ie: return HttpResponse(json.dumps({'status': 'ok', 'messages': [ugettext('APP-SETTINGS-SAVE-OK-TEXT')], 'urls': urls}), content_type='text/plain') else: return HttpResponse(json.dumps({'status': 'ok', 'messages': [ugettext('APP-SETTINGS-SAVE-OK-TEXT')], 'urls': urls}), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def delete_categories(request): logger = logging.getLogger(__name__) form = forms.CategoryDeleteForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager category_id = form.cleaned_data.get('id') account = auth_manager.get_account() try: default_category_id = int(account.get_preference('account.default.category')) except: # si no hay categoria por defecto entonces no se pueden eliminar estos recursos, no tenemos a # que categoria cambiarlos response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-DEFAULT-UNDEFINED')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) if category_id != default_category_id: # check if it's a transparency category used_transparency_categories = account.get_preference('account.transparency.categories').split() if category_id in used_transparency_categories: response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-TRANSPARENCY-CANT-BE-DELETED')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) # moving the resources to the default category datasets_to_update = DatasetRevision.objects.filter(category=category_id) datastreams_to_update = DataStreamRevision.objects.filter(category=category_id) if settings.DEBUG: logger.info('Resources to update %s %s' % (str(datasets_to_update), str(datastreams_to_update))) total = datastreams_to_update.update(category=default_category_id) total += datasets_to_update.update(category=default_category_id) # reindexing if total > 0: reindex_category_resources(default_category_id, auth_manager.language) # actually, deleting the category cat = Category.objects.get(pk=category_id) cat.delete() else: response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-DEFAULT-CANT-BE-DELETED')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) response = {'status': 'ok', 'messages': [ugettext('APP-CATEGORY-DELETEDSUCCESSFULLY-TEXT')], 'total': total, 'category_id':category_id} return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400)
def edit_social_update(request): form = forms.AccountSocialForm(request.POST) if form.is_valid(): account = request.auth_manager.get_account() for field_key in form.fields.keys(): key = field_key.replace('_', '.') value = form.cleaned_data[field_key] value = value and value or '' account.set_preference(key, value) return HttpResponse(json.dumps({'status': 'ok', 'messages': [ugettext('APP-SETTINGS-SAVE-OK-TEXT')]}), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400)
def create_categories(request): form = forms.CategoryCreateForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager category_name = form.cleaned_data['name'] # limpiamos categoria de caracteres especiales cleaner = re.compile('([^\s\w]|_)+', re.UNICODE) category_name = cleaner.sub("", category_name) # check for duplicates in this account duplicated = CategoryI18n.objects.filter( name=category_name, category__account__id=auth_manager.account_id) if len(duplicated) > 0: errors = [ugettext('ERROR-DUPLICATED-CATEGORY')] response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400) category = Category.objects.create(account_id=auth_manager.account_id) categoryi18n = CategoryI18n.objects.create( category=category, name=category_name, description=form.cleaned_data['description'], language=auth_manager.language) is_default = form.cleaned_data['is_default'] account = auth_manager.get_account() if is_default: account.set_preference('account.default.category', category.id) response = { 'status': 'ok', 'messages': [ugettext('APP-CATEGORY-CREATEDSUCCESSFULLY-TEXT')] } return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def edit_categories(request): form = forms.CategoryEditForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager account = auth_manager.get_account() category_id = form.cleaned_data['id'] # check if it's a transparency category used_transparency_categories = account.get_preference('account.transparency.categories').split() if category_id in used_transparency_categories: response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-TRANSPARENCY-CANT-BE-EDITED')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) categoryi18n = CategoryI18n.objects.get(category_id = category_id , category__account = auth_manager.account_id , language = auth_manager.language) categoryi18n.name = form.cleaned_data['name'] categoryi18n.description = form.cleaned_data['description'] categoryi18n.save() # reindexing reindex_category_resources(category_id, auth_manager.language) is_default = form.cleaned_data['is_default'] try: default_category = int(account.get_preference('account.default.category')) except: default_category = None if is_default: account.set_preference('account.default.category', category_id) elif default_category == category_id: response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-UPDATED-DEFAULT-FAIL')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) response = {'status': 'ok', 'messages': [ugettext('APP-CATEGORY-UPDATEDSUCCESSFULLY-TEXT')]} response['id'] = categoryi18n.category_id return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def action_delete_category(request): form = forms.CategoryDeleteForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager category_id = form.cleaned_data.get('id') account = auth_manager.get_account() try: default_category_id = int(account.get_preference('account.default.category')) except: default_category_id = None if category_id != default_category_id: # check if it's a transparency category used_transparency_categories = account.get_preference('account.transparency.categories').split() if category_id in used_transparency_categories: response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-TRANSPARENCY-CANT-BE-DELETED')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) # moving the resources to the default category total = DataStreamRevision.objects.filter(category=category_id).update(category=default_category_id) total += DatasetRevision.objects.filter(category=category_id).update(category=default_category_id) # actually, deleting the category cat = Category.objects.get(pk=category_id) cat.delete() # reindexing reindex_category_resources(default_category_id, auth_manager.language) else: response = {'status': 'error', 'messages': [ugettext('APP-CATEGORY-DEFAULT-CANT-BE-DELETED')]} return HttpResponse(json.dumps(response), content_type='application/json', status=400) response = {'status': 'ok', 'messages': [ugettext('APP-CATEGORY-DELETEDSUCCESSFULLY-TEXT')], 'total': total, 'category_id':category_id} return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400)
def delete_sources(request): logger = logging.getLogger(__name__) form = forms.SourceDeleteForm(request.POST) if form.is_valid(): source_id = form.cleaned_data.get('id') source = Source.objects.get(pk=source_id) source.delete() response = { 'status': 'ok', 'messages': [ugettext('APP-SOURCE-DELETEDSUCCESSFULLY-TEXT')], 'source_id': source_id } return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def edit_sources(request): form = forms.SourceEditForm(request.POST) if form.is_valid(): source_id = form.cleaned_data['id'] source = Source.objects.get(id=source_id) source.name = form.cleaned_data['name'] source.url = form.cleaned_data['url'] source.save() response = { 'status': 'ok', 'messages': [ugettext('APP-SOURCE-UPDATEDSUCCESSFULLY-TEXT')] } response['id'] = source_id return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def edit_user(request): roles = AccountRoles.ALL form = forms.UserForm(roles, request.POST) if form.is_valid(): auth_manager = request.auth_manager user = User.objects.get(id=form.cleaned_data['id'], account=auth_manager.account_id) user.name = form.cleaned_data['name'] user.nick = form.cleaned_data['username'] user.email = form.cleaned_data['email'] user.save() user.roles.clear() role_code = form.cleaned_data['role'] role = Role.objects.get(code=role_code) user.roles.add(role) response = {'status': 'ok', 'messages': [ugettext('APP-USER-UPDATEDSUCCESSFULLY-TEXT')]} return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status = 400)
def delete_categories(request): logger = logging.getLogger(__name__) form = forms.CategoryDeleteForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager category_id = form.cleaned_data.get('id') account = auth_manager.get_account() try: default_category_id = int( account.get_preference('account.default.category')) except: # si no hay categoria por defecto entonces no se pueden eliminar estos recursos, no tenemos a # que categoria cambiarlos response = { 'status': 'error', 'messages': [ugettext('APP-CATEGORY-DEFAULT-UNDEFINED')] } return HttpResponse(json.dumps(response), content_type='application/json', status=400) if category_id != default_category_id: # check if it's a transparency category used_transparency_categories = account.get_preference( 'account.transparency.categories').split() if category_id in used_transparency_categories: response = { 'status': 'error', 'messages': [ugettext('APP-CATEGORY-TRANSPARENCY-CANT-BE-DELETED')] } return HttpResponse(json.dumps(response), content_type='application/json', status=400) # moving the resources to the default category datasets_to_update = DatasetRevision.objects.filter( category=category_id) datastreams_to_update = DataStreamRevision.objects.filter( category=category_id) if settings.DEBUG: logger.info( 'Resources to update %s %s' % (str(datasets_to_update), str(datastreams_to_update))) total = datastreams_to_update.update(category=default_category_id) total += datasets_to_update.update(category=default_category_id) # reindexing if total > 0: reindex_category_resources(default_category_id, auth_manager.language) # actually, deleting the category cat = Category.objects.get(pk=category_id) cat.delete() else: response = { 'status': 'error', 'messages': [ugettext('APP-CATEGORY-DEFAULT-CANT-BE-DELETED')] } return HttpResponse(json.dumps(response), content_type='application/json', status=400) response = { 'status': 'ok', 'messages': [ugettext('APP-CATEGORY-DELETEDSUCCESSFULLY-TEXT')], 'total': total, 'category_id': category_id } return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def edit_branding_update(request): logger = logging.getLogger(__name__) form = forms.AccountBrandingForm(request.POST) if form.is_valid(): urls = {} account = request.auth_manager.get_account() form_fields_keys = form.fields.keys() form_fields_keys.remove('account_favicon') form_fields_keys.remove('account_logo') for field_key in form_fields_keys: key = field_key.replace('_', '.') value = form.cleaned_data[field_key] account.set_preference(key, value) accountid = str(request.auth_manager.account_id) if request.FILES.has_key('account_favicon'): data = request.FILES['account_favicon'] keyname = 'favicon' active_datastore.upload(settings.AWS_CDN_BUCKET_NAME, keyname, data, account_id=accountid) value = '{}/{}/{}'.format(get_domain_with_protocol('cdn'), accountid, keyname) account.set_preference('account.favicon', value) urls['id_account_favicon'] = value if request.FILES.has_key('account_logo'): data = request.FILES['account_logo'] keyname = 'logo' active_datastore.upload(settings.AWS_CDN_BUCKET_NAME, keyname, data, account_id=accountid) value = '{}/{}/{}'.format(get_domain_with_protocol('cdn'), accountid, keyname) account.set_preference('account.logo', value) urls['id_account_logo'] = value is_ie = False if request.META.has_key('HTTP_USER_AGENT'): user_agent = request.META['HTTP_USER_AGENT'] pattern = "msie [1-9]\." prog = re.compile(pattern, re.IGNORECASE) match = prog.search(user_agent) if match: is_ie = True if is_ie: return HttpResponse(json.dumps({ 'status': 'ok', 'messages': [ugettext('APP-SETTINGS-SAVE-OK-TEXT')], 'urls': urls }), content_type='text/plain') else: return HttpResponse(json.dumps({ 'status': 'ok', 'messages': [ugettext('APP-SETTINGS-SAVE-OK-TEXT')], 'urls': urls }), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def edit_categories(request): form = forms.CategoryEditForm(request.POST) if form.is_valid(): auth_manager = request.auth_manager account = auth_manager.get_account() category_id = form.cleaned_data['id'] # check if it's a transparency category used_transparency_categories = account.get_preference( 'account.transparency.categories').split() if category_id in used_transparency_categories: response = { 'status': 'error', 'messages': [ugettext('APP-CATEGORY-TRANSPARENCY-CANT-BE-EDITED')] } return HttpResponse(json.dumps(response), content_type='application/json', status=400) categoryi18n = CategoryI18n.objects.get( category_id=category_id, category__account=auth_manager.account_id, language=auth_manager.language) categoryi18n.name = form.cleaned_data['name'] categoryi18n.description = form.cleaned_data['description'] categoryi18n.save() # reindexing reindex_category_resources(category_id, auth_manager.language) is_default = form.cleaned_data['is_default'] try: default_category = int( account.get_preference('account.default.category')) except: default_category = None if is_default: account.set_preference('account.default.category', category_id) elif default_category == category_id: response = { 'status': 'error', 'messages': [ugettext('APP-CATEGORY-UPDATED-DEFAULT-FAIL')] } return HttpResponse(json.dumps(response), content_type='application/json', status=400) response = { 'status': 'ok', 'messages': [ugettext('APP-CATEGORY-UPDATEDSUCCESSFULLY-TEXT')] } response['id'] = categoryi18n.category_id return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)
def create_user(request): logger = logging.getLogger(__name__) roles = AccountRoles.ALL form = forms.UserForm(roles, request.POST) if form.is_valid(): auth_manager = request.auth_manager user = User.objects.create(account_id=auth_manager.account_id, name=form.cleaned_data['name'], nick=form.cleaned_data['username'], email=form.cleaned_data['email'], language=auth_manager.language) role_code = form.cleaned_data['role'] role = Role.objects.get(code=role_code) user.roles.add(role) # to activate the user user_pass_ticket = UserPassTickets.objects.create( uuid=unicode(uuid4()), user=user, type=TicketChoices.USER_ACTIVATION) account = auth_manager.get_account() preferences = account.get_preferences() company = preferences['account_name'] domain = settings.WORKSPACE_URI link = domain + reverse('accounts.activate') + '?' + urllib.urlencode( {'ticket': user_pass_ticket.uuid}) language = auth_manager.language logger.debug('[list_subscribe] %s', user) country = preferences['account.contact.person.country'] extradata = {'country': country, 'company': company} # Suscribirlo a la lista de usuarios del workspace (si tiene servicio) if mail.mail_service: if settings.SUBSCRIBE_NEW_USERS_TO_MAIL_LIST: mail.mail_service.list_subscribe(user, language, extradata) # Enviarle el email de bienvenida mail.mail_service.send_welcome_mail(user, link, company) else: # necesita el codigo de activacion al menos, lo redirijo alli response = { 'status': 'ok', 'messages': [ ugettext('APP-USER-CREATEDSUCCESSFULLY-TEXT'), 'Activar en %s' % link ], 'redirect': link } return HttpResponse(json.dumps(response), content_type='application/json') response = { 'status': 'ok', 'messages': [ugettext('APP-USER-CREATEDSUCCESSFULLY-TEXT')] } return HttpResponse(json.dumps(response), content_type='application/json') else: errors = generate_ajax_form_errors(form) response = {'status': 'error', 'messages': errors} return HttpResponse(json.dumps(response), content_type='application/json', status=400)