     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

    <?php

    /**
     * @model Conference
     * http://ap.bandwidth.com/docs/rest-api/conferences/
     *
     * Creates conferences through
     * Catapult.
     *
     */
    namespace Catapult;

    final class Conference extends AudioMixin {

        /**
         *
         * Init forms:
         *
         * GET
         * Conference('conference-id')
         * Conference()
         *
         * POST
         * Conference(array)
         */
        public function __construct()
        {
          $data = Ensure::Input(func_get_args());

          parent::_init($data, new DependsResource,
            new LoadsResource(
              array("primary" => "GET", "id" => "id", "silent" => false)
            ),
            new SchemaResource(
              array("fields" => array("id", "state", "from", "created_time", "completed_time", "fallback_url"),
                  "needs" => array(
                  "id", "state", "from"
                  )
              )),
            new SubFunctionResource(array(
              array("type" => "get", "term" => "members"),
              array("type" => "add", "term" => "members"),
              array("type" => "update", "term" => "member")
             )
            )
           );
        }

       /**
        * Add a member inside
        * a conference
        *
        * @param id: Catapult id
        * @param params -> List of member parameters
        *       joinTone
        *       leavingTone
        */
        public function addMember($params)
        {
          $args = Ensure::Input($params);
          $url = URIResource::Make($this->path, array($this->id, "members"));
          $memberid = Locator::Find($this->client->post($url, $args->get()));

          return $this->member($memberid);
        }

       /**
        * point to a
        * member and update
        *
        * @param params: set of arguments with
        * with memberId
        */
        public function updateMember($params)
        {
          $args = Ensure::Input($params);
          $url = URIResource::Make($this->path, array($this->id, "members", $args->val("memberId")));
          $member = $this->client->post($url, $args->get());

          return $this->member($member['id']);
        }

        /**
         * Return a partial for
         * the member selected
         *
         */
        public function member()
        {
          return new ConferenceMember($this->id);
        }
    }