瀏覽代碼

Merge branch 'master' of ssh://gogs.infra.flowdat.com:222/VendorSoftwareFlowdat3/WorkflowBundle

Luciano Andrade 7 年之前
父節點
當前提交
d219a26bcf

+ 0 - 4
Command/AMQPRemoteCommand.php

@@ -31,10 +31,6 @@ class AMQPRemoteCommand extends ContainerAwareCommand
         $name = $input->getArgument('name');
         $args = $input->getOption('args');
         if ($name) {
-            $msg = array(
-                'name' => $name,
-                'args' => $args,
-            );
             $producer = $this->getContainer()->get('old_sound_rabbit_mq.command_producer_producer');
 	    $route = $input->getOption('route');
             $producer->publish(serialize(compact('name', 'args')), $route);

+ 4 - 2
Entity/Workflow.php

@@ -14,7 +14,8 @@ use Symfony\Component\Console\Output\BufferedOutput;
 use WorkflowBundle\Validator\Constraints as WorkflowAssert;
 use Symfony\Component\Workflow\Registry;
 
-// TODO : Remplazar las referencias de "global $kenerl por algo m�s testeable"
+use OwnerVoterBundle\Entity\Traits\OwnerTraitInterface;
+use OwnerVoterBundle\Entity\Traits\OwnerTrait;
 
 /**
  * Workflow
@@ -24,8 +25,9 @@ use Symfony\Component\Workflow\Registry;
  * @UniqueEntity(fields={"name", "tenancyId"}, message="errors.duplicate_key")
  * @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="unique_idx", columns={"name", "tenancy_id"})})
  */
-class Workflow
+class Workflow implements OwnerTraitInterface
 {
+    use OwnerTrait;
     /**
      * @var int
      *

+ 11 - 0
EventListener/WorkflowInterfaceListener.php

@@ -8,6 +8,12 @@ use Doctrine\ORM\EntityManager;
 
 class WorkflowInterfaceListener
 {
+    private $container;
+
+    public function __construct($container)
+    {
+        $this->container = $container;
+    }
     
     /**
      * @param LifecycleEventArgs $event
@@ -30,6 +36,11 @@ class WorkflowInterfaceListener
                 $entity->setCurrentState($workflow->getInitialPlace($entity));
             }
         }
+
+        $object = $event->getObject();
+        if ($object instanceof \WorkflowBundle\Entity\Workflow) {
+            $object->setContainer($this->container);
+        }
     }
 
 }

+ 2 - 1
Resources/config/services.yml

@@ -5,7 +5,7 @@ imports:
 services:
     workflow.admin.workflow:
         class: WorkflowBundle\Admin\WorkflowAdmin
-        arguments: [~, WorkflowBundle\Entity\Workflow, SonataAdminBundle:CRUD]
+        arguments: [~, WorkflowBundle\Entity\Workflow, BaseAdminBundle:CRUD]
         tags:
             - { name: sonata.admin, manager_type: orm, group: Workflow, label: Workflow, label_catalogue: WorkflowBundle, label_translator_strategy: sonata.admin.label.strategy.underscore }
         calls:    
@@ -44,6 +44,7 @@ services:
         class: WorkflowBundle\EventListener\WorkflowInterfaceListener
         tags:
             - { name: doctrine.event_listener, event: prePersist }
+        arguments: ['@service_container']
 
     workflow.event.listener:
         class: WorkflowBundle\EventListener\WorkflowEventListener

+ 17 - 21
Services/CommandConsumer.php

@@ -4,10 +4,8 @@ namespace WorkflowBundle\Services;
 
 use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
 use PhpAmqpLib\Message\AMQPMessage;
-use Symfony\Bundle\FrameworkBundle\Console\Application;
 use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\Console\Input\ArrayInput;
-use Symfony\Component\Console\Output\BufferedOutput;
+use Symfony\Component\Process\Process;
 
 class CommandConsumer implements ConsumerInterface
 {
@@ -40,29 +38,27 @@ class CommandConsumer implements ConsumerInterface
             $name = $msgBody['name'];
             $args = $msgBody['args'];
 
-            $kernel = $this->serviceContainer->get('kernel');
-            $application = new Application($kernel);
-            $application->setAutoExit(false);
-
-            $input = array('command' => $name,);
+            $input = array();
             foreach ($args as $arg) {
-                $pieces = explode(':', $arg);
-                if (isset($pieces[0]) && isset($pieces[1])) {
-                    $input[$pieces[0]] = $pieces[1];
+                $arg = str_replace('\\', '\\\\', $arg);
+                $pos = strpos($arg, ':');
+                $pos2 = strpos($arg, '--');
+                if ($pos2 === false) {
+                    // command argument, no option
+                    $input[] = substr($arg, $pos + 1);
+                } else {
+                    // reemplazo el primer : por = para las options
+                    $input[] = preg_replace('/:/', '=', $arg, 1);
                 }
             }
             
-            $input = new ArrayInput($input);
-
-            $output = new BufferedOutput();
-
-            $application->run($input, $output);
-
-            // return the output
-            $content = $output->fetch();
-            
+            $consolePath = $this->serviceContainer->get('kernel')->getRootDir() . '/../bin/console';
+            $command = $name . ' ' . implode(' ', $input);
+            $process = new Process("{$consolePath} {$command}");
+            $process->run();
+            $content = $process->getOutput();
             echo $content;
-
+                        
             return true;
         }