示例#1
0
		verbose_name_plural = u"Диссертации"
		app_label = "core"

	def save(self, **kwargs):
		self.description = u""
		super(Dissertation, self).save(**kwargs)
		if self.title != self.dissertant:
			self.title = self.dissertant
			self.save()

class DefaultGeneralDisserForm(forms.ModelForm):
	subject = Dissertation._meta.get_field("subject").formfield(label=u'Тема диссертации')
	dissertant = Dissertation._meta.get_field("dissertant").formfield(label=u'Ф.И.О. соискателя')
	speciality = Dissertation._meta.get_field("speciality").formfield(label=u'Специальность')
	autoref = Dissertation._meta.get_field("autoref").formfield(label=u'Ссылка на файл автореферата')
	council = Dissertation._meta.get_field("council").formfield(widget=forms.Textarea(attrs={'cols':'80','rows':'3'}))
	date_defend = CalendarDateField(label=u'Дата защиты', required=True)

	class Meta:
		model = Dissertation
		fields = ( 'dissertant','subject', 'date_defend', 'speciality', 'council', 'autoref','tags')
		widgets = {
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)

register_type(Dissertation, base=None)
register_workspace(Dissertation, u"Объявление о защите диссертации", u"/resources/dissers/", u"Объявление о защите диссертации с датой защиты и файлом автореферата.")
示例#2
0
	class Meta:
		verbose_name = u"Изображение"
		verbose_name_plural = u"Изображения"
		app_label = "core"

class DefaultGeneralPhotoForm(forms.ModelForm):
	class Meta:
		model = Photo
		fields = ('title','description','image', 'tags')
		widgets = {
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0),
				'image':admin_widgets.AdminFileWidget(attrs={})
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)




register_type(Photo)

register_help(  
ContextHelpNote(
	u'Photo',
	u'Фото',
	u'Объект на основе изображения. В качестве изображения желательно использовать растровые изображения популярных форматов (png, jpg, gif), так как другие форматы изображений могут не распознаваться браузерами пользователей. Желательно, чтобы размещаемые изображения не превышали 0,5 Мб. Недопустимо размещение изображений больше 1 Мб или в несжатых форматах (bmp и т.п.) на часто посещаемых страницах. Помните, что размещая объемные ресурсы на часто посещаяемых страницах, Вы мешаете работе пользователей и тратите их время и интернет трафик, и что размещая множество изображений на странице, Вы делаете ее нечитаемой.')
)
示例#3
0
文件: poll.py 项目: vden/TsoguNG
class DefaultGeneralPollForm:
    form = DefaultGeneralPollMainForm
    formset = DefaultGeneralPollFormInline

    def __init__(self, data=None, files=None, instance=None):
        self.instance = instance
        self.data = data
        self.files = files
        self.iform = self.form(data, files, instance=instance)
        self.iformset = self.formset(data, files, instance=instance)
        print "FS", [x for x in self.iformset.forms[0]
                     ], self.iformset.forms[0].fields

    def is_valid(self):
        return self.iform.is_valid() and self.iformset.is_valid()

    def save(self):
        self.iform.save()
        self.iformset.save()

    def __unicode__(self):
        from django.utils.safestring import mark_safe
        return mark_safe(u'%s %s' % (self.iform, self.iformset))


