      1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106

    <?php
    /**
     *
     * @model Bridge
     * http://ap.bandwidth.com/docs/rest-api/bridges/
     *
     *
     * Joins calls in one bridge
     * functions:
     * create/1
     * fetchCalls/1
     * callIds/1
     * callParty/polymorphic
     *
     */
    namespace Catapult;

    final class Bridge Extends GenericResource {
        /**
         * Bridge call CTor accept calls
         * as main argument
         *
         * Init forms
         * GET
         * Bridge('bridge-id')
         * Bridge()
         *
         * POST
         * Bridge(array)
         */
        public function __construct($data=null)
        {
          $data = Ensure::Input($data);

          parent::_init($data, new DependsResource,
            new LoadsResource(array(
              "primary" => "get", "id" => "id", "init" => "", "silent" => false,
            )),
            new SchemaResource(array(
              "fields" => array('audio', 'completedTime', 'createdTime', 'activatedTime', 'callIds'),
              "needs" => array("id")
              )
            ),
            new SubFunctionResource(array(
              array("type" => "get", "term" => "calls")
            ))
          );
        }

        /**
         * Add another to a call bridge
         *
         * @param caller -> PhoneNumber
         * @param callee -> PhoneNumber
         * @param args -> Call's arguments (see in function)
         */
        public function callParty($caller, $callee, $args)
        {
          $new_call = Call::create($caller, $callee, $this->id, $args);
          $this->calls ++;

          return Constructor::Make($this, $data->get());
        }

        /**
         * Return all the call ids
         * for a given bridge
         */
        public function callIds()
        {
          $call_ids = array();

          foreach ($this->calls as $call)
            $call_ids[] = $call->id;

          return $call_ids;
        }

        /**
         * Fetch all the calls
         * from a bridge
         *
         * @return: list of calls
         *
         */
        public function fetchCalls()
        {
          $url = URIResource::Make($this->path, array($this->id, "calls"));
          $res = $this->client->get($url);
          $this->calls = new CallCollection(new DataPacketCollection($res));

          return $this->calls;
        }

        /**
         * Get the audio url for a bridge
         *
         * @return: fully qualified url
         */
        public function getAudioUrl()
        {
          return URIResource::Make($this->path, array($this->id, "audio"));
        }
    }