Example #1
0
    def get(self):
        template = dao.get_template_by_id(self.request.get(u'template_id'))
        if not dao.test_template_permissions(
                template, [dao.TEMPLATE_OWN, dao.TEMPLATE_EDIT]):
            webapp2.abort(401)

        variable_list = list()

        for variable_entity in dao.get_variables(template):
            variable = dict()
            variable[u'id'] = variable_entity.key.id()
            variable[u'name'] = variable_entity.name
            variable[u'description'] = variable_entity.description
            variable[u'is_repeating'] = variable_entity.is_repeating
            variable[u'input_field'] = variable_entity.input_field
            variable[u'assignments'] = self.get_assignments(template, variable)
            variable[u'documents'] = self.get_documents(template, variable)
            variable_list.append(variable)

        # Create template and template values, render the page
        jinja_template = ui.get_template(self, u'template/variable/index.html')

        jinja_template_values = dao.get_standard_template_values(template)
        jinja_template_values[u'variables'] = variable_list

        self.response.out.write(jinja_template.render(jinja_template_values))
Example #2
0
    def post(self):
        template = dao.get_template_by_id(self.request.get(u'template_id'))
        if not dao.test_template_permissions(
                template, [dao.TEMPLATE_OWN, dao.TEMPLATE_EDIT]):
            webapp2.abort(401)
        error_msg = None

        # Handle contribute request
        if self.request.get(u'contribute'):
            try:
                name = self.request.get(u'name').strip()
                if not name:
                    raise Exception(
                        u'You must provide a name for the public template')
                if dao.get_public_template_by_name(name):
                    raise Exception(u'Sorry, that name is taken')

                new_template = dao.Project(
                    name=name,
                    project_type=dao.PUBLIC_TEMPLATE,
                    status=dao.STATUS_PENDING,
                    description=self.request.get(u'description'))
                new_template.put()

                for assignment_entity in dao.get_assignments(template):
                    assignment_entity.clone(new_template).put()

                for document_entity in dao.get_documents(template):
                    template_document_entity = document_entity.clone(
                        new_template)
                    template_document_entity.put()
                    for document_item_entity in dao.get_document_items(
                            document_entity):
                        document_item_entity.clone(
                            template_document_entity).put()

                for interview_entity in dao.get_interviews(template):
                    cloned_interview_entity = interview_entity.clone(
                        new_template)
                    cloned_interview_entity.put()

                for style_entity in dao.get_styles(template):
                    style_entity.clone(new_template).put()

                for variable_entity in dao.get_variables(template):
                    variable_entity.clone(new_template).put()

                self.redirect("/template?template_id={}".format(
                    template.key.id()))
                return
            except Exception as e:
                error_msg = u'Contributing project failed: {}'.format(e)

        # Display the webpage
        self.render(template, error_msg)
Example #3
0
 def generate_variable_values(self, project, inner_template_values):
     indexed_variable_max_indices = dict()
     for variable in dao.get_variables(project):
         indexed_variable_match_object = indexed_name_pattern.match(
             variable.name)
         if indexed_variable_match_object:
             variable_name = indexed_variable_match_object.group(1)
             variable_index = indexed_variable_match_object.group(2)
             old_max_index = indexed_variable_max_indices[
                 variable_name] if variable_name in indexed_variable_max_indices else None
             if not old_max_index or int(variable_index) > old_max_index:
                 indexed_variable_max_indices[variable_name] = int(
                     variable_index)
         else:
             content = variable.content if variable.content else u''
             inner_template_values[variable.internal_name] = content
     for variable_name in iter(indexed_variable_max_indices):
         count_name = u'{}_count'.format(variable_name)
         # Because of how "range" works, count needs to be max index + 1
         count = int(indexed_variable_max_indices[variable_name]) + 1
         inner_template_values[count_name] = count
Example #4
0
 def generate_variable_values(self, project, index, inner_template_values):
     indexed_variable_max_indices = dict()
     for variable in dao.get_variables(project):
         indexed_variable_match_object = indexed_name_pattern.match(
             variable.name)
         if indexed_variable_match_object:
             variable_name = indexed_variable_match_object.group(1)
             variable_index = indexed_variable_match_object.group(2)
             if index and int(variable_index) == int(index):
                 self.generate_variable_value(inner_template_values,
                                              variable)
             old_max_index = indexed_variable_max_indices[
                 variable_name] if variable_name in indexed_variable_max_indices else None
             if not old_max_index or int(variable_index) > old_max_index:
                 indexed_variable_max_indices[variable_name] = int(
                     variable_index)
         else:
             self.generate_variable_value(inner_template_values, variable)
     for variable_name in iter(indexed_variable_max_indices):
         count_name = u'{}_count'.format(variable_name)
         count = int(indexed_variable_max_indices[variable_name]) + 1
         inner_template_values[count_name] = count
    def post(self):
        if not dao.test_current_user_registered():
            webapp2.abort(401)

        current_user = users.get_current_user()
        current_email = current_user.email().lower()

        # Attempt to create a new project
        try:
            name = self.request.get(u'name').strip()
            if not name:
                raise Exception(u'You must provide a name for your project')
            for project in dao.get_projects_by_name(name):
                if dao.test_email_is_project_owner(project, current_email):
                    raise Exception(
                        u'Sorry, you already own a project by that name')

            # Create the new Project entity
            project = dao.Project(name=name,
                                  project_type=dao.PROJECT,
                                  description=self.request.get(u'description'))
            project_key = project.put()

            # Create a ProjectUser entity, making the current user owner of the new project
            dao.ProjectUser(email=dao.get_current_site_user().email,
                            permissions=[dao.PROJECT_OWN],
                            parent=project_key).put()

            # Get the selected template ID
            template_id = self.request.get(u'template_id')

            if template_id:
                # Generate HTML for the template
                template_entity = dao.get_template_by_id(template_id)
                html_generator_service = HtmlGeneratorService(template_entity)
                html_generator_service.generate_all_html()

                # Copy entities owned by the template entity into the project
                for assignment_entity in dao.get_assignments(template_entity):
                    assignment_entity.clone(project).put()

                for document_entity in dao.get_documents(template_entity):
                    template_document_entity = document_entity.clone(project)
                    template_document_entity.put()
                    for document_item_entity in dao.get_document_items(
                            document_entity):
                        document_item_entity.clone(
                            template_document_entity).put()

                for interview_entity in dao.get_interviews(template_entity):
                    cloned_interview_entity = interview_entity.clone(project)
                    if cloned_interview_entity.auto_assign:
                        cloned_interview_entity.assigned_email = current_email
                    cloned_interview_entity.put()

                for style_entity in dao.get_styles(template_entity):
                    style_entity.clone(project).put()

                for variable_entity in dao.get_variables(template_entity):
                    variable_entity.clone(project).put()

            self.redirect("/project?project_id={}".format(project_key.id()))
            return
        except Exception as e:
            error_msg = u'Creating project failed: {}'.format(e)

        # Display the webpage
        self.render(error_msg)