From: <lph...@us...> - 2012-08-16 14:20:00
|
Revision: 42593 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=42593&view=rev Author: lphuberdeau Date: 2012-08-16 14:19:53 +0000 (Thu, 16 Aug 2012) Log Message: ----------- [MOD] Moving listlib and channellib as well Modified Paths: -------------- trunk/admin/include_profiles.php trunk/lib/core/Tiki/Profile/InstallHandler/DataChannel.php trunk/lib/wiki-plugins/wikiplugin_datachannel.php trunk/tiki-channel.php Added Paths: ----------- trunk/lib/core/Tiki/Profile/ChannelList.php trunk/lib/core/Tiki/Profile/List.php Removed Paths: ------------- trunk/lib/profilelib/channellib.php trunk/lib/profilelib/listlib.php Modified: trunk/admin/include_profiles.php =================================================================== --- trunk/admin/include_profiles.php 2012-08-16 14:15:00 UTC (rev 42592) +++ trunk/admin/include_profiles.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -10,7 +10,6 @@ header('location: index.php'); exit; } -require_once 'lib/profilelib/listlib.php'; $list = new Tiki_Profile_List; $sources = $list->getSources(); Copied: trunk/lib/core/Tiki/Profile/ChannelList.php (from rev 42586, trunk/lib/profilelib/channellib.php) =================================================================== --- trunk/lib/core/Tiki/Profile/ChannelList.php (rev 0) +++ trunk/lib/core/Tiki/Profile/ChannelList.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -0,0 +1,113 @@ +<?php +// (c) Copyright 2002-2012 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +/** + * Tiki_Profile_ChannelList + * + * @package + */ +class Tiki_Profile_ChannelList +{ + private $channels = array(); + + public static function fromConfiguration( $string ) + { + $list = new self; + + $string = str_replace("\r", '', $string); + $lines = explode("\n", $string); + + foreach ( $lines as $line ) { + $parts = explode(',', $line); + if ( count($parts) < 3 ) + continue; + elseif ( count($parts) == 3 ) + $parts[] = 'Admins'; + + $parts = array_map('trim', $parts); + list($name, $domain, $profile) = array_slice($parts, 0, 3); + $groups = array_slice($parts, 3); + + $list->channels[$name] = array( + 'domain' => $domain, + 'profile' => $profile, + 'groups' => $groups, + ); + } + + return $list; + } + + function canExecuteChannels( array $channelNames, array $groups, $skipInputCheck = false ) + { + foreach ( $channelNames as $channel ) { + if ( ! array_key_exists($channel, $this->channels) ) + return false; + + // At least one match is required + if ( count(array_intersect($groups, $this->channels[$channel]['groups'])) == 0 ) + return false; + + // Checking against input if required (note that unlike normal groups, all must match) + foreach ($this->channels[$channel]['groups'] as $g) { + if ($skipInputCheck) { + break; + } + if (preg_match('/\$profilerequest\:(\w+)\$/', $g, $matches)) { + for ($i = 1, $count_matches = count($matches); $i < $count_matches; $i++) { + if (empty($_REQUEST[$matches[$i]])) { + return false; + } else { + $tocheck = str_replace($matches[0], $_REQUEST[$matches[$i]], $g); + if (!in_array($tocheck, $groups)) { + return false; + } + } + } + } + } + } + + return true; + } + + function getProfiles( array $channelNames ) + { + $profiles = array(); + + foreach ( $channelNames as $channelName ) { + $info = $this->channels[$channelName]; + + if ( $profile = Tiki_Profile::fromNames($info['domain'], $info['profile']) ) + $profiles[$channelName] = $profile; + } + + return $profiles; + } + + function addChannel( $name, $domain, $profile, $groups ) + { + $this->channels[ $name ] = array( + 'domain' => $domain, + 'profile' => $profile, + 'groups' => $groups, + ); + } + + function getConfiguration() + { + $out = ''; + foreach ( $this->channels as $name => $info ) { + $parts = $info['groups']; + array_unshift($parts, $name, $info['domain'], $info['profile']); + + $out .= implode(', ', $parts) . "\n"; + } + + return trim($out); + } +} Modified: trunk/lib/core/Tiki/Profile/InstallHandler/DataChannel.php =================================================================== --- trunk/lib/core/Tiki/Profile/InstallHandler/DataChannel.php 2012-08-16 14:15:00 UTC (rev 42592) +++ trunk/lib/core/Tiki/Profile/InstallHandler/DataChannel.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -38,7 +38,6 @@ function _install() { global $tikilib, $prefs; - require_once 'lib/profilelib/channellib.php'; $channels = Tiki_Profile_ChannelList::fromConfiguration($prefs['profile_channels']); $data = $this->getData(); Copied: trunk/lib/core/Tiki/Profile/List.php (from rev 42586, trunk/lib/profilelib/listlib.php) =================================================================== --- trunk/lib/core/Tiki/Profile/List.php (rev 0) +++ trunk/lib/core/Tiki/Profile/List.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -0,0 +1,180 @@ +<?php +// (c) Copyright 2002-2012 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +/** + * Tiki_Profile_List + * + */ +class Tiki_Profile_List +{ + function getSources() + { + global $prefs; + $raw = explode("\n", $prefs['profile_sources']); + $raw = array_map('trim', $raw); + $sources = array(); + + foreach ( $raw as $source ) + if ( !empty($source) ) { + $file = $this->getCacheLocation($source); + $last = $this->getCacheLastUpdate($source); + $short = dirname($source); + $sources[] = array( + 'url' => $source, + 'domain' => (0 === strpos($short, 'http://')) ? substr($short, 7) : $short, + 'short' => $short, + 'status' => ($last && filesize($file)) ? 'open' : 'closed', + 'lastupdate' => $last, + 'formatted' => $last ? date('Y-m-d H:i:s', $last) : '' ); + } + + return $sources; + } + + function refreshCache( $path ) + { + global $tikilib; + $file = $this->getCacheLocation($path); + + // Replace existing with blank file + if ( file_exists($file) ) + unlink($file); + touch($file); + + $content = $tikilib->httprequest($path); + + $parts = explode("\n", $content); + $parts = array_map('trim', $parts); + $good = false; + + foreach ( $parts as $line ) { + // All lines contain 3 entries + if ( empty($line) ) + continue; + if ( substr_count($line, "\t") != 2 ) + return false; + + $good = true; + } + + // A valid file has at least one profile + if ( !$good ) + return false; + + file_put_contents($file, $content . "\n"); + + return true; + } + + function getCategoryList( $source = '' ) + { + $category_list = array(); + + $sources = $this->getSources(); + + foreach ( $sources as $s ) { + if ( $source && $s['url'] != $source ) + continue; + + if ( !$s['lastupdate'] ) + continue; + + $fp = fopen($this->getCacheLocation($s['url']), 'r'); + + while ( false !== $row = fgetcsv($fp, 200, "\t") ) { + $c = $row[0]; + if ($c) + $category_list[] = $c; + } + } + + natsort($category_list); + return(array_unique($category_list)); + } + + function getList( $source = '', $categories = array(), $profilename = '' ) + { + $installer = new Tiki_Profile_Installer; + $list = array(); + + $sources = $this->getSources(); + + foreach ( $sources as $s ) { + if ( $source && $s['url'] != $source ) + continue; + + if ( !$s['lastupdate'] ) + continue; + + $fp = fopen($this->getCacheLocation($s['url']), 'r'); + + while (false !== $row = fgetcsv($fp, 200, "\t")) { + if ( count($row) != 3 ) + continue; + + list($c, $t, $i) = $row; + + $key = "{$s['url']}#{$i}"; + + if ( $profilename && stripos($i, $profilename) === false ) + continue; + + if ( array_key_exists($key, $list) ) { + $list[$key]['categories'][] = $c; + } else { + $list[$key] = array( + 'domain' => $s['domain'], + 'categories' => array($c), + 'name' => $i, + 'installed' => $installer->isKeyInstalled($s['domain'], $i), + ); + } + } + + fclose($fp); + + // Apply category filter + foreach ($list as $pkey => $profile) { + $in = true; // If there are no required categories, don't filter anything. + if (!empty($categories)) { + foreach ($categories as $category) { + $in = false; // Start assuming this required category isn't in this profile's categories + foreach ($profile['categories'] as $pcategory) { + if ( $category == $pcategory ) { + $in = true; + break; + } + } + if (!$in) { + break; + } + } + } + if (!$in) { + unset($list[$pkey]); + } + } + } + + return array_values($list); + } + + private function getCacheLocation( $path ) + { + $hash = md5($path); + return "temp/cache/profile$hash"; + } + + private function getCacheLastUpdate( $path ) + { + $file = $this->getCacheLocation($path); + if ( ! file_exists($file) ) + return 0; + + return filemtime($file); + } +} Deleted: trunk/lib/profilelib/channellib.php =================================================================== --- trunk/lib/profilelib/channellib.php 2012-08-16 14:15:00 UTC (rev 42592) +++ trunk/lib/profilelib/channellib.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -1,113 +0,0 @@ -<?php -// (c) Copyright 2002-2012 by authors of the Tiki Wiki CMS Groupware Project -// -// All Rights Reserved. See copyright.txt for details and a complete list of authors. -// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. -// $Id$ - -/** - * Tiki_Profile_ChannelList - * - * @package - */ -class Tiki_Profile_ChannelList -{ - private $channels = array(); - - public static function fromConfiguration( $string ) - { - $list = new self; - - $string = str_replace("\r", '', $string); - $lines = explode("\n", $string); - - foreach ( $lines as $line ) { - $parts = explode(',', $line); - if ( count($parts) < 3 ) - continue; - elseif ( count($parts) == 3 ) - $parts[] = 'Admins'; - - $parts = array_map('trim', $parts); - list($name, $domain, $profile) = array_slice($parts, 0, 3); - $groups = array_slice($parts, 3); - - $list->channels[$name] = array( - 'domain' => $domain, - 'profile' => $profile, - 'groups' => $groups, - ); - } - - return $list; - } - - function canExecuteChannels( array $channelNames, array $groups, $skipInputCheck = false ) - { - foreach ( $channelNames as $channel ) { - if ( ! array_key_exists($channel, $this->channels) ) - return false; - - // At least one match is required - if ( count(array_intersect($groups, $this->channels[$channel]['groups'])) == 0 ) - return false; - - // Checking against input if required (note that unlike normal groups, all must match) - foreach ($this->channels[$channel]['groups'] as $g) { - if ($skipInputCheck) { - break; - } - if (preg_match('/\$profilerequest\:(\w+)\$/', $g, $matches)) { - for ($i = 1, $count_matches = count($matches); $i < $count_matches; $i++) { - if (empty($_REQUEST[$matches[$i]])) { - return false; - } else { - $tocheck = str_replace($matches[0], $_REQUEST[$matches[$i]], $g); - if (!in_array($tocheck, $groups)) { - return false; - } - } - } - } - } - } - - return true; - } - - function getProfiles( array $channelNames ) - { - $profiles = array(); - - foreach ( $channelNames as $channelName ) { - $info = $this->channels[$channelName]; - - if ( $profile = Tiki_Profile::fromNames($info['domain'], $info['profile']) ) - $profiles[$channelName] = $profile; - } - - return $profiles; - } - - function addChannel( $name, $domain, $profile, $groups ) - { - $this->channels[ $name ] = array( - 'domain' => $domain, - 'profile' => $profile, - 'groups' => $groups, - ); - } - - function getConfiguration() - { - $out = ''; - foreach ( $this->channels as $name => $info ) { - $parts = $info['groups']; - array_unshift($parts, $name, $info['domain'], $info['profile']); - - $out .= implode(', ', $parts) . "\n"; - } - - return trim($out); - } -} Deleted: trunk/lib/profilelib/listlib.php =================================================================== --- trunk/lib/profilelib/listlib.php 2012-08-16 14:15:00 UTC (rev 42592) +++ trunk/lib/profilelib/listlib.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -1,180 +0,0 @@ -<?php -// (c) Copyright 2002-2012 by authors of the Tiki Wiki CMS Groupware Project -// -// All Rights Reserved. See copyright.txt for details and a complete list of authors. -// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. -// $Id$ - -/** - * Tiki_Profile_List - * - */ -class Tiki_Profile_List -{ - function getSources() - { - global $prefs; - $raw = explode("\n", $prefs['profile_sources']); - $raw = array_map('trim', $raw); - $sources = array(); - - foreach ( $raw as $source ) - if ( !empty($source) ) { - $file = $this->getCacheLocation($source); - $last = $this->getCacheLastUpdate($source); - $short = dirname($source); - $sources[] = array( - 'url' => $source, - 'domain' => (0 === strpos($short, 'http://')) ? substr($short, 7) : $short, - 'short' => $short, - 'status' => ($last && filesize($file)) ? 'open' : 'closed', - 'lastupdate' => $last, - 'formatted' => $last ? date('Y-m-d H:i:s', $last) : '' ); - } - - return $sources; - } - - function refreshCache( $path ) - { - global $tikilib; - $file = $this->getCacheLocation($path); - - // Replace existing with blank file - if ( file_exists($file) ) - unlink($file); - touch($file); - - $content = $tikilib->httprequest($path); - - $parts = explode("\n", $content); - $parts = array_map('trim', $parts); - $good = false; - - foreach ( $parts as $line ) { - // All lines contain 3 entries - if ( empty($line) ) - continue; - if ( substr_count($line, "\t") != 2 ) - return false; - - $good = true; - } - - // A valid file has at least one profile - if ( !$good ) - return false; - - file_put_contents($file, $content . "\n"); - - return true; - } - - function getCategoryList( $source = '' ) - { - $category_list = array(); - - $sources = $this->getSources(); - - foreach ( $sources as $s ) { - if ( $source && $s['url'] != $source ) - continue; - - if ( !$s['lastupdate'] ) - continue; - - $fp = fopen($this->getCacheLocation($s['url']), 'r'); - - while ( false !== $row = fgetcsv($fp, 200, "\t") ) { - $c = $row[0]; - if ($c) - $category_list[] = $c; - } - } - - natsort($category_list); - return(array_unique($category_list)); - } - - function getList( $source = '', $categories = array(), $profilename = '' ) - { - $installer = new Tiki_Profile_Installer; - $list = array(); - - $sources = $this->getSources(); - - foreach ( $sources as $s ) { - if ( $source && $s['url'] != $source ) - continue; - - if ( !$s['lastupdate'] ) - continue; - - $fp = fopen($this->getCacheLocation($s['url']), 'r'); - - while (false !== $row = fgetcsv($fp, 200, "\t")) { - if ( count($row) != 3 ) - continue; - - list($c, $t, $i) = $row; - - $key = "{$s['url']}#{$i}"; - - if ( $profilename && stripos($i, $profilename) === false ) - continue; - - if ( array_key_exists($key, $list) ) { - $list[$key]['categories'][] = $c; - } else { - $list[$key] = array( - 'domain' => $s['domain'], - 'categories' => array($c), - 'name' => $i, - 'installed' => $installer->isKeyInstalled($s['domain'], $i), - ); - } - } - - fclose($fp); - - // Apply category filter - foreach ($list as $pkey => $profile) { - $in = true; // If there are no required categories, don't filter anything. - if (!empty($categories)) { - foreach ($categories as $category) { - $in = false; // Start assuming this required category isn't in this profile's categories - foreach ($profile['categories'] as $pcategory) { - if ( $category == $pcategory ) { - $in = true; - break; - } - } - if (!$in) { - break; - } - } - } - if (!$in) { - unset($list[$pkey]); - } - } - } - - return array_values($list); - } - - private function getCacheLocation( $path ) - { - $hash = md5($path); - return "temp/cache/profile$hash"; - } - - private function getCacheLastUpdate( $path ) - { - $file = $this->getCacheLocation($path); - if ( ! file_exists($file) ) - return 0; - - return filemtime($file); - } -} Modified: trunk/lib/wiki-plugins/wikiplugin_datachannel.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_datachannel.php 2012-08-16 14:15:00 UTC (rev 42592) +++ trunk/lib/wiki-plugins/wikiplugin_datachannel.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -164,8 +164,6 @@ } } - require_once 'lib/profilelib/channellib.php'; - $groups = Perms::get()->getGroups(); $config = Tiki_Profile_ChannelList::fromConfiguration($prefs['profile_channels']); Modified: trunk/tiki-channel.php =================================================================== --- trunk/tiki-channel.php 2012-08-16 14:15:00 UTC (rev 42592) +++ trunk/tiki-channel.php 2012-08-16 14:19:53 UTC (rev 42593) @@ -12,7 +12,6 @@ ); require_once 'tiki-setup.php'; -require_once 'lib/profilelib/channellib.php'; // This file will handle a second mode of authentication, don't limit it to permissions. // Only channels registered through the admin panel can be executed. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |