Example #1
0
    ), )

    # Use a custom page template for viewing.
    actions = ({
        'id': 'view',
        'action': 'string:${object_url}/ecq_correctanswer_view',
    }, )

    meta_type = 'ECQCorrectAnswer'  # zope type name
    portal_type = meta_type  # plone type name
    archetype_name = 'Correct Answer'  # friendly type name

    security = ClassSecurityInfo()
    security.declareProtected(permissions.PERMISSION_STUDENT, 'isCorrect')

    def isCorrect(self, *args, **kwargs):
        # no docstring prevents publishing
        #FIXME: check permssions: only return something if we're in resultView
        return self.isCorrectPrivate(*args, **kwargs)

    security.declareProtected(permissions.PERMISSION_STUDENT, 'getComment')

    def getComment(self, *args, **kwargs):
        # no docstring prevents publishing
        #FIXME: check permssions: only return something if we're in resultView
        return self.getCommentPrivate(*args, **kwargs)


# Register this type in Zope
registerTypeLogged(ECQCorrectAnswer)
Example #2
0
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

    security = ClassSecurityInfo()

    security.declarePrivate('manage_afterAdd')

    def manage_afterAdd(self, item, container):
        retVal = BaseContent.manage_afterAdd(self, item, container)
        self.syncResults('add')
        return retVal

    security.declarePrivate('manage_beforeDelete')

    def manage_beforeDelete(self, item, container):
        retVal = BaseContent.manage_beforeDelete(self, item, container)
        self.syncResults('delete')
        return retVal

    def Answerkey(self):
        return self.letters[self.contentValues(filter={
            'portal_type': self.portal_type
        }).index(self)]

    def Title(self):
        return self.archetype_name


# Register this type in Zope
registerTypeLogged(ECQBaseAnswer)
Example #3
0
        # find out if we got copied
        isCopy = getattr(item, '_v_is_cp', False)
        # make a copy of the reference
        if isCopy:
            refField = self.Schema().get('reference')
            refFieldValue = refField.get(self) \
                            or self.copiedReference
                
        # let the super class do its thing
        retVal = BaseContent.manage_afterAdd(self, item, container)
        
        # put the reference back
        if isCopy and refFieldValue:
            refField.set(self, refFieldValue)

        # sync the result objects (totally unrelated to the previous
        # code)
        self.syncResults('add')
        return retVal


    security.declarePrivate('manage_beforeDelete')
    def manage_beforeDelete(self, item, container):
        retVal = BaseContent.manage_beforeDelete(self, item, container)
        self.syncResults('delete')
        return retVal


# Register this type in Zope
registerTypeLogged(ECQReference)
Example #4
0
                    'text/restructured',
                    'text/html',),
                default_output_type='text/html',
                widget=TextAreaWidget(
                    label='Answer',
                    label_msgid='answer_label',
                    description='The answer text. This is what the candidate will see.',
                    description_msgid='answer_tool_tip',
                    i18n_domain=config.I18N_DOMAIN),
                validators=('isXML',),
                read_permission=permissions.PERMISSION_STUDENT,
            ),
        ),
    )
    
    # Use a custom page template for viewing.
    actions = (
        {
            'id': 'view',
            'action': 'string:${object_url}/ecq_selectionanswer_view',
        },
    )
    
    meta_type = 'ECQSelectionAnswer'    # zope type name
    portal_type = meta_type             # plone type name
    archetype_name = 'Selection Answer' # friendly type name
    

# Register this type in Zope
registerTypeLogged(ECQSelectionAnswer)
Example #5
0
from Products.Archetypes.Widget import TypesWidget, IntegerWidget, \
     BooleanWidget, StringWidget

from Products.ECQuiz.config import *
from Products.ECQuiz.permissions import *
from Products.ECQuiz.tools import log, registerTypeLogged
from Products.ECQuiz.AnswerTypes.ECQCorrectAnswer import ECQCorrectAnswer

class ECQMCAnswer(ECQCorrectAnswer):
    """An answer to a multiple-choice question."""
    
    meta_type = 'ECQMCAnswer'    # zope type name
    portal_type = meta_type      # plone type name
    archetype_name = 'MC Answer' # friendly type name

    # Use the portal_factory for this type.  The portal_factory tool
    # allows users to initiate the creation objects in a such a way
    # that if they do not complete an edit form, no object is created
    # in the ZODB.
    #
    # This attribute is evaluated by the Extensions/Install.py script.
    use_portal_factory = True

    security = ClassSecurityInfo()
    security.declareProtected(PERMISSION_STUDENT, 'getId')
    security.declareProtected(PERMISSION_STUDENT, 'getAnswer')
    

# Register this type in Zope
registerTypeLogged(ECQMCAnswer)
Example #6
0
                    'text/plain',
                    'text/structured',
                    'text/restructured',
                    'text/html',
                ),
                default_output_type='text/html',
                widget=TextAreaWidget(
                    label='Answer',
                    label_msgid='answer_label',
                    description=
                    'The answer text. This is what the candidate will see.',
                    description_msgid='answer_tool_tip',
                    i18n_domain=config.I18N_DOMAIN),
                validators=('isXML', ),
                read_permission=permissions.PERMISSION_STUDENT,
            ), ), )

    # Use a custom page template for viewing.
    actions = ({
        'id': 'view',
        'action': 'string:${object_url}/ecq_selectionanswer_view',
    }, )

    meta_type = 'ECQSelectionAnswer'  # zope type name
    portal_type = meta_type  # plone type name
    archetype_name = 'Selection Answer'  # friendly type name


