Incorrect accessYou cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files."; exit(); } class skinDifferences extends skinCaching { /**#@+ * Registry objects * * @access protected * @var object */ protected $registry; protected $DB; protected $settings; protected $request; protected $lang; protected $member; protected $cache; /**#@-*/ /** * Constructor * * @access public * @param object Registry object * @return void */ public function __construct( ipsRegistry $registry ) { /* Make object */ parent::__construct( $registry ); } /** * Fetch all skin difference sessions * * @access public * @return array Array of skin difference sessions */ public function fetchSessions() { //----------------------------------------- // INIT //----------------------------------------- $sessions = array(); //----------------------------------------- // Get 'em //----------------------------------------- $this->DB->build( array( 'select' => '*', 'from' => 'template_diff_session', 'order' => 'diff_session_updated DESC' ) ); $this->DB->execute(); while( $row = $this->DB->fetch() ) { /* Prep dates */ $row['_date'] = ipsRegistry::getClass( 'class_localization')->getDate( $row['diff_session_updated'], 'TINY' ); $sessions[ $row['diff_session_id'] ] = $row; } return $sessions; } /** * Remove a session * * @access public * @param int Session ID * @return bool True */ public function removeSession( $sessionID ) { /* Delete 'em */ $this->DB->delete('templates_diff_import', 'diff_session_id='.$sessionID ); $this->DB->delete( 'template_diff_session', 'diff_session_id='.$sessionID ); $this->DB->delete( 'template_diff_changes', 'diff_session_id='.$sessionID ); return TRUE; } /** * Create new session * * @access public * @param string Diff session title * @param string Compare HTML * @param boolean Ignore new bits * @return int New session ID */ public function createSession( $title, $content, $ignoreBits=FALSE ) { //----------------------------------------- // INIT //----------------------------------------- $templateBits = array(); //----------------------------------------- // Get number for missing template bits //----------------------------------------- $_bits = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count', 'from' => 'skin_templates', 'where' => 'template_set_id=0' ) ); //----------------------------------------- // Create session //----------------------------------------- $this->DB->allow_sub_select = 1; $this->DB->insert( 'template_diff_session', array( 'diff_session_togo' => intval( $_bits['count'] ), 'diff_session_done' => 0, 'diff_session_title' => $title, 'diff_session_updated' => time(), 'diff_session_ignore_missing' => ( $ignoreBits === TRUE ) ? 1 : 0 ) ); $diffSesssionID = $this->DB->getInsertId(); //----------------------------------------- // XML //----------------------------------------- require_once( IPS_KERNEL_PATH . 'classXML.php' ); $xml = new classXML( IPS_DOC_CHAR_SET ); //----------------------------------------- // Check to see if its an archive... //----------------------------------------- if ( strstr( $content, "readXML( $content ); /* We just want the templates.. */ foreach( $xmlArchive->asArray() as $path => $fileData ) { if ( $fileData['path'] == 'templates' ) { $xml->loadXML( $fileData['content']); foreach( $xml->fetchElements( 'template' ) as $xmlelement ) { $data = $xml->fetchElementsFromRecord( $xmlelement ); if ( is_array( $data ) ) { $templateBits[] = $data; } } } } } else { $xml->loadXML( $content ); foreach( $xml->fetchElements( 'template' ) as $xmlelement ) { $data = $xml->fetchElementsFromRecord( $xmlelement ); if ( is_array( $data ) ) { $templateBits[] = $data; } } } //----------------------------------------- // Got anything? //----------------------------------------- if ( ! count( $templateBits ) ) { return FALSE; } //----------------------------------------- // Build session data //----------------------------------------- foreach( $templateBits as $bit ) { $diffKey = $diffSesssionID . ':' . $bit['template_group'] . ':' . $bit['template_name']; if ( ! $seen[ $diffKey ] ) { $this->DB->allow_sub_select = 1; $this->DB->insert( 'templates_diff_import', array( 'diff_key' => $diffKey, 'diff_func_group' => $bit['template_group'], 'diff_func_data' => $bit['template_data'], 'diff_func_name' => $bit['template_name'], 'diff_func_content' => $bit['template_content'], 'diff_session_id' => $diffSesssionID ) ); $seen[ $diffKey ] = 1; } } return $diffSesssionID; } /** * Fetch a report * * @access public * @param int Session ID * @return array */ public function fetchReport( $diffSessionID ) { //----------------------------------------- // INIT //----------------------------------------- $return = array( 'counts' => array( 'missing' => 0, 'changed' => 0 ), 'data' => array() ); //----------------------------------------- // Get data //----------------------------------------- $this->DB->build( array( 'select' => '*', 'from' => 'template_diff_changes', 'where' => 'diff_session_id='.$diffSessionID, 'order' => 'diff_change_func_group ASC, diff_change_func_name ASC' ) ); $this->DB->execute(); while( $row = $this->DB->fetch() ) { //----------------------------------------- // Gen data //----------------------------------------- $row['_key'] = $diffSessionID.':'.$row['diff_change_func_group'].':'.$row['diff_change_func_name']; $row['_size'] = IPSLib::sizeFormat( IPSLib::strlenToBytes( IPSText::mbstrlen( $row['diff_change_content'] ) ) ); //----------------------------------------- // Diff type //----------------------------------------- if ( ! $row['diff_change_type'] ) { $row['_is'] = 'new'; $return['counts']['missing']++; } else { $row['_is'] = 'changed'; $return['counts']['changed']++; } //----------------------------------------- // Add data... //----------------------------------------- $return['data'][ $row['diff_change_func_group'] ][ $row['_key'] ] = $row; } return $return; } /** * Fetch a session * * @access public * @param int Session ID * @return mixed Array of data, or false */ public function fetchSession( $diffSessionID ) { $session = $this->DB->buildAndFetch( array( 'select' => '*', 'from' => 'template_diff_session', 'where' => 'diff_session_id='.$diffSessionID ) ); return ( $session['diff_session_id'] ) ? $session : FALSE; } /** * Return the total number of bits to process * * @access public * @param int Session ID * @return int Number of bits */ public function fetchNumberSessionTemplateBits( $diffSesssionID ) { $count = $this->DB->buildAndFetch( array( 'select' => 'count(*) as count', 'from' => 'templates_diff_import', 'where' => 'diff_session_id=' . intval( $diffSesssionID ) ) ); return intval( $count['count'] ); } /** * Return the total number of master template bits * * @access public * @return int Number of bits */ public function fetchNumberTemplateBits() { $count = $this->DB->buildAndFetch( array( 'select' => 'count(*) as count', 'from' => 'skin_templates', 'where' => 'template_set_id=0' ) ); return intval( $count['count'] ); } }