registry =& $registry; } // ################################################################### /** * (PHP 4) Constructor */ function Printer_CSS(&$registry) { $this->__construct($registry); } // ################################################################### /** * Adds a CSS information block to the array for later use * * @access public * * @param string Block title to display in thead * @param string CSS class/descriptor/element name * @param bool Show the link CSS information */ function add_block($title, $descriptor, $dolink) { if (isset($this->descriptors["$descriptor"])) { trigger_error('The descriptor `' . $descriptor . '` already exists', E_USER_WARNING); return; } $this->descriptors["$descriptor"] = array( 'title' => $title, 'descriptor' => $descriptor, 'dolink' => $dolink ); } // ################################################################### /** * Sets a master data key for a given descriptor and property * * @access public * * @param string Descriptor * @param string Property * @param string Value */ function set_master_data($descriptor, $property, $value) { $this->masterdata["$descriptor"]["$property"] = $value; } // ################################################################### /** * Sets a custom data key for a given descriptor and property * * @access public * * @param string Descriptor * @param string Property * @param string Value */ function set_custom_data($descriptor, $property, $value) { $this->customdata["$descriptor"]["$property"] = $value; } // ################################################################### /** * Generates the HTML needed to output the CSS editing blocks; this is * done in the form of using ISSO.Printer * * @access public */ function generate_blocks() { $print =& $this->registry->modules['printer']; $lang = array( 'standard_css_attributes' => $this->registry->modules['localize']->string('Standard CSS Attributes'), 'extra_css_attributes' => $this->registry->modules['localize']->string('Extra CSS Attributes'), 'links_normal' => $this->registry->modules['localize']->string('Normal CSS Links'), 'links_visited' => $this->registry->modules['localize']->string('Visited CSS Links'), 'links_hover' => $this->registry->modules['localize']->string('Hover CSS Links'), 'background' => $this->registry->modules['localize']->string('Background'), 'font_color' => $this->registry->modules['localize']->string('Font Color'), 'font_style' => $this->registry->modules['localize']->string('Font Style'), 'font_size' => $this->registry->modules['localize']->string('Font Size'), 'font_family' => $this->registry->modules['localize']->string('Font Family'), 'text_decoration' => $this->registry->modules['localize']->string('Text Decoration'), 'css_selector' => $this->registry->modules['localize']->string('CSS Selector'), 'save_css' => $this->registry->modules['localize']->string('Save CSS') ); foreach ($this->descriptors AS $descriptor) { $value = array(); $print->table_start(); $print->table_head($descriptor['title']); $value['background'] = $this->fetch_value($descriptor['descriptor'], 'background'); $value['color'] = $this->fetch_value($descriptor['descriptor'], 'color'); $value['font_style'] = $this->fetch_value($descriptor['descriptor'], 'font-style'); $value['font_size'] = $this->fetch_value($descriptor['descriptor'], 'font-size'); $value['font_family'] = $this->fetch_value($descriptor['descriptor'], 'font-family'); $value['extra'] = $this->fetch_value($descriptor['descriptor'], 'extra'); $html = <<
$lang[standard_css_attributes]
$lang[background]
$lang[font_color]
$lang[font_style]
$lang[font_size]
$lang[font_family]
$lang[extra_css_attributes]
HTML; if ($descriptor['dolink']) { foreach (array('a:link' => 'a_link', 'a:visited' => 'a_visited', 'a:hover' => 'a_hover') AS $sel => $selname) { $value[$selname . '_background'] = $this->fetch_value($descriptor['descriptor'] . ' ' . $sel, 'background'); $value[$selname . '_color'] = $this->fetch_value($descriptor['descriptor'] . ' ' . $sel, 'color'); $value[$selname . '_text_decoration'] = $this->fetch_value($descriptor['descriptor'] . ' ' . $sel, 'text-decoration'); } $html .= <<
$lang[links_normal]
$lang[background]
$lang[font_color]
$lang[text_decoration]
$lang[links_visited]
$lang[background]
$lang[font_color]
$lang[text_decoration]
$lang[links_hover]
$lang[background]
$lang[font_color]
$lang[text_decoration]
HTML; } $print->row_span($html, 'alt2', 'left', 1); $print->row_span('
' . $lang['css_selector'] . ': ' . $descriptor['descriptor'] . '
', 'tfoot', 'right', 1); $print->table_end(); } } // ################################################################### /** * Returns the value of a given descriptor and property by comparing * the mater set and custom set then returning the right one * * @access private * * @param string Descriptor * @param string Property * * @return string Value of the given property */ function fetch_value($descriptor, $property) { if ($this->customdata["$descriptor"]["$property"] == '') { return $this->masterdata["$descriptor"]["$property"]; } else { return $this->customdata["$descriptor"]["$property"]; } } // ################################################################### /** * Generates an array of queries that should be run on your database to * update CSS changes. All of the queries have sprintf() markers that * need to be evaluated: * * %1$s - Database table * %2$s - styleid field * %3$s - descriptor field * %4$s - property field * %5$s - value field * %6%d - Styleid value * * @access public * * @param array Array of user-inputted information to be transformed into queries * * @return array Queries that need to be evaluated then ran */ function generate_change_query($data) { $queries[0] = '--- RESERVED FOR LATER USE ---'; print_r($data); $deletes = array(); foreach ($this->descriptors AS $descriptor => $opts) { $dolink = $opts['dolink']; if ($dolink) { $loops = array('', ' a:link', ' a:visited', ' a:hover'); } else { $loops = array(''); } foreach ($loops AS $sel) { foreach ($data["$descriptor$sel"] AS $prop => $value) { // the given value matches the master -- no change if ($this->masterdata["$descriptor$sel"]["$prop"] == $value) { continue; } // the given matches the custom -- no change else if ($this->customdata["$descriptor$sel"]["$prop"] == $value) { continue; } // no matching, it's new else { $deletes[] = "%3\$s = '" . $this->escape($descriptor . $sel) . "' AND %4\$s = '" . $this->escape($prop) . "'"; $queries[] = "INSERT INTO %1\$s (%2\$s, %3\$s, %4\$s, %5\$s) VALUES (%6\$d, '" . $this->escape($descriptor . $sel) . "', '" . $this->escape($prop) . "', '" . $this->escape($value) . "')"; } } } } $queries[0] = "DELETE FROM %1\$s WHERE styleid = %6\$d AND ((" . implode(') OR (', $deletes) . "))"; return $queries; } // ################################################################### /** * Wrapper for $this->registry->modules[ISSO_DB_LAYER]->escape_string() * * @access private * * @param string Unprotected string * * @return string Sanitized string */ function escape($string) { return $this->registry->modules[ISSO_DB_LAYER]->escape_string($string); } } /*=====================================================================*\ || ################################################################### || # $HeadURL$ || # $Id$ || ################################################################### \*=====================================================================*/ ?>