From 059badecbc0be895c6165430e5096a9ab653027e Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Sat, 15 Mar 2014 14:56:18 -0300 Subject: Squashed 'mod/livestream/' content from commit 89d1f38 git-subtree-dir: mod/livestream git-subtree-split: 89d1f3877f241f34e3ed3baad3c9ee9a4fee79e7 --- README | 0 actions/delete.php | 15 +++ actions/new.php | 23 ++++ languages/en.php | 32 +++++ languages/es.php | 28 +++++ languages/it.php | 26 ++++ libraries.php | 133 +++++++++++++++++++++ manifest.xml | 16 +++ pages/livestream/delete.php | 17 +++ pages/livestream/list.php | 21 ++++ pages/livestream/new.php | 14 +++ pages/livestream/view.php | 23 ++++ start.php | 95 +++++++++++++++ views/default/delete.php | 37 ++++++ views/default/list.php | 15 +++ .../default/livestream/groupprofile_livestream.php | 32 +++++ views/default/new.php | 27 +++++ views/default/object/list.php | 14 +++ views/default/object/livestream.php | 38 ++++++ views/default/view.php | 50 ++++++++ 20 files changed, 656 insertions(+) create mode 100755 README create mode 100755 actions/delete.php create mode 100755 actions/new.php create mode 100755 languages/en.php create mode 100755 languages/es.php create mode 100755 languages/it.php create mode 100755 libraries.php create mode 100755 manifest.xml create mode 100755 pages/livestream/delete.php create mode 100755 pages/livestream/list.php create mode 100755 pages/livestream/new.php create mode 100755 pages/livestream/view.php create mode 100755 start.php create mode 100755 views/default/delete.php create mode 100755 views/default/list.php create mode 100755 views/default/livestream/groupprofile_livestream.php create mode 100755 views/default/new.php create mode 100755 views/default/object/list.php create mode 100755 views/default/object/livestream.php create mode 100755 views/default/view.php diff --git a/README b/README new file mode 100755 index 000000000..e69de29bb diff --git a/actions/delete.php b/actions/delete.php new file mode 100755 index 000000000..bd4757f55 --- /dev/null +++ b/actions/delete.php @@ -0,0 +1,15 @@ +pluginspath}livestream/libraries.php"; + + // get object guid from URL + $object_guid = get_input('stream_id'); + $container_name = livestream_get_container_name($object_guid); + + if(livestream_delete($object_guid)){ + forward('livestream/'.$container_name); + }else{ + elgg_echo ("livestream:internal_error"); + + } + +?> diff --git a/actions/new.php b/actions/new.php new file mode 100755 index 000000000..0deb95275 --- /dev/null +++ b/actions/new.php @@ -0,0 +1,23 @@ +pluginspath}livestream/libraries.php"; + + $params = Array(); + $params['title'] = get_input('title', ''); + $params['mediatype'] = get_input('mediatype', ''); + $params['src'] = get_input('src', ''); + $params['width'] = get_input('width', ''); + $params['height'] = get_input('height', ''); + + $params['owner_guid'] = page_owner(); + $params['container_guid'] = get_input('container_guid', ''); + + $myObject = livestream_addnew($params); + + if($myObject){ + $container = livestream_get_container($myObject); + forward('livestream/'.$container->username); + }else{ + elgg_echo ("livestream:internal_error"); + } + +?> diff --git a/languages/en.php b/languages/en.php new file mode 100755 index 000000000..b4be35123 --- /dev/null +++ b/languages/en.php @@ -0,0 +1,32 @@ + "New stream", + 'livestream:title' => "Title", + 'livestream:uri:help' => "Introduce an icecast stream url.", + 'livestream:src' => "URL Icecast", + 'livestream:width' => "W", + 'livestream:height' => "H", + 'livestream:save' => "Save", + 'livestream:back' => "Back", + 'livestream:livestream' => "Livestream", + 'livestream:enable' => "enable Livestream", + 'livestream:permission_denied' => 'operation not permitted', + 'livestream:internal_error' => 'Internal error', + 'livestream:error:delete' => 'Error while deleting a stream', + 'livestream:success:delete' => 'Stream deleted successfully', + 'livestream:delete' => 'Delete', + 'livestream:delete:ask' => 'Are you sure?', + 'livestream:viewall' => 'View all', + 'livestream:untitled' => 'Untitled', + 'livestream:type' => 'Type of stream', + 'livestream:group' => 'Group livestream', + 'livestream:error:notfound' => 'Stream not found' + +); + +add_translation('en', $labels); + +?> diff --git a/languages/es.php b/languages/es.php new file mode 100755 index 000000000..a4972cd2e --- /dev/null +++ b/languages/es.php @@ -0,0 +1,28 @@ + "Nuevo stream", + 'livestream:src' => "URL Icecast", + 'livestream:url:help' => "Introduce una url de stream icecast.", + 'livestream:width' => "W", + 'livestream:height' => "H", + 'livestream:title' => "Título", + 'livestream:save' => "Grabar", + 'livestream:back' => "Atrás", + 'livestream:livestream' => "Stream de video", + 'livestream:enable' => "activar Livestream", + 'livestream:permission_denied' => 'operacion no permitida', + 'livestream:internal_error' => 'Error interno', + 'livestream:error:delete' => 'Error borrando el stream', + 'livestream:success:delete' => 'Stream borrado', + 'livestream:delete' => 'Borrar', + 'livestream:delete:ask' => 'Seguro?', + 'livestream:viewall' => 'Ver todos' + +); + +add_translation('es', $labels); + +?> diff --git a/languages/it.php b/languages/it.php new file mode 100755 index 000000000..0ee755589 --- /dev/null +++ b/languages/it.php @@ -0,0 +1,26 @@ + "New stream", + 'livestream:src' => "URL", + 'livestream:width' => "W", + 'livestream:height' => "H", + 'livestream:save' => "Save", + 'livestream:back' => "Back", + 'livestream:livestream' => "Livestream", + 'livestream:enable' => "enable Livestream", + 'livestream:permission_denied' => 'operation not permitted', + 'livestream:internal_error' => 'Internal error', + 'livestream:error:delete' => 'Error while deleting a stream', + 'livestream:success:delete' => 'Stream deleted successfully', + 'livestream:delete' => 'Delete', + 'livestream:delete:ask' => 'Are you sure?', + 'livestream:viewall' => 'View all' + +); + +add_translation('it', $labels); + +?> diff --git a/libraries.php b/libraries.php new file mode 100755 index 000000000..ca46047aa --- /dev/null +++ b/libraries.php @@ -0,0 +1,133 @@ +subtype = "livestream"; + $object->access_id = 2; + + $object->save(); + + $object->title = $vals['title']; + $object->src = $vals['src']; + $object->width = $vals['width']; + $object->height = $vals['height']; + $object->mediatype = $vals['mediatype']; + + //needs to be implemented - depending to it needs to put 'autoplay' as string in the player + //template row, by now let's default to false + $object->autoplay = false; + + //ownership & container + $object->owner_guid = ($vals['owner_guid']) ? $vals['owner_guid'] : $object->owner_guid; + $object->container_guid = ($vals['container_guid']) ? $vals['container_guid'] : $object->owner_guid; + + //check permissions + + /** + * @todo verify that works with admin users + * if no add elgg_is_admin_user(get_loggedin_userid()) + */ + if(!$object->canEdit()){ + elgg_echo('livestream:permission_denied'); + $ret = false; + }else{ + $object->save(); + $ret = $object; + } + + return $ret; + +} + +function livestream_stream_setdefaults(&$stream_object){ + if(!$stream_object->title) $stream_object->title = elgg_echo("livestream:untitled"); + if(!$stream_object->mediatype) $stream_object->mediatype = 'video'; +} + +function livestream_get($object_guid) { + $object = get_entity($object_guid); + if($object === false){ + register_error(elgg_echo('livestream:error:notfound')); + }else{ + livestream_stream_setdefaults($object); + } + return $object; +} + +function livestream_get_owner($object){ + $owner = get_user($object->getOwner()); + + //if is not set, it's owned by root + //@todo make username configurable + if(!$owner) $owner = get_user_by_username('root'); + + return $owner; +} + +function livestream_delete($object_guid){ + $object = new ElggObject($object_guid); + + if(!$object_guid){ + register_error(elgg_echo('livestream:error:delete')); + return false; + } + + //check permissions + /** + * @todo verify that works with admin users + * if no add elgg_is_admin_user(get_loggedin_userid()) + */ + if(!$object->canEdit()){ + register_error(elgg_echo('livestream:error:delete')); + elgg_echo('livestream:permission_denied'); + $ret = false; + }else{ + $ret = $object->delete(); + } + + return $ret; +} + +function livestream_gettypes(){ + return Array( + 'audio' => 'audio', + 'video' => 'video' + ); +} + +function deleteall(){ + $page_owner = page_owner_entity(); + + $data = elgg_get_entities(array( + 'type' => 'object', + 'subtype' => 'livestream', + 'container_guids' => Array($page_owner->guid) + )); + + foreach($data as $x => $item){ + if(!livestream_delete($item->guid)) { + //do something + return false; + } + } + return true; +} + +function livestream_get_container_name($object_guid){ + $myObject = livestream_get($object_guid); + $container = livestream_get_container($myObject); + return $container->username; +} + +function livestream_get_container($myObject){ + if ($myObject->container_guid){ + $container = get_entity($myObject->container_guid); + }else{ + $container = get_entity($myObject->owner_guid); + } + return $container; +} + +function livestream_user_has_access(){ + return (isloggedin() && can_write_to_container(get_loggedin_userid(), $page_owner->guid, 'livestream')); +} +?> \ No newline at end of file diff --git a/manifest.xml b/manifest.xml new file mode 100755 index 000000000..3fe112d14 --- /dev/null +++ b/manifest.xml @@ -0,0 +1,16 @@ + + + Livestream + laxertu + 1.8 + bundled + content + widget + Elgg Giss Livestream interface + https://n-1.cc/profile/laxertu + GNU Public License version 2 + + elgg_version + 2010030101 + + diff --git a/pages/livestream/delete.php b/pages/livestream/delete.php new file mode 100755 index 000000000..b84b1079b --- /dev/null +++ b/pages/livestream/delete.php @@ -0,0 +1,17 @@ +wwwroot."livestream/".$page_owner->username."/new/"); +} + +//render +$body = elgg_view('delete', Array('streamid' => get_input('streamid', ''))); +$layout_canvas = "two_column_left_sidebar"; +$layout_view = elgg_view_layout($layout_canvas, '', $body); + +page_draw($title, $layout_view); +?> diff --git a/pages/livestream/list.php b/pages/livestream/list.php new file mode 100755 index 000000000..82a1c8722 --- /dev/null +++ b/pages/livestream/list.php @@ -0,0 +1,21 @@ +wwwroot."livestream/".$page_owner->username."/new/"); + add_submenu_item(elgg_echo('livestream:viewall'), $CONFIG->wwwroot."livestream/"); +} + + + +//render +$body = elgg_view('list'); +$layout_canvas = "two_column_left_sidebar"; +$layout_view = elgg_view_layout($layout_canvas, '', $body); + +page_draw($title, $layout_view); +?> diff --git a/pages/livestream/new.php b/pages/livestream/new.php new file mode 100755 index 000000000..eaa61dda8 --- /dev/null +++ b/pages/livestream/new.php @@ -0,0 +1,14 @@ +url."livestream/new/" ); +/* +$menu_properties = Array( + 'name' => 'livestream_menu_new' + ,'text' => elgg_echo("livestream:new_item")); +if (!elgg_register_menu_item('livestream_menu_new', $menu_properties)) echo "acc"; +*/ +$body = elgg_view('new'); +$layout_canvas = "two_column_left_sidebar"; +$layout_view = elgg_view_layout($layout_canvas, '', $body); + +page_draw($title, $layout_view); +?> \ No newline at end of file diff --git a/pages/livestream/view.php b/pages/livestream/view.php new file mode 100755 index 000000000..e6842416a --- /dev/null +++ b/pages/livestream/view.php @@ -0,0 +1,23 @@ +wwwroot."livestream/".$page_owner->username."/new/"); + add_submenu_item(elgg_echo('livestream:delete'), $CONFIG->wwwroot."livestream/".$page_owner->username."/delete/".$stream_id); +} + + + +//render +$body = elgg_view('view', Array('streamid' => get_input('streamid', ''))); +$layout_canvas = "two_column_left_sidebar"; +$layout_view = elgg_view_layout($layout_canvas, '', $body); + +page_draw($title, $layout_view); +?> diff --git a/start.php b/start.php new file mode 100755 index 000000000..826c360d7 --- /dev/null +++ b/start.php @@ -0,0 +1,95 @@ +pluginspath}livestream/libraries.php"; + + + function livestream_init() + { + global $CONFIG; + + // require libraries + require_once "{$CONFIG->pluginspath}livestream/libraries.php"; + + register_page_handler('livestream','livestream_page_handler'); + + //enable for groups + add_group_tool_option('groups',elgg_echo('livestream:enable'),true); + + //put in group hp + elgg_extend_view('groups/right_column', 'livestream/groupprofile_livestream'); + + + if (isloggedin()) + { + add_menu(elgg_echo('livestream:livestream'), $CONFIG->wwwroot . "livestream/" . $page_owner->username); + } + + register_elgg_event_handler('pagesetup','system','livestream_pagesetup'); + //actions + register_action("livestream/new", false, $CONFIG->pluginspath . "livestream/actions/new.php"); + register_action("livestream/delete", false, $CONFIG->pluginspath . "livestream/actions/delete.php"); + + + } + + function livestream_pagesetup(){ + global $CONFIG; + + //Link to group items if comes form group environment + $page_owner = page_owner_entity(); + + if ($page_owner instanceof ElggGroup && (get_context() == 'groups' || get_context() == 'group_profile')) { + add_submenu_item(elgg_echo("livestream:livestream"), $CONFIG->url ."livestream/". $page_owner->username ); + } + + //tools menu item + $logged_user = get_loggedin_user(); + if($logged_user){ + add_menu(elgg_echo('livestream:livestream'), $CONFIG->wwwroot . "livestream/" . $logged_user->username); + } + } + + function livestream_page_handler($page) + { + global $_CONFIG; + + if (isset($page[0]) && $page[0]) { + set_input('username',$page[0]); + } + + if (isset($page[1]) && $page[1]) { + switch($page[1]){ + case 'new': + include(dirname(__FILE__) . "/pages/livestream/new.php"); + break; + case 'view': + set_input('username', $page[0]); + set_input('streamid', $page[2]); + + include(dirname(__FILE__) . "/pages/livestream/view.php"); + break; + case 'delete': + set_input('username', $page[0]); + set_input('streamid', $page[2]); + + include(dirname(__FILE__) . "/pages/livestream/delete.php"); + break; + + default: + include(dirname(__FILE__) . "/pages/livestream/list.php"); + break; + } + }else{ + include(dirname(__FILE__) . "/pages/livestream/list.php"); + } + + return true; + } + + register_elgg_event_handler('init','system','livestream_init'); + +?> diff --git a/views/default/delete.php b/views/default/delete.php new file mode 100755 index 000000000..b6121e9ce --- /dev/null +++ b/views/default/delete.php @@ -0,0 +1,37 @@ + +
+
+ +

