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; }