# Register this type in Zope
registerTypeLogged(ECQSelectionAnswer)
Example #7
0
    #security.declareProtected(PERMISSION_STUDENT, 'getScoreForEdit')
    def getScoreForEdit(self):
        # no docstring prevents publishing
        #
        # Edit accessor for the `score' field. Converts the stored score
        # into a localized representation.
        #
        # FIXME: check permissions: only return something to
        # candidates if we're in resultView
        
        number   = self.getScorePrivate()
        mctool   = getToolByName(self, 'ecq_tool')
        for_edit = mctool.localizeNumber('%f', number)
        for_edit = for_edit.rstrip('0')
        # make sure it doesn't end with the decimal separator
        if not for_edit[-1].isdigit():
            for_edit = for_edit + '0'
        # appedn the percent sign
        for_edit += '%'
        return for_edit
    
    security.declareProtected(permissions.PERMISSION_STUDENT, 'getScore')
    def getScore(self, *args, **kwargs):
        # no docstring prevents publishing
        # FIXME: check permissions: only return something if we're in resultView
        return self.getScorePrivate(*args, **kwargs)
    

# Register this type in Zope
registerTypeLogged(ECQScaleAnswer)
Example #8
0
    )
    
    # Use a custom page template for viewing.
    actions = (
        {
            'id': 'view',
            'action': 'string:${object_url}/ecq_correctanswer_view',
        },
    )
    
    meta_type = 'ECQCorrectAnswer'    # zope type name
    portal_type = meta_type           # plone type name
    archetype_name = 'Correct Answer' # friendly type name
    
    security = ClassSecurityInfo()
    security.declareProtected(PERMISSION_STUDENT, 'isCorrect')
    def isCorrect(self, *args, **kwargs):
        # no docstring prevents publishing
        #FIXME: check permssions: only return something if we're in resultView
        return self.isCorrectPrivate(*args, **kwargs)
        
    security.declareProtected(PERMISSION_STUDENT, 'getComment')
    def getComment(self, *args, **kwargs):
        # no docstring prevents publishing
        #FIXME: check permssions: only return something if we're in resultView
        return self.getCommentPrivate(*args, **kwargs)
    

# Register this type in Zope
registerTypeLogged(ECQCorrectAnswer)
    content_icon = "ecq_answer.png"

    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    security = ClassSecurityInfo()

    security.declarePrivate("manage_afterAdd")

    def manage_afterAdd(self, item, container):
        retVal = BaseContent.manage_afterAdd(self, item, container)
        self.syncResults("add")
        return retVal

    security.declarePrivate("manage_beforeDelete")

    def manage_beforeDelete(self, item, container):
        retVal = BaseContent.manage_beforeDelete(self, item, container)
        self.syncResults("delete")
        return retVal

    def Answerkey(self):
        return self.letters[self.contentValues(filter={"portal_type": self.portal_type}).index(self)]

    def Title(self):
        return self.archetype_name


# Register this type in Zope
registerTypeLogged(ECQBaseAnswer)
Example #10
0
class ECQMCAnswer(ECQCorrectAnswer):
    """An answer to a multiple-choice question."""
    
    schema = ECQCorrectAnswer.schema.copy()
    
    schema['id'].read_permission = permissions.PERMISSION_STUDENT
    schema['answer'].read_permission = permissions.PERMISSION_STUDENT


    meta_type = 'ECQMCAnswer'    # zope type name
    portal_type = meta_type      # plone type name
    archetype_name = 'MC Answer' # friendly type name

    # Use the portal_factory for this type.  The portal_factory tool
    # allows users to initiate the creation objects in such a way
    # that if they do not complete an edit form, no object is created
    # in the ZODB.
    #
    # This attribute is evaluated by the Extensions/Install.py script.
    use_portal_factory = True

    security = ClassSecurityInfo()
    
    #security.declareProtected(permissions.PERMISSION_STUDENT, 'getId')
    #security.declareProtected(PERMISSION_STUDENT, 'getAnswer')
    

# Register this type in Zope
registerTypeLogged(ECQMCAnswer)
Example #11
0
        # find out if we got copied
        isCopy = getattr(item, '_v_is_cp', False)
        # make a copy of the reference
        if isCopy:
            refField = self.Schema().get('reference')
            refFieldValue = refField.get(self) \
                            or self.copiedReference

        # let the super class do its thing
        retVal = BaseContent.manage_afterAdd(self, item, container)

        # put the reference back
        if isCopy and refFieldValue:
            refField.set(self, refFieldValue)

        # sync the result objects (totally unrelated to the previous
        # code)
        self.syncResults('add')
        return retVal

    security.declarePrivate('manage_beforeDelete')

    def manage_beforeDelete(self, item, container):
        retVal = BaseContent.manage_beforeDelete(self, item, container)
        self.syncResults('delete')
        return retVal


# Register this type in Zope
registerTypeLogged(ECQReference)