+ +

+ + +guid){ + echo elgg_view( + 'input/hidden', + array( + 'internalname' => 'stream_id', + 'options_values' => $options, + 'value' => $item->guid + ) + ); + } +?> + +

+ +
+
diff --git a/views/default/list.php b/views/default/list.php new file mode 100755 index 000000000..a5b10465e --- /dev/null +++ b/views/default/list.php @@ -0,0 +1,15 @@ + 'object', + 'subtype' => 'livestream', + 'container_guids' => Array($page_owner->guid), + 'offset' => $offset, + 'limit' => 4 +); + +echo elgg_list_entities($options); + +?> \ No newline at end of file diff --git a/views/default/livestream/groupprofile_livestream.php b/views/default/livestream/groupprofile_livestream.php new file mode 100755 index 000000000..6cb8378a9 --- /dev/null +++ b/views/default/livestream/groupprofile_livestream.php @@ -0,0 +1,32 @@ + 'object', + 'subtype' => 'livestream', + 'container_guid' => elgg_get_page_owner_guid(), + 'limit' => 6, + 'full_view' => false, + 'pagination' => false, +); + + +$content = elgg_list_entities($options); +$new_link = elgg_view('output/url', array( + 'href' => $CONFIG->wwwroot.'livestream/'.$page_owner->username.'/new/', + 'text' => elgg_echo('livestream:new_item'), +)); +$viewall_link = elgg_view('output/url', array( + 'href' => $CONFIG->wwwroot . "livestream/" . $page_owner->username, + 'text' => elgg_echo('livestream:viewall'), +)); + +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('livestream:group'), + 'content' => $content, + 'add_link' => $new_link, + 'all_link' => $viewall_link +)); + + +?> diff --git a/views/default/new.php b/views/default/new.php new file mode 100755 index 000000000..e318f70fd --- /dev/null +++ b/views/default/new.php @@ -0,0 +1,27 @@ +".elgg_view('input/text', array('internalname' => 'title', 'value' => ''))."
"; + $form_body.= elgg_echo("livestream:type")."
".elgg_view('input/radio', array('internalname' => 'mediatype', 'value' => '', 'options' => livestream_gettypes()))."
"; + $form_body.= elgg_echo("livestream:src").elgg_view('input/text', array('internalname' => 'src', 'value' => ''))."
"; + $form_body.= elgg_echo("livestream:width").elgg_view('input/text', array('internalname' => 'width', 'value' => '80'))."
"; + $form_body.= elgg_echo("livestream:height").elgg_view('input/text', array('internalname' => 'height', 'value' => '50'))."
"; + $form_body.= elgg_view( + 'input/hidden', + array( + 'internalname' => 'container_guid', + 'options_values' => $options, + 'value' => $vars['entity']->container_id?(int)$vars['entity']->container_id : page_owner() + ) + ); + $form_body.= ""; + echo elgg_view('input/form', array('body' => $form_body, 'action' => $vars['url']."action/livestream/new")); + + //$object = new ElggObject(); +?> diff --git a/views/default/object/list.php b/views/default/object/list.php new file mode 100755 index 000000000..9ab6789bd --- /dev/null +++ b/views/default/object/list.php @@ -0,0 +1,14 @@ + +
+ wwwroot."livestream/".$owner->username."/view/".$item->guid."\">".$item->title." + + "; + + echo elgg_echo($row); + +?> diff --git a/views/default/object/livestream.php b/views/default/object/livestream.php new file mode 100755 index 000000000..ea500aa10 --- /dev/null +++ b/views/default/object/livestream.php @@ -0,0 +1,38 @@ +guid); + + +//foreach($data as $x => $item){ + $src = $item->src; + + $owner = livestream_get_owner($item); + + /* the following html code raises this funny notice + * + * NOTICE: SELECT e.* from elgg_users_entity u join elgg_entities e on e.guid=u.guid where + * + * u.username='com.fluendo.player.Cortado.class' + * + * and ( (e.access_id = -2\n\t\t\tAND e.owner_guid + * IN (\n\t\t\t\tSELECT guid_one FROM + * elgg_entity_relationships\n\t\t\t\tWHERE relationship='friend' AND guid_two=6\n\t\t\t)) + * OR (e.access_id IN (2,1,4,5,6)\n\t\t\tOR (e.owner_guid = 6)\n\t\t\tOR + * (\n\t\t\t\te.access_id = 0\n\t\t\t\tAND e.owner_guid = 6\n\t\t\t)\n\t\t) + * and e.enabled='yes') results cached, referer: + * http://localhost/lorea/elgg/livestream/alice + * + * */ + + $player = "wwwroot."livestream/".$owner->username."/view/".$item->guid."\">".$item->title.""; + + $row = " +
+ $player +
+ "; + + + echo elgg_echo($row); +//} + +?> diff --git a/views/default/view.php b/views/default/view.php new file mode 100755 index 000000000..4c13dfbab --- /dev/null +++ b/views/default/view.php @@ -0,0 +1,50 @@ +src; + /* the following html code raises this funny notice + * + * NOTICE: SELECT e.* from elgg_users_entity u join elgg_entities e on e.guid=u.guid where + * + * u.username='com.fluendo.player.Cortado.class' + * + * and ( (e.access_id = -2\n\t\t\tAND e.owner_guid + * IN (\n\t\t\t\tSELECT guid_one FROM + * elgg_entity_relationships\n\t\t\t\tWHERE relationship='friend' AND guid_two=6\n\t\t\t)) + * OR (e.access_id IN (2,1,4,5,6)\n\t\t\tOR (e.owner_guid = 6)\n\t\t\tOR + * (\n\t\t\t\te.access_id = 0\n\t\t\t\tAND e.owner_guid = 6\n\t\t\t)\n\t\t) + * and e.enabled='yes') results cached, referer: + * http://localhost/lorea/elgg/livestream/alice + * + * */ + + $autoplay = ($item->autoplay) ? "autoplay" : ""; + + $row = " +
+ $item->title
+ +
+
+ "; + + echo elgg_echo($row); +} + + +?> -- cgit v1.2.3