def theme_picker(request, template_name="theme_editor/theme_picker.html"): if not request.user.profile.is_superuser: raise Http403 themes = [] for theme in theme_choice_list(): theme_info = ThemeInfo(theme) themes.append(theme_info) if request.method == "POST": selected_theme = request.POST.get('theme') call_command('set_theme', selected_theme) checklist_update('choose-theme') msg_string = "Your theme has been changed to %s." % selected_theme.title() messages.add_message(request, messages.SUCCESS, _(msg_string)) return redirect('home') current_theme = get_setting('module', 'theme_editor', 'theme') themes = sorted(themes, key=lambda theme: theme.create_dt) return render_to_response(template_name, { 'themes': themes, 'current_theme': current_theme, 'theme_choices': theme_choice_list(), }, context_instance=RequestContext(request))
def theme_picker(request, template_name="theme_editor/theme_picker.html"): if not request.user.profile.is_superuser: raise Http403 themes = [] for theme in theme_choice_list(): theme_info = ThemeInfo(theme) themes.append(theme_info) if request.method == "POST": selected_theme = request.POST.get('theme') call_command('set_theme', selected_theme) checklist_update('choose-theme') msg_string = "Your theme has been changed to %s." % selected_theme.title( ) messages.add_message(request, messages.SUCCESS, _(msg_string)) return redirect('home') current_theme = get_setting('module', 'theme_editor', 'theme') themes = sorted(themes, key=lambda theme: theme.create_dt) return render_to_response(template_name, { 'themes': themes, 'current_theme': current_theme, 'theme_choices': theme_choice_list(), }, context_instance=RequestContext(request))
def edit_file(request, form_class=FileForm, template_name="theme_editor/index.html"): if not has_perm(request.user, 'theme_editor.view_themefileversion'): raise Http403 selected_theme = request.GET.get("theme_edit", get_theme()) original_theme_root = os.path.join(settings.ORIGINAL_THEMES_DIR, selected_theme) if settings.USE_S3_THEME: theme_root = os.path.join(settings.THEME_S3_PATH, selected_theme) else: theme_root = os.path.join(settings.ORIGINAL_THEMES_DIR, selected_theme) # get the default file and clean up any input default_file = request.GET.get("file", DEFAULT_FILE) if default_file: default_file = default_file.replace('\\', '/') default_file = default_file.strip('/') default_file = default_file.replace('////', '/') default_file = default_file.replace('///', '/') default_file = default_file.replace('//', '/') is_file = qstr_is_file(default_file, ROOT_DIR=theme_root) is_dir = qstr_is_dir(default_file, ROOT_DIR=theme_root) if is_file: pass elif is_dir: # if default_file is a directory then append the # trailing slash so we can get the dirname below default_file = '%s/' % default_file else: # if the default_file is not a directory or file within # the themes folder then return a 404 raise Http404(_("Custom template not found. Make sure you've copied over the themes to the THEME_DIR.")) # get the current file name current_file = os.path.basename(default_file) # get file ext name = current_file.split('/')[-1] ext = name.split('.')[-1] stylesheets = ['css', 'less'] # get the present working directory # and make sure they cannot list root pwd = os.path.dirname(default_file) if pwd == '/': pwd = '' current_file_path = os.path.join(pwd, current_file) # get the previous directory name and path prev_dir = '/' prev_dir_name = 'theme base' pwd_split = pwd.split('/') if len(pwd_split) > 1: prev_dir_name = pwd_split[-2] pwd_split.pop() prev_dir = '/'.join(pwd_split) elif not pwd_split[0]: prev_dir = '' # get the direcory list dirs = get_dir_list(pwd, ROOT_DIR=theme_root) # get the file list files, non_editable_files = get_file_list(pwd, ROOT_DIR=theme_root) all_files_folders = get_all_files_list(ROOT_DIR=theme_root) # non-deletable files non_deletable_files = ['homepage.html', 'default.html', 'footer.html', 'header.html', 'sidebar.html', 'nav.html', 'styles.less', 'styles.css'] # get the number of themes in the themes directory on the site theme_choices = [ i for i in theme_choice_list()] theme_count = len(theme_choices) # get a list of revisions archives = ThemeFileVersion.objects.filter(relative_file_path=default_file).order_by("-create_dt") if request.is_ajax() and request.method == "POST": file_form = form_class(request.POST) response_status = 'FAIL' response_message = _('Cannot update file.') if file_form.is_valid(): if file_form.save(request, default_file, ROOT_DIR=theme_root, ORIG_ROOT_DIR=original_theme_root): response_status = 'SUCCESS' response_message = unicode(_('Your changes have been saved.')) EventLog.objects.log() response = json.dumps({'status':response_status, 'message':response_message}) return HttpResponse(response, content_type="application/json") content = get_file_content(default_file, ROOT_DIR=theme_root) file_form = form_class({"content": content, "rf_path": default_file}) theme_form = ThemeSelectForm(initial={'theme_edit': selected_theme}) return render_to_response(template_name, { 'file_form': file_form, 'theme_form': theme_form, 'current_theme': selected_theme, 'current_file_path': current_file_path, 'current_file': current_file, 'prev_dir_name': prev_dir_name, 'prev_dir': prev_dir, 'pwd': pwd, 'dirs': dirs, 'files': files, 'non_editable_files': non_editable_files, 'non_deletable_files': non_deletable_files, 'theme_count': theme_count, 'archives': archives, 'is_file': is_file, 'is_dir': is_dir, 'all_files_folders': all_files_folders, 'ext' : ext, 'stylesheets' : stylesheets }, context_instance=RequestContext(request))
def edit_file(request, form_class=FileForm, template_name="theme_editor/index.html"): if not has_perm(request.user, 'theme_editor.view_themefileversion'): raise Http403 selected_theme = request.GET.get("theme_edit", get_theme()) original_theme_root = os.path.join(settings.ORIGINAL_THEMES_DIR, selected_theme) if settings.USE_S3_THEME: theme_root = os.path.join(settings.THEME_S3_PATH, selected_theme) else: theme_root = os.path.join(settings.ORIGINAL_THEMES_DIR, selected_theme) # get the default file and clean up any input default_file = request.GET.get("file", DEFAULT_FILE) if default_file: default_file = default_file.replace('\\', '/') default_file = default_file.strip('/') default_file = default_file.replace('////', '/') default_file = default_file.replace('///', '/') default_file = default_file.replace('//', '/') is_file = qstr_is_file(default_file, ROOT_DIR=theme_root) is_dir = qstr_is_dir(default_file, ROOT_DIR=theme_root) if is_file: pass elif is_dir: # if default_file is a directory then append the # trailing slash so we can get the dirname below default_file = '%s/' % default_file else: # if the default_file is not a directory or file within # the themes folder then return a 404 raise Http404( _("Custom template not found. Make sure you've copied over the themes to the THEME_DIR." )) # get the current file name current_file = os.path.basename(default_file) # get file ext name = current_file.split('/')[-1] ext = name.split('.')[-1] stylesheets = ['css', 'less'] # get the present working directory # and make sure they cannot list root pwd = os.path.dirname(default_file) if pwd == '/': pwd = '' current_file_path = os.path.join(pwd, current_file) # get the previous directory name and path prev_dir = '/' prev_dir_name = 'theme base' pwd_split = pwd.split('/') if len(pwd_split) > 1: prev_dir_name = pwd_split[-2] pwd_split.pop() prev_dir = '/'.join(pwd_split) elif not pwd_split[0]: prev_dir = '' # get the direcory list dirs = get_dir_list(pwd, ROOT_DIR=theme_root) # get the file list files, non_editable_files = get_file_list(pwd, ROOT_DIR=theme_root) all_files_folders = get_all_files_list(ROOT_DIR=theme_root) # non-deletable files non_deletable_files = [ 'homepage.html', 'default.html', 'footer.html', 'header.html', 'sidebar.html', 'nav.html', 'styles.less', 'styles.css' ] # get the number of themes in the themes directory on the site theme_choices = [i for i in theme_choice_list()] theme_count = len(theme_choices) # get a list of revisions archives = ThemeFileVersion.objects.filter( relative_file_path=default_file).order_by("-create_dt") if request.is_ajax() and request.method == "POST": file_form = form_class(request.POST) response_status = 'FAIL' response_message = _('Cannot update file.') if file_form.is_valid(): if file_form.save(request, default_file, ROOT_DIR=theme_root, ORIG_ROOT_DIR=original_theme_root): response_status = 'SUCCESS' response_message = unicode(_('Your changes have been saved.')) EventLog.objects.log() response = json.dumps({ 'status': response_status, 'message': response_message }) return HttpResponse(response, content_type="application/json") content = get_file_content(default_file, ROOT_DIR=theme_root) file_form = form_class({"content": content, "rf_path": default_file}) theme_form = ThemeSelectForm(initial={'theme_edit': selected_theme}) return render_to_response(template_name, { 'file_form': file_form, 'theme_form': theme_form, 'current_theme': selected_theme, 'current_file_path': current_file_path, 'current_file': current_file, 'prev_dir_name': prev_dir_name, 'prev_dir': prev_dir, 'pwd': pwd, 'dirs': dirs, 'files': files, 'non_editable_files': non_editable_files, 'non_deletable_files': non_deletable_files, 'theme_count': theme_count, 'archives': archives, 'is_file': is_file, 'is_dir': is_dir, 'all_files_folders': all_files_folders, 'ext': ext, 'stylesheets': stylesheets }, context_instance=RequestContext(request))