def approve_suggestion(request,pk): suggestion = BookSuggestion.objects.get(pk=pk) categories = Category.objects.all() if request.method == 'POST': form = BookForm(request.POST) book = Book() if form.is_valid(): book.title = form.cleaned_data['title'] book.author = form.cleaned_data['author'] book.url = form.cleaned_data['url'] book.description = form.cleaned_data['description'] book.image_url = form.cleaned_data['image_url'] book.save() book.category.clear() for category in form.cleaned_data['category']: book.category.add(category.id) book.save() suggestion.delete() return redirect(to='suggestions') else: form = BookForm() return render(request, 'core/approve_suggestion.html', { 'suggestion' : suggestion, 'form' : form, 'categories' : categories, })
def add_book(request): new_book = Book() categories = Category.objects.all() if request.method == 'POST': form = BookForm(request.POST) if form.is_valid(): new_book.title = form.cleaned_data['title'] new_book.author = form.cleaned_data['author'] new_book.url = form.cleaned_data['url'] new_book.description = form.cleaned_data['description'] new_book.image_url = form.cleaned_data['image_url'] new_book.save() for category in form.cleaned_data['category']: new_book.category.add(category.id) new_book.save() return redirect(to='staff') else: form = BookForm() return render(request, 'core/add_book.html', { 'new_book' : new_book, 'form' : form, 'categories' : categories, })
def handle(self, *args, **options): # process argument (module code) if not args: print 'Usage: python manage.py refresh <module_code> --option' return # info timestr = time.strftime("%Y.%m.%d.%H.%M.%S") out.info('Logging started at %s', timestr) # out.info('SITE_ROOT = %s' % SITE_ROOT) # out.info('TEX_ROOT = %s' % TEX_ROOT) # iterate over modules for module_code in args: out.info('BEGIN processing %s', module_code) # find main.tex main_tex = os.path.join(TEX_ROOT, module_code, 'main.tex') # parse p = TexParser() tree = p.parse_book(main_tex) # text output (native format) if options['text']: print tree # xml output if options['xml']: xml = tree.prettyprint_xml() self.stdout.write(xml) # labels if options['labels']: pairs = tree.get_label_mpaths() col_width = max([len(pair[0]) for pair in pairs]) + 2 # padding for pair in pairs: self.stdout.write(pair[0].ljust(col_width) + pair[1]) # database if options['db'] or options['commit']: # check whether this module already exists in the database preamble = p.parse_preamble(main_tex) code = preamble['module_code'] year = preamble['academic_year'] module = Module.objects.filter(code=code, year=year).first() if not module: out.info('Creating new module %s/%s' % (code, year)) module = Module(code=code, year=year, title=preamble['module_title']) module.save() else: out.info('Updating existing module %s/%s' % (code, year)) number = preamble['book_number'] book = Book.objects.filter(module=module, number=number).first() if book: out.info('Existing book %s/%s/%s will be deleted' % (code, year, number)) for booknode in BookNode.objects.filter( mpath__startswith=book.tree.mpath): booknode.delete() book.delete() book = Book() code = preamble['module_code'] year = preamble['academic_year'] book.module = Module.objects.filter(code=code, year=year).first() if 'book_number' in preamble: book.number = int(preamble['book_number']) else: book.number = 0 if 'book_title' in preamble: book.title = preamble['book_title'] if 'book_author' in preamble: book.author = preamble['book_author'] if 'book_version' in preamble: book.version = preamble['book_version'] if 'new_commands' in preamble: book.new_commands = preamble['new_commands'] hexstr = hex(book.number)[2:].zfill(2) prefix = code + '.' + hexstr # write book database if options['commit']: book.tree = tree.write_to_camel_database(prefix=prefix, commit=True) book.save() else: tree.write_to_camel_database(prefix=prefix, commit=False) # write labels to database pairs = tree.get_label_mpaths() for pair in pairs: lab = Label() lab.text = prefix + '.' + pair[0] lab.mpath = prefix + pair[1] if options['commit']: lab.book = book lab.save() else: print lab
def handle(self, *args, **options): # process argument (module code) if not args: print 'Usage: python manage.py refresh <module_code> --option' return # info timestr = time.strftime("%Y.%m.%d.%H.%M.%S") out.info('Logging started at %s', timestr) # out.info('SITE_ROOT = %s' % SITE_ROOT) # out.info('TEX_ROOT = %s' % TEX_ROOT) # iterate over modules for module_code in args: out.info('BEGIN processing %s', module_code) # find main.tex main_tex = os.path.join(TEX_ROOT, module_code, 'main.tex') # create book tree p = TexParser() preamble = p.parse_preamble( main_tex ) book = p.parse_book( main_tex ) book.title = preamble['book_title'] # xml output if options['xml']: xml = book.prettyprint_xml() self.stdout.write( xml ) # labels elif options['labels']: pairs = book.get_label_mpaths() col_width = max( [len(pair[0]) for pair in pairs] ) + 2 # padding for pair in pairs: self.stdout.write( pair[0].ljust(col_width) + pair[1] ) # camel database output if options['db']: # check whether this module already exists in the database preamble = p.parse_preamble( main_tex ) code = preamble['module_code'] year = preamble['academic_year'] module = Module.objects.filter(code=code, year=year).first() if not module: out.warning( 'Module %s/%s does not exist - do nothing' % (code, year) ) # out.info( 'Creating new module %s/%s' % (code, year) ) # module = Module(code=code, year=year, title=preamble['module_title']) # module.save() else: out.info( 'Updating existing module %s/%s' % (code, year) ) number = preamble['book_number'] bk = Book.objects.filter(module=module, number=number).first() if bk: out.info( 'Existing book %s/%s/%s will be deleted' % (code, year, number) ) for booknode in BookNode.objects.filter(mpath__startswith=bk.tree.mpath): booknode.delete() bk.delete() cbook = Book() code = preamble['module_code'] year = preamble['academic_year'] cbook.module = Module.objects.filter(code=code, year=year).first() if 'book_number' in preamble: cbook.number = int(preamble['book_number']) else: cbook.number = 0 if 'book_title' in preamble: cbook.title = preamble['book_title'] if 'book_author' in preamble: cbook.author = preamble['book_author'] if 'book_version' in preamble: cbook.version = preamble['book_version'] if 'new_commands' in preamble: cbook.new_commands = preamble['new_commands'] hexstr = hex( cbook.number )[2:].zfill(2) prefix = code + '.' + hexstr # write book database cbook.tree = book.write_to_camel_database(prefix=prefix, commit=True) cbook.save() # write labels to database pairs = book.get_label_mpaths() for pair in pairs: lab = Label() lab.book = cbook lab.text = prefix + '.' + pair[0] lab.mpath = prefix + pair[1] lab.save() print lab