register_type(Poll)
register_workspace(
    Poll, u"Голосование", u"/news/polls/items/",
    u'Голосование по какому-либо вопросу. Если указать метки, то будет отображаться на соответствующих им страницах сайта. Последнее опубликованное голосование отображается в блоке «Опрос».'
)
示例#4
0
	метод должен вернуть контекст для шаблона (любого типа,
	лишь бы шаблон с ним смог разобраться).

	Переменная в конфигурации может выглядеть так:
	CUSTOM_TEMPLATES = "custom/"
	"""
    template = models.CharField(u'Путь к шаблону', max_length=255)

    def render(self, request=None):
        tpl = "%s%s" % (settings.CUSTOM_TEMPLATES, str(self.template))
        method = eval("custom.%s" % self.slug)

        context = method(self, request)
        param = {
            'object': self,
        }
        param.update(context)
        return template_loader.get_template(tpl).render(
            RequestContext(request, param))

    @objectaction(u'Просмотр')
    @render_to_portal()
    def view(self, request):
        return self.render(request)

    class Meta:
        app_label = "core"


register_type(PageTemplate, user=False)
示例#5
0
	Произвольный шаблон. Календарик, баннерокрутилка или
	ERP-система, встроенная в правую колонку сайта.

	Из модуля custom вызывается метод с именем шаблона без .html,
	метод должен вернуть контекст для шаблона (любого типа,
	лишь бы шаблон с ним смог разобраться).

	Переменная в конфигурации может выглядеть так:
	CUSTOM_TEMPLATES = "custom/"
	"""
	template = models.CharField(u'Путь к шаблону', max_length=255)

	def render(self, request=None):
		tpl = "%s%s"%(settings.CUSTOM_TEMPLATES, str(self.template))
		method = eval("custom.%s"%self.slug)

		context = method(self, request)
		param = {'object':self,}
		param.update(context)
		return template_loader.get_template(tpl).render(
			RequestContext(request, param)) 

	@objectaction(u'Просмотр')
	@render_to_portal()
	def view(self, request):
		return self.render(request)

	class Meta:
		app_label = "core"
register_type(PageTemplate, user=False)
示例#6
0
文件: page.py 项目: vden/TsoguNG
    def __init__(self, *args, **kwrds):
        super(DefaultGeneralPageForm, self).__init__(*args, **kwrds)
        self.fields['text'].widget.is_new = not bool(kwrds['instance'].id)

    class Meta:
        model = Page
        fields = ('title', 'description', 'text', 'tags')
        widgets = {
            'text': TinyMCEWidget(),
            'description': forms.Textarea(attrs={
                'cols': '80',
                'rows': '5'
            }),
            'tags': admin_widgets.FilteredSelectMultiple(u'метки', 0)
        }

    class Media:
        js = ('/media/js/admin_jsi18n.js', )


register_type(Page)
register_workspace(
    Page, u"Объявление", u"/news/announcements/",
    u'Короткие текстовые объявления. Отображаются в блоке «Объявления».')

register_help(
    ContextHelpNote(
        u'Page', u'Страница',
        u'Страница - основной объект портала. Страница одновременно является и странице, и папкой, в которой могут содержаться объекты. Таким образом весь портал представляет собой дерево (иерархию) страниц. Вложенные в страницу фото, будут отображаться в блоке фото страницы (если выбран шаблон - по умолчанию). Помните, что размещая объемные ресурсы на часто посещаяемых страницах, Вы мешаете работе пользователей и тратите их время и интернет трафик, и что размещая множество изображений на странице, Вы делаете ее нечитаемой.'
    ))
示例#7
0
文件: link.py 项目: vden/TsoguNG
	class Meta:
		verbose_name = u"Ссылка"
		verbose_name_plural = u"Ссылки"
		app_label = "core"

class DefaultGeneralLinkForm(forms.ModelForm):
	class Meta:
		model = Link
		fields = ('title','description','url', 'link_type')
		widgets = {
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
			}



register_type(Link)


register_help(
ContextHelpNote(
	u'Link_url',
	u'Ссылка',
	u'Адрес ссылки.')
)

register_help(
ContextHelpNote(
	u'Link',
	u'Ссылка',
	u'Ссылка на внешний или внутренний ресурс.')
)
示例#8
0
文件: news.py 项目: vden/TsoguNG
        model = News
        fields = ('title', 'description', 'text', 'tags')
        widgets = {
            'text': TinyMCEWidget(),
            'description': forms.Textarea(attrs={
                'cols': '80',
                'rows': '5'
            }),
            'tags': admin_widgets.FilteredSelectMultiple(u'метки', 0)
        }

    class Media:
        js = ('/media/js/admin_jsi18n.js', )


register_type(News, base=Page)
register_workspace(
    News, u"Новость", u"/news/university/",
    u'Новости отображаются на главной странице или на страницах институтов, в зависимости от состояния и присвоенных меток.'
)

register_help(
    ContextHelpNote(
        u'News', u'Новость',
        u'Страница специально выделенная для хранения новостных сообщений (новостью являтся уже произошедшее событие). Все новостные сообщения должны создаваться из рабочей зоны пользователя, иначе они не будут попадать в автоматически собираемые летны новостей. Важно помнить, что агрегация новостей в ленты подразделений происходит по меткам (тегам).',
        u'http://www.tsogu.ru/video-spravka/razmeshchenie-novostej/'))

