OwlCyberSecurity - MANAGER
Edit File: MediaAccess.php
<?php /** * @author Dimas Begunoff * @copyright Copyright (c) 2011, Dimas Begunoff, http://farinspace.com/ * @license http://en.wikipedia.org/wiki/MIT_License The MIT License * @package WPAlchemy * @version 0.2.1 * @link http://github.com/farinspace/wpalchemy/ * @link http://farinspace.com/ */ class WPAlchemy_MediaAccess { /** * User defined identifier for the css class name of the HTML button element, * used when pairing the field and button elements * * @since 0.1 * @access public * @var string required */ public $button_class_name = 'mediabutton'; /** * User defined identifier for the css class name of the HTML field element, * used when pairing the field and button elements * * @since 0.1 * @access public * @var string required */ public $field_class_name = 'mediafield'; /** * User defined label for the insert button in the media upload box, this * can be set once or per field and button pair. * * @since 0.1 * @access public * @var string optional * @see setInsertButtonLabel() */ public $insert_button_label = null; /** * Used to track the current groupname for pairing a field and button. * * @since 0.1 * @access private * @var string * @see setGroupName() */ private $groupname = null; /** * Used to track the current tab for the media upload box. * * @since 0.1 * @access private * @var string * @see setTab() */ private $tab = null; /** * MediaAccess class * * @since 0.1 * @access public * @param array $a */ public function __construct(array $a = array()) { foreach ($a as $n => $v) { $this->$n = $v; } if ( ! defined('WPALCHEMY_SEND_TO_EDITOR_ENABLED')) { add_action('admin_footer', array($this, 'init')); define('WPALCHEMY_SEND_TO_EDITOR_ENABLED', true); } } /** * Used to generate short unique/random names * * @since 0.1 * @access public * @return string */ private function getName() { return substr(md5(microtime() . rand()), rand(0,25), 6); } /** * Used to set the insert button label in the media upload box, this can be * set once or per field and button pair. * * @since 0.1 * @access public * @param string $label button label/title * @return object $this * @see setGroupName() */ public function setInsertButtonLabel($label = 'Insert') { $this->insert_button_label = $label; return $this; } public function setTab($name) { $this->tab = $name; $this; } /** * Used before calls to getField(), getButton() or getButtonClass() to set * the groupname to pair a field and button element. * * @since 0.1 * @access public * @param string $name unique name per pair of field and button * @return object $this * @see setInsertButtonLabel() */ public function setGroupName($name) { $this->groupname = $name; return $this; } /** * Used to insert a form field of type "text", this should be paired with a * button element. The name and value attributes are required. * * @since 0.1 * @access public * @param array $attr INPUT tag parameters * @return HTML * @see getButton() */ public function getField(array $attr) { $groupname = isset($attr['groupname']) ? $attr['groupname'] : $this->groupname ; $attr_default = array ( 'type' => 'text', 'class' => $this->field_class_name . '-' . $groupname, ); ### if (isset($attr['class'])) { $attr['class'] = $attr_default['class'] . ' ' . trim($attr['class']); } $attr = array_merge($attr_default, $attr); ### $elem_attr = array(); foreach ($attr as $n => $v) { array_push($elem_attr, $n . '="' . $v . '"'); } ### return '<input ' . implode(' ', $elem_attr) . '/>'; } /** * Used to get the link used for the button element. If creating custom * buttons, this method should be used to get the link needed for proper * functionality. * * @since 0.1 * @access public * @param string $tab name that the media upload box will initially load * @return string link * @see getButtonClass(), getButton() */ public function getButtonLink($tab = null) { // this is set even for new posts/pages global $post_ID; //wp $tab = ! empty($tab) ? $tab : $this->tab ; $tab = ! empty($tab) ? $tab : 'library' ; return 'media-upload.php?post_id=' . $post_ID . '&tab=' . $tab . '&TB_iframe=1'; } /** * Used to get the CSS class name(s) used for the button element. If * creating custom buttons, this method should be used to get the css class * names needed for proper functionality. * * @since 0.1 * @access public * @param string $groupname name used when pairing a text field and button * @return string css class(es) * @see getButtonLink(), getButton() */ public function getButtonClass($groupname = null) { $groupname = isset($groupname) ? $groupname : $this->groupname ; return $this->button_class_name . '-' . $groupname . ' thickbox'; } /** * Used to get the CSS class name used for the field element. If * creating a custom field, this method should be used to get the css class * name needed for proper functionality. * * @since 0.2 * @access public * @param string $groupname name used when pairing a text field and button * @return string css class(es) * @see getButtonClass(), getField() */ public function getFieldClass($groupname = null) { $groupname = isset($groupname) ? $groupname : $this->groupname ; return $this->field_class_name . '-' . $groupname; } /** * Used to insert a WordPress styled button, should be paired with a text * field element. * * @since 0.1 * @access public * @return HTML * @see getField(), getButtonClass(), getButtonLink() */ public function getButton(array $attr = array()) { $groupname = isset($attr['groupname']) ? $attr['groupname'] : $this->groupname ; $tab = isset($attr['tab']) ? $attr['tab'] : $this->tab ; $attr_default = array ( 'label' => 'Add Media', 'href' => $this->getButtonLink($tab), 'class' => $this->getButtonClass($groupname) . ' button', ); if (isset($this->insert_button_label)) { $attr_default['class'] .= " {label:'" . $this->insert_button_label . "'}"; } ### if (isset($attr['class'])) { $attr['class'] = $attr_default['class'] . ' ' . trim($attr['class']); } $attr = array_merge($attr_default, $attr); $label = $attr['label']; unset($attr['label']); ### $elem_attr = array(); foreach ($attr as $n => $v) { array_push($elem_attr, $n . '="' . $v . '"'); } ### return '<a ' . implode(' ', $elem_attr) . '>' . $label . '</a>'; } /** * Used to insert global STYLE or SCRIPT tags into the footer, called on * WordPress admin_footer action. * * @since 0.1 * @access public * @return HTML/Javascript */ public function init() { $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : NULL ; $file = basename(parse_url($uri, PHP_URL_PATH)); if ($uri AND in_array($file, array('post.php', 'post-new.php'))) { // include javascript for special functionality ?><script type="text/javascript"> /* <['|"] alt=/i); src = (src && src[1]) ? src[1] : '' ; var href = html.match(/href=['|"](.*?)['|"]/i); href = (href && href[1]) ? href[1] : '' ; var url = src ? src : href ; wpalchemy_mediafield.val(url); // reset insert button label setInsertButtonLabel(wpalchemy_insert_button_label); wpalchemy_mediafield = null; } else { wpalchemy_send_to_editor_default(html); } tb_remove(); } function getInsertButtonLabel() { return $('#TB_iframeContent').contents().find('.media-item .savesend input[type=submit], #insertonlybutton').val(); } function setInsertButtonLabel(label) { $('#TB_iframeContent').contents().find('.media-item .savesend input[type=submit], #insertonlybutton').val(label); } $('[class*=<?php echo $this->button_class_name; ?>]').live('click', function() { var name = $(this).attr('class').match(/<?php echo $this->button_class_name; ?>-([a-zA-Z0-9_-]*)/i); name = (name && name[1]) ? name[1] : '' ; var data = $(this).attr('class').match(/({.*})/i); data = (data && data[1]) ? data[1] : '' ; wpalchemy_mediafield = $('.<?php echo $this->field_class_name; ?>-' + name, $(this).closest('.postbox')); function iframeSetup() { if ($('#TB_iframeContent').contents().find('.media-item .savesend input[type=submit], #insertonlybutton').length) { // run once if ( ! wpalchemy_insert_button_label.length) { wpalchemy_insert_button_label = getInsertButtonLabel(); } setInsertButtonLabel((data && data.label)?data.label:'Insert'); // tab "type" needs a timer in order to properly change the button label //clearInterval(interval); // setup iframe.load as soon as it becomes available // prevent multiple binds //$('#TB_iframeContent').unbind('load', iframeSetup).bind('load', iframeSetup); } } clearInterval(interval); interval = setInterval(iframeSetup, 500); }); } }); /* ]]> */ </script><?php } } } /* End of file */