starting changes for v2
This commit is contained in:
		
							
								
								
									
										6
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="VcsDirectoryMappings">
 | 
			
		||||
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										201
									
								
								build.xml
									
									
									
									
									
								
							
							
						
						
									
										201
									
								
								build.xml
									
									
									
									
									
								
							@@ -1,18 +1,15 @@
 | 
			
		||||
<project default="all">
 | 
			
		||||
	<!--############# CONFIGURE ALL PROPERTIES FOR THE REPLACER HERE ################-->
 | 
			
		||||
	<property name="plugin_version" value="1.0.3"/>
 | 
			
		||||
	<!-- EOC -->
 | 
			
		||||
	
 | 
			
		||||
	<property name="root-folder" value="${basedir}/../"/>
 | 
			
		||||
	<property name="tools-folder" value="${root-folder}/TOOLS/"/>
 | 
			
		||||
	<property name="target-folder" value="${root-folder}/DEPLOY/plugins"/>
 | 
			
		||||
	<property environment="env"/>
 | 
			
		||||
	<property name="root-folder" value="${basedir}/../../"/>
 | 
			
		||||
	<property name="tools-folder" value="${root-folder}/tools/"/>
 | 
			
		||||
	<property name="target-folder" value="${root-folder}/deploy/plugins"/>
 | 
			
		||||
	<property name="server-folder" value="${root-folder}/server"/>
 | 
			
		||||
 | 
			
		||||
	<import file="${tools-folder}/antutil.xml"/>
 | 
			
		||||
 | 
			
		||||
	<typedef file="${tools-folder}/antlib.xml">
 | 
			
		||||
		<classpath>
 | 
			
		||||
			<pathelement location="${tools-folder}/tools.jar"/>
 | 
			
		||||
			<pathelement location="${tools-folder}/lib/compiler.jar"/>
 | 
			
		||||
		</classpath>
 | 
			
		||||
	</typedef>
 | 
			
		||||
 | 
			
		||||
@@ -21,30 +18,8 @@
 | 
			
		||||
			<pathelement location="${tools-folder}/lib/ant-contrib-1.0b3.jar"/>
 | 
			
		||||
		</classpath>
 | 
			
		||||
	</taskdef>
 | 
			
		||||
	
 | 
			
		||||
	<!-- os checks for xmllint... -->
 | 
			
		||||
	<condition property="isWindows" value="true">
 | 
			
		||||
		<os family="windows" />
 | 
			
		||||
	</condition>
 | 
			
		||||
	
 | 
			
		||||
	<!-- define nicknames for libraries -->
 | 
			
		||||
	<property name="yui-compressor" location="${tools-folder}/lib/yuicompressor-2.4.2.jar" />
 | 
			
		||||
	<property name="yui-compressor-ant-task" location="${tools-folder}/lib/yui-compressor-ant-task-0.5.jar" />
 | 
			
		||||
 | 
			
		||||
	<!-- adds libraries to the classpath -->
 | 
			
		||||
	<path id="yui.classpath">
 | 
			
		||||
		<pathelement location="${yui-compressor}" />
 | 
			
		||||
		<pathelement location="${yui-compressor-ant-task}" />
 | 
			
		||||
	</path>
 | 
			
		||||
 | 
			
		||||
	<!-- define tasks -->
 | 
			
		||||
	<taskdef name="yui-compressor" classname="net.noha.tools.ant.yuicompressor.tasks.YuiCompressorTask">
 | 
			
		||||
		<classpath refid="yui.classpath" />
 | 
			
		||||
	</taskdef>
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	<!-- Determine plugin name -->
 | 
			
		||||
	<var name="plugin" unset="true"/>
 | 
			
		||||
	<basename file="${basedir}" property="plugin"/>
 | 
			
		||||
 | 
			
		||||
	<!-- The Plugin distribution files -->
 | 
			
		||||
@@ -54,8 +29,7 @@
 | 
			
		||||
 | 
			
		||||
	<!-- The Plugin CSS files -->
 | 
			
		||||
	<property name="plugin-css-folder" value="resources/css"/>
 | 
			
		||||
	<property name="plugin-css-file" value="${plugin}-min.css"/>
 | 
			
		||||
	<property name="plugin-css-debug-file" value="${plugin}.css"/>
 | 
			
		||||
	<property name="plugin-css-file" value="${plugin}.css"/>
 | 
			
		||||
 | 
			
		||||
	<!-- Meta target -->
 | 
			
		||||
	<target name="all" depends="concat, compress"/>
 | 
			
		||||
@@ -68,16 +42,6 @@
 | 
			
		||||
				<include name="${plugin-file}"/>
 | 
			
		||||
				<include name="${plugin-debugfile}"/>
 | 
			
		||||
			</fileset>
 | 
			
		||||
			<fileset dir="${target-folder}/${plugin-folder}/php">
 | 
			
		||||
				<include name="**/*.php"/>
 | 
			
		||||
			</fileset>
 | 
			
		||||
			<fileset dir="${target-folder}/${plugin-folder}/resources">
 | 
			
		||||
				<include name="**/*"/>
 | 
			
		||||
			</fileset>
 | 
			
		||||
			<fileset dir="${target-folder}/${plugin-folder}/${plugin-css-folder}">
 | 
			
		||||
				<include name="${plugin-css-debug-file}"/>
 | 
			
		||||
				<include name="${plugin-css-file}"/>
 | 
			
		||||
			</fileset>
 | 
			
		||||
		</delete>
 | 
			
		||||
	</target>
 | 
			
		||||
 | 
			
		||||