register_help(
    ContextHelpNote(
        u'News_tags', u'Метки',
        u'Метки небходимы для агрегации новостей в новостные ленты подразделений'
示例#9
0
文件: page.py 项目: vden/TsoguNG
class DefaultGeneralPageForm(forms.ModelForm):
	title = forms.CharField(label = u'Заголовок', required=True)

	def __init__(self, *args, **kwrds):
		super(DefaultGeneralPageForm, self).__init__(*args, **kwrds)
		self.fields['text'].widget.is_new = not bool(kwrds['instance'].id)

	class Meta:
		model = Page
		fields = ('title','description','text', 'tags')
		widgets = {
				'text':TinyMCEWidget(),
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)


register_type(Page)
register_workspace(Page, u"Объявление", u"/news/announcements/", u'Короткие текстовые объявления. Отображаются в блоке «Объявления».')


register_help(
ContextHelpNote(
	u'Page',
	u'Страница',
	u'Страница - основной объект портала. Страница одновременно является и странице, и папкой, в которой могут содержаться объекты. Таким образом весь портал представляет собой дерево (иерархию) страниц. Вложенные в страницу фото, будут отображаться в блоке фото страницы (если выбран шаблон - по умолчанию). Помните, что размещая объемные ресурсы на часто посещаяемых страницах, Вы мешаете работе пользователей и тратите их время и интернет трафик, и что размещая множество изображений на странице, Вы делаете ее нечитаемой.')
)
示例#10
0
		model = File
		fields = ('title','description','path', 'tags')
		widgets = {
				'path':admin_widgets.AdminFileWidget(attrs={}),
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)





register_type(File)

register_help(
ContextHelpNote(
	u'File',
	u'Файл',
	u'Объект на основе файла произвольного типа. Загруженный файл можно скачать.'
))

register_help(
ContextHelpNote(
	u'path',
	u'Путь к файлу',
	u'Указывается путь к файлу на Вашем компьютере, который будет загружен на портал.'
))
示例#11
0
文件: post.py 项目: vden/TsoguNG
			form = DefaultGeneralPostForm(request.POST, instance=self)
			if form.is_valid():
				form.save()
				raise Http302(self.get_absolute_url())
		else:
			form = DefaultGeneralPostForm(instance=self)
		return {'object':self, 'form':form}


	class Meta:
		verbose_name = u"Пост"
		verbose_name_plural = u"Посты"
		app_label = 'core'

class DefaultGeneralPostForm(forms.ModelForm):
	class Meta:
		model = Post
		fields = ('title','description','text', 'posttags')
		widgets = {
				'text':TinyMCEWidget(),
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'posttags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)



register_type(Post)
示例#12
0
    def get_link_absolute_url(self):
        #		if int(self.link_type) == 1:
        return self.url

    class Meta:
        verbose_name = u"Ссылка"
        verbose_name_plural = u"Ссылки"
        app_label = "core"


class DefaultGeneralLinkForm(forms.ModelForm):
    class Meta:
        model = Link
        fields = ('title', 'description', 'url', 'link_type')
        widgets = {
            'description': forms.Textarea(attrs={
                'cols': '80',
                'rows': '5'
            }),
        }


register_type(Link)

register_help(ContextHelpNote(u'Link_url', u'Ссылка', u'Адрес ссылки.'))

register_help(
    ContextHelpNote(u'Link', u'Ссылка',
                    u'Ссылка на внешний или внутренний ресурс.'))
示例#13
0
class DefaultGeneralDisserForm(forms.ModelForm):
    subject = Dissertation._meta.get_field("subject").formfield(
        label=u'Тема диссертации')
    dissertant = Dissertation._meta.get_field("dissertant").formfield(
        label=u'Ф.И.О. соискателя')
    speciality = Dissertation._meta.get_field("speciality").formfield(
        label=u'Специальность')
    autoref = Dissertation._meta.get_field("autoref").formfield(
        label=u'Ссылка на файл автореферата')
    council = Dissertation._meta.get_field("council").formfield(
        widget=forms.Textarea(attrs={
            'cols': '80',
            'rows': '3'
        }))
    date_defend = CalendarDateField(label=u'Дата защиты', required=True)

    class Meta:
        model = Dissertation
        fields = ('dissertant', 'subject', 'date_defend', 'speciality',
                  'council', 'autoref', 'tags')
        widgets = {'tags': admin_widgets.FilteredSelectMultiple(u'метки', 0)}

    class Media:
        js = ('/media/js/admin_jsi18n.js', )


register_type(Dissertation, base=None)
register_workspace(
    Dissertation, u"Объявление о защите диссертации", u"/resources/dissers/",
    u"Объявление о защите диссертации с датой защиты и файлом автореферата.")
示例#14
0
文件: audiofile.py 项目: vden/TsoguNG
			print "POST_SAVE AudioFile exception", str(E)

class AudioFile(File):
	length = models.IntegerField(u"Длительность трека", blank=True, default=0)

	def save(self, **kwargs):
		super(AudioFile, self).save(**kwargs)

	def mediainfo(self):
		mi = {}		
		mi['length'] = "%02d:%02d"%(self.length//60, self.length%60)

		return mi
	class Meta:
		verbose_name = u"Аудиофайл"
		verbose_name_plural = u"Аудиофайлы"
		app_label = "core"

post_save.connect(handle_audio_info, sender=AudioFile)
register_type(AudioFile, base=File)


register_help( 
ContextHelpNote(
	u'AudioFile',
	u'Аудиофайл',
	u'Объект на основе файла формата mp3. Позволяет прослушивать запись с портала и скачивать ее к себе на компьютер. Комментирование и оценка аудиофайла доступно по умолчанию.')
#	u'http://www.tsogu.ru/video-spravka/razmeshchenie-novostej/')
)

示例#15
0
文件: event.py 项目: vden/TsoguNG
	class Meta:
		verbose_name = u"Событие"
		verbose_name_plural = u"События"
		app_label = "core"

class DefaultGeneralEventForm(forms.ModelForm):
	date_start = CalendarDateField(label=u'Дата начала')
	date_end = CalendarDateField(label=u'Дата завершения')

	def __init__(self, *args, **kwrds):
		super(DefaultGeneralEventForm, self).__init__(*args, **kwrds)
		self.fields['text'].widget.is_new = not bool(kwrds['instance'].id)

	class Meta:
		model = Event
		fields = ('title','description','text','date_start','date_end',
			'place','contact_name','contact_email','contact_phone', 'tags')
		widgets = {
				'text':TinyMCEWidget(),
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)


register_type(Event, base=News)
register_workspace(Event, u"Событие", u"/news/events/", u'Анонсы событий отображаются в календаре по соответствующим датам и в блоке «Анонсы» с описанием.')
示例#16
0
文件: news.py 项目: vden/TsoguNG
	class Meta:
		model = News
		fields = ('title','description','text','tags')
		widgets = {
				'text':TinyMCEWidget(),
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)



register_type(News, base=Page)
register_workspace(News,  u"Новость", u"/news/university/", u'Новости отображаются на главной странице или на страницах институтов, в зависимости от состояния и присвоенных меток.')


register_help(
ContextHelpNote(
	u'News',
	u'Новость',
	u'Страница специально выделенная для хранения новостных сообщений (новостью являтся уже произошедшее событие). Все новостные сообщения должны создаваться из рабочей зоны пользователя, иначе они не будут попадать в автоматически собираемые летны новостей. Важно помнить, что агрегация новостей в ленты подразделений происходит по меткам (тегам).',
	u'http://www.tsogu.ru/video-spravka/razmeshchenie-novostej/')
)

register_help(
ContextHelpNote(
	u'News_tags',
	u'Метки',
示例#17
0
文件: poll.py 项目: vden/TsoguNG
		js = ('/media/js/admin_jsi18n.js',)



class DefaultGeneralPollForm:
	form = DefaultGeneralPollMainForm
	formset = DefaultGeneralPollFormInline

	def __init__(self, data=None, files=None, instance=None):
		self.instance = instance
		self.data = data
		self.files = files
		self.iform = self.form(data, files, instance=instance)
		self.iformset = self.formset(data, files, instance=instance)
		print "FS", [x for x in self.iformset.forms[0]], self.iformset.forms[0].fields

	def is_valid(self):
		return self.iform.is_valid() and self.iformset.is_valid()

	def save(self):
		self.iform.save()
		self.iformset.save()

	def __unicode__(self):
		from django.utils.safestring import mark_safe
		return mark_safe(u'%s %s'%(self.iform, self.iformset))


register_type(Poll)
register_workspace(Poll, u"Голосование", u"/news/polls/items/",  u'Голосование по какому-либо вопросу. Если указать метки, то будет отображаться на соответствующих им страницах сайта. Последнее опубликованное голосование отображается в блоке «Опрос».')
示例#18
0
文件: videofile.py 项目: vden/TsoguNG
		verbose_name = u"Видеофайл"
		verbose_name_plural = u"Видеофайлы"
		app_label = "core"

class DefaultGeneralVideoFileForm(forms.ModelForm):
	class Meta:
		model = VideoFile
		fields = ('title','description','path', 'preview', 'tags')
		widgets = {
				'preview':admin_widgets.AdminFileWidget(attrs={}),
				'path':admin_widgets.AdminFileWidget(attrs={}),
				'description':forms.Textarea(attrs={'cols':'80','rows':'5'}),
				'tags':admin_widgets.FilteredSelectMultiple(u'метки', 0)
			}

	class Media:
		js = ('/media/js/admin_jsi18n.js',)



post_save.connect(handle_video_info, sender=VideoFile)
register_type(VideoFile, base=File)


register_help(  
ContextHelpNote(
	u'VideoFile',
	u'Видеофайл',
	u'Объект на основе видеороика. Позволяет просматривать запись с портала и скачивать ее к себе на компьютер. Комментирование и оценка видеофайла доступна по умолчанию. Все опубликованные видеоролики попадают в раздел телевидения ТюмГНГУ.')
)
示例#19
0
文件: event.py 项目: vden/TsoguNG
    date_start = CalendarDateField(label=u'Дата начала')
    date_end = CalendarDateField(label=u'Дата завершения')

    def __init__(self, *args, **kwrds):
        super(DefaultGeneralEventForm, self).__init__(*args, **kwrds)
        self.fields['text'].widget.is_new = not bool(kwrds['instance'].id)

    class Meta:
        model = Event
        fields = ('title', 'description', 'text', 'date_start', 'date_end',
                  'place', 'contact_name', 'contact_email', 'contact_phone',
                  'tags')
        widgets = {
            'text': TinyMCEWidget(),
            'description': forms.Textarea(attrs={
                'cols': '80',
                'rows': '5'
            }),
            'tags': admin_widgets.FilteredSelectMultiple(u'метки', 0)
        }

    class Media:
        js = ('/media/js/admin_jsi18n.js', )


register_type(Event, base=News)
register_workspace(
    Event, u"Событие", u"/news/events/",
    u'Анонсы событий отображаются в календаре по соответствующим датам и в блоке «Анонсы» с описанием.'
)
示例#20
0
文件: videofile.py 项目: vden/TsoguNG
        verbose_name_plural = u"Видеофайлы"
        app_label = "core"


class DefaultGeneralVideoFileForm(forms.ModelForm):
    class Meta:
        model = VideoFile
        fields = ("title", "description", "path", "preview", "tags")
        widgets = {
            "preview": admin_widgets.AdminFileWidget(attrs={}),
            "path": admin_widgets.AdminFileWidget(attrs={}),
            "description": forms.Textarea(attrs={"cols": "80", "rows": "5"}),
            "tags": admin_widgets.FilteredSelectMultiple(u"метки", 0),
        }

    class Media:
        js = ("/media/js/admin_jsi18n.js",)


post_save.connect(handle_video_info, sender=VideoFile)
register_type(VideoFile, base=File)


register_help(
    ContextHelpNote(
        u"VideoFile",
        u"Видеофайл",
        u"Объект на основе видеороика. Позволяет просматривать запись с портала и скачивать ее к себе на компьютер. Комментирование и оценка видеофайла доступна по умолчанию. Все опубликованные видеоролики попадают в раздел телевидения ТюмГНГУ.",
    )
)