1*b1cdbd2cSJim Jagielski<?xml version="1.0" encoding="UTF-8"?>
2*b1cdbd2cSJim Jagielski<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
3*b1cdbd2cSJim Jagielski<!--***********************************************************
4*b1cdbd2cSJim Jagielski *
5*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
6*b1cdbd2cSJim Jagielski * or more contributor license agreements.  See the NOTICE file
7*b1cdbd2cSJim Jagielski * distributed with this work for additional information
8*b1cdbd2cSJim Jagielski * regarding copyright ownership.  The ASF licenses this file
9*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
10*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
11*b1cdbd2cSJim Jagielski * with the License.  You may obtain a copy of the License at
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski *   http://www.apache.org/licenses/LICENSE-2.0
14*b1cdbd2cSJim Jagielski *
15*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
16*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
17*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18*b1cdbd2cSJim Jagielski * KIND, either express or implied.  See the License for the
19*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
20*b1cdbd2cSJim Jagielski * under the License.
21*b1cdbd2cSJim Jagielski *
22*b1cdbd2cSJim Jagielski ***********************************************************-->
23*b1cdbd2cSJim Jagielski<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Meta" script:language="StarBasic">REM  *****  BASIC  *****
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim JagielskiDim oDialog AS Object
26*b1cdbd2cSJim JagielskiDim document AS Object
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski&apos; Fetches the meta values from the document and executes the dialog
29*b1cdbd2cSJim JagielskiSub Main
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski	If not IsHelpFile Then
32*b1cdbd2cSJim Jagielski		msgbox(strErr_NoHelpFile)
33*b1cdbd2cSJim Jagielski		Exit Sub
34*b1cdbd2cSJim Jagielski	End If
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski	document = StarDesktop.CurrentComponent
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski	BasicLibraries.LoadLibrary(&quot;HelpAuthoring&quot;)
39*b1cdbd2cSJim Jagielski	oDialog = LoadDialog(&quot;HelpAuthoring&quot;, &quot;dlgMeta&quot;)
40*b1cdbd2cSJim Jagielski	oDialogModel = oDialog.Model
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski	&apos;oTxtFName = oDialog.GetControl(&quot;txtFileName&quot;)
43*b1cdbd2cSJim Jagielski	&apos;oTxtFName.Text = document.DocumentInfo.PropertyValues(29).Value
44*b1cdbd2cSJim Jagielski	&apos;oTxtFName.Text = document.DocumentInfo.GetPropertyValue(&quot;Description&quot;)
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski&apos;	If oTxtFName.Text = &quot;&quot; Then
47*b1cdbd2cSJim Jagielski&apos;		msgbox &quot;The document must be saved first.&quot;+chr(13)+&quot;Please save the document and call this dialog again.&quot;
48*b1cdbd2cSJim Jagielski&apos;		oDialog.dispose
49*b1cdbd2cSJim Jagielski&apos;		Exit Sub
50*b1cdbd2cSJim Jagielski&apos;	End If
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski	oTxtTitle = oDialog.GetControl(&quot;txtTitle&quot;)
53*b1cdbd2cSJim Jagielski	oTxtTitle.Text = document.DocumentInfo.Title
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski	oOpIndInc = oDialog.GetControl(&quot;opIndexInclude&quot;)
56*b1cdbd2cSJim Jagielski	oOpIndExc = oDialog.GetControl(&quot;opIndexExclude&quot;)
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski	&apos;oCbFileStatus = oDialog.GetControl(&quot;cbFileStatus&quot;)
60*b1cdbd2cSJim Jagielski	&apos;arItems = Array(&quot;DRAFT&quot;,&quot;FINAL&quot;,&quot;PUBLISH&quot;,&quot;STALLED&quot;,&quot;DEPRECATED&quot;)
61*b1cdbd2cSJim Jagielski	&apos;oCbFileStatus.AddItems(arItems,ubound(arItems))
62*b1cdbd2cSJim Jagielski	&apos;sStatus = document.DocumentInfo.GetPropertyValue(&quot;Keywords&quot;)
63*b1cdbd2cSJim Jagielski	&apos;If (InStr(&quot;DRAFT FINAL PUBLISH STALLED DEPRECATED&quot;,sStatus)=0) Then
64*b1cdbd2cSJim Jagielski	&apos;	oCbFileStatus.SetText(&quot;DRAFT&quot;)
65*b1cdbd2cSJim Jagielski	&apos;Else
66*b1cdbd2cSJim Jagielski	&apos;	oCbFileStatus.SetText(sStatus)
67*b1cdbd2cSJim Jagielski	&apos;End If
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski	If document.DocumentInfo.GetUserFieldValue(GetUserFieldNumber(&quot;Indexer&quot;)) = &quot;exclude&quot; then
71*b1cdbd2cSJim Jagielski		oOpIndExc.State = True
72*b1cdbd2cSJim Jagielski	Else
73*b1cdbd2cSJim Jagielski		oOpIndInc.State = True
74*b1cdbd2cSJim Jagielski	End If
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski	&apos;oTxtTopicID = oDialog.GetControl(&quot;txtTopicID&quot;)
77*b1cdbd2cSJim Jagielski	&apos;oTxtTopicID.Text = document.DocumentInfo.GetUserFieldValue(1)
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski	&apos;oTxtComment = oDialog.GetControl(&quot;txtComment&quot;)
80*b1cdbd2cSJim Jagielski	&apos;oTxtComment.Text = document.DocumentInfo.GetUserFieldValue(GetUserFieldNumber(&quot;Comment&quot;))
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski	&apos;oTxtEdited = oDialog.GetControl(&quot;txtLastEdited&quot;)
83*b1cdbd2cSJim Jagielski	&apos;oTxtEdited.Text = document.DocumentInfo.GetUserFieldValue(3)
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski	If oDialog.Execute() = 1 Then &apos; update the meta data
86*b1cdbd2cSJim Jagielski		document.DocumentInfo.Title = oTxtTitle.Text
87*b1cdbd2cSJim Jagielski		&apos;document.DocumentInfo.SetUserFieldValue(1,oTxtTopicID.Text)
88*b1cdbd2cSJim Jagielski		&apos;document.DocumentInfo.SetUserFieldValue(GetUserFieldNumber(&quot;Comment&quot;),oTxtComment.Text)
89*b1cdbd2cSJim Jagielski		&apos;document.DocumentInfo.SetUserFieldValue(3,oTxtEdited.Text)
90*b1cdbd2cSJim Jagielski		&apos;document.DocumentInfo.SetPropertyValue(&quot;Keywords&quot;,oCbFileStatus.Text)
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski		&apos;If (oCbFileStatus.Text = &quot;PUBLISH&quot;) Then
93*b1cdbd2cSJim Jagielski			REM... Check for paras without ID: If there are any, this cannot be PUBLISH!
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski		&apos;End If
96*b1cdbd2cSJim Jagielski
97*b1cdbd2cSJim Jagielski		If oOpIndExc.State = True Then
98*b1cdbd2cSJim Jagielski			document.DocumentInfo.SetUserFieldValue(GetUserFieldNumber(&quot;Indexer&quot;),&quot;exclude&quot;)
99*b1cdbd2cSJim Jagielski		Else
100*b1cdbd2cSJim Jagielski			document.DocumentInfo.SetUserFieldValue(GetUserFieldNumber(&quot;Indexer&quot;),&quot;include&quot;)
101*b1cdbd2cSJim Jagielski		End If
102*b1cdbd2cSJim Jagielski	End If
103*b1cdbd2cSJim Jagielski	oDialog.dispose
104*b1cdbd2cSJim Jagielskiend sub
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski&apos; Normalizes the values for title and topic id
107*b1cdbd2cSJim Jagielski&apos; (if the fields are empty or contain invalid values)
108*b1cdbd2cSJim JagielskiSub NormalizeMeta (Event As Object)
109*b1cdbd2cSJim Jagielski	Select Case Event.Source.Model.Name
110*b1cdbd2cSJim Jagielski		Case &quot;txtTitle&quot;:
111*b1cdbd2cSJim Jagielski			If Event.Source.Text = &quot;&quot; Then
112*b1cdbd2cSJim Jagielski				msgbox &quot;Topic title must not be empty!&quot;+chr(13)+&quot;Resetting to default value.&quot;
113*b1cdbd2cSJim Jagielski			End If
114*b1cdbd2cSJim Jagielski			SetTopicTitle(Event.Source.Text)
115*b1cdbd2cSJim Jagielski		Case &quot;txtTopicID&quot;:
116*b1cdbd2cSJim Jagielski			If Event.Source.Text = &quot;&quot; Then
117*b1cdbd2cSJim Jagielski				msgbox &quot;Topic ID must not be empty!&quot;+chr(13)+&quot;Resetting to default value.&quot;
118*b1cdbd2cSJim Jagielski			End If
119*b1cdbd2cSJim Jagielski			SetTopicID(Event.Source.Text)
120*b1cdbd2cSJim Jagielski	End Select
121*b1cdbd2cSJim JagielskiEnd Sub
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski&apos; Sets the value in the Topic ID dialog field
124*b1cdbd2cSJim JagielskiSub SetTopicID(txt As String)
125*b1cdbd2cSJim Jagielski	oTxtTopicID = oDialog.GetControl(&quot;txtTopicID&quot;)
126*b1cdbd2cSJim Jagielski	If txt = &quot;&quot; Then
127*b1cdbd2cSJim Jagielski		oTxtTopicID.Text = AlphaNum(document.DocumentInfo.PropertyValues(29).Value)
128*b1cdbd2cSJim Jagielski	Else
129*b1cdbd2cSJim Jagielski		oTxtTopicID.Text = AlphaNum(txt)
130*b1cdbd2cSJim Jagielski	End If
131*b1cdbd2cSJim JagielskiEnd Sub
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim JagielskiSub Test
134*b1cdbd2cSJim Jagielski	On Error Resume Next
135*b1cdbd2cSJim Jagielski	document = StarDesktop.CurrentComponent
136*b1cdbd2cSJim Jagielski&apos;	showprop document
137*b1cdbd2cSJim Jagielski	msgbox document.URL
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim JagielskiEnd Sub
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski&apos; Sets the value in the Topic title dialog field
142*b1cdbd2cSJim JagielskiSub SetTopicTitle(txt As String)
143*b1cdbd2cSJim Jagielski	dim strg As String
144*b1cdbd2cSJim Jagielski	oTxtTitle = oDialog.GetControl(&quot;txtTitle&quot;)
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski	If txt =&quot;&quot; Then
147*b1cdbd2cSJim Jagielski		Enum = document.Text.createEnumeration
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski		Do While Enum.hasMoreElements
150*b1cdbd2cSJim Jagielski			TextElement = Enum.nextElement
151*b1cdbd2cSJim Jagielski			If TextElement.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
152*b1cdbd2cSJim Jagielski				If Left(TextElement.ParaStyleName,8)=&quot;hlp_head&quot; Then
153*b1cdbd2cSJim Jagielski					Enum2 = TextElement.createEnumeration
154*b1cdbd2cSJim Jagielski					While Enum2.hasMoreElements
155*b1cdbd2cSJim Jagielski						TextPortion = Enum2.nextElement
156*b1cdbd2cSJim Jagielski						If Not(TextPortion.TextPortionType=&quot;TextField&quot;) Then
157*b1cdbd2cSJim Jagielski							strg = strg + TextPortion.String
158*b1cdbd2cSJim Jagielski						End If
159*b1cdbd2cSJim Jagielski					Wend
160*b1cdbd2cSJim Jagielski					oTxtTitle.Text = strg
161*b1cdbd2cSJim Jagielski					Exit Do
162*b1cdbd2cSJim Jagielski				End If
163*b1cdbd2cSJim Jagielski			End If
164*b1cdbd2cSJim Jagielski		Loop
165*b1cdbd2cSJim Jagielski	Else
166*b1cdbd2cSJim Jagielski		oTxtTitle.Text = txt
167*b1cdbd2cSJim Jagielski	End If
168*b1cdbd2cSJim JagielskiEnd Sub
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski&apos; Sets the value in the Topic title field when
171*b1cdbd2cSJim Jagielski&apos; &quot;Fetch&quot; button is pressed
172*b1cdbd2cSJim JagielskiSub FetchTopicTitle
173*b1cdbd2cSJim Jagielski	SetTopicTitle(&quot;&quot;)
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim JagielskiEnd Sub
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski&apos; Sets the value in the Topic ID dialog field when
178*b1cdbd2cSJim Jagielski&apos; &quot;Suggest&quot; button is pressed
179*b1cdbd2cSJim JagielskiSub SuggestTopicID
180*b1cdbd2cSJim Jagielski	SetTopicID(&quot;&quot;)
181*b1cdbd2cSJim JagielskiEnd Sub
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim JagielskiSub ChangeStatus
184*b1cdbd2cSJim Jagielski	oCbFileStatus = oDialog.GetControl(&quot;cbFileStatus&quot;)
185*b1cdbd2cSJim Jagielski	sStatus = document.DocumentInfo.GetPropertyValue(&quot;Keywords&quot;)
186*b1cdbd2cSJim Jagielski	If (oCbFileStatus.Text = &quot;PUBLISH&quot;) Then
187*b1cdbd2cSJim Jagielski		nNoID = 0 &apos; DEBUG
188*b1cdbd2cSJim Jagielski		If nNoID &lt;&gt; 0 Then
189*b1cdbd2cSJim Jagielski			msgbox &quot;There are &quot;+nNoID+&quot; new paragraphs in the file.&quot;+chr(13)+&quot;File status PUBLISH invalid.&quot;+chr(13)+&quot;Setting back to &quot;+sStatus, 48, &quot;D&apos;oh!&quot;
190*b1cdbd2cSJim Jagielski		End If
191*b1cdbd2cSJim Jagielski	End If
192*b1cdbd2cSJim JagielskiEnd Sub
193*b1cdbd2cSJim Jagielski</script:module>
194