@@ -89,19 +53,11 @@
 | 
			
		||||
			<then>
 | 
			
		||||
				<mkdir dir="${target-folder}/${plugin-folder}/js"/>
 | 
			
		||||
				<echo message="Concatenating: ${plugin-debugfile}"/>
 | 
			
		||||
				<!-- TODO: fix JS files for zConcat -->
 | 
			
		||||
				<!--zConcat outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-debugfile}" prioritize="\w+">
 | 
			
		||||
				<zConcat outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-debugfile}" prioritize="\w+">
 | 
			
		||||
					<concatfiles>
 | 
			
		||||
						<fileset dir="js" includes="**/*.js" />
 | 
			
		||||
					</concatfiles>
 | 
			
		||||
				</zConcat-->
 | 
			
		||||
				<concat destfile="${target-folder}/${plugin-folder}/js/${plugin-debugfile}">
 | 
			
		||||
					<fileset file="js/ABOUT.js" />
 | 
			
		||||
					<fileset file="js/plugin.contactimporter.js" />
 | 
			
		||||
					<fileset file="js/data/ResponseHandler.js" />
 | 
			
		||||
					<fileset file="js/dialogs/ImportContentPanel.js" />
 | 
			
		||||
					<fileset file="js/dialogs/ImportPanel.js" />
 | 
			
		||||
				</concat>
 | 
			
		||||
				</zConcat>
 | 
			
		||||
			</then>
 | 
			
		||||
		</if>
 | 
			
		||||
 | 
			
		||||
@@ -110,8 +66,8 @@
 | 
			
		||||
			<available file="${plugin-css-folder}" type="dir" />
 | 
			
		||||
			<then>
 | 
			
		||||
				<mkdir dir="${target-folder}/${plugin-folder}/${plugin-css-folder}"/>
 | 
			
		||||
				<echo message="Concatenating: ${plugin-css-debug-file}"/>
 | 
			
		||||
				<zConcat outputFolder="${target-folder}/${plugin-folder}/${plugin-css-folder}" outputFile="${plugin-css-debug-file}">
 | 
			
		||||
				<echo message="Concatenating: ${plugin-css-file}"/>
 | 
			
		||||
				<zConcat outputFolder="${target-folder}/${plugin-folder}/${plugin-css-folder}" outputFile="${plugin-css-file}">
 | 
			
		||||
					<concatfiles>
 | 
			
		||||
						<fileset dir="${plugin-css-folder}" includes="**/*.css" />
 | 
			
		||||
					</concatfiles>
 | 
			
		||||
@@ -155,16 +111,7 @@
 | 
			
		||||
						var npgettext = function(msgctxt, msgid, msgid_plural, count) {};
 | 
			
		||||
						var pgettext = function(msgctxt, msgid) {};
 | 
			
		||||
					</externs>
 | 
			
		||||
				</zCompile>				
 | 
			
		||||
				<!--yui-compressor 
 | 
			
		||||
					warn="false" 
 | 
			
		||||
					munge="true" 
 | 
			
		||||
					preserveallsemicolons="false" 
 | 
			
		||||
					fromdir="${target-folder}/${plugin-folder}/js" 
 | 
			
		||||
					todir="${target-folder}/${plugin-folder}/js">
 | 
			
		||||
 | 
			
		||||
				  <include name="${plugin-debugfile}" />
 | 
			
		||||
				</yui-compressor-->
 | 
			
		||||
				</zCompile>
 | 
			
		||||
			</then>
 | 
			
		||||
		</if>
 | 
			
		||||
	</target>
 | 
			
		||||
