/** * transcode arrays recursively * * @param array the variable to convert * @return converted object (which is also the input array) */ public static function to_xml_recursively(&$input) { global $context; // sanity check if (!is_array($input)) { return utf8::to_xml($input); } // process all attributes foreach ($input as $name => $value) { if (is_array($value)) { $input[$name] = utf8::to_xml_recursively($value); } else { $input[$name] = utf8::to_xml($value); } } return $input; }
/** * the URL to start and to join the meeting * * @see overlays/events/start.php * * @return string the URL to redirect the user to the meeting, or NULL on error */ function get_start_url() { global $context; // almost random passwords $this->initialize_passwords(); // parameters to create a meeting $parameters = array(); // use page id as meeting id $parameters[] = 'name=' . urlencode($this->attributes['id']); $parameters[] = 'meetingID=' . urlencode($this->attributes['id']); // surfer name, as authenticated by yacs $parameters[] = 'fullName=' . urlencode(Surfer::get_name()); // moderator password $parameters[] = 'moderatorPW=' . urlencode($this->moderator_password); // participant password $parameters[] = 'attendeePW=' . urlencode($this->attendee_password); // ensure that the bridge number fits in the dialing plan $parameters[] = 'voiceBridge=' . urlencode(substr('7' . $this->attributes['id'] . '1234', 0, 5)); // message displayed within the BigBlueButton session $welcome = ''; // meeting title if (is_object($this->anchor)) { $welcome .= sprintf(i18n::s('%s: %s'), i18n::s('Title'), $this->anchor->get_title()) . "\n"; } // meeting date if (isset($this->attributes['date_stamp'])) { $welcome .= sprintf(i18n::s('%s: %s'), i18n::s('Date'), Skin::build_date($this->attributes['date_stamp'], 'standalone')) . "\n"; } // meeting duration if (isset($this->attributes['duration'])) { $welcome .= sprintf(i18n::s('%s: %s'), i18n::s('Duration'), $this->attributes['duration'] . ' ' . i18n::s('minutes')) . "\n"; } // build a link to the owner page, if any if (is_object($this->anchor) && ($user = Users::get($this->anchor->get_value('owner_id')))) { $welcome .= sprintf(i18n::s('%s: %s'), i18n::s('Chairman'), $user['full_name']) . "\n"; } // welcome message $parameters[] = 'welcome=' . urlencode($welcome); // return URL if (is_callable(array($this->anchor, 'get_url'))) { $parameters[] = 'logoutURL=' . urlencode($context['url_to_home'] . $context['url_to_root'] . $this->anchor->get_url()); } // should we record this session? if ($this->with_session_recording()) { $parameters[] = 'record=true'; $parameters[] = 'duration=125'; // 2 hours max per recording } // link to create the meeting $url = $this->build_link('create', $parameters); // list most recent files that have been attached to this page $headers = NULL; $body = NULL; if (is_object($this->anchor) && ($files = Files::list_by_date_for_anchor($this->anchor->get_reference(), 0, 5, 'raw'))) { $headers = array("Content-Type: text/xml"); // instruct the presentation module to pre-load these files $body = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<modules>' . "\n" . ' <module name="presentation">' . "\n"; // list web address of each file foreach ($files as $file) { $body .= "\t\t" . '<document' . ' url="' . $context['url_to_home'] . $context['url_to_root'] . utf8::to_xml(Files::get_url($file['id'], 'fetch', $file['file_name'])) . '"' . ' name="' . utf8::to_xml($file['file_name']) . '"' . ' />' . "\n"; } // end of the list of files $body .= ' </module>' . "\n" . '</modules>' . "\n"; } // do create the meeting if (($response = http::proceed_natively($url, $headers, $body)) && ($xml = simplexml_load_string($response)) && $xml->returncode == 'SUCCESS') { // parameters to join the meeting $parameters = array(); // use page id as meeting id $parameters[] = 'meetingID=' . urlencode($xml->meetingID); // surfer name, as authenticated by yacs $parameters[] = 'fullName=' . urlencode(Surfer::get_name()); // moderator password $parameters[] = 'password='******'join', $parameters); return $url; } // problem, darling! return NULL; }
/** * encode some PHP value into XML * * This function tries to guess the adequate type to use. * Following types are supported: * - array * - base64 - type has to be set explicitly for the encoding to take place * - boolean * - date - type has to be set explicitly to get a <dateTime.iso8601> element * - double * - integer * - struct * - string - type has to be set explicitly for the encoding to take place * * @param mixed the parameter to encode * @param type, if any * @return string some XML */ public static function encode($parameter, $type = '') { // a date if ($type == 'date') { if (is_string($parameter)) { $parameter = strtotime($parameter); } $items = getdate($parameter); return '<dateTime.iso8601>' . sprintf('%02d%02d%02dT%02d:%02d:%02d', $items['year'], $items['mon'], $items['mday'], $items['hours'], $items['minutes'], $items['seconds']) . '</dateTime.iso8601>'; } // base 64 if ($type == 'base64') { return '<base64>' . base64_encode($parameter) . '</base64>'; } // a string --also fix possible errors in HTML image references if ($type == 'string') { return '<string>' . utf8::to_xml(preg_replace('|<img (.+?[^/])>|mi', '<img $1 />', $parameter)) . '</string>'; } // a boolean if ($parameter === true || $parameter === false) { return '<boolean>' . ($parameter ? '1' : '0') . '</boolean>'; } // an integer if (is_integer($parameter)) { return '<int>' . $parameter . '</int>'; } // a double if (is_double($parameter)) { return '<double>' . $parameter . '</double>'; } // an array if (is_array($parameter)) { // it's a struct if (key($parameter)) { $text = ''; foreach ($parameter as $name => $value) { $text .= "\t" . '<member><name>' . $name . '</name><value>' . XML_RPC_Codec::encode($value) . "</value></member>\n"; } return '<struct>' . "\n" . $text . '</struct>'; // else it's a plain array } else { $text = ''; foreach ($parameter as $item) { $text .= "\t" . '<value>' . XML_RPC_Codec::encode($item) . "</value>\n"; } if ($text) { return '<array><data>' . "\n" . $text . '</data></array>'; } else { return '<array><data /></array>'; } } } // encode strings if (is_string($parameter) && ($parameter = trim($parameter)) && substr($parameter, 0, 1) != '<') { return '<string>' . utf8::to_xml(preg_replace('|<img (.+?[^/])>|mi', '<img $1 />', $parameter)) . '</string>'; } // do not encode possibly encoded strings return $parameter; }