diff --git a/Makefile b/Makefile index 0780ee679..8dd9f543d 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,4 @@ -# Build addons packages -SRC = buglink fortunate nsfw sniper uhremotestorage \ - calc impressum oembed statusnet widgets \ - communityhome js_upload piwik tictac wppost \ - convert ldapauth poormancron tumblr \ - facebook membersince randplace twitter -DESTS = $(addsuffix .tgz,$(SRC)) +all: + @./buildtgz -all: $(DESTS) - -%.tgz: % - @echo -n Creating $@... - @tar czf $@ $< - @echo " Done." \ No newline at end of file diff --git a/buildtgz b/buildtgz new file mode 100755 index 000000000..dec535dd6 --- /dev/null +++ b/buildtgz @@ -0,0 +1,22 @@ +#!/bin/sh +# Make doesn't handle subdirs very well +# without providing a Makefile in each one. +# So we will just manually find any source +# directories which contain any files that +# are newer than are .tgz file and rebuild +# it if any are found + +SUBDIRS=`ls -d [a-z]*/ | tr -d /` +for a in $SUBDIRS; do + TGZ=$a.tgz + if [[ ! -f $TGZ ]]; then + echo "Building: " $TGZ + tar zcvf $TGZ $a + else + TOUCHED=`find $a -cnewer $TGZ` + if [[ -n $TOUCHED ]]; then + echo "Building: " $TGZ + tar zcvf $TGZ $a + fi + fi +done diff --git a/posterous.tgz b/posterous.tgz new file mode 100644 index 000000000..cbb5c24e2 Binary files /dev/null and b/posterous.tgz differ diff --git a/posterous/posterous-api.php b/posterous/posterous-api.php new file mode 100644 index 000000000..b9dd7d9c5 --- /dev/null +++ b/posterous/posterous-api.php @@ -0,0 +1,248 @@ +user = $user; + $this->pass = $pass; + } + + /* Reading Methods - http://posterous.com/api/reading */ + function getsites() { + $api_method = 'getsites'; + $xml = $this->_call( $api_method ); + return $xml; + } + + function readposts($args) { + $api_method = 'readposts'; + + $valid_args = array('hostname','site_id','num_posts','page','tag'); + $method_args = $this->_validate($args, $valid_args); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + function gettags($args) { + $api_method = 'gettags'; + + $valid_args = array('hostname','site_id'); + $method_args = $this->_validate($args, $valid_args); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + /* Posting Methods - http://posterous.com/api/posting */ + function newpost($args) { + $api_method = 'newpost'; + + if (!$this->_auth()) { + throw new PosterousException('Posterous API call "' . $api_method . '" requires authentication.'); + } + + $valid_args = array('site_id','media','title','body','autopost','private','date','tags','source','sourceLink'); + $method_args = $this->_validate($args, $valid_args); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + function updatepost($args) { + $api_method = 'updatepost'; + + if (!$this->_auth()) { + throw new PosterousException('Posterous API call "' . $api_method . '" requires authentication.'); + } + + $valid_args = array('post_id','media','title','body'); + $method_args = $this->_validate($args, $valid_args); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + function newcomment($args) { + $api_method = 'newcomment'; + + $valid_args = array('post_id','comment','name','email','date'); + $method_args = $this->_validate($args, $valid_args); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + /* Post.ly Methods - http://posterous.com/api/postly */ + + function getpost($args) { + $api_method = 'getpost'; + + $valid_args = array('id'); + $method_args = $this->_validate($args, $valid_args); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + /* Twitter Methods - http://posterous.com/api/twitter */ + function upload() { + $api_method = 'upload'; + + $valid_args = array('username','password','media','message','body','source','sourceLink'); + $method_args = $this->_validate( $args, $method_args ); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + function uploadAndPost() { + $api_method = 'uploadAndPost'; + + $valid_args = array('username','password','media','message','body','source','sourceLink'); + $method_args = $this->_validate( $args, $method_args ); + + $xml = $this->_call( $api_method, $method_args ); + return $xml; + } + + + /* Helper Functions */ + private function _call($api_method, $method_args = NULL) { + $method_url = POSTEROUS_API_URL . $api_method; + + $user = $this->user(); + $pass = $this->pass(); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $method_url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + + if (isset($user) && isset($pass) && $user != '' && $pass != '') { + curl_setopt($ch, CURLOPT_USERPWD, $user . ':' . $pass); + } + + curl_setopt($ch, CURLOPT_POST, 1); + + if ( is_array($method_args) && !empty($method_args) ) { + curl_setopt($ch, CURLOPT_POSTFIELDS, $method_args); + } + + $data = curl_exec($ch); + //$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); + curl_close($ch); + + $xml = ''; + try { + $xml = new SimpleXMLElement($data); + + $response_status = $xml['stat']; + if ($response_status == 'ok') { + return $xml; + } + elseif ($response_status == 'fail') { + throw new PosterousException('Error Code ' . $xml->err['code'] . ': ' . $xml->err['msg']); + } + else { + throw new PosterousException('Error: Invalid Posterous response status.'); + } + } + catch (Exception $e) { + throw $e; + } + } + + private function _validate($args, $valid_args) { + $method_args = array(); + foreach($args as $key => $value) { + if( in_array($key, $valid_args) ) { + $method_args[$key] = $value; + } + } + + return $method_args; + } + + private function _auth() { + //checks if object has user & password, does not verify w/ Posterous + if (isset($this->user) && isset($this->pass) && $this->user != '' && $this->pass != '') { + return TRUE; + } + else { + return FALSE; + } + } + + /* Getters & Setters */ + function user($user = NULL) { + if ($user) { + $this->user = $user; + } + return $this->user; + } + + function pass($pass = NULL) { + if ($pass) { + $this->pass = $pass; + } + return $this->pass; + } +} + +?> diff --git a/posterous/posterous.css b/posterous/posterous.css new file mode 100644 index 000000000..06202aa56 --- /dev/null +++ b/posterous/posterous.css @@ -0,0 +1,16 @@ + +#posterous-enable-label, #posterous-username-label, #posterous-password-label, #posterous-bydefault-label { + float: left; + width: 200px; + margin-top: 10px; +} + +#posterous-checkbox, #posterous-username, #posterous-password, #posterous-bydefault { + float: left; + margin-top: 10px; +} + +#posterous-submit { + margin-top: 15px; +} + diff --git a/posterous/posterous.php b/posterous/posterous.php new file mode 100644 index 000000000..639042b8b --- /dev/null +++ b/posterous/posterous.php @@ -0,0 +1,187 @@ + + */ + +function posterous_install() { + register_hook('post_local', 'addon/posterous/posterous.php', 'posterous_post_local'); + register_hook('notifier_normal', 'addon/posterous/posterous.php', 'posterous_send'); + register_hook('jot_networks', 'addon/posterous/posterous.php', 'posterous_jot_nets'); + register_hook('connector_settings', 'addon/posterous/posterous.php', 'posterous_settings'); + register_hook('connector_settings_post', 'addon/posterous/posterous.php', 'posterous_settings_post'); + +} +function posterous_uninstall() { + unregister_hook('post_local', 'addon/posterous/posterous.php', 'posterous_post_local'); + unregister_hook('notifier_normal', 'addon/posterous/posterous.php', 'posterous_send'); + unregister_hook('jot_networks', 'addon/posterous/posterous.php', 'posterous_jot_nets'); + unregister_hook('connector_settings', 'addon/posterous/posterous.php', 'posterous_settings'); + unregister_hook('connector_settings_post', 'addon/posterous/posterous.php', 'posterous_settings_post'); +} + + +function posterous_jot_nets(&$a,&$b) { + if(! local_user()) + return; + + $pstr_post = get_pconfig(local_user(),'posterous','post'); + if(intval($pstr_post) == 1) { + $pstr_defpost = get_pconfig(local_user(),'posterous','post_by_default'); + $selected = ((intval($pstr_defpost) == 1) ? ' checked="checked" ' : ''); + $b .= '