@@ -172,105 +119,81 @@
 | 
			
		||||
	<!-- syntax check all PHP files -->
 | 
			
		||||
	<target name="validate">
 | 
			
		||||
		<if>
 | 
			
		||||
			<available file="config.php" type="file" />
 | 
			
		||||
			<available file="php" filepath="${env.PATH}" />
 | 
			
		||||
			<then>
 | 
			
		||||
				<antcall target="syntax-check">
 | 
			
		||||
					<param name="file" value="config.php"/>
 | 
			
		||||
				</antcall>
 | 
			
		||||
			</then>
 | 
			
		||||
		</if>
 | 
			
		||||
		<if>
 | 
			
		||||
			<available file="php" type="dir" />
 | 
			
		||||
			<then>
 | 
			
		||||
				<foreach target="syntax-check" param="file">
 | 
			
		||||
					<path>
 | 
			
		||||
						<fileset dir=".">
 | 
			
		||||
							<include name="**/*.php"/>
 | 
			
		||||
						</fileset>
 | 
			
		||||
					</path>
 | 
			
		||||
				</foreach>
 | 
			
		||||
				<if>
 | 
			
		||||
					<available file="config.php" type="file" />
 | 
			
		||||
					<then>
 | 
			
		||||
						<antcall target="syntax-check">
 | 
			
		||||
							<param name="file" value="config.php"/>
 | 
			
		||||
						</antcall>
 | 
			
		||||
					</then>
 | 
			
		||||
				</if>
 | 
			
		||||
				<if>
 | 
			
		||||
					<available file="php" type="dir" />
 | 
			
		||||
					<then>
 | 
			
		||||
						<foreach target="syntax-check" param="file">
 | 
			
		||||
							<path>
 | 
			
		||||
								<fileset dir=".">
 | 
			
		||||
									<include name="**/*.php"/>
 | 
			
		||||
								</fileset>
 | 
			
		||||
							</path>
 | 
			
		||||
						</foreach>
 | 
			
		||||
					</then>
 | 
			
		||||
				</if>
 | 
			
		||||
			</then>
 | 
			
		||||
			<else>
 | 
			
		||||
				<echo message="WARNING: PHP not available, not performing syntax-check on php files"/>
 | 
			
		||||
			</else>
 | 
			
		||||
		</if>
 | 
			
		||||
	</target>
 | 
			
		||||
 | 
			
		||||
	<target name="syntax-check">
 | 
			
		||||
		<echo message="validating ${file}"/>
 | 
			
		||||
		<exec executable="php" failonerror="true" failifexecutionfails="false">
 | 
			
		||||
		<exec executable="php" failonerror="true">
 | 
			
		||||
			<arg value="-l"/>
 | 
			
		||||
			<arg value="${file}"/>
 | 
			
		||||
		</exec>
 | 
			
		||||
	</target>
 | 
			
		||||
	
 | 
			
		||||
	<!-- on windows we do not check the xml file -->
 | 
			
		||||
	<target name="xml-os-sel" depends="xml-check,xml-copy">
 | 
			
		||||
		<echo>Processing manifest.xml</echo>
 | 
			
		||||
	</target>
 | 
			
		||||
	
 | 
			
		||||
	<!-- check manifest.xml if we are on windows... -->
 | 
			
		||||
	<target name="xml-check" unless="isWindows">
 | 
			
		||||
		<echo message="Checking xml: manifest.xml" />
 | 
			
		||||
		<!-- Copy (and validate) manifest.xml -->
 | 
			
		||||
		<exec executable="xmllint" output="${target-folder}/${plugin-folder}/manifest.xml" failonerror="true" error="/dev/stdout" failifexecutionfails="false">
 | 
			
		||||
			<arg value="--valid"/>
 | 
			
		||||
			<arg value="--path"/>
 | 
			
		||||
			<arg value="${root-folder}/server"/>
 | 
			
		||||
			<arg value="manifest.xml"/>
 | 
			
		||||
		</exec>
 | 
			
		||||
	</target>
 | 
			
		||||
	
 | 
			
		||||
	<!-- check manifest.xml if we are on windows... -->
 | 
			
		||||
	<target name="xml-copy" if="isWindows">
 | 
			
		||||
		<echo message="Copying xml: manifest.xml" />
 | 
			
		||||
		<!-- Copy manifest.xml -->
 | 
			
		||||
		<copy todir="${target-folder}/${plugin-folder}">
 | 
			
		||||
			<fileset dir=".">
 | 
			
		||||
				<include name="manifest.xml"/>
 | 
			
		||||
			</fileset>
 | 
			
		||||
		</copy>
 | 
			
		||||
	</target>
 | 
			
		||||
 | 
			
		||||
	<!-- Install all files into the target folder -->
 | 
			
		||||
	<target name="deploy" depends="clean, compress, compresscss, validate, xml-os-sel">
 | 
			
		||||
	<target name="deploy" depends="compress, validate">
 | 
			
		||||
		<mkdir dir="${target-folder}/${plugin-folder}"/>
 | 
			
		||||
 | 
			
		||||
		<!-- Copy (and validate) manifest.xml -->
 | 
			
		||||
		<if>
 | 
			
		||||
			<available file="xmllint" filepath="${env.PATH}" />
 | 
			
		||||
			<then>
 | 
			
		||||
				<exec executable="xmllint" output="${target-folder}/${plugin-folder}/manifest.xml" failonerror="true">
 | 
			
		||||
					<arg value="--valid"/>
 | 
			
		||||
					<arg value="--path"/>
 | 
			
		||||
					<arg value="${server-folder}"/>
 | 
			
		||||
					<arg value="manifest.xml"/>
 | 
			
		||||
				</exec>
 | 
			
		||||
			</then>
 | 
			
		||||
			<else>
 | 
			
		||||
				<echo message="WARNING: xmllint not available, not performing syntax-check on manifest.xml"/>
 | 
			
		||||
				<!-- xmllint is not available, so we must copy the file manually -->
 | 
			
		||||
				<copy todir="${target-folder}/${plugin-folder}">
 | 
			
		||||
					<fileset dir=".">
 | 
			
		||||
						<include name="manifest.xml"/>
 | 
			
		||||
					</fileset>
 | 
			
		||||
				</copy>
 | 
			
		||||
			</else>
 | 
			
		||||
		</if>
 | 
			
		||||
 | 
			
		||||
		<!-- copy files -->
 | 
			
		||||
		<copy todir="${target-folder}/${plugin-folder}">
 | 
			
		||||
			<fileset dir=".">
 | 
			
		||||
				<include name="resources/**/*"/>
 | 
			
		||||
				<include name="resources/**/*.*"/>
 | 
			
		||||
				<include name="external/**/*.*"/>
 | 
			
		||||
				<include name="php/**/*.php"/>
 | 
			
		||||
				<include name="config.php"/>
 | 
			
		||||
				<include name="changelog.txt"/>
 | 
			
		||||
				<!-- exclude the ant script -->
 | 
			
		||||
				<exclude name="build.xml"/>
 | 
			
		||||
				<!-- CSS is generated during build -->
 | 
			
		||||
				<exclude name="resources/css/*.*"/>
 | 
			
		||||
			</fileset>
 | 
			
		||||
		</copy>
 | 
			
		||||
		
 | 
			
		||||
		<!-- replace all variables... -->
 | 
			
		||||
		<replace file="${target-folder}/${plugin-folder}/manifest.xml" token="@_@PLUGIN_VERSION@_@" value="${plugin_version}" />		
 | 
			
		||||
	</target>
 | 
			
		||||
	
 | 
			
		||||
	<!-- compresses each CSS file -->
 | 
			
		||||
	<target name="compresscss" depends="concat">
 | 
			
		||||
	
 | 
			
		||||
		<available file="${tools-folder}/lib/yui-compressor-ant-task-0.5.jar" property="YUIANT_AVAILABLE" />
 | 
			
		||||
		<fail unless="YUIANT_AVAILABLE" message="yui-compressor-ant-task-0.5.jar not found" />
 | 
			
		||||
		
 | 
			
		||||
		<if>
 | 
			
		||||
			<available file="${target-folder}/${plugin-folder}/${plugin-css-folder}/${plugin-css-debug-file}" type="file" />
 | 
			
		||||
			<then>
 | 
			
		||||
				<yui-compressor 
 | 
			
		||||
					warn="false" 
 | 
			
		||||
					munge="true" 
 | 
			
		||||
					preserveallsemicolons="false" 
 | 
			
		||||
					fromdir="${target-folder}/${plugin-folder}/${plugin-css-folder}" 
 | 
			
		||||
					todir="${target-folder}/${plugin-folder}/${plugin-css-folder}">
 | 
			
		||||
 | 
			
		||||
				  <include name="${plugin-css-debug-file}" />
 | 
			
		||||
				</yui-compressor>
 | 
			
		||||
			</then>
 | 
			
		||||
		</if>
 | 
			
		||||
	</target>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
</project>
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
	/** Disable the import plugin for all clients */
 | 
			
		||||
	define('PLUGIN_CONTACTIMPORTER_USER_DEFAULT_ENABLE', false);
 | 
			
		||||
	/** Disable the export feature for all clients */
 | 
			
		||||
	define('PLUGIN_CONTACTIMPORTER_USER_DEFAULT_ENABLE_EXPORT', false); // currently not available
 | 
			
		||||
	define('PLUGIN_CONTACTIMPORTER_USER_DEFAULT_ENABLE_EXPORT', false);
 | 
			
		||||
	
 | 
			
		||||
	/** The default addressbook to import to (default: contact)*/
 | 
			
		||||
	define('PLUGIN_CONTACTIMPORTER_DEFAULT', "contact");
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
 | 
			
		||||
		config = config || {};
 | 
			
		||||
		var self = this;
 | 
			
		||||
		
 | 
			
		||||
		if(typeof config.filename !== "undefined") {
 | 
			
		||||
		if(!Ext.isEmpty(config.filename)) {
 | 
			
		||||
			this.vcffile = config.filename;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
@@ -146,13 +146,13 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
 | 
			
		||||
			var i = 0;
 | 
			
		||||
			for(i = 0; i < contactdata.contacts.length; i++) {
 | 
			
		||||
				
 | 
			
		||||
				parsedData[i] = new Array(
 | 
			
		||||
				parsedData[i] = [
 | 
			
		||||
					contactdata.contacts[i]["display_name"],
 | 
			
		||||
					contactdata.contacts[i]["given_name"],
 | 
			
		||||
					contactdata.contacts[i]["surname"],
 | 
			
		||||
					contactdata.contacts[i]["company_name"],
 | 
			
		||||
					contactdata.contacts[i]
 | 
			
		||||
				);
 | 
			
		||||
				];
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			return null;
 | 
			
		||||
@@ -202,10 +202,10 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
 | 
			
		||||
		
 | 
			
		||||
		/* add all local contact folders */
 | 
			
		||||
		var i = 0;
 | 
			
		||||
		myStore.push(new Array(defaultFolder.getDefaultFolderKey(), defaultFolder.getDisplayName()));
 | 
			
		||||
		myStore.push([defaultFolder.getDefaultFolderKey(), defaultFolder.getDisplayName()]);
 | 
			
		||||
		for(i = 0; i < subFolders.length; i++) {
 | 
			
		||||
			/* Store all subfolders */
 | 
			
		||||
			myStore.push(new Array(subFolders[i].getDisplayName(), subFolders[i].getDisplayName(), false)); // 3rd field = isPublicfolder
 | 
			
		||||
			myStore.push([subFolders[i].getDisplayName(), subFolders[i].getDisplayName(), false]); // 3rd field = isPublicfolder
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/* add all shared contact folders */
 | 
			
		||||
@@ -217,7 +217,7 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
 | 
			
		||||
				var pubSubFolders = pubFolder.getChildren();
 | 
			
		||||
				for(i = 0; i < pubSubFolders.length; i++) {
 | 
			
		||||
					if(pubSubFolders[i].isContainerClass("IPF.Contact")){
 | 
			
		||||
						myStore.push(new Array(pubSubFolders[i].getDisplayName(), pubSubFolders[i].getDisplayName() + " [Shared]", true)); // 3rd field = isPublicfolder
 | 
			
		||||
						myStore.push([pubSubFolders[i].getDisplayName(), pubSubFolders[i].getDisplayName() + " [Shared]", true]); // 3rd field = isPublicfolder
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} catch (e) {
 | 
			
		||||
@@ -455,7 +455,7 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
 | 
			
		||||
 | 
			
		||||
				if(addressbookexist) {
 | 
			
		||||
					this.loadMask.show();
 | 
			
		||||
					var uids = new Array();
 | 
			
		||||
					var uids = [];
 | 
			
		||||
					var store_entryid = "";
 | 
			
		||||
					
 | 
			
		||||
					//receive Records from grid rows
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,7 @@ Zarafa.plugins.contactimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
 | 
			
		||||
		
 | 
			
		||||
		/* directly import received vcfs */
 | 
			
		||||
		this.registerInsertionPoint('common.contextmenu.attachment.actions', this.createAttachmentImportButton);
 | 
			
		||||
 | 
			
		||||
		/* add import button to south navigation */
 | 
			
		||||
		this.registerInsertionPoint("navigation.south", this.createImportButton, this);
 | 
			
		||||
	},
 | 
			
		||||
@@ -60,7 +61,6 @@ Zarafa.plugins.contactimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
 | 
			
		||||
	createImportButton: function () {
 | 
			
		||||
		var button = {
 | 
			
		||||
			xtype				: 'button',
 | 
			
		||||
			id		  			: "importcontactsbutton",
 | 
			
		||||
			text				: _('Import Contacts'),
 | 
			
		||||
			iconCls				: 'icon_contactimporter_button',
 | 
			
		||||
			navigationContext	: container.getContextByName('contact'),
 | 
			
		||||
@@ -90,9 +90,9 @@ Zarafa.plugins.contactimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
 | 
			
		||||
				var extension = record.data.name.split('.').pop().toLowerCase();
 | 
			
		||||
				
 | 
			
		||||
				if(record.data.filetype  == "text/vcard" || extension == "vcf" || extension == "vcard") {
 | 
			
		||||
					item.setDisabled(false);
 | 
			
		||||
					item.setVisible(false);
 | 
			
		||||
				} else {
 | 
			
		||||
					item.setDisabled(true);
 | 
			
		||||
					item.setVisible(true);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
@@ -103,10 +103,7 @@ Zarafa.plugins.contactimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
 | 
			
		||||
	 */
 | 
			
		||||
	gotAttachmentFileName: function(response) {
 | 
			
		||||
		if(response.status == true) {
 | 
			
		||||
			Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.contactimporter.dialogs.importcontacts'], undefined, {
 | 
			
		||||
				manager : Ext.WindowMgr,
 | 
			
		||||
				filename : response.tmpname
 | 
			
		||||
			});
 | 
			
		||||
			this.openImportDialog(response.tmpname);
 | 
			
		||||
		} else {
 | 
			
		||||
			Zarafa.common.dialogs.MessageBox.show({
 | 
			
		||||
				title   : _('Error'),
 | 
			
		||||
@@ -182,12 +179,23 @@ Zarafa.plugins.contactimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
 | 
			
		||||
	 * Clickhandler for the button
 | 
			
		||||
	 */
 | 
			
		||||
	onImportButtonClick: function () {
 | 
			
		||||
		Ext.getCmp("importcontactsbutton").disable();
 | 
			
		||||
		Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.contactimporter.dialogs.importcontacts'], undefined, {
 | 
			
		||||
			manager : Ext.WindowMgr
 | 
			
		||||
		});
 | 
			
		||||
		this.openImportDialog();
 | 
			
		||||
	},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Open the import dialog.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param {String} filename
 | 
			
		||||
     */
 | 
			
		||||
	openImportDialog: function(filename) {
 | 
			
		||||
		var componentType = Zarafa.core.data.SharedComponentType['plugins.contactimporter.dialogs.importcontacts'];
 | 
			
		||||
		var config = {
 | 
			
		||||
			filename: filename
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		Zarafa.core.data.UIFactory.openLayerComponent(componentType, undefined, config);
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Bid for the type of shared component
 | 
			
		||||
	 * and the given record.
 | 
			
		||||
@@ -200,7 +208,7 @@ Zarafa.plugins.contactimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
 | 
			
		||||
		var bid = -1;
 | 
			
		||||
		switch(type) {
 | 
			
		||||
			case Zarafa.core.data.SharedComponentType['plugins.contactimporter.dialogs.importcontacts']:
 | 
			
		||||
				bid = 2;
 | 
			
		||||
				bid = 1;
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		return bid;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
<!DOCTYPE plugin SYSTEM "manifest.dtd">
 | 
			
		||||
<plugin version="2">
 | 
			
		||||
	<info>
 | 
			
		||||
		<version>@_@PLUGIN_VERSION@_@</version>
 | 
			
		||||
		<version>2.0.0</version>
 | 
			
		||||
		<name>contactimporter</name>
 | 
			
		||||
		<title>VCF Contact Importer/Exporter</title>
 | 
			
		||||
		<author>Christoph Haas</author>
 | 
			
		||||
@@ -24,6 +24,7 @@
 | 
			
		||||
					<clientfile load="debug">js/contactimporter-debug.js</clientfile>
 | 
			
		||||
					
 | 
			
		||||
					<clientfile load="source">js/plugin.contactimporter.js</clientfile>
 | 
			
		||||
					<clientfile load="source">js/ABOUT.js</clientfile>
 | 
			
		||||
					<clientfile load="source">js/data/ResponseHandler.js</clientfile>
 | 
			
		||||
					<clientfile load="source">js/dialogs/ImportContentPanel.js</clientfile>
 | 
			
		||||
					<clientfile load="source">js/dialogs/ImportPanel.js</clientfile>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,8 @@
 | 
			
		||||
 * @link https://github.com/nuovo/vCard-parser
 | 
			
		||||
 * @author Martins Pilsetnieks, Roberts Bruveris
 | 
			
		||||
 * @see RFC 2426, RFC 2425
 | 
			
		||||
 * @version 0.4.8
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 * @version 0.4.9
 | 
			
		||||
 */
 | 
			
		||||
class vCard implements Countable, Iterator
 | 
			
		||||
{
 | 
			
		||||
	const MODE_ERROR = 'error';
 | 
			
		||||
@@ -42,15 +41,15 @@ class vCard implements Countable, Iterator
 | 
			
		||||
	 * @static Parts of structured elements according to the spec.
 | 
			
		||||
	 */
 | 
			
		||||
	private static $Spec_StructuredElements = array(
 | 
			
		||||
		'n' => array('LastName', 'FirstName', 'AdditionalNames', 'Prefixes', 'Suffixes'),
 | 
			
		||||
		'adr' => array('POBox', 'ExtendedAddress', 'StreetAddress', 'Locality', 'Region', 'PostalCode', 'Country'),
 | 
			
		||||
		'geo' => array('Latitude', 'Longitude'),
 | 
			
		||||
		'org' => array('Name', 'Unit1', 'Unit2')
 | 
			
		||||
		'n' => array('lastname', 'firstname', 'additionalnames', 'prefixes', 'suffixes'),
 | 
			
		||||
		'adr' => array('pobox', 'extendedaddress', 'streetaddress', 'locality', 'region', 'postalcode', 'country'),
 | 
			
		||||
		'geo' => array('latitude', 'longitude'),
 | 
			
		||||
		'org' => array('name', 'unit1', 'unit2')
 | 
			
		||||
	);
 | 
			
		||||
	private static $Spec_MultipleValueElements = array('nickname', 'categories');
 | 
			
		||||
 | 
			
		||||
	private static $Spec_ElementTypes = array(
 | 
			
		||||
		'email' => array('internet', 'x400', 'pref'),
 | 
			
		||||
		'email' => array('internet', 'x400', 'pref', 'home', 'work'),
 | 
			
		||||
		'adr' => array('dom', 'intl', 'postal', 'parcel', 'home', 'work', 'pref'),
 | 
			
		||||
		'label' => array('dom', 'intl', 'postal', 'parcel', 'home', 'work', 'pref'),
 | 
			
		||||
		'tel' => array('home', 'msg', 'work', 'pref', 'voice', 'fax', 'cell', 'video', 'pager', 'bbs', 'modem', 'car', 'isdn', 'pcs'),
 | 
			
		||||
@@ -121,21 +120,26 @@ class vCard implements Countable, Iterator
 | 
			
		||||
		$this -> Mode = $vCardBeginCount == 1 ? vCard::MODE_SINGLE : vCard::MODE_MULTIPLE;
 | 
			
		||||
 | 
			
		||||
		// Removing/changing inappropriate newlines, i.e., all CRs or multiple newlines are changed to a single newline
 | 
			
		||||
		$this -> RawData = str_replace("\r", "\n", $this -> RawData);
 | 
			
		||||
		$this -> RawData = preg_replace('{(\n+)}', "\n", $this -> RawData);
 | 
			
		||||
 | 
			
		||||
		// MCA: removed, this break crlf vcard specification, all line dilimiter are CRLF
 | 
			
		||||
		//$this -> RawData = str_replace("\r", "\n", $this -> RawData);
 | 
			
		||||
		//$this -> RawData = preg_replace('{(\n)+}', "\n", $this -> RawData);
 | 
			
		||||
 | 
			
		||||
		// In multiple card mode the raw text is split at card beginning markers and each
 | 
			
		||||
		//	fragment is parsed in a separate vCard object.
 | 
			
		||||
		if ($this -> Mode == self::MODE_MULTIPLE)
 | 
			
		||||
		{
 | 
			
		||||
			$this -> RawData = explode('BEGIN:VCARD', $this -> RawData);
 | 
			
		||||
			//Cannot use "explode", because we need to ignore, for example, 'AGENT:BEGIN:VCARD'
 | 
			
		||||
			$this -> RawData = preg_split('{^BEGIN\:VCARD}miS', $this -> RawData);
 | 
			
		||||
			$this -> RawData = array_filter($this -> RawData);
 | 
			
		||||
 | 
			
		||||
			foreach ($this -> RawData as $SinglevCardRawData)
 | 
			
		||||
			{
 | 
			
		||||
				// mca: remove \n and \r at start
 | 
			
		||||
				//$SinglevCardRawData=ltrim($SinglevCardRawData);
 | 
			
		||||
				// Prepending "BEGIN:VCARD" to the raw string because we exploded on that one.
 | 
			
		||||
				// If there won't be the BEGIN marker in the new object, it will fail.
 | 
			
		||||
				$SinglevCardRawData = 'BEGIN:VCARD'."\n".$SinglevCardRawData;
 | 
			
		||||
				$SinglevCardRawData = 'BEGIN:VCARD'.$SinglevCardRawData;
 | 
			
		||||
 | 
			
		||||
				$ClassName = get_class($this);
 | 
			
		||||
				$this -> Data[] = new $ClassName(false, $SinglevCardRawData);
 | 
			
		||||
@@ -143,20 +147,20 @@ class vCard implements Countable, Iterator
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// Protect the BASE64 final = sign (detected by the line beginning with whitespace), otherwise the next replace will get rid of it
 | 
			
		||||
			$this -> RawData = preg_replace('{(\n\s.+)=(\n)}', '$1-base64=-$2', $this -> RawData);
 | 
			
		||||
 | 
			
		||||
			// Joining multiple lines that are split with a hard wrap and indicated by an equals sign at the end of line
 | 
			
		||||
			// (quoted-printable-encoded values in v2.1 vCards)
 | 
			
		||||
			$this -> RawData = str_replace("=\n", '', $this -> RawData);
 | 
			
		||||
			$this -> RawData = str_replace("=\r\n", '', $this -> RawData);
 | 
			
		||||
 | 
			
		||||
			// Protect the BASE64 final = sign (detected by the line beginning with whitespace), otherwise the next replace will get rid of it
 | 
			
		||||
			$this -> RawData = preg_replace('{(\r\n\s.+)=(\r\n)}', '$1-base64=-$2', $this -> RawData);
 | 
			
		||||
 | 
			
		||||
			// Joining multiple lines that are split with a soft wrap (space or tab on the beginning of the next line
 | 
			
		||||
			$this -> RawData = str_replace(array("\n ", "\n\t"), '-wrap-', $this -> RawData);
 | 
			
		||||
			$this -> RawData = str_replace(array("\r\n ", "\r\n\t"), '-wrap-', $this -> RawData);
 | 
			
		||||
 | 
			
		||||
			// Restoring the BASE64 final equals sign (see a few lines above)
 | 
			
		||||
			$this -> RawData = str_replace("-base64=-\n", "=\n", $this -> RawData);
 | 
			
		||||
			$this -> RawData = str_replace("-base64=-\r\n", "=\r\n", $this -> RawData);
 | 
			
		||||
 | 
			
		||||
			$Lines = explode("\n", $this -> RawData);
 | 
			
		||||
			$Lines = explode("\r\n", $this -> RawData);
 | 
			
		||||
 | 
			
		||||
			foreach ($Lines as $Line)
 | 
			
		||||
			{
 | 
			
		||||
@@ -212,6 +216,7 @@ class vCard implements Countable, Iterator
 | 
			
		||||
					$ItemIndex = (int)str_ireplace('item', '', $TmpKey[0]);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				if (count($KeyParts) > 1)
 | 
			
		||||
				{
 | 
			
		||||
					$Parameters = self::ParseParameters($Key, array_slice($KeyParts, 1));
 | 
			
		||||
@@ -262,7 +267,7 @@ class vCard implements Countable, Iterator
 | 
			
		||||
					$Value = self::ParseStructuredValue($Value, $Key);
 | 
			
		||||
					if ($Type)
 | 
			
		||||
					{
 | 
			
		||||
						$Value['Type'] = $Type;
 | 
			
		||||
						$Value['type'] = $Type;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
@@ -275,15 +280,15 @@ class vCard implements Countable, Iterator
 | 
			
		||||
					if ($Type)
 | 
			
		||||
					{
 | 
			
		||||
						$Value = array(
 | 
			
		||||
							'Value' => $Value,
 | 
			
		||||
							'Type' => $Type
 | 
			
		||||
							'value' => $Value,
 | 
			
		||||
							'type' => $Type
 | 
			
		||||
						);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (is_array($Value) && $Encoding)
 | 
			
		||||
				{
 | 
			
		||||
					$Value['Encoding'] = $Encoding;
 | 
			
		||||
					$Value['encoding'] = $Encoding;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (!isset($this -> Data[$Key]))
 | 
			
		||||
@@ -296,6 +301,22 @@ class vCard implements Countable, Iterator
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * method to get key list of the current vcard
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return array list of key
 | 
			
		||||
	 */
 | 
			
		||||
	public function getKeyList()
 | 
			
		||||
	{
 | 
			
		||||
		$keylist=array();
 | 
			
		||||
		if (isset($this -> Data))
 | 
			
		||||
		{
 | 
			
		||||
			foreach($this -> Data as $key => $val)
 | 
			
		||||
				$keylist[]=$key;
 | 
			
		||||
		}
 | 
			
		||||
		return $keylist;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Magic method to get the various vCard values as object members, e.g.
 | 
			
		||||
	 *	a call to $vCard -> N gets the "N" value
 | 
			
		||||
@@ -318,10 +339,10 @@ class vCard implements Countable, Iterator
 | 
			
		||||
				$Value = $this -> Data[$Key];
 | 
			
		||||
				foreach ($Value as $K => $V)
 | 
			
		||||
				{
 | 
			
		||||
					if (stripos($V['Value'], 'uri:') === 0)
 | 
			
		||||
					if (isset($V['Value']) && stripos($V['Value'], 'uri:') === 0)
 | 
			
		||||
					{
 | 
			
		||||
						$Value[$K]['Value'] = substr($V, 4);
 | 
			
		||||
						$Value[$K]['Encoding'] = 'uri';
 | 
			
		||||
						$Value[$K]['value'] = substr($V, 4);
 | 
			
		||||
						$Value[$K]['encoding'] = 'uri';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				return $Value;
 | 
			
		||||
@@ -340,6 +361,20 @@ class vCard implements Countable, Iterator
 | 
			
		||||
		return array();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Magic method to check isset for the various vCard values as object members, e.g.
 | 
			
		||||
	 *	a call to isset( $vCard -> fn ) checks existence of a value.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string Key
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return bool isset
 | 
			
		||||
	 */
 | 
			
		||||
	public function __isset($Key) {
 | 
			
		||||
		$Key = strtolower($Key);
 | 
			
		||||
		$val = $this->$Key;
 | 
			
		||||
		return isset($val);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Saves an embedded file
 | 
			
		||||
	 *
 | 
			
		||||
@@ -361,15 +396,15 @@ class vCard implements Countable, Iterator
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Returing false if it is an image URL
 | 
			
		||||
		if (stripos($this -> Data[$Key][$Index]['Value'], 'uri:') === 0)
 | 
			
		||||
		if (stripos($this -> Data[$Key][$Index]['value'], 'uri:') === 0)
 | 
			
		||||
		{
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (is_writable($TargetPath) || (!file_exists($TargetPath) && is_writable(dirname($TargetPath))))
 | 
			
		||||
		{
 | 
			
		||||
			$RawContent = $this -> Data[$Key][$Index]['Value'];
 | 
			
		||||
			if (isset($this -> Data[$Key][$Index]['Encoding']) && $this -> Data[$Key][$Index]['Encoding'] == 'b')
 | 
			
		||||
			$RawContent = $this -> Data[$Key][$Index]['value'];
 | 
			
		||||
			if (isset($this -> Data[$Key][$Index]['encoding']) && $this -> Data[$Key][$Index]['encoding'] == 'b')
 | 
			
		||||
			{
 | 
			
		||||
				$RawContent = base64_decode($RawContent);
 | 
			
		||||
			}
 | 
			
		||||
@@ -404,10 +439,10 @@ class vCard implements Countable, Iterator
 | 
			
		||||
 | 
			
		||||
		if (count($Arguments) > 1)
 | 
			
		||||
		{
 | 
			
		||||
			$Types = array_values(array_slice($Arguments, 1));
 | 
			
		||||
			$Types = array_map('strtolower', array_values(array_slice($Arguments, 1)));
 | 
			
		||||
 | 
			
		||||
			if (isset(self::$Spec_StructuredElements[$Key]) &&
 | 
			
		||||
				in_array($Arguments[1], self::$Spec_StructuredElements[$Key])
 | 
			
		||||
				in_array(strtolower($Arguments[1]), self::$Spec_StructuredElements[$Key])
 | 
			
		||||
			)
 | 
			
		||||
			{
 | 
			
		||||
				$LastElementIndex = 0;
 | 
			
		||||
@@ -439,8 +474,8 @@ class vCard implements Countable, Iterator
 | 
			
		||||
			elseif (isset(self::$Spec_ElementTypes[$Key]))
 | 
			
		||||
			{
 | 
			
		||||
				$this -> Data[$Key][] = array(
 | 
			
		||||
					'Value' => $Value,
 | 
			
		||||
					'Type' => $Types
 | 
			
		||||
					'value' => $Value,
 | 
			
		||||
					'type' => $Types
 | 
			
		||||
				);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -475,9 +510,9 @@ class vCard implements Countable, Iterator
 | 
			
		||||
			foreach ($Values as $Index => $Value)
 | 
			
		||||
			{
 | 
			
		||||
				$Text .= $KeyUC;
 | 
			
		||||
				if (is_array($Value) && isset($Value['Type']))
 | 
			
		||||
				if (is_array($Value) && isset($Value['type']))
 | 
			
		||||
				{
 | 
			
		||||
					$Text .= ';TYPE='.self::PrepareTypeStrForOutput($Value['Type']);
 | 
			
		||||
					$Text .= ';TYPE='.self::PrepareTypeStrForOutput($Value['type']);
 | 
			
		||||
				}
 | 
			
		||||
				$Text .= ':';
 | 
			
		||||
 | 
			
		||||
@@ -492,7 +527,7 @@ class vCard implements Countable, Iterator
 | 
			
		||||
				}
 | 
			
		||||
				elseif (is_array($Value) && isset(self::$Spec_ElementTypes[$Key]))
 | 
			
		||||
				{
 | 
			
		||||
					$Text .= $Value['Value'];
 | 
			
		||||
					$Text .= $Value['value'];
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
@@ -574,7 +609,8 @@ class vCard implements Countable, Iterator
 | 
			
		||||
		$Parameters = array();
 | 
			
		||||
		foreach ($RawParams as $Item)
 | 
			
		||||
		{
 | 
			
		||||
			$Parameters[] = explode('=', strtolower($Item));
 | 
			
		||||
			// try to correct issue https://github.com/nuovo/vCard-parser/issues/20
 | 
			
		||||
			$Parameters[] = explode('=', strtolower($Item),2);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$Type = array();
 | 
			
		||||
@@ -604,10 +640,13 @@ class vCard implements Countable, Iterator
 | 
			
		||||
			}
 | 
			
		||||
			elseif (count($Parameter) > 2)
 | 
			
		||||
			{
 | 
			
		||||
				$TempTypeParams = self::ParseParameters($Key, explode(',', $RawParams[$Index]));
 | 
			
		||||
				if ($TempTypeParams['type'])
 | 
			
		||||
				if(count(explode(',', $RawParams[$Index], -1)) > 0)
 | 
			
		||||
				{
 | 
			
		||||
					$Type = array_merge($Type, $TempTypeParams['type']);
 | 
			
		||||
					$TempTypeParams = self::ParseParameters($Key, explode(',', $RawParams[$Index]));
 | 
			
		||||
					if ($TempTypeParams['type'])
 | 
			
		||||
					{
 | 
			
		||||
						$Type = array_merge($Type, $TempTypeParams['type']);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user