예제 #1
0
 function featuresLoad(Gadget $gadget, $context)
 {
     // Process required / desired features
     $requires = $gadget->getRequires();
     $needed = array();
     $optionalNames = array();
     foreach ($requires as $key => $entry) {
         $needed[] = $key;
         if ($entry->isOptional()) {
             $optionalNames[] = $key;
         }
     }
     $resultsFound = array();
     $resultsMissing = array();
     $missingOptional = array();
     $missingRequired = array();
     $context->getRegistry()->getIncludedFeatures($needed, $resultsFound, $resultsMissing);
     foreach ($resultsMissing as $missingResult) {
         if (in_array($missingResult, $optionalNames)) {
             $missingOptional[$missingResult] = $missingResult;
         } else {
             $missingRequired[$missingResult] = $missingResult;
         }
     }
     if (count($missingRequired)) {
         throw new GadgetException("Unsupported feature(s): " . implode(', ', $missingRequired));
     }
     // create features
     $features = array();
     foreach ($resultsFound as $entry) {
         $features[$entry] = $context->getRegistry()->getEntry($entry)->getFeature()->create();
     }
     // prepare them
     foreach ($features as $key => $feature) {
         $params = $gadget->getFeatureParams($gadget, $context->getRegistry()->getEntry($key));
         $feature->prepare($gadget, $context, $params);
     }
     // and process them
     foreach ($features as $key => $feature) {
         $params = $gadget->getFeatureParams($gadget, $context->getRegistry()->getEntry($key));
         $feature->process($gadget, $context, $params);
     }
 }