def AuthenticatedGet(self, org, event):
     global_admin = False
     local_admin = False
     if org.name == GLOBAL_ADMIN_NAME:
         global_admin = True
     if org.is_admin == True and global_admin == False:
         local_admin = True
     
     if global_admin == False and local_admin == False:
         self.redirect("/")
         return
         
     form = organization.OrganizationAdminForm()
     events_list = None
     if global_admin:
         query_string = "SELECT * FROM Event"
         events_list = db.GqlQuery(query_string)
     if local_admin:
         events_list = []
         query_string = "SELECT * FROM Event"
         query_first = db.GqlQuery(query_string)
         for q in query_first:
             if q.key() == org.incident.key():
                 events_list.append(q)
     suggested_password = random_password.generate_password()
     
     self.response.out.write(template.render(
     {
         "create_admin": True,
         "form": form,
         "events_list": events_list,
         "auto_password": suggested_password,
         "global_admin": global_admin,
     }))
     return
    def AuthenticatedGet(self, org, _):
        global_admin = False
        local_admin = False

        if org.name == GLOBAL_ADMIN_NAME:
            global_admin = True
        if org.is_admin == True and global_admin == False:
            local_admin = True

        if global_admin == False and local_admin == False:
            self.redirect("/")
            return

        # create form
        form = (GlobalAdminCreateOrganizationForm()
                if global_admin else CreateOrganizationForm())
        events = self._get_events(org, global_admin, local_admin)
        form.incident.choices = [(str(event.key().id()), event.name)
                                 for event in events]
        form.password.data = random_password.generate_password()

        # render template
        self.response.out.write(
            template.render({
                "form": form,
                "global_admin": global_admin,
            }))
    def AuthenticatedGet(self, org, _):
        global_admin = False
        local_admin = False
        
        if org.name == GLOBAL_ADMIN_NAME:
            global_admin = True
        if org.is_admin == True and global_admin == False:
            local_admin = True
            
        if global_admin == False and local_admin == False:
            self.redirect("/")
            return

        # create form
        form = (
            GlobalAdminCreateOrganizationForm() if global_admin
            else CreateOrganizationForm()
        )
        events = self._get_events(org, global_admin, local_admin)
        form.incident.choices = [(str(event.key().id()), event.name) for event in events]
        form.password.data = random_password.generate_password()

        # render template
        self.response.out.write(template.render({
            "form": form,
            "global_admin": global_admin,
        }))
    def AuthenticatedGet(self, org, event):
        global_admin = False
        local_admin = False
        if org.name == GLOBAL_ADMIN_NAME:
            global_admin = True
        if org.is_admin == True and global_admin == False:
            local_admin = True

        if global_admin == False and local_admin == False:
            self.redirect("/")
            return

        if self.request.get("new_organization"):
            try:
                id = int(self.request.get("new_organization"))
            except:
                self.response.set_status(400)
                return
            obj = organization.Organization.get(db.Key.from_path("Organization", id))

            if local_admin:
                if not obj.incident.key() == org.incident.key():
                    self.redirect("/admin")
                    return
            query = db.GqlQuery("SELECT * FROM Contact WHERE organization = :1 LIMIT 1", obj.key())
            contact_id = None
            contact = None
            for q in query:
                contact_id = q.key().id()
            if contact_id:
                contact = primary_contact_db.Contact.get_by_id(contact_id)
            suggested_password = random_password.generate_password()

            self.response.out.write(
                template.render(
                    {
                        "form": True,
                        "new_organization": obj,
                        "contact": contact,
                        "suggested_password": suggested_password,
                        "global_admin": global_admin,
                    }
                )
            )
            return
        else:
            self.redirect("/")
            return
 def AuthenticatedGet(self, org, event):
     if not org.name == GLOBAL_ADMIN_NAME:
         self.redirect("/")
         return
     form = event_db.NewEventForm()
     query_string = "SELECT * FROM Event"
     events_list = db.GqlQuery(query_string)
     count = events_list.count()
     auto_password = random_password.generate_password()
     
     self.response.out.write(template.render(
     {
         "auto_password": auto_password,
         "form": form,
         "case_label": CASE_LABELS[count]
     }))
    def AuthenticatedPost(self, org, event):
        name = self.request.get("name")
        form = GetOrganizationForm(self.request.POST)
        event_name = None
        if form.event.data:
            event_name = form.event.data
        if event_name == "None" or event_name == None:
            event_name = self.request.get("event_name")
        logging.info("new password")
        logging.info(name)
        logging.info(event_name)
        password = self.request.get("password")
        # raise Exception(event_name)

        if self.request.get("accept") == "true":
            event_name = self.request.get("event_name")
            this_event = event_db.Event.all().filter("name =",
                                                     event_name).get()
            org = organization.Organization.all().filter(
                "name =", name).filter("incidents =", this_event.key()).get()
            password_hash = generate_hash.recursive_hash(password)
            if org:
                if password_hash in org._password_hash_list:
                    self.rediect(
                        "/admin?message=That password already exists for that organization"
                    )
                    return
                org._password_hash_list.append(password_hash)
                org._password_hash_list = list(set(org._password_hash_list))
                organization.PutAndCache(org)
                audit = audit_db.new_password(org, password_hash)
                url = "/admin?message=New password added to " + name + " working on " + event_name
                self.redirect(url)
                return
            else:
                url = "/admin-generate-new-password?error_message=Could not find " + name + "for: " + event_name
                self.redirect(url)
                return

        password = random_password.generate_password()
        template_params = page_db.get_page_block_dict()
        template_params.update({
            "password": password,
            "name": name,
            "event_name": event_name
        })
        self.response.out.write(post_template.render(template_params))
    def AuthenticatedGet(self, org, event):
        global_admin = (org.name == GLOBAL_ADMIN_NAME)
        if not global_admin:
            self.redirect("/")
            return

        form = event_db.NewEventForm()
        query_string = "SELECT * FROM Event"
        events_list = db.GqlQuery(query_string)
        count = events_list.count()
        auto_password = random_password.generate_password()

        self.response.out.write(
            template.render({
                "auto_password": auto_password,
                "form": form,
                "case_label": CASE_LABELS[count],
                "global_admin": global_admin,
            }))
    def AuthenticatedPost(self, org, event):
        data = primary_contact_db.ContactFormFull(self.request.POST)
        if data.validate():
            organization_id = self.request.get("choose_organization")
            try:
                id = int(organization_id)
            except:
                return
            this_organization = organization.Organization.get_by_id(id)
            contact = primary_contact_db.Contact(
                first_name=data.first_name.data,
                last_name=data.last_name.data,
                phone=data.phone.data,
                email=data.email.data,
                is_primary=bool(data.is_primary.data),
                organization=this_organization.key(),
            )
            primary_contact_db.PutAndCache(contact, ten_minutes)
            self.redirect(
                "/organization-settings?message=Contact created. It may take a few moments for the contact to show up on your list."
            )
            return
        else:
            suggested_password = random_password.generate_password()
            query_string = "SELECT * FROM Organization"
            organization_list = db.GqlQuery(query_string)

            self.response.out.write(
                template.render(
                    {
                        "form": data,
                        "errors": data.errors,
                        "create_contact": True,
                        "organization_list": organization_list,
                    }
                )
            )
            return
    def post(self):
        # create inactive, unverified org with a random password
        org = organization.Organization(
            name=self.request.get("name"),
            is_active=False,
            org_verified=False,
            voad_referral=self.request.get("voad_referral"),
            password=random_password.generate_password()
        )

        # set non-contact org attributes by type
	for k, v in self.request.POST.iteritems():
          if not any(k.startswith(prop) for prop in self.CONTACT_PROPERTIES_LIST):
	    if k == "choose_event":
	      chosen_event = event_db.Event.get_by_id(int(v))
	      setattr(org, "incidents", [chosen_event.key()])
	    elif k in self.BOOLEAN_PROPERTIES_LIST:
	      setattr(org, k, bool(int(v)))
	    else:
              # clean away known pre-supplied strings
              if v.strip() in ('http://', '@'):
                  v = None
	      setattr(org, k, v)

        # create contacts
        def get_contact_field(field_name, contact_num):
            field_value = self.request.get(field_name + '_%d' % i)
            return field_value.strip() if field_value else None

        new_contacts = []

        for i in range(10):
            first_name = get_contact_field('first_name', i)
            last_name = get_contact_field('last_name', i)
            title = get_contact_field('title', i)
            email = get_contact_field('personal_email', i)
            phone = get_contact_field('personal_phone', i)

            if first_name and last_name and email and phone:  # required fields
                new_contacts.append(primary_contact_db.Contact(
                    first_name=first_name,
                    last_name=last_name,
                    title=title,
                    email=email,
                    phone=phone,
                    is_primary=(i == 0)  # the first contact is the primary one
                ))

        # save
	organization.PutAndCacheOrganizationAndContact(org, new_contacts)

        # email primary contacts & administrators
        organization_form = organization.OrganizationForm(None, org)
        contact_forms = [
            primary_contact_db.ContactFormFull(None, contact)
            for contact in new_contacts
        ]
        messaging.email_contacts_using_templates(
            event=chosen_event,
            contacts=[c for c in new_contacts if c.is_primary],
            subject_template_name='new_organization.to_contacts.subject.txt',
            body_template_name='new_organization.to_contacts.body.txt',
            new_organization=org,
            primary_contact=new_contacts[0],
            application_id=messaging.get_application_id(),
            organization_form=organization_form,
            contact_forms=contact_forms,
        )
        approval_url = "%s://%s/admin-new-organization?new_organization=%d" % (
            urlparse(self.request.url).scheme,
            urlparse(self.request.url).netloc,
            org.key().id()
        )
        messaging.email_administrators_using_templates(
            event=chosen_event,
            subject_template_name='new_organization.to_admins.subject.txt',
            body_template_name='new_organization.to_admins.body.txt',
            new_organization=org,
            primary_contact=new_contacts[0],
            application_id=messaging.get_application_id(),
            approval_url=approval_url,
            organization_form=organization_form,
            contact_forms=contact_forms,
        )
			    
	self.redirect("/welcome")
    def AuthenticatedPost(self, org, event):
        global_admin = False
        local_admin = False
        if org.name == GLOBAL_ADMIN_NAME:
            global_admin = True
        if org.is_admin == True and global_admin == False:
            local_admin = True

        if global_admin == False and local_admin == False:
            self.redirect("/")
            return

        if self.request.get("create_contact"):
            data = primary_contact_db.ContactFormFull(self.request.POST)
            if data.validate():
                organization_id = self.request.get("choose_organization")
                try:
                    id = int(organization_id)
                except:
                    return
                this_organization = organization.Organization.get_by_id(id)
                if not org.may_administer(this_organization):
                    self.abort(403)
                contact = primary_contact_db.Contact(
                    first_name=data.first_name.data,
                    last_name=data.last_name.data,
                    title=data.title.data,
                    phone=data.phone.data,
                    email=data.email.data,
                    is_primary=bool(data.is_primary.data),
                    organization=this_organization.key(),
                )
                primary_contact_db.PutAndCache(contact, ten_minutes)
                self.redirect(
                    "/admin-create-contact?selected_org=%s&message=Contact Created"
                    % this_organization.key().id())
                return
            else:
                #query_string = "SELECT * FROM Event"
                #events_list = db.GqlQuery(query_string)
                suggested_password = random_password.generate_password()
                query_string = "SELECT * FROM Organization"
                organization_list = db.GqlQuery(query_string)

                self.response.out.write(
                    template.render({
                        "form": data,
                        "errors": data.errors,
                        "create_contact": True,
                        "organization_list": organization_list,
                    }))
                return

        if self.request.get("create_admin"):
            data = organization.OrganizationAdminForm(self.request.POST)
            event_id = self.request.get("choose_event")
            try:
                id = int(event_id)
            except:
                return
            this_event = event_db.Event.get_by_id(id)
            if local_admin:
                if not this_event.key() == event.key():
                    self.redirect("/")
                    return

            if data.validate():
                new_org = organization.Organization(
                    name=data.name.data,
                    email=data.email.data,
                    phone=data.phone.data,
                    address=data.address.data,
                    city=data.city.data,
                    state=data.state.data,
                    zip_code=data.zip_code.data,
                    physical_presence=True,
                    number_volunteers="0",
                    voad_member=False,
                    org_verified=True,
                    twitter=data.twitter.data,
                    url=data.url.data,
                    facebook=data.facebook.data,
                    incidents=[this_event.key()],
                    password=self.request.get("password"),
                    is_active=True,
                    is_admin=True,
                )

                # set all phase fields true for admin
                for phase_name in new_org.get_phase_boolean_names():
                    setattr(new_org, phase_name, True)

                new_contact = primary_contact_db.Contact(
                    first_name=data.contact_first_name.data,
                    last_name=data.contact_last_name.data,
                    title=data.contact_title.data,
                    email=data.contact_email.data,
                    phone=data.contact_phone.data,
                    is_primary=True)

                organization.PutAndCacheOrganizationAndContact(
                    organization=new_org,
                    contact=new_contact,
                )
                self.redirect("/admin?message=Admin Created")
                return
            else:
                # needs events lists, password, errors
                query_string = "SELECT * FROM Event"
                suggested_password = random_password.generate_password()
                self.response.out.write(
                    template.render({
                        "form": data,
                        "errors": data.errors,
                        "create_admin": True,
                        #"events_list": events_list,
                        "auto_password": suggested_password,
                    }))
                return

        if self.request.get("delete_org_id"):
            # delete organization
            try:
                id = int(self.request.get("delete_org_id"))
                org_by_id = organization.Organization.get_by_id(id)
            except:
                self.abort(400)

            if not org.may_administer(org_by_id):
                self.abort(403)

            primary_contact_db.RemoveOrgFromContacts(org_by_id)
            db.delete(org_by_id)
            self.redirect("/admin")
            return

        if self.request.get("delete_contact_id"):
            # delete contact
            try:
                id = int(self.request.get("delete_contact_id"))
                contact_by_id = primary_contact_db.Contact.get_by_id(id)
            except:
                self.abort(400)

            if not org.may_administer(org_by_id):
                self.abort(403)

            db.delete(contact_by_id)
            self.redirect("/admin")
            return

        if self.request.get("verify_organization"):
            # verify organization
            try:
                id = int(self.request.get("verify_organization"))
                org_by_id = organization.Organization.get_by_id(id)
            except:
                self.abort(400)

            # check we are allowed
            if not org.may_administer(org_by_id):
                self.abort(403)

            # perform verification
            org_by_id.verify()

            # cache
            organization.PutAndCache(org_by_id, 600)
            self.redirect("/admin")
            return

        if self.request.get("save_org_id"):
            # save org (?)
            try:
                id = int(self.request.get("save_org_id"))
                org_by_id = organization.Organization.get_by_id(id)
            except:
                self.abort(400)

            if not org.may_administer(org_by_id):
                self.abort(403)

            org_by_id.org_verified = True
            organization.PutAndCache(org_by_id, 600)
            self.redirect("/admin")
            return
Example #11
0
    def post(self):
        # create inactive, unverified org with a random password
        org = organization.Organization(
            name=self.request.get("name"),
            is_active=False,
            org_verified=False,
            voad_referral=self.request.get("voad_referral"),
            password=random_password.generate_password())

        # set non-contact org attributes by type
        for k, v in self.request.POST.iteritems():
            if not any(
                    k.startswith(prop)
                    for prop in self.CONTACT_PROPERTIES_LIST):
                if k == "choose_event":
                    chosen_event = event_db.Event.get_by_id(int(v))
                    setattr(org, "incidents", [chosen_event.key()])
                elif k in self.BOOLEAN_PROPERTIES_LIST:
                    setattr(org, k, bool(int(v)))
                else:
                    # clean away known pre-supplied strings
                    if v.strip() in ('http://', '@'):
                        v = None
                    setattr(org, k, v)

        # create contacts
        def get_contact_field(field_name, contact_num):
            field_value = self.request.get(field_name + '_%d' % i)
            return field_value.strip() if field_value else None

        new_contacts = []

        for i in range(10):
            first_name = get_contact_field('first_name', i)
            last_name = get_contact_field('last_name', i)
            title = get_contact_field('title', i)
            email = get_contact_field('personal_email', i)
            phone = get_contact_field('personal_phone', i)

            if first_name and last_name and email and phone:  # required fields
                new_contacts.append(
                    primary_contact_db.Contact(
                        first_name=first_name,
                        last_name=last_name,
                        title=title,
                        email=email,
                        phone=phone,
                        is_primary=(i == 0
                                    )  # the first contact is the primary one
                    ))

        # save
        organization.PutAndCacheOrganizationAndContact(org, new_contacts)

        # email primary contacts & administrators
        organization_form = organization.OrganizationForm(None, org)
        contact_forms = [
            primary_contact_db.ContactFormFull(None, contact)
            for contact in new_contacts
        ]
        messaging.email_contacts_using_templates(
            event=chosen_event,
            contacts=[c for c in new_contacts if c.is_primary],
            subject_template_name='new_organization.to_contacts.subject.txt',
            body_template_name='new_organization.to_contacts.body.txt',
            new_organization=org,
            primary_contact=new_contacts[0],
            application_id=messaging.get_application_id(),
            organization_form=organization_form,
            contact_forms=contact_forms,
        )
        approval_url = "%s://%s/admin-new-organization?new_organization=%d" % (
            urlparse(self.request.url).scheme, urlparse(
                self.request.url).netloc, org.key().id())
        messaging.email_administrators_using_templates(
            event=chosen_event,
            subject_template_name='new_organization.to_admins.subject.txt',
            body_template_name='new_organization.to_admins.body.txt',
            new_organization=org,
            primary_contact=new_contacts[0],
            application_id=messaging.get_application_id(),
            approval_url=approval_url,
            organization_form=organization_form,
            contact_forms=contact_forms,
        )

        self.redirect("/welcome")
    def AuthenticatedPost(self, org, event):
        global_admin = False
        local_admin = False
        if org.name == GLOBAL_ADMIN_NAME:
            global_admin = True
        if org.is_admin == True and global_admin == False:
            local_admin = True
            
        if global_admin == False and local_admin == False:
            self.redirect("/")
            return

        events_list = None
        if global_admin:
            query_string = "SELECT * FROM Event"
            events_list = db.GqlQuery(query_string)
        
        if local_admin:
            events_list = []
            query_string = "SELECT * FROM Event"
            events = db.GqlQuery(query_string)
            
            for e in events:
                if e.key() == org.incident.key():                    
                    events_list.append(e)
            
        if self.request.get("create_contact"):
            data = primary_contact_db.ContactFormFull(self.request.POST)
            if data.validate():
                organization_id = self.request.get("choose_organization")
                try:
                    id = int(organization_id)
                except:
                    return
                this_organization = organization.Organization.get_by_id(id)
                if local_admin:
                    if not this_organization.incident.key() == org.incident.key():
                        self.redirect("/")
                        return
                contact = primary_contact_db.Contact(first_name = data.first_name.data,
                    last_name = data.last_name.data,
                    phone = data.phone.data,
                    email = data.email.data,
                    is_primary = bool(data.is_primary.data),
                    organization = this_organization.key(),
                    )
                primary_contact_db.PutAndCache(contact, ten_minutes)
                self.redirect("/admin?message=Contact Created")
                return
            else:
                #query_string = "SELECT * FROM Event"
                #events_list = db.GqlQuery(query_string)
                suggested_password = random_password.generate_password()
                query_string = "SELECT * FROM Organization"
                organization_list = db.GqlQuery(query_string)
                
                
                self.response.out.write(template.render(
                {
                    "form": data,
                    "errors": data.errors,
                    "create_contact": True,
                    "organization_list": organization_list,
                }))
                return
            
        if self.request.get("create_admin"):
            data = organization.OrganizationAdminForm(self.request.POST)
            event_id = self.request.get("choose_event")
            try:
                id = int(event_id)
            except:
                return
            this_event = event_db.Event.get_by_id(id)
            if local_admin:
                if not this_event.key() == event.key():
                    self.redirect("/")
                    return
            
            if data.validate():
                    new_org = organization.Organization(name = data.name.data,
                        email = data.email.data,
                        phone = data.phone.data,
                        address = data.address.data,
                        city = data.city.data,
                        state = data.state.data,
                        zip_code = data.zip_code.data,
                        physical_presence = True,
                        number_volunteers = "0",
                        voad_member = False,
                        org_verified=True,
                        twitter = data.twitter.data,
                        url = data.url.data,
                        facebook = data.facebook.data,  
                        incident = this_event.key(),
                        password = self.request.get("password"),
                        is_active = True,
                        is_admin = True,
                    )

                    # set all phase fields true for admin
                    for phase_name in new_org.get_phase_boolean_names():
                        setattr(new_org, phase_name, True)

                    new_contact = primary_contact_db.Contact(first_name = data.contact_first_name.data,
                        last_name = data.contact_last_name.data,
                        email = data.contact_email.data,
                        phone=data.contact_phone.data,
                        is_primary=True
                    )
                    
                    organization.PutAndCacheOrganizationAndContact(organization = new_org,
                        contact = new_contact,
                    )
                    self.redirect("/admin?message=Admin Created")
                    return
            else:
                # needs events lists, password, errors
                query_string = "SELECT * FROM Event"
                events_list = db.GqlQuery(query_string)
                suggested_password = random_password.generate_password()
                self.response.out.write(template.render(
                {
                    "form": data,
                    "errors": data.errors,
                    "create_admin": True,
                    #"events_list": events_list,
                    "auto_password": suggested_password,
                }))
                return
                
        if self.request.get("edit_contact_final"):
            try:
                id = int(self.request.get("edit_contact_final"))
            except:
                self.response.set_status(400)
                return
            org_id = None
            org_key = None
            
            # check to see if organization was edited
            if self.request.get("organization") != "None":
                try:
                    org_id = int(self.request.get("organization"))
                except:
                    self.response.set_status(400)
                    return
                org = organization.Organization.get_by_id(org_id)
                org_key = org.key()
                if local_admin:
                    if not org_key.incident.key() == org.incident.key():
                        self.redirect("/")
                        return
            ###########################
            this_contact = primary_contact_db.Contact.get(db.Key.from_path('Contact', id))
            if not this_contact.organization.incident.key() == org.incident.key():
                self.redirect("/")
                return
            data = primary_contact_db.ContactFormFull(self.request.POST)
            if data.validate():     

            
                contact = this_contact
                contact.first_name=data.first_name.data
                contact.last_name = data.last_name.data
                contact.phone=data.phone.data
                contact.email = data.email.data
                if org_key is not None:
                    contact.organization = org_key
                contact.is_primary=bool(data.is_primary.data)
                primary_contact_db.PutAndCache(contact, ten_minutes)
                self.redirect("/admin")
                return
            else:
                try:
                    id = int(self.request.get("edit_contact_final"))
                except:
                    self.response.set_status(400)
                    return
                contact = primary_contact_db.Contact.get_by_id(id)
                form = primary_contact_db.ContactFormFull(first_name = contact.first_name, last_name = contact.last_name, phone = contact.phone, email = contact.email, is_primary=int(contact.is_primary))
                self.response.out.write(template.render(
                {
                    "edit_contact_id": id,
                    "form": form,
                    "errors": data.errors
                }))
                return
                
        if self.request.get("create_org"):
            data = organization.OrganizationFormNoContact(self.request.POST)
            is_active_bool = False
            activate = self.request.get("is_active")
            if activate:
                is_active_bool = True
            
            if data.validate():
                # create new org
                new_org_data = data.data
                event = event_db.Event.get_by_id(int(data.data['choose_event']))
                new_org_data['incident'] = event.key()
                new_org = organization.Organization(**new_org_data)
                organization.PutAndCache(new_org, ten_minutes)

            else:
                # show the form again
                self.response.out.write(template.render(
                {
                    "form": data,
                    "errors": data.errors,
                    "events_list": events_list,
                    "create_org": True,
                }))
                return
            self.redirect("/admin")
            return
            
        if self.request.get("delete_org_id"):
            try:
                org_by_id = organization.Organization.get(db.Key.from_path('Organization', int(self.request.get("delete_org_id"))))
            except:
                self.response.set_status(400)
                return
            if local_admin:
                if not org_by_id.incident.key() == org.incident.key():
                    
                    self.redirect("/")
                    return
                
            primary_contact_db.RemoveOrgFromContacts(org_by_id)
            db.delete(org_by_id)
            self.redirect("/admin")
            return
            
        if self.request.get("activate_organization"):
            try:
                id = int(self.request.get("activate_organization"))
            except:
                self.response.set_status(400)
                return
            org_by_id = organization.Organization.get(db.Key.from_path('Organization', id))
            if local_admin:
                if not org_by_id.incident.key() == org.incident.key():
                    self.redirect("/")
                    return
                    
            org_by_id.org_verified=True
            org_by_id.is_active=True
            organization.PutAndCache(org_by_id, 600)
            self.redirect("/admin")
            return
        if self.request.get("save_org_id"):
            try:
                id = int(self.request.get("save_org_id"))
            except:
                self.response.set_status(400)
                return
            org_by_id = organization.Organization.get(db.Key.from_path('Organization', id))
            if local_admin:
                if not org_by_id.incident.key() == org.incident.key():
                    self.redirect("/")
                    return
                    
            org_by_id.org_verified=True
            organization.PutAndCache(org_by_id, 600)
            self.redirect("/admin")
            return
            
        if self.request.get("edit_org"):
            data = organization.OrganizationEditForm(self.request.POST)
            if data.validate():
                try:
                    id = int(self.request.get("edit_org"))
                except:
                    self.response.set_status(400)
                    return
                org_by_id = organization.Organization.get(db.Key.from_path('Organization', id))
                org_by_id.name = data.name.data
                org_by_id.org_verified = bool(data.org_verified.data)
                org_by_id.is_active = bool(data.is_active.data)
                org_by_id.email = data.email.data
                org_by_id.phone = data.phone.data
                org_by_id.address = data.address.data
                org_by_id.city = data.city.data
                org_by_id.state = data.state.data
                org_by_id.zip_code = data.zip_code.data
                org_by_id.twitter = data.twitter.data
                org_by_id.facebook = data.facebook.data
                org_by_id.url = data.url.data
                org_by_id.physical_presence = bool(data.physical_presence.data)
                org_by_id.number_volunteers = data.number_volunteers.data
                org_by_id.voad_member = bool(data.voad_member.data)
                org_by_id.voad_referral = data.voad_referral.data
                org_by_id.work_area = data.work_area.data
                org_by_id.voad_member_url = data.voad_member_url.data

                # phase fields
                for phase_field_name in org_by_id.get_phase_boolean_names():
                    setattr(org_by_id, phase_field_name, bool(data[phase_field_name].data))

                organization.PutAndCache(org_by_id, 600)
                self.redirect("/admin")
                return
            else:
                self.response.out.write(template.render(
                {
                    "edit_org": True,
                    "form": data,
                    "errors": data.errors,
                    "org_id": int(self.request.get("edit_org")),
                }))
                return
    def AuthenticatedPost(self, org, event):
        global_admin = False
        local_admin = False
        if org.name == GLOBAL_ADMIN_NAME:
            global_admin = True
        if org.is_admin == True and global_admin == False:
            local_admin = True
            
        if global_admin == False and local_admin == False:
            self.redirect("/")
            return

        if self.request.get("create_contact"):
            data = primary_contact_db.ContactFormFull(self.request.POST)
            if data.validate():
                organization_id = self.request.get("choose_organization")
                try:
                    id = int(organization_id)
                except:
                    return
                this_organization = organization.Organization.get_by_id(id)
                if not org.may_administer(this_organization):
                    self.abort(403)
                contact = primary_contact_db.Contact(
                    first_name=data.first_name.data,
                    last_name=data.last_name.data,
                    title=data.title.data,
                    phone=data.phone.data,
                    email=data.email.data,
                    is_primary=bool(data.is_primary.data),
                    organization=this_organization.key(),
                )
                primary_contact_db.PutAndCache(contact, ten_minutes)
                self.redirect("/admin-create-contact?selected_org=%s&message=Contact Created" % this_organization.key().id())
                return
            else:
                #query_string = "SELECT * FROM Event"
                #events_list = db.GqlQuery(query_string)
                suggested_password = random_password.generate_password()
                query_string = "SELECT * FROM Organization"
                organization_list = db.GqlQuery(query_string)
                
                
                self.response.out.write(template.render(
                {
                    "form": data,
                    "errors": data.errors,
                    "create_contact": True,
                    "organization_list": organization_list,
                }))
                return
            
        if self.request.get("create_admin"):
            data = organization.OrganizationAdminForm(self.request.POST)
            event_id = self.request.get("choose_event")
            try:
                id = int(event_id)
            except:
                return
            this_event = event_db.Event.get_by_id(id)
            if local_admin:
                if not this_event.key() == event.key():
                    self.redirect("/")
                    return
            
            if data.validate():
                    new_org = organization.Organization(name = data.name.data,
                        email = data.email.data,
                        phone = data.phone.data,
                        address = data.address.data,
                        city = data.city.data,
                        state = data.state.data,
                        zip_code = data.zip_code.data,
                        physical_presence = True,
                        number_volunteers = "0",
                        voad_member = False,
                        org_verified=True,
                        twitter = data.twitter.data,
                        url = data.url.data,
                        facebook = data.facebook.data,  
                        incidents = [this_event.key()],
                        password = self.request.get("password"),
                        is_active = True,
                        is_admin = True,
                    )

                    # set all phase fields true for admin
                    for phase_name in new_org.get_phase_boolean_names():
                        setattr(new_org, phase_name, True)

                    new_contact = primary_contact_db.Contact(
                        first_name=data.contact_first_name.data,
                        last_name=data.contact_last_name.data,
                        title=data.contact_title.data,
                        email=data.contact_email.data,
                        phone=data.contact_phone.data,
                        is_primary=True
                    )
                    
                    organization.PutAndCacheOrganizationAndContact(organization = new_org,
                        contact = new_contact,
                    )
                    self.redirect("/admin?message=Admin Created")
                    return
            else:
                # needs events lists, password, errors
                query_string = "SELECT * FROM Event"
                suggested_password = random_password.generate_password()
                self.response.out.write(template.render(
                {
                    "form": data,
                    "errors": data.errors,
                    "create_admin": True,
                    #"events_list": events_list,
                    "auto_password": suggested_password,
                }))
                return

        if self.request.get("delete_org_id"):
            # delete organization
            try:
                id = int(self.request.get("delete_org_id"))
                org_by_id = organization.Organization.get_by_id(id)
            except:
                self.abort(400)

            if not org.may_administer(org_by_id):
                self.abort(403)

            primary_contact_db.RemoveOrgFromContacts(org_by_id)
            db.delete(org_by_id)
            self.redirect("/admin")
            return

        if self.request.get("delete_contact_id"):
            # delete contact
            try:
                id = int(self.request.get("delete_contact_id"))
                contact_by_id = primary_contact_db.Contact.get_by_id(id)
            except:
                self.abort(400)

            if not org.may_administer(org_by_id):
                self.abort(403)

            db.delete(contact_by_id)
            self.redirect("/admin")
            return
            
        if self.request.get("verify_organization"):
            # verify organization
            try:
                id = int(self.request.get("verify_organization"))
                org_by_id = organization.Organization.get_by_id(id)
            except:
                self.abort(400)

            # check we are allowed
            if not org.may_administer(org_by_id):
                self.abort(403)

            # perform verification
            org_by_id.verify()

            # cache
            organization.PutAndCache(org_by_id, 600)
            self.redirect("/admin")
            return

        if self.request.get("save_org_id"):
            # save org (?)
            try:
                id = int(self.request.get("save_org_id"))
                org_by_id = organization.Organization.get_by_id(id)
            except:
                self.abort(400)

            if not org.may_administer(org_by_id):
                self.abort(403)

            org_by_id.org_verified = True
            organization.PutAndCache(org_by_id, 600)
            self.redirect("/admin")
            return