예제 #1
0
 public function can_handle(midgard_object $object)
 {
     if (!$object instanceof com_meego_package) {
         return false;
     }
     // Check that the package's repository has a form
     $repository = new com_meego_repository($object->repository);
     if (!midgardmvc_ui_forms_generator::has_object_forms($repository)) {
         return false;
     }
     // Check if the form is assigned to this repository
     $storage = new midgard_query_storage('com_meego_package_repository_form');
     $q = new midgard_query_select($storage);
     $qc = new midgard_query_constraint_group('AND');
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('formtitle'), '=', new midgard_query_value($this->workflow['label'])));
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('repoguid'), '=', new midgard_query_value($repository->guid)));
     $q->set_constraint($qc);
     $res = $q->execute();
     if (!$q->get_results_count()) {
         return false;
     }
     if (!midgardmvc_core::get_instance()->authentication->is_user()) {
         return true;
     }
     // safety net
     try {
         $user = midgardmvc_core::get_instance()->authentication->get_person();
     } catch (midgard_error_exception $e) {
         // if the person object is gone we will have an exception here
         return false;
     }
     //Hasn't reviewed yet
     $storage = new midgard_query_storage('midgardmvc_ui_forms_form_instance');
     $q = new midgard_query_select($storage);
     $qc = new midgard_query_constraint_group('AND');
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('relatedobject'), '=', new midgard_query_value($object->guid)));
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('metadata.creator'), '=', new midgard_query_value($user->guid)));
     $q->set_constraint($qc);
     $res = $q->execute();
     if ($q->get_results_count() != 0) {
         return false;
     }
     return true;
 }