diff options
author | Friendika <info@friendika.com> | 2011-01-27 03:46:09 -0800 |
---|---|---|
committer | Friendika <info@friendika.com> | 2011-01-27 03:46:09 -0800 |
commit | df4f77dadddc7bd756c3e4f72fa2fbe204cfff88 (patch) | |
tree | 2cfeda0dd39056938eabc073cf7af4ea61d991f9 | |
parent | d2dddd995abef2d0805901b278647bef0ce50f88 (diff) | |
download | volse-hubzilla-df4f77dadddc7bd756c3e4f72fa2fbe204cfff88.tar.gz volse-hubzilla-df4f77dadddc7bd756c3e4f72fa2fbe204cfff88.tar.bz2 volse-hubzilla-df4f77dadddc7bd756c3e4f72fa2fbe204cfff88.zip |
roll version - now in alpha 2.1
-rw-r--r-- | addon/java_upload/java_upload.php | 41 | ||||
-rw-r--r-- | addon/js_upload/js_upload.php | 115 | ||||
-rw-r--r-- | boot.php | 2 | ||||
-rw-r--r-- | mod/photos.php | 109 | ||||
-rw-r--r-- | view/photos_upload.tpl | 35 |
5 files changed, 227 insertions, 75 deletions
diff --git a/addon/java_upload/java_upload.php b/addon/java_upload/java_upload.php index 92cd5326e..3d627b08f 100644 --- a/addon/java_upload/java_upload.php +++ b/addon/java_upload/java_upload.php @@ -3,6 +3,47 @@ +function java_upload_form(&$a,&$b) { + + +$b .= <<< EOT; + + <div id="photos-upload-select-files-text">$filestext</div> + + <div id="photos_upload_applet_wrapper"> + <applet name="jumpLoaderApplet" + code="jmaster.jumploader.app.JumpLoaderApplet.class" + archive="$archive" + width="700" + height="600" + mayscript > + <param name="uc_uploadUrl" value="$uploadurl" /> + <param name="uc_uploadFormName" value="photos-upload-form" /> + <param name="gc_loggingLeveL" value="FATAL" /> + <param name="uc_fileParameterName" value="userfile" /> + <param name="uc_cookie" value="PHPSESSID=$sessid; path=/;" /> + <param name="vc_disableLocalFileSystem" value="false" /> + <param name="vc_uploadViewMenuBarVisible" value="false" /> + <param name="vc_mainViewFileListViewVisible" value="true" /> + <param name="vc_mainViewFileListViewHeightPercent" value="50" /> + <param name="vc_mainViewFileTreeViewVisible" value="true" /> + <param name="vc_mainViewFileTreeViewWidthPercent" value="35" /> + <param name="vc_lookAndFeel" value="system" /> + + </applet> + + </div> + + <div id="photos-upload-no-java-message" > + $nojava + </div> + +EOT; + +} + + + function java_upload_photo_post_init(&$a,&$b) { diff --git a/addon/js_upload/js_upload.php b/addon/js_upload/js_upload.php index 143f9ba33..b738ade24 100644 --- a/addon/js_upload/js_upload.php +++ b/addon/js_upload/js_upload.php @@ -1,20 +1,98 @@ <?php +/** + * + * JavaScript Photo/Image Uploader + * + * Uses Valum 'qq' Uploader. + * Module Author: Chris Case + * + * Prior to enabling, ensure that you have a directory 'uploads' + * which is writable by the web server. + * + */ + function js_upload_install() { - register_hooks('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); - register_hooks('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); - register_hooks('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); + register_hook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form'); + register_hook('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); + register_hook('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); + register_hook('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); } function js_upload_uninstall() { - register_hooks('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); - register_hooks('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); - register_hooks('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); + unregister_hook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form'); + unregister_hook('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); + unregister_hook('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); + unregister_hook('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); +} + + +function js_upload_form(&$a,&$b) { + + $b['default_upload'] = false; + + $b['addon_text'] .= '<link href="' . $a->get_baseurl() . '/addon/js_upload/file-uploader/client/fileuploader.css" rel="stylesheet" type="text/css">'; + $b['addon_text'] .= '<script src="' . $a->get_baseurl() . '/addon/js_upload/file-uploader/client/fileuploader.js" type="text/javascript"></script>'; + + $b['addon_text'] .= <<< EOT + + <div id="file-uploader-demo1"> + <noscript> + <p>Please enable JavaScript to use file uploader.</p> + <!-- or put a simple form for upload here --> + </noscript> + </div> + +<script type="text/javascript"> +var uploader = null; +function getSelected(opt) { + var selected = new Array(); + var index = 0; + for (var intLoop = 0; intLoop < opt.length; intLoop++) { + if ((opt[intLoop].selected) || + (opt[intLoop].checked)) { + index = selected.length; + //selected[index] = new Object; + selected[index] = opt[intLoop].value; + //selected[index] = intLoop; + } + } + return selected; + } +function createUploader() { + uploader = new qq.FileUploader({ + element: document.getElementById('file-uploader-demo1'), + action: '{$b['post_url']}', + debug: true, + onSubmit: function(id,filename) { + + uploader.setParams( { + newalbum : document.getElementById('photos-upload-newalbum').value, + album : document.getElementById('photos-upload-album-select').value, + group_allow : getSelected(document.getElementById('group_allow')).join(','), + contact_allow : getSelected(document.getElementById('contact_allow')).join(','), + group_deny : getSelected(document.getElementById('group_deny')).join(','), + contact_deny : getSelected(document.getElementById('contact_deny')).join(',') + }); + } + }); } +// in your app create uploader as soon as the DOM is ready +// don't wait for the window to load +window.onload = createUploader; + + +</script> + +EOT; + + +} + function js_upload_post_init(&$a,&$b) { // list of valid extensions, ex. array("jpeg", "xml", "bmp") @@ -26,8 +104,10 @@ function js_upload_post_init(&$a,&$b) { $sizeLimit = 6 * 1024 * 1024; $uploader = new qqFileUploader($allowedExtensions, $sizeLimit); + $result = $uploader->handleUpload('uploads/'); + // to pass data through iframe you will need to encode all html tags $a->data['upload_jsonresponse'] = htmlspecialchars(json_encode($result), ENT_NOQUOTES); @@ -36,22 +116,27 @@ function js_upload_post_init(&$a,&$b) { killme(); } + $a->data['upload_result'] = $result; } -function js_upload_photo_post_file(&$a,&$b) { +function js_upload_post_file(&$a,&$b) { + + $result = $a->data['upload_result']; - $b['src'] = 'uploads/'.$result['filename']; + $b['src'] = 'uploads/' . $result['filename']; $b['filename'] = $result['filename']; - $b['filesize'] = filesize($src); + $b['filesize'] = filesize($b['src']); + +logger('post_file' . print_r($b, true)); } -function js_upload_photo_post_end(&$a,&$b) { +function js_upload_post_end(&$a,&$b) { +logger('upload_post_end'); if(x($a->data,'upload_jsonresponse')) { echo $a->data['upload_jsonresponse']; - @unlink($src); killme(); } @@ -83,9 +168,11 @@ class qqUploadedFileXhr { return true; } + function getName() { return $_GET['qqfile']; } + function getSize() { if (isset($_SERVER["CONTENT_LENGTH"])){ return (int)$_SERVER["CONTENT_LENGTH"]; @@ -98,6 +185,7 @@ class qqUploadedFileXhr { /** * Handle file uploads via regular form post (uses the $_FILES array) */ + class qqUploadedFileForm { /** * Save the file to the specified path @@ -116,6 +204,7 @@ class qqUploadedFileForm { return $_FILES['qqfile']['size']; } } + class qqFileUploader { private $allowedExtensions = array(); private $sizeLimit = 10485760; @@ -164,7 +253,7 @@ class qqFileUploader { */ function handleUpload($uploadDirectory, $replaceOldFile = FALSE){ if (!is_writable($uploadDirectory)){ - return array('error' => t('Server error. Upload directory isn't writable.')); + return array('error' => t('Server error. Upload directory isn\'t writable.')); } if (!$this->file){ @@ -192,7 +281,7 @@ class qqFileUploader { $pathinfo = pathinfo($this->file->getName()); $filename = $pathinfo['filename']; - //$filename = md5(uniqid()); + $ext = $pathinfo['extension']; if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){ @@ -3,7 +3,7 @@ set_time_limit(0); define ( 'BUILD_ID', 1033 ); -define ( 'FRIENDIKA_VERSION', '2.01.1006' ); +define ( 'FRIENDIKA_VERSION', '2.10.0901' ); define ( 'DFRN_PROTOCOL_VERSION', '2.0' ); define ( 'EOL', "<br />\r\n" ); diff --git a/mod/photos.php b/mod/photos.php index e811ca395..ecf5031b3 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1,5 +1,4 @@ <?php - require_once('include/Photo.php'); require_once('include/items.php'); require_once('include/acl_selectors.php'); @@ -49,9 +48,18 @@ function photos_init(&$a) { - function photos_post(&$a) { +logger('mod/photos.php: photos_post(): begin' , 'LOGGER_DEBUG'); + +foreach($_REQUEST AS $key => $val) { + logger('mod/photos.php: photos_post(): $_REQUEST key: ' . $key . ' val: ' . $val , 'LOGGER_DEBUG'); +} + +foreach($_FILES AS $key => $val) { + logger('mod/photos.php: photos_post(): $_FILES key: ' . $key . ' val: ' . $val , 'LOGGER_DEBUG'); +} + $can_post = false; $visitor = 0; @@ -466,18 +474,20 @@ function photos_post(&$a) { } - // default post action - upload a photo + /** + * default post action - upload a photo + */ - if(! x($_FILES,'userfile')) - killme(); + call_hooks('photo_post_init', $_POST); - if($_POST['partitionCount']) - $java_upload = true; - else - $java_upload = false; + /** + * Determine the album to use + */ + + $album = notags(trim($_REQUEST['album'])); + $newalbum = notags(trim($_REQUEST['newalbum'])); - $album = notags(trim($_POST['album'])); - $newalbum = notags(trim($_POST['newalbum'])); + logger('mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , 'LOGGER_DEBUG'); if(! strlen($album)) { if(strlen($newalbum)) @@ -486,6 +496,16 @@ function photos_post(&$a) { $album = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y'); } + /** + * + * We create a wall item for every photo, but we don't want to + * overwhelm the data stream with a hundred newly uploaded photos. + * So we will make one photo (the first one uploaded to this album) + * visible by default, the rest will become visible over time when and if + * they acquire comments, likes, dislikes, and/or tags + * + */ + $r = q("SELECT * FROM `photo` WHERE `album` = '%s' AND `uid` = %d", dbesc($album), intval($page_owner_uid) @@ -495,15 +515,25 @@ function photos_post(&$a) { else $visible = 0; + $str_group_allow = perms2str(((is_array($_REQUEST['group_allow'])) ? $_REQUEST['group_allow'] : explode(',',$_REQUEST['group_allow']))); + $str_contact_allow = perms2str(((is_array($_REQUEST['contact_allow'])) ? $_REQUEST['contact_allow'] : explode(',',$_REQUEST['contact_allow']))); + $str_group_deny = perms2str(((is_array($_REQUEST['group_deny'])) ? $_REQUEST['group_deny'] : explode(',',$_REQUEST['group_deny']))); + $str_contact_deny = perms2str(((is_array($_REQUEST['contact_deny'])) ? $_REQUEST['contact_deny'] : explode(',',$_REQUEST['contact_deny']))); - $str_group_allow = perms2str($_POST['group_allow']); - $str_contact_allow = perms2str($_POST['contact_allow']); - $str_group_deny = perms2str($_POST['group_deny']); - $str_contact_deny = perms2str($_POST['contact_deny']); + $ret = array('src' => '', 'filename' => '', 'filesize' => 0); - $src = $_FILES['userfile']['tmp_name']; - $filename = basename($_FILES['userfile']['name']); - $filesize = intval($_FILES['userfile']['size']); + call_hooks('photo_post_file',$ret); +logger('after post_file'); + if(x($ret,'src') && x($ret,'filesize')) { + $src = $ret['src']; + $filename = $ret['filename']; + $filesize = $ret['filesize']; + } + else { + $src = $_FILES['userfile']['tmp_name']; + $filename = basename($_FILES['userfile']['name']); + $filesize = intval($_FILES['userfile']['size']); + } $maximagesize = get_config('system','maximagesize'); @@ -513,10 +543,13 @@ function photos_post(&$a) { return; } + logger('mod/photos.php: photos_post(): loading the contents of ' . $src , 'LOGGER_DEBUG'); + $imagedata = @file_get_contents($src); $ph = new Photo($imagedata); if(! $ph->is_valid()) { + logger('mod/photos.php: photos_post(): unable to process image' , 'LOGGER_DEBUG'); notice( t('Unable to process image.') . EOL ); @unlink($src); killme(); @@ -524,7 +557,7 @@ function photos_post(&$a) { @unlink($src); - $width = $ph->getWidth(); + $width = $ph->getWidth(); $height = $ph->getHeight(); $smallest = 0; @@ -534,6 +567,7 @@ function photos_post(&$a) { $r = $ph->store($page_owner_uid, $visitor, $photo_hash, $filename, $album, 0 , 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); if(! $r) { + logger('mod/photos.php: photos_post(): image store failed' , 'LOGGER_DEBUG'); notice( t('Image upload failed.') . EOL ); killme(); } @@ -555,7 +589,6 @@ function photos_post(&$a) { // Create item container - $arr = array(); $arr['uid'] = $page_owner_uid; @@ -584,14 +617,13 @@ function photos_post(&$a) { $item_id = item_store($arr); - if(! $java_upload) { - goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']); - return; // NOTREACHED - } + call_hooks('photo_post_end',intval($item_id)); - killme(); - return; // NOTREACHED + // addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook + // if they do not wish to be redirected + goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']); + // NOTREACHED } @@ -737,6 +769,22 @@ function photos_content(&$a) { $celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false); $albumselect .= '</select>'; + + $uploader = ''; + + $ret = array('post_url' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'], + 'addon_text' => $uploader, + 'default_upload' => true); + + + call_hooks('photo_upload_form',$ret); + + $default_upload = '<input type="file" name="userfile" /> <div class="photos-upload-submit-wrapper" > + <input type="submit" name="submit" value="' . t('Submit') . '" id="photos-upload-submit" /> </div>'; + + + + $tpl = load_view_file('view/photos_upload.tpl'); $o .= replace_macros($tpl,array( '$pagename' => t('Upload Photos'), @@ -744,14 +792,16 @@ function photos_content(&$a) { '$nickname' => $a->data['user']['nickname'], '$newalbum' => t('New album name: '), '$existalbumtext' => t('or existing album name: '), - '$filestext' => t('Select files to upload: '), '$albumselect' => $albumselect, '$permissions' => t('Permissions'), '$aclselect' => (($visitor) ? '' : populate_acl($a->user, $celeb)), + '$uploader' => $ret['addon_text'], + '$filestext' => t('Select files to upload: '), '$archive' => $a->get_baseurl() . '/jumploader_z.jar', '$nojava' => t('Use the following controls only if the Java uploader [above] fails to launch.'), - '$uploadurl' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'], - '$submit' => t('Submit') + '$default' => (($ret['default_upload']) ? $default_upload : ''), + '$uploadurl' => $ret['post_url'] + )); return $o; @@ -1154,3 +1204,4 @@ function photos_content(&$a) { $o .= paginate($a); return $o; } + diff --git a/view/photos_upload.tpl b/view/photos_upload.tpl index 8a9dc3c68..490d4f220 100644 --- a/view/photos_upload.tpl +++ b/view/photos_upload.tpl @@ -23,41 +23,12 @@ </div> - <div id="photos-upload-select-files-text">$filestext</div> - - <div id="photos_upload_applet_wrapper"> - <applet name="jumpLoaderApplet" - code="jmaster.jumploader.app.JumpLoaderApplet.class" - archive="$archive" - width="700" - height="600" - mayscript > - <param name="uc_uploadUrl" value="$uploadurl" /> - <param name="uc_uploadFormName" value="photos-upload-form" /> - <param name="gc_loggingLeveL" value="FATAL" /> - <param name="uc_fileParameterName" value="userfile" /> - <param name="uc_cookie" value="PHPSESSID=$sessid; path=/;" /> - <param name="vc_disableLocalFileSystem" value="false" /> - <param name="vc_uploadViewMenuBarVisible" value="false" /> - <param name="vc_mainViewFileListViewVisible" value="true" /> - <param name="vc_mainViewFileListViewHeightPercent" value="50" /> - <param name="vc_mainViewFileTreeViewVisible" value="true" /> - <param name="vc_mainViewFileTreeViewWidthPercent" value="35" /> - <param name="vc_lookAndFeel" value="system" /> - - </applet> - - </div> + <div id="photos_upload_spacer"></div> - <div id="photos-upload-no-java-message" > - $nojava - </div> + $uploader - <input type="file" name="userfile" /> + $default - <div class="photos-upload-submit-wrapper" > - <input type="submit" name="submit" value="$submit" id="photos-upload-submit" /> - </div> <div class="photos-upload-end" ></div> </form> |