Browse Source

Merge branch 'v2-develop' into v2-develop

causefx 8 years ago
parent
commit
717b1a1723
4 changed files with 85 additions and 4 deletions
  1. 33 0
      api/functions/organizr-functions.php
  2. 13 0
      api/index.php
  3. 9 1
      api/pages/settings-tab-editor-tabs.php
  4. 30 3
      js/custom.js

+ 33 - 0
api/functions/organizr-functions.php

@@ -1319,3 +1319,36 @@ function plexJoin($username, $email, $password)
 	};
 	return false;
 }
+
+function checkFrame($array, $url)
+{
+	if (array_key_exists("x-frame-options", $array)) {
+		if ($array['x-frame-options'] == "deny") {
+			return false;
+		} elseif ($array['x-frame-options'] == "sameorgin") {
+			$digest = parse_url($url);
+			$host = (isset($digest['host']) ? $digest['host'] : '');
+			if (getServer() == $host) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+	} else {
+		if (!$array) {
+			return false;
+		}
+		return true;
+	}
+}
+
+function frameTest($url)
+{
+	$array = array_change_key_case(get_headers(qualifyURL($url), 1));
+	$url = qualifyURL($url);
+	if (checkFrame($array, $url)) {
+		return true;
+	} else {
+		return false;
+	}
+}

+ 13 - 0
api/index.php

@@ -644,6 +644,19 @@ switch ($function) {
 				break;
 		}
 		break;
+	case 'v1_test_iframe':
+		switch ($method) {
+			case 'POST':
+				$result['status'] = 'success';
+				$result['statusText'] = 'success';
+				$result['data'] = frameTest($_POST['data']['url']);
+				break;
+			default:
+				$result['status'] = 'error';
+				$result['statusText'] = 'The function requested is not defined for method: ' . $method;
+				break;
+		}
+		break;
 	case 'v1_upgrade':
 	case 'v1_update':
 	case 'v1_force':

+ 9 - 1
api/pages/settings-tab-editor-tabs.php

@@ -1,5 +1,4 @@
 <?php
-
 $pageSettingsTabEditorTabs = '
 <script>
 buildTabEditor();
@@ -44,6 +43,14 @@ $( \'#tabEditorTable\' ).sortable({
 <form id="new-tab-form" class="mfp-hide white-popup-block mfp-with-anim">
     <h1 lang="en">Add New Tab</h1>
     <fieldset style="border:0;">
+    	<div class="alert alert-success alert-dismissable tabTestMessage hidden">
+        	<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+        	<span lang="en">Tab can be set as iFrame</span>
+        </div>
+        <div class="alert alert-danger alert-dismissable tabTestMessage hidden">
+        	<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+        	<span lang="en">Please set tab as [New Window] on next screen</span>
+        </div>
         <div class="form-group">
             <label class="control-label" for="new-tab-form-inputNameNew" lang="en">Tab Name</label>
             <input type="text" class="form-control" id="new-tab-form-inputNameNew" name="tabName" required="" autofocus>
@@ -57,6 +64,7 @@ $( \'#tabEditorTable\' ).sortable({
             <input type="text" class="form-control" id="new-tab-form-inputImageNew" name="tabImage"  required="">
         </div>
     </fieldset>
+    <button class="btn btn-sm btn-info btn-rounded waves-effect waves-light row b-none testTab" type="button"><span class="btn-label"><i class="fa fa-flask"></i></span><span lang="en">Test Tab</span></button>
     <button class="btn btn-sm btn-info btn-rounded waves-effect waves-light pull-right row b-none addNewTab" type="button"><span class="btn-label"><i class="fa fa-plus"></i></span><span lang="en">Add Tab</span></button>
     <div class="clearfix"></div>
 </form>

+ 30 - 3
js/custom.js

@@ -212,9 +212,11 @@ function pageLoad(){
             },
             beforeClose: function () {
                 // Callback available since v0.9.0
-                if (!$.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').hasClass('hidden')) {
-                    var magIndex = $.magnificPopup.instance.currItem.index;
-                    message('You forgot to save', '<a class="mouse" onclick="$(\'.popup-with-form\').magnificPopup(\'open\',' + magIndex + ')">Would you like to go back?</a>', 'bottom-right', '#FFF', 'warning', '5000');
+                if($.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').length !== 0){
+                    if(!$.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').hasClass('hidden')){
+                        var magIndex = $.magnificPopup.instance.currItem.index;
+                        message('You forgot to save','<a class="mouse" onclick="$(\'.popup-with-form\').magnificPopup(\'open\','+magIndex+')">Would you like to go back?</a>','bottom-right','#FFF','warning','5000');
+                    }
                 }
             },
         }
@@ -1597,6 +1599,31 @@ $(document).on("click", ".downloader", function(e) {
     ajaxloader();
 
 });
+// test tab
+$(document).on("click", ".testTab", function () {
+    var input = $('#new-tab-form-inputURLNew');
+    if(input.val() == ''){
+        message('','Please enter a URL','bottom-right','#FFF','warning','5000');
+    }
+    if(input.val() !== ''){
+        var post = {
+            url:input.val()
+        }
+        organizrAPI('POST','api/?v1/test/iframe',post).success(function(data) {
+            var html = JSON.parse(data);
+            if(html.data == true){
+                $('.tabTestMessage.alert-success').removeClass('hidden');
+                $('.tabTestMessage.alert-danger').addClass('hidden');
+            }else{
+                $('.tabTestMessage.alert-danger').removeClass('hidden');
+                $('.tabTestMessage.alert-success').addClass('hidden');
+            }
+
+        }).fail(function(xhr) {
+            console.error("Organizr Function: Check Failed");
+        });
+    }
+});
 // new api key
 $(document).on("click", ".newAPIKey", function () {
     $('#settings-main-form [name=organizrAPI]').val(